annotate gamelib/main.py @ 591:6b21b2140262 1.5.x

Merge r594 and r595 from trunk.
author Simon Cross <hodgestar@gmail.com>
date Sat, 28 Nov 2009 23:27:38 +0000
parents 36e1939c732a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 '''Game main module.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 Contains the entry point used by the run_game.py script.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 Feel free to put all your game code here, or in other modules in this "gamelib"
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6 package.
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 '''
e057e9483488 Added pyweek skellington.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8
411
03d5cb669298 Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents: 389
diff changeset
9 import sys
03d5cb669298 Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents: 389
diff changeset
10
4
e8ddbc95cbf3 Silly (and broken) first stab at menu thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 2
diff changeset
11 import pygame
e8ddbc95cbf3 Silly (and broken) first stab at menu thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 2
diff changeset
12 from pgu import gui
586
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
13 from pygame.locals import SWSURFACE, SRCALPHA
4
e8ddbc95cbf3 Silly (and broken) first stab at menu thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 2
diff changeset
14
591
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
15 import sound
5
67b79658b047 Refactor and simplify menu.
Simon Cross <hodgestar@gmail.com>
parents: 4
diff changeset
16 import constants
411
03d5cb669298 Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents: 389
diff changeset
17 from config import config
351
4cc0b3627f83 Use proper icon
Neil Muller <drnlmuller@gmail.com>
parents: 151
diff changeset
18 import data
586
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
19 from misc import WarnDialog
4
e8ddbc95cbf3 Silly (and broken) first stab at menu thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 2
diff changeset
20
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: 139
diff changeset
21 def create_main_app(screen):
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: 139
diff changeset
22 """Create an app with a background widget."""
139
1d73de63bd71 Add basic game over screen
Neil Muller <drnlmuller@gmail.com>
parents: 124
diff changeset
23 app = gui.App()
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: 139
diff changeset
24 background = pygame.Surface(screen.get_size())
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: 139
diff changeset
25 widget = gui.Image(background)
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: 139
diff changeset
26 app.init(widget, screen)
11
5d58a5b13731 Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents: 7
diff changeset
27 return app
5
67b79658b047 Refactor and simplify menu.
Simon Cross <hodgestar@gmail.com>
parents: 4
diff changeset
28
586
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
29 def complaint_dialog(message):
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
30 """Create a complaint dialog"""
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
31 app = gui.App()
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
32
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
33 def close(_w):
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
34 app.quit()
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
35
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
36 app.close = close
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
37
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
38 dialog = WarnDialog('Problem starting Fox Assault',
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
39 message)
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
40 app.run(dialog)
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
41 sys.exit(1)
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
42
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
43 def sanity_check():
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
44 """Run some sanity checks, and complain if they fail"""
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
45 try:
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
46 pygame.Surface((100, 100), flags=SRCALPHA)
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
47 except Exception, e:
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
48 complaint_dialog("Unable to create a suitable screen, please check your display settings")
591
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
49 if sound.SOUND_INITIALIZED:
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
50 try:
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
51 sound.play_sound('silence.ogg')
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
52 sound.background_music('silence.ogg')
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
53 except pygame.error:
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
54 complaint_dialog('Error trying to play sound. Please run with --no-sound')
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
55 sound.stop_background_music()
586
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
56
11
5d58a5b13731 Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents: 7
diff changeset
57 def main():
5d58a5b13731 Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents: 7
diff changeset
58 """Main script."""
411
03d5cb669298 Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents: 389
diff changeset
59 config.configure(sys.argv[1:])
591
6b21b2140262 Merge r594 and r595 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 586
diff changeset
60 sound.init_sound()
586
36e1939c732a Merge r588, r589 and r590 from trunk.
Simon Cross <hodgestar@gmail.com>
parents: 411
diff changeset
61 sanity_check()
11
5d58a5b13731 Extremely rudimentary game engine.
Simon Cross <hodgestar@gmail.com>
parents: 7
diff changeset
62 screen = pygame.display.set_mode(constants.SCREEN, SWSURFACE)
351
4cc0b3627f83 Use proper icon
Neil Muller <drnlmuller@gmail.com>
parents: 151
diff changeset
63 pygame.display.set_icon(pygame.image.load(
4cc0b3627f83 Use proper icon
Neil Muller <drnlmuller@gmail.com>
parents: 151
diff changeset
64 data.filepath('icons/foxassault24x24.png')))
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: 139
diff changeset
65 main_app = create_main_app(screen)
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: 139
diff changeset
66
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: 139
diff changeset
67 from engine import Engine, MainMenuState
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: 139
diff changeset
68
411
03d5cb669298 Add config file and command line parameters.
Jeremy Thurgood <firxen@gmail.com>
parents: 389
diff changeset
69 engine = Engine(main_app, config.level_name)
58
2afdccfb9c67 Hide keyboard interrupt message on Ctrl-C exit.
Simon Cross <hodgestar@gmail.com>
parents: 11
diff changeset
70 try:
2afdccfb9c67 Hide keyboard interrupt message on Ctrl-C exit.
Simon Cross <hodgestar@gmail.com>
parents: 11
diff changeset
71 engine.run(MainMenuState(engine), screen)
2afdccfb9c67 Hide keyboard interrupt message on Ctrl-C exit.
Simon Cross <hodgestar@gmail.com>
parents: 11
diff changeset
72 except KeyboardInterrupt:
2afdccfb9c67 Hide keyboard interrupt message on Ctrl-C exit.
Simon Cross <hodgestar@gmail.com>
parents: 11
diff changeset
73 pass