Mercurial > rinkhals
annotate gamelib/engine.py @ 502:b74b3a37cf1d
Process upper floors first
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 26 Nov 2009 22:23:56 +0000 |
parents | e0b11d684ee8 |
children | 393e30ea0165 |
rev | line source |
---|---|
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
1 """Game engine and states.""" |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
2 from pgu.engine import Game, State, Quit |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
3 import pygame |
182
d63951985313
Make 'i' take you from the main menu to the instructions.
Simon Cross <hodgestar@gmail.com>
parents:
180
diff
changeset
|
4 from pygame.locals import USEREVENT, QUIT, KEYDOWN, K_ESCAPE, K_n, K_d, K_s, K_i |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
5 |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
6 import gameboard |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
7 import gameover |
94 | 8 import sound |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
9 import constants |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
10 import mainmenu |
179 | 11 import helpscreen |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
12 import loadlevel |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
369
diff
changeset
|
13 import level |
336 | 14 from misc import check_exit |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
15 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
16 class Engine(Game): |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
369
diff
changeset
|
17 def __init__(self, main_app, level_name): |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
18 self.main_app = main_app |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
19 self.clock = pygame.time.Clock() |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
369
diff
changeset
|
20 self.level = level.Level(level_name) |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
21 self._open_window = None |
254
f399e4926c36
Fix events getting sent to the gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
22 self.gameboard = None |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
23 self.level_loader = None |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
24 |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
25 def tick(self): |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
26 """Tic toc.""" |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
27 pygame.time.wait(10) |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
28 |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
29 def load_new_level(self): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
30 self.level = self.level_loader.cur_level |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
31 |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
32 def open_window(self, window): |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
33 """Open a widget as the main window.""" |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
34 if self._open_window is not None: |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
35 self.main_app.close(self._open_window) |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
36 self.main_app.open(window) |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
37 self._open_window = window |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
38 |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
39 def create_game_board(self): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
40 """Create and open a gameboard window.""" |
346
6baf8b5beb5c
Remove the "constant" constant
Neil Muller <drnlmuller@gmail.com>
parents:
336
diff
changeset
|
41 self.gameboard = gameboard.GameBoard(self.main_app, |
389
463802281182
Add basic level support (level choosing needs work)
Neil Muller <drnlmuller@gmail.com>
parents:
369
diff
changeset
|
42 self.level) |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
43 self.open_window(self.gameboard.get_top_widget()) |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
44 |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
45 def set_main_menu(self): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
46 """Open the main menu""" |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
47 self.scoreboard = gameover.ScoreTable(self.level) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
48 self.level_loader = None |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
49 main_menu = mainmenu.make_main_menu(self.level) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
50 self.open_window(main_menu) |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
51 |
179 | 52 def set_help_screen(self): |
53 """Open the main menu""" | |
390
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
389
diff
changeset
|
54 help_screen = helpscreen.make_help_screen(self.level) |
179 | 55 self.open_window(help_screen) |
56 | |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
57 def set_level_screen(self): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
58 """Open the Load Level screen""" |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
59 level_screen, self.level_loader = loadlevel.make_load_screen(self.level) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
60 self.open_window(level_screen) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
61 |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
62 def create_game_over(self): |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
63 """Create and open the Game Over window""" |
469
e0b11d684ee8
Reference gameboard.level rather than game.level where appropriate. Saving and restoring games appears to largely work now (even if the level of the restored game is different to the current one).
Simon Cross <hodgestar@gmail.com>
parents:
436
diff
changeset
|
64 level = self.gameboard.level |
346
6baf8b5beb5c
Remove the "constant" constant
Neil Muller <drnlmuller@gmail.com>
parents:
336
diff
changeset
|
65 game_over = gameover.create_game_over(self.gameboard, |
469
e0b11d684ee8
Reference gameboard.level rather than game.level where appropriate. Saving and restoring games appears to largely work now (even if the level of the restored game is different to the current one).
Simon Cross <hodgestar@gmail.com>
parents:
436
diff
changeset
|
66 self.scoreboard[level.level_name], level) |
254
f399e4926c36
Fix events getting sent to the gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
67 self.gameboard = None |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
68 self.open_window(game_over) |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
69 |
254
f399e4926c36
Fix events getting sent to the gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
70 def event(self, e): |
262
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
254
diff
changeset
|
71 if not Game.event(self, e): |
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
254
diff
changeset
|
72 if self.gameboard: |
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
254
diff
changeset
|
73 return self.gameboard.event(e) |
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
254
diff
changeset
|
74 return False |
d508248041ff
avoid passing events in twice
Neil Muller <drnlmuller@gmail.com>
parents:
254
diff
changeset
|
75 return True |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
76 |
254
f399e4926c36
Fix events getting sent to the gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
245
diff
changeset
|
77 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
78 class MainMenuState(State): |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
79 def init(self): |
156
210fc1ea0516
Stop background music whenever state changes.
Simon Cross <hodgestar@gmail.com>
parents:
151
diff
changeset
|
80 sound.stop_background_music() |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
81 self.game.set_main_menu() |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
82 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
83 def event(self, e): |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
84 if events_equal(e, START_DAY): |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
85 self.game.create_game_board() |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
86 return DayState(self.game) |
179 | 87 elif events_equal(e, GO_HELP_SCREEN): |
88 return HelpScreenState(self.game) | |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
89 elif events_equal(e, GO_LEVEL_SCREEN): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
90 return LevelScreenState(self.game) |
31
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
91 elif e.type is KEYDOWN: |
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
92 if e.key == K_ESCAPE: |
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
93 return Quit(self.game) |
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
94 elif e.key == K_s: |
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
95 self.game.create_game_board() |
3c4db7bba432
Add 's' as a key for starting the game from the menu.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
96 return DayState(self.game) |
182
d63951985313
Make 'i' take you from the main menu to the instructions.
Simon Cross <hodgestar@gmail.com>
parents:
180
diff
changeset
|
97 elif e.key == K_i: |
d63951985313
Make 'i' take you from the main menu to the instructions.
Simon Cross <hodgestar@gmail.com>
parents:
180
diff
changeset
|
98 return HelpScreenState(self.game) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
99 elif e.type is not QUIT: |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
100 self.game.main_app.event(e) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
101 |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
102 def paint(self, screen): |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
103 screen.fill((0,0,0)) |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
104 self.game.main_app.paint(screen) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
105 pygame.display.flip() |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
106 |
15
b69d954f2f1d
Add update call to main menu event
Neil Muller <drnlmuller@gmail.com>
parents:
14
diff
changeset
|
107 def update(self, screen): |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
108 update = self.game.main_app.update(screen) |
15
b69d954f2f1d
Add update call to main menu event
Neil Muller <drnlmuller@gmail.com>
parents:
14
diff
changeset
|
109 pygame.display.update(update) |
b69d954f2f1d
Add update call to main menu event
Neil Muller <drnlmuller@gmail.com>
parents:
14
diff
changeset
|
110 |
179 | 111 class HelpScreenState(State): |
112 def init(self): | |
113 sound.stop_background_music() | |
114 self.game.set_help_screen() | |
115 | |
116 def event(self, e): | |
117 if e.type is KEYDOWN and e.key == K_ESCAPE: | |
180
c0cad267222b
Fix typo in reference to MainMenuState.
Simon Cross <hodgestar@gmail.com>
parents:
179
diff
changeset
|
118 return MainMenuState(self.game) |
179 | 119 elif events_equal(e, GO_MAIN_MENU): |
120 return MainMenuState(self.game) | |
121 elif e.type is not QUIT: | |
122 self.game.main_app.event(e) | |
123 | |
124 def paint(self, screen): | |
125 screen.fill((0,0,0)) | |
126 self.game.main_app.paint(screen) | |
127 pygame.display.flip() | |
128 | |
129 def update(self, screen): | |
130 update = self.game.main_app.update(screen) | |
131 pygame.display.update(update) | |
132 | |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
133 |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
134 class LevelScreenState(State): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
135 def init(self): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
136 sound.stop_background_music() |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
137 self.game.set_level_screen() |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
138 |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
139 def event(self, e): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
140 if e.type is KEYDOWN and e.key == K_ESCAPE: |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
141 return MainMenuState(self.game) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
142 elif events_equal(e, GO_MAIN_MENU): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
143 return MainMenuState(self.game) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
144 elif events_equal(e, DO_LOAD_LEVEL): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
145 self.game.load_new_level() |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
146 return MainMenuState(self.game) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
147 elif e.type is not QUIT: |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
148 self.game.main_app.event(e) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
149 |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
150 def paint(self, screen): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
151 screen.fill((0,0,0)) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
152 self.game.main_app.paint(screen) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
153 pygame.display.flip() |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
154 |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
155 def update(self, screen): |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
156 update = self.game.main_app.update(screen) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
157 pygame.display.update(update) |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
158 |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
159 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
160 class DayState(State): |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
161 def init(self): |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
162 """Add some chickens to the farm""" |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
98
diff
changeset
|
163 sound.stop_background_music() |
223 | 164 self.game.gameboard.start_day() |
30 | 165 |
98
725b292ca07b
Added sounds killing foxes and chickens, and nightfall
David Fraser <davidf@sjsoft.com>
parents:
94
diff
changeset
|
166 sound.play_sound("daybreak.ogg") |
29 | 167 # disable timer |
168 pygame.time.set_timer(MOVE_FOX_ID, 0) | |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
98
diff
changeset
|
169 sound.background_music("daytime.ogg") |
336 | 170 self.dialog = None |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
171 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
172 def event(self, e): |
336 | 173 if self.dialog and self.dialog.running: |
174 if self.dialog.event(e): | |
175 return | |
176 elif self.dialog: | |
177 if self.dialog.do_quit: | |
178 self.dialog = None | |
179 self.game.gameboard.reset_states() | |
180 return GameOver(self.game) | |
181 self.dialog=None | |
182 return | |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
183 if events_equal(e, START_NIGHT): |
245
634491bf37e8
Change toolbar to gui.Toolbar -- gives nicer highlighting.
Simon Cross <hodgestar@gmail.com>
parents:
237
diff
changeset
|
184 self.game.gameboard.reset_states() |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
185 return NightState(self.game) |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
186 elif e.type is KEYDOWN and e.key == K_ESCAPE: |
336 | 187 self.dialog = check_exit() |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
188 elif e.type is KEYDOWN and e.key == K_n: |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
189 return pygame.event.post(START_NIGHT) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
190 elif events_equal(e, GO_MAIN_MENU): |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
191 return MainMenuState(self.game) |
14 | 192 elif e.type is not QUIT: |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
193 self.game.main_app.event(e) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
194 |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
195 def paint(self, screen): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
196 self.game.main_app.paint(screen) |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
197 pygame.display.flip() |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
198 |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
199 def update(self, screen): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
200 self.game.gameboard.update() |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
201 update = self.game.main_app.update(screen) |
12
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
202 pygame.display.update(update) |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
203 |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
204 def loop(self): |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
205 self.game.gameboard.loop() |
8a7319e4853a
Hooked in the game board.
Jeremy Thurgood <firxen@gmail.com>
parents:
11
diff
changeset
|
206 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
207 class NightState(State): |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
208 def init(self): |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
209 """Add some foxes to the farm""" |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
98
diff
changeset
|
210 sound.stop_background_music() |
223 | 211 self.game.gameboard.start_night() |
30 | 212 |
98
725b292ca07b
Added sounds killing foxes and chickens, and nightfall
David Fraser <davidf@sjsoft.com>
parents:
94
diff
changeset
|
213 sound.play_sound("nightfall.ogg") |
422
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
413
diff
changeset
|
214 |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
413
diff
changeset
|
215 self.game.gameboard.chickens_scatter() |
ab4fc3fe0f96
chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
413
diff
changeset
|
216 self.game.gameboard.chickens_chop_wood() |
29 | 217 # Add a timer to the event queue |
218 self.cycle_count = 0 | |
435
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
219 self.cycle_time = SLOW__SPEED |
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
220 pygame.time.set_timer(MOVE_FOX_ID, self.cycle_time) |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
98
diff
changeset
|
221 sound.background_music("nighttime.ogg") |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
222 |
349
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
223 self.dialog = None |
116
d539ef5a3333
Add basic chicken->egg cycle
Neil Muller <drnlmuller@gmail.com>
parents:
99
diff
changeset
|
224 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
225 def event(self, e): |
349
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
226 if self.dialog and self.dialog.running: |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
227 if self.dialog.event(e): |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
228 return |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
229 elif self.dialog: |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
230 if self.dialog.do_quit: |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
231 self.dialog = None |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
232 self.game.gameboard.reset_states() |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
233 return GameOver(self.game) |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
234 self.dialog=None |
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
235 return |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
236 if events_equal(e, START_DAY): |
469
e0b11d684ee8
Reference gameboard.level rather than game.level where appropriate. Saving and restoring games appears to largely work now (even if the level of the restored game is different to the current one).
Simon Cross <hodgestar@gmail.com>
parents:
436
diff
changeset
|
237 if self.game.gameboard.level.is_game_over(self.game.gameboard): |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
238 return GameOver(self.game) |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
239 return DayState(self.game) |
320
9bf0e701a36e
Switch between 'Finished Day' and 'Fast Forward' modes
Neil Muller <drnlmuller@gmail.com>
parents:
312
diff
changeset
|
240 elif (e.type is KEYDOWN and e.key == K_d) or \ |
9bf0e701a36e
Switch between 'Finished Day' and 'Fast Forward' modes
Neil Muller <drnlmuller@gmail.com>
parents:
312
diff
changeset
|
241 events_equal(e, FAST_FORWARD): |
435
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
242 if self.cycle_time > FAST__SPEED: |
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
243 self.cycle_time = FAST__SPEED |
222
322e6d3a46e4
Turn 'd' into a fast forward / normal speed toggle at night
Neil Muller <drnlmuller@gmail.com>
parents:
213
diff
changeset
|
244 else: |
435
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
245 self.cycle_time = SLOW__SPEED |
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
246 pygame.time.set_timer(MOVE_FOX_ID, self.cycle_time) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
247 elif e.type is KEYDOWN and e.key == K_ESCAPE: |
349
a36ab7dd0eb9
Fix 'Are You Sure?' dialog to work at night
Neil Muller <drnlmuller@gmail.com>
parents:
346
diff
changeset
|
248 self.dialog = check_exit() |
29 | 249 elif e.type is MOVE_FOX_ID: |
369
25f7d4824250
Disable timers during move_foxes loop to stop events piling up too much
Neil Muller <drnlmuller@gmail.com>
parents:
349
diff
changeset
|
250 # ensure no timers trigger while we're running |
25f7d4824250
Disable timers during move_foxes loop to stop events piling up too much
Neil Muller <drnlmuller@gmail.com>
parents:
349
diff
changeset
|
251 pygame.time.set_timer(MOVE_FOX_ID, 0) |
436
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
252 cur_time = pygame.time.get_ticks() |
369
25f7d4824250
Disable timers during move_foxes loop to stop events piling up too much
Neil Muller <drnlmuller@gmail.com>
parents:
349
diff
changeset
|
253 # Clear any queued timer events, so we don't full the queue |
25f7d4824250
Disable timers during move_foxes loop to stop events piling up too much
Neil Muller <drnlmuller@gmail.com>
parents:
349
diff
changeset
|
254 pygame.event.clear(MOVE_FOX_ID) |
237 | 255 # Ensure any outstanding animitions get cleaned up |
29 | 256 self.cycle_count += 1 |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
257 if self.cycle_count > constants.NIGHT_LENGTH: |
29 | 258 return pygame.event.post(START_DAY) |
396
19e583e5cdc0
Refactor for further move work
Neil Muller <drnlmuller@gmail.com>
parents:
392
diff
changeset
|
259 if self.game.gameboard.do_night_step(): |
122
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
118
diff
changeset
|
260 # All foxes are gone/safe, so dawn happens |
d2b19131d537
Don't continue the night if we're not doing anything anymore
Neil Muller <drnlmuller@gmail.com>
parents:
118
diff
changeset
|
261 return pygame.event.post(START_DAY) |
369
25f7d4824250
Disable timers during move_foxes loop to stop events piling up too much
Neil Muller <drnlmuller@gmail.com>
parents:
349
diff
changeset
|
262 # Re-enable timers |
436
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
263 diff = pygame.time.get_ticks() - cur_time |
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
264 time_left = self.cycle_time - diff |
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
265 if time_left < 0: |
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
266 time_left = self.cycle_time |
2b4cd86dfcaf
Better approximate constant framerate on move events, etc.
Neil Muller <drnlmuller@gmail.com>
parents:
435
diff
changeset
|
267 pygame.time.set_timer(MOVE_FOX_ID, time_left) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
268 elif e.type is not QUIT: |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
269 self.game.main_app.event(e) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
270 |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
271 def loop(self): |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
272 self.game.gameboard.loop() |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
273 |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
274 def paint(self, screen): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
275 self.game.main_app.paint(screen) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
276 pygame.display.flip() |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
277 |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
278 def update(self, screen): |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
279 self.game.gameboard.update() |
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
280 update = self.game.main_app.update(screen) |
25
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
281 pygame.display.update(update) |
6d6ab0c1479d
Add placing some chickens and foxes
Neil Muller <drnlmuller@gmail.com>
parents:
15
diff
changeset
|
282 |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
283 class GameOver(State): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
284 def init(self): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
285 """Setup everything""" |
156
210fc1ea0516
Stop background music whenever state changes.
Simon Cross <hodgestar@gmail.com>
parents:
151
diff
changeset
|
286 sound.stop_background_music() |
151
082868bea873
Refactor UI so that only a single gui.App is used. Pass all UI events via main_app. Change Toolbar table to use .td() everywhere. Move toolbar to top.
Simon Cross <hodgestar@gmail.com>
parents:
142
diff
changeset
|
287 self.game.create_game_over() |
142
1597081e5a84
Disable timer when game is over
Neil Muller <drnlmuller@gmail.com>
parents:
141
diff
changeset
|
288 pygame.time.set_timer(MOVE_FOX_ID, 0) |
139
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
289 |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
290 def event(self, e): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
291 if e.type is KEYDOWN: |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
292 if e.key == K_ESCAPE: |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
293 return MainMenuState(self.game) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
294 elif events_equal(e, GO_MAIN_MENU): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
295 return MainMenuState(self.game) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
296 elif e.type is not QUIT: |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
297 self.game.main_app.event(e) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
298 |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
299 def paint(self, screen): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
300 screen.fill((0,0,0)) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
301 self.game.main_app.paint(screen) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
302 pygame.display.flip() |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
303 |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
304 def update(self, screen): |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
305 update = self.game.main_app.update(screen) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
306 pygame.display.update(update) |
1d73de63bd71
Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents:
122
diff
changeset
|
307 |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
308 # pygame events |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
309 |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
310 def events_equal(e1, e2): |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
311 """Compare two user events.""" |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
312 return (e1.type is e2.type and e1.name == e2.name) |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
313 |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
314 START_DAY = pygame.event.Event(USEREVENT, name="START_DAY") |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
315 START_NIGHT = pygame.event.Event(USEREVENT, name="START_NIGHT") |
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
316 GO_MAIN_MENU = pygame.event.Event(USEREVENT, name="GO_MAIN_MENU") |
179 | 317 GO_HELP_SCREEN = pygame.event.Event(USEREVENT, name="GO_HELP_SCREEN") |
412
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
318 GO_LEVEL_SCREEN = pygame.event.Event(USEREVENT, name="GO_LEVEL_SCREEN") |
1e24eedbf40f
Implement non-gui parts of level loading communication
Neil Muller <drnlmuller@gmail.com>
parents:
411
diff
changeset
|
319 DO_LOAD_LEVEL = pygame.event.Event(USEREVENT, name="DO_LEVEL_SCREEN") |
320
9bf0e701a36e
Switch between 'Finished Day' and 'Fast Forward' modes
Neil Muller <drnlmuller@gmail.com>
parents:
312
diff
changeset
|
320 FAST_FORWARD = pygame.event.Event(USEREVENT, name="FAST_FORWARD") |
29 | 321 MOVE_FOX_ID = USEREVENT + 1 |
322 MOVE_FOXES = pygame.event.Event(MOVE_FOX_ID, name="MOVE_FOXES") | |
11
5d58a5b13731
Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
323 QUIT = pygame.event.Event(QUIT) |
233
d3d5352f5853
Twek speed loop. Document animation assumptions
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
324 |
d3d5352f5853
Twek speed loop. Document animation assumptions
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
325 # Due to the way pgu's loop timing works, these will only get proceesed |
d3d5352f5853
Twek speed loop. Document animation assumptions
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
326 # at intervals of 10ms, so there's no point in them not being multiples of 10 |
435
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
327 FAST__SPEED=80 |
66bc99477155
Remove references to ANIM timer, so no longer relevant
Neil Muller <drnlmuller@gmail.com>
parents:
434
diff
changeset
|
328 SLOW__SPEED=200 |