Mercurial > pyntnclick
annotate pyntnclick/main.py @ 553:ebb2efcb4ea7 pyntnclick
Create a re-usable main function.
author | Simon Cross <hodgestar+bzr@gmail.com> |
---|---|
date | Sat, 11 Feb 2012 13:40:51 +0200 |
parents | 38fb04728ac5 |
children | 99a1420097df |
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 |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
28 def parse_args(args): |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
29 parser = OptionParser() |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
30 parser.add_option("--no-sound", action="store_false", default=True, |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
31 dest="sound", help="disable sound") |
176
c6ea3b11514c
Add --scene for selecting initial scene during debugging.
Simon Cross <simon@simonx>
parents:
149
diff
changeset
|
32 if DEBUG: |
c6ea3b11514c
Add --scene for selecting initial scene during debugging.
Simon Cross <simon@simonx>
parents:
149
diff
changeset
|
33 parser.add_option("--scene", type="str", default=None, |
c6ea3b11514c
Add --scene for selecting initial scene during debugging.
Simon Cross <simon@simonx>
parents:
149
diff
changeset
|
34 dest="scene", help="initial scene") |
282
fe899fb63866
Add option for turning off debugging rects while debugging.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
264
diff
changeset
|
35 parser.add_option("--no-rects", action="store_false", default=True, |
fe899fb63866
Add option for turning off debugging rects while debugging.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
264
diff
changeset
|
36 dest="rects", help="disable debugging rects") |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
37 opts, _ = parser.parse_args(args or []) |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
38 return opts |
17 | 39 |
124 | 40 |
17 | 41 class MainShell(Shell): |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
42 def __init__(self, display, initial_state): |
17 | 43 Shell.__init__(self, display) |
44 self.menu_screen = MenuScreen(self) | |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
45 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
|
46 self.end_screen = EndScreen(self) |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
102
diff
changeset
|
47 self.set_timer(FRAME_RATE) |
17 | 48 self.show_screen(self.menu_screen) |
49 | |
532 | 50 |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
51 def main(initial_scene, scene_list, debug_rects=False): |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
52 opts = parse_args(sys.argv) |
25
f9e697e0c6ba
Don't initialise the entire pygame
Stefano Rivera <stefano@rivera.za.net>
parents:
24
diff
changeset
|
53 pygame.display.init() |
f9e697e0c6ba
Don't initialise the entire pygame
Stefano Rivera <stefano@rivera.za.net>
parents:
24
diff
changeset
|
54 pygame.font.init() |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
55 if opts.sound: |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
56 try: |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
57 pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER) |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
58 except pygame.error, exc: |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
59 no_sound(exc) |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
60 else: |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
61 # Ensure get_sound returns nothing, so everything else just works |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
62 disable_sound() |
282
fe899fb63866
Add option for turning off debugging rects while debugging.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
264
diff
changeset
|
63 if DEBUG: |
fe899fb63866
Add option for turning off debugging rects while debugging.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
264
diff
changeset
|
64 if opts.scene is not None: |
fe899fb63866
Add option for turning off debugging rects while debugging.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
264
diff
changeset
|
65 # debug the specified scene |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
66 initial_scene = opts.scene |
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
67 debug_rects = opts.rects |
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
68 initial_state = state.initial_state_creator(initial_scene, scene_list, |
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
69 debug_rects) |
532 | 70 display = pygame.display.set_mode(SCREEN, SWSURFACE) |
447
9c285017535d
Added icon and title to window
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
443
diff
changeset
|
71 pygame.display.set_icon(pygame.image.load( |
9c285017535d
Added icon and title to window
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
443
diff
changeset
|
72 data.filepath('icons/suspended_sentence24x24.png'))) |
9c285017535d
Added icon and title to window
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
443
diff
changeset
|
73 pygame.display.set_caption("Suspended Sentence") |
553
ebb2efcb4ea7
Create a re-usable main function.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
551
diff
changeset
|
74 shell = MainShell(display, initial_state) |
149
7f6b11a0d404
Exit quietly on keyboard interrupt.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
124
diff
changeset
|
75 try: |
7f6b11a0d404
Exit quietly on keyboard interrupt.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
124
diff
changeset
|
76 shell.run() |
7f6b11a0d404
Exit quietly on keyboard interrupt.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
124
diff
changeset
|
77 except KeyboardInterrupt: |
7f6b11a0d404
Exit quietly on keyboard interrupt.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
124
diff
changeset
|
78 pass |