Mercurial > boomslang
annotate pyntnclick/main.py @ 596:5496dcd16a84 pyntnclick
Add pyntnclick.engine, based on mamba
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 11 Feb 2012 18:22:57 +0200 |
parents | a9e9a7fbdbcf |
children | c1b5e982809b |
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 | |
594 | 22 from pyntnclick.constants import GameConstants, DEBUG_ENVVAR |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
23 from pyntnclick.resources import Resources |
564 | 24 from pyntnclick.sound import Sound |
570
9c3528c2cbe5
Bug fixes for sound hook-up.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
569
diff
changeset
|
25 from pyntnclick import state |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
26 |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
27 from pyntnclick.tools.rect_drawer import RectApp, make_rect_display |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
28 from pyntnclick.tools.utils import list_scenes |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
29 |
532 | 30 |
17 | 31 class MainShell(Shell): |
581
7e4a20eb78b8
Pass game_description to all screens
Stefano Rivera <stefano@rivera.za.net>
parents:
580
diff
changeset
|
32 def __init__(self, display, game_description): |
17 | 33 Shell.__init__(self, display) |
581
7e4a20eb78b8
Pass game_description to all screens
Stefano Rivera <stefano@rivera.za.net>
parents:
580
diff
changeset
|
34 self.menu_screen = MenuScreen(self, game_description) |
7e4a20eb78b8
Pass game_description to all screens
Stefano Rivera <stefano@rivera.za.net>
parents:
580
diff
changeset
|
35 self.game_screen = GameScreen(self, game_description) |
7e4a20eb78b8
Pass game_description to all screens
Stefano Rivera <stefano@rivera.za.net>
parents:
580
diff
changeset
|
36 self.end_screen = EndScreen(self, game_description) |
596
5496dcd16a84
Add pyntnclick.engine, based on mamba
Stefano Rivera <stefano@rivera.za.net>
parents:
594
diff
changeset
|
37 #self.set_timer(game_description.constants.frame_rate) |
17 | 38 self.show_screen(self.menu_screen) |
39 | |
532 | 40 |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
41 class GameDescriptionError(Exception): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
42 """Raised when an GameDescription is invalid.""" |
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 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
45 class GameDescription(object): |
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 # initial scene for start of game (unless overridden by debug) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
48 INITIAL_SCENE = 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 # list of game scenes |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
51 SCENE_LIST = None |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
52 |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
53 # resource module |
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
54 RESOURCE_MODULE = "Resources" |
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
55 |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
56 def __init__(self): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
57 if self.INITIAL_SCENE is None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
58 raise GameDescriptionError("A game must have an initial scene.") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
59 if not self.SCENE_LIST: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
60 raise GameDescriptionError("A game must have a non-empty list" |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
61 " of scenes.") |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
62 self._initial_scene = self.INITIAL_SCENE |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
63 self._scene_list = self.SCENE_LIST |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
64 self._resource_module = self.RESOURCE_MODULE |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
65 self._debug_rects = False |
569
0587f11ff435
Link up Resource module.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
568
diff
changeset
|
66 self.resource = Resources(self._resource_module) |
564 | 67 self.sound = Sound(self.resource) |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
68 self.constants = self.game_constants() |
594 | 69 self.debug_options = [] |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
70 |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
71 def initial_state(self): |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
72 """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
|
73 initial_state = state.GameState(self) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
74 initial_state.set_debug_rects(self._debug_rects) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
75 for scene in self._scene_list: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
76 initial_state.load_scenes(scene) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
77 initial_state.set_current_scene(self._initial_scene) |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
78 initial_state.set_do_enter_leave() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
79 return initial_state |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
80 |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
81 def game_constants(self): |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
82 return GameConstants() |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
83 |
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
|
84 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
|
85 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
|
86 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
|
87 dest="sound", help="disable sound") |
594 | 88 # We flag these, so we can warn the user that these require debug mode |
89 self.debug_options = ['--scene', '--no-rects', '--rect-drawer', | |
90 '--list-scenes', '--details'] | |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
91 if self.constants.debug: |
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
|
92 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
|
93 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
|
94 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
|
95 dest="rects", help="disable debugging rects") |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
96 parser.add_option("--rect-drawer", action="store_true", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
97 default=False, dest="rect_drawer", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
98 help="Launch the rect drawing helper tool. Specify the" |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
99 " scene with --scene") |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
100 parser.add_option("--list-scenes", action="store_true", |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
101 default=False, dest='list_scenes', help="List all scenes" |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
102 " that can be used with --scene and exit.") |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
103 parser.add_option("--detail", type="str", default=None, |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
104 dest="detail", help="Detailed view for rect_drawer") |
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
|
105 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
|
106 |
594 | 107 def warn_debug(self, option): |
108 """Warn the user that he needs debug mode""" | |
109 print '%s is only valid in debug mode' % option | |
110 print 'set %s to enable debug mode' % DEBUG_ENVVAR | |
111 print | |
112 | |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
113 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
|
114 parser = self.option_parser() |
594 | 115 # This is a bit hack'ish, but works |
116 if not self.constants.debug: | |
117 for option in self.debug_options: | |
118 if option in sys.argv: | |
119 self.warn_debug(option) | |
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
|
120 opts, _ = parser.parse_args(sys.argv) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
121 pygame.display.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
122 pygame.font.init() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
123 if opts.sound: |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
124 self.sound.enable_sound(self.constants) |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
125 else: |
564 | 126 self.sound.disable_sound() |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
570
diff
changeset
|
127 if self.constants.debug: |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
128 if opts.scene is not None: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
129 # debug the specified scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
130 self._initial_scene = opts.scene |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
131 self._debug_rects = opts.rects |
590
a77dd4619176
Fix to work when debug is not enabled
Neil Muller <neil@dip.sun.ac.za>
parents:
589
diff
changeset
|
132 if self.constants.debug and opts.list_scenes: |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
133 # FIXME: Horrible hack to avoid image loading issues for |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
134 # now |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
135 display = pygame.display.set_mode(self.constants.screen, |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
136 SWSURFACE) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
137 list_scenes(self.initial_state) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
138 sys.exit(0) |
590
a77dd4619176
Fix to work when debug is not enabled
Neil Muller <neil@dip.sun.ac.za>
parents:
589
diff
changeset
|
139 if self.constants.debug and opts.rect_drawer: |
589
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
140 if opts.scene is None: |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
141 print 'Need to supply a scene to use the rect drawer' |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
142 sys.exit(1) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
143 display = make_rect_display() |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
144 try: |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
145 shell = RectApp(display, self.initial_state, opts.scene, |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
146 opts.detail) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
147 except KeyError: |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
148 print 'Invalid scene: %s' % opts.scene |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
149 sys.exit(1) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
150 else: |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
151 display = pygame.display.set_mode(self.constants.screen, |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
152 SWSURFACE) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
153 pygame.display.set_icon(self.resource.get_image( |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
154 'suspended_sentence24x24.png', basedir='icons')) |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
155 pygame.display.set_caption("Suspended Sentence") |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
156 |
ebc48b397fd5
Turn rect_drawer into a command line option
Neil Muller <neil@dip.sun.ac.za>
parents:
587
diff
changeset
|
157 shell = MainShell(display, self) |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
158 try: |
554
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
159 shell.run() |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
160 except KeyboardInterrupt: |
99a1420097df
Create GameDescription object.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
553
diff
changeset
|
161 pass |