comparison gamelib/engine.py @ 412:1e24eedbf40f

Implement non-gui parts of level loading communication
author Neil Muller <drnlmuller@gmail.com>
date Sat, 21 Nov 2009 11:34:12 +0000
parents 03d5cb669298
children bdc4757e0497
comparison
equal deleted inserted replaced
411:03d5cb669298 412:1e24eedbf40f
7 import gameover 7 import gameover
8 import sound 8 import sound
9 import constants 9 import constants
10 import mainmenu 10 import mainmenu
11 import helpscreen 11 import helpscreen
12 import loadlevel
12 import level 13 import level
13 from misc import check_exit 14 from misc import check_exit
14 15
15 class Engine(Game): 16 class Engine(Game):
16 def __init__(self, main_app, level_name): 17 def __init__(self, main_app, level_name):
17 self.main_app = main_app 18 self.main_app = main_app
19 self.clock = pygame.time.Clock()
18 self.level = level.Level(level_name) 20 self.level = level.Level(level_name)
19 self.clock = pygame.time.Clock()
20 self.main_menu = mainmenu.make_main_menu(self.level)
21 self._open_window = None 21 self._open_window = None
22 self.scoreboard = gameover.ScoreTable(self.level)
23 self.gameboard = None 22 self.gameboard = None
23 self.level_loader = None
24 24
25 def tick(self): 25 def tick(self):
26 """Tic toc.""" 26 """Tic toc."""
27 pygame.time.wait(10) 27 pygame.time.wait(10)
28
29 def load_new_level(self):
30 self.level = self.level_loader.cur_level
28 31
29 def open_window(self, window): 32 def open_window(self, window):
30 """Open a widget as the main window.""" 33 """Open a widget as the main window."""
31 if self._open_window is not None: 34 if self._open_window is not None:
32 self.main_app.close(self._open_window) 35 self.main_app.close(self._open_window)
39 self.level) 42 self.level)
40 self.open_window(self.gameboard.get_top_widget()) 43 self.open_window(self.gameboard.get_top_widget())
41 44
42 def set_main_menu(self): 45 def set_main_menu(self):
43 """Open the main menu""" 46 """Open the main menu"""
44 self.open_window(self.main_menu) 47 self.scoreboard = gameover.ScoreTable(self.level)
48 self.level_loader = None
49 main_menu = mainmenu.make_main_menu(self.level)
50 self.open_window(main_menu)
45 51
46 def set_help_screen(self): 52 def set_help_screen(self):
47 """Open the main menu""" 53 """Open the main menu"""
48 help_screen = helpscreen.make_help_screen(self.level) 54 help_screen = helpscreen.make_help_screen(self.level)
49 self.open_window(help_screen) 55 self.open_window(help_screen)
56
57 def set_level_screen(self):
58 """Open the Load Level screen"""
59 level_screen, self.level_loader = loadlevel.make_load_screen(self.level)
60 self.open_window(level_screen)
50 61
51 def create_game_over(self): 62 def create_game_over(self):
52 """Create and open the Game Over window""" 63 """Create and open the Game Over window"""
53 game_over = gameover.create_game_over(self.gameboard, 64 game_over = gameover.create_game_over(self.gameboard,
54 self.scoreboard[self.level.level_name], self.level) 65 self.scoreboard[self.level.level_name], self.level)
59 if not Game.event(self, e): 70 if not Game.event(self, e):
60 if self.gameboard: 71 if self.gameboard:
61 return self.gameboard.event(e) 72 return self.gameboard.event(e)
62 return False 73 return False
63 return True 74 return True
64 75
65 76
66 class MainMenuState(State): 77 class MainMenuState(State):
67 def init(self): 78 def init(self):
68 sound.stop_background_music() 79 sound.stop_background_music()
69 self.game.set_main_menu() 80 self.game.set_main_menu()
72 if events_equal(e, START_DAY): 83 if events_equal(e, START_DAY):
73 self.game.create_game_board() 84 self.game.create_game_board()
74 return DayState(self.game) 85 return DayState(self.game)
75 elif events_equal(e, GO_HELP_SCREEN): 86 elif events_equal(e, GO_HELP_SCREEN):
76 return HelpScreenState(self.game) 87 return HelpScreenState(self.game)
88 elif events_equal(e, GO_LEVEL_SCREEN):
89 return LevelScreenState(self.game)
77 elif e.type is KEYDOWN: 90 elif e.type is KEYDOWN:
78 if e.key == K_ESCAPE: 91 if e.key == K_ESCAPE:
79 return Quit(self.game) 92 return Quit(self.game)
80 elif e.key == K_s: 93 elif e.key == K_s:
81 self.game.create_game_board() 94 self.game.create_game_board()
113 pygame.display.flip() 126 pygame.display.flip()
114 127
115 def update(self, screen): 128 def update(self, screen):
116 update = self.game.main_app.update(screen) 129 update = self.game.main_app.update(screen)
117 pygame.display.update(update) 130 pygame.display.update(update)
131
132
133 class LevelScreenState(State):
134 def init(self):
135 sound.stop_background_music()
136 self.game.set_level_screen()
137
138 def event(self, e):
139 if e.type is KEYDOWN and e.key == K_ESCAPE:
140 return MainMenuState(self.game)
141 elif events_equal(e, GO_MAIN_MENU):
142 return MainMenuState(self.game)
143 elif events_equal(e, DO_LOAD_LEVEL):
144 self.game.load_new_level()
145 return MainMenuState(self.game)
146 elif e.type is not QUIT:
147 self.game.main_app.event(e)
148
149 def paint(self, screen):
150 screen.fill((0,0,0))
151 self.game.main_app.paint(screen)
152 pygame.display.flip()
153
154 def update(self, screen):
155 update = self.game.main_app.update(screen)
156 pygame.display.update(update)
157
118 158
119 class DayState(State): 159 class DayState(State):
120 def init(self): 160 def init(self):
121 """Add some chickens to the farm""" 161 """Add some chickens to the farm"""
122 sound.stop_background_music() 162 sound.stop_background_music()
277 317
278 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") 318 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY")
279 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") 319 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT")
280 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") 320 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU")
281 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") 321 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN")
322 GO_LEVEL_SCREEN = pygame.event.Event(USEREVENT, name="GO_LEVEL_SCREEN")
323 DO_LOAD_LEVEL = pygame.event.Event(USEREVENT, name="DO_LEVEL_SCREEN")
282 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") 324 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD")
283 MOVE_FOX_ID = USEREVENT + 1 325 MOVE_FOX_ID = USEREVENT + 1
284 ANIM_ID = USEREVENT + 6 326 ANIM_ID = USEREVENT + 6
285 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") 327 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES")
286 QUIT = pygame.event.Event(QUIT) 328 QUIT = pygame.event.Event(QUIT)