Refactor the main loop
This commit is contained in:
parent
feafd6ca4c
commit
f83d2d0013
|
@ -212,39 +212,42 @@ class Slacker:
|
|||
self.width = min(self.width, MAX_WIDTH[self.y])
|
||||
self.speed = MAX_SPEED + self.y*SPEED_DIFF + randrange(5)
|
||||
|
||||
def main_loop(self, loop=True):
|
||||
"""The main loop."""
|
||||
while loop:
|
||||
if self.game_state == INTRO:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
loop = False
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_SPACE:
|
||||
self.game_state = PLAYING
|
||||
elif event.key in (pygame.K_ESCAPE, pygame.K_q):
|
||||
loop = False
|
||||
def handle_intro(self):
|
||||
"""Handle events in intro."""
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: return False
|
||||
if event.type != pygame.KEYDOWN: continue
|
||||
if event.key in (pygame.K_ESCAPE, pygame.K_q): return False
|
||||
if event.key == pygame.K_SPACE: self.game_state = PLAYING
|
||||
return True
|
||||
|
||||
elif self.game_state == PLAYING:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
loop = False
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_SPACE:
|
||||
self.key_hit()
|
||||
elif event.key in (pygame.K_ESCAPE, pygame.K_q):
|
||||
self.__init__()
|
||||
# Yes, this is a cheat.
|
||||
elif event.key == pygame.K_0:
|
||||
self.width += self.width < BOARD_WIDTH
|
||||
elif event.key in range(pygame.K_1, pygame.K_9+1):
|
||||
self.speed_ratio = (pygame.K_9-event.key+1) / 5.0
|
||||
self.update_movement()
|
||||
def handle_playing(self):
|
||||
"""Handle events in game."""
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: return False
|
||||
if event.type != pygame.KEYDOWN: continue
|
||||
if event.key == pygame.K_SPACE:
|
||||
self.key_hit()
|
||||
elif event.key in (pygame.K_ESCAPE, pygame.K_q):
|
||||
self.__init__()
|
||||
# Yes, these are cheats.
|
||||
elif event.key == pygame.K_0:
|
||||
self.width += self.width < BOARD_WIDTH
|
||||
elif event.key in range(pygame.K_1, pygame.K_9+1):
|
||||
self.speed_ratio = (pygame.K_9-event.key+1) / 5.0
|
||||
self.update_movement()
|
||||
return True
|
||||
|
||||
elif self.game_state in (LOSE, WIN):
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
loop = False
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
self.__init__(restart=True)
|
||||
self.update_screen()
|
||||
def handle_ending(self):
|
||||
"""Handle events in ending screens."""
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: return False
|
||||
if event.type == pygame.KEYDOWN: self.__init__(restart=True)
|
||||
return True
|
||||
|
||||
def handle_events(self):
|
||||
"""Handle queued events."""
|
||||
if self.game_state == INTRO: return self.handle_intro()
|
||||
if self.game_state == PLAYING: return self.handle_playing()
|
||||
if self.game_state in (LOSE, WIN): return self.handle_ending()
|
||||
return False
|
||||
|
|
|
@ -2,8 +2,11 @@ from slacker_game import Slacker
|
|||
|
||||
|
||||
def main():
|
||||
"""Run game."""
|
||||
with Slacker() as slacker:
|
||||
slacker.main_loop()
|
||||
for i in iter(slacker.handle_events, False):
|
||||
slacker.update_screen()
|
||||
|
||||
|
||||
if __name__ == '__main__': main()
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
Loading…
Reference in New Issue