Mercurial > boomslang
annotate pyntnclick/main.py @ 563:18396b937647 pyntnclick
Added ignores. Apparently bzr does not allow this locally for a specific repo.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 11 Feb 2012 15:22:16 +0200 |
parents | 28f03563f4db |
children | 2f7aa3cad77c |
rev | line source |
---|---|
0
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
1 '''Game main module. |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
2 |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
3 Contains the entry point used by the run_game.py script. |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
4 |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
5 ''' |
f2c3b516741b
Theme is 'Caught'. Start with Skellington 1.9.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
6 |
102 | 7 # Albow looks for stuff in os.path[0], which isn't always where it expects. |
8 # The following horribleness fixes this. | |
9 import sys | |
10 import os.path | |
11 right_path = os.path.dirname(os.path.dirname(__file__)) | |
12 sys.path.insert(0, right_path) | |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
13 from optparse import OptionParser |
102 | 14 |
17 | 15 import pygame |
37 | 16 from pygame.locals import SWSURFACE |
17 | 17 from albow.shell import Shell |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
25
diff
changeset
|
18 |
551 | 19 from pyntnclick.menu import MenuScreen |
20 from pyntnclick.gamescreen import GameScreen | |
21 from pyntnclick.endscreen import EndScreen | |
22 from pyntnclick.constants import ( | |
532 | 23 SCREEN, FRAME_RATE, FREQ, BITSIZE, CHANNELS, BUFFER, DEBUG) |
551 | 24 from pyntnclick.sound import no_sound, disable_sound |
25 from pyntnclick import state, data | |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
26 |
532 | 27 |
17 | 28 class MainShell(Shell): |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
29 def __init__(self, display, initial_state): |
17 | 30 Shell.__init__(self, display) |
31 self.menu_screen = MenuScreen(self) | |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
32 self.game_screen = GameScreen(self, initial_state) |
443
3dab4984cbd7
Redo way of reaching end screen
Neil Muller <neil@dip.sun.ac.za>
parents:
282
diff
changeset
|
33 self.end_screen = EndScreen(self) |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
102
diff
changeset
|
34 self.set_timer(FRAME_RATE) |
17 | 35 self.show_screen(self.menu_screen) |
36 | |
532 | 37 |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
38 class GameDescriptionError(Exception): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
39 """Raised when an GameDescription is invalid.""" |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
40 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
41 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
42 class GameDescription(object): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
43 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
44 # initial scene for start of game (unless overridden by debug) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
45 INITIAL_SCENE = None |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
46 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
47 # list of game scenes |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
48 SCENE_LIST = None |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
49 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
50 def __init__(self): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
51 if self.INITIAL_SCENE is None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
52 raise GameDescriptionError("A game must have an initial scene.") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
53 if not self.SCENE_LIST: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
54 raise GameDescriptionError("A game must have a non-empty list" |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
55 " of scenes.") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
56 self._initial_scene = self.INITIAL_SCENE |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
57 self._scene_list = self.SCENE_LIST |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
58 self._debug_rects = False |
560
28f03563f4db
Provide stubby access to sound and resource object from GameDescription on state and scene objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
556
diff
changeset
|
59 # TODO: make these real objects |
28f03563f4db
Provide stubby access to sound and resource object from GameDescription on state and scene objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
556
diff
changeset
|
60 self.sound = object() |
28f03563f4db
Provide stubby access to sound and resource object from GameDescription on state and scene objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
556
diff
changeset
|
61 self.resource = object() |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
62 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
63 def initial_state(self): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
64 """Create a copy of the initial game state.""" |
560
28f03563f4db
Provide stubby access to sound and resource object from GameDescription on state and scene objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
556
diff
changeset
|
65 initial_state = state.GameState(self) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
66 initial_state.set_debug_rects(self._debug_rects) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
67 for scene in self._scene_list: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
68 initial_state.load_scenes(scene) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
69 initial_state.set_current_scene(self._initial_scene) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
70 initial_state.set_do_enter_leave() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
71 return initial_state |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
72 |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
73 def option_parser(self): |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
74 parser = OptionParser() |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
75 parser.add_option("--no-sound", action="store_false", default=True, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
76 dest="sound", help="disable sound") |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
77 if DEBUG: |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
78 parser.add_option("--scene", type="str", default=None, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
79 dest="scene", help="initial scene") |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
80 parser.add_option("--no-rects", action="store_false", default=True, |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
81 dest="rects", help="disable debugging rects") |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
82 return parser |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
83 |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
84 def main(self): |
556
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
85 parser = self.option_parser() |
a4f28da12720
Move option_parser onto GameDescription so it can be overridden by sub-classes if they lik.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
554
diff
changeset
|
86 opts, _ = parser.parse_args(sys.argv) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
87 pygame.display.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
88 pygame.font.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
89 if opts.sound: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
90 try: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
91 pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
92 except pygame.error, exc: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
93 no_sound(exc) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
94 else: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
95 # Ensure get_sound returns nothing, so everything else just works |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
96 disable_sound() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
97 if DEBUG: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
98 if opts.scene is not None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
99 # debug the specified scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
100 self._initial_scene = opts.scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
101 self._debug_rects = opts.rects |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
102 display = pygame.display.set_mode(SCREEN, SWSURFACE) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
103 pygame.display.set_icon(pygame.image.load( |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
104 data.filepath('icons/suspended_sentence24x24.png'))) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
105 pygame.display.set_caption("Suspended Sentence") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
106 shell = MainShell(display, self.initial_state) |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
107 try: |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
108 shell.run() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
109 except KeyboardInterrupt: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
110 pass |