Mercurial > rinkhals
annotate gamelib/helpscreen.py @ 566:a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sat, 28 Nov 2009 19:30:06 +0000 |
parents | c34d53edfa12 |
children | 40eee9e1246c |
rev | line source |
---|---|
179 | 1 """Help screen.""" |
2 | |
3 from pgu import gui | |
4 import pygame | |
5 import constants | |
6 import imagecache | |
7 | |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
8 HELP = [ |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
9 """Welcome to %s |
179 | 10 |
11 Introduction: | |
12 | |
13 The aim of the game is to make as much money as possible from your chicken | |
14 farm. The problem is the foxes, which want to eat your chickens. Since hiring | |
15 guards is both too expensive and unreliable, the obvious solution is to help | |
16 the chickens defend themselves. | |
17 | |
471 | 18 You lose if you end a night with no chickens left. |
179 | 19 |
471 | 20 """ % constants.NAME, |
21 | |
22 """Important Game mechanics: | |
179 | 23 |
24 Chickens only lay eggs in henhouses, and must stay on the egg for 2 days to | |
230
fa0e818c3fee
Update instructions to match new chick hatching behaviour.
Simon Cross <hodgestar@gmail.com>
parents:
181
diff
changeset
|
25 hatch a new chicken. Chickens that hatch in already full henhouses are |
fa0e818c3fee
Update instructions to match new chick hatching behaviour.
Simon Cross <hodgestar@gmail.com>
parents:
181
diff
changeset
|
26 moved to just outside. If there is no space outside, they die immediately |
fa0e818c3fee
Update instructions to match new chick hatching behaviour.
Simon Cross <hodgestar@gmail.com>
parents:
181
diff
changeset
|
27 from overcrowding. |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
28 |
471 | 29 Buildings require wood to construct. You can either trade money for wood, |
30 or, by equipping a chicken with an axes, and placing it near trees, your | |
31 chickens will chop down trees at the end of the day. | |
32 | |
33 Chickens that aren't in buildings will move around at the end of the day. | |
34 | |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
35 """ |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
36 ] |
179 | 37 |
390
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
38 LEVEL_TEXT="""The currently selected level is %(name)s |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
39 |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
40 The goal is: |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
41 %(goal)s |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
42 """ |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
43 |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
44 def make_help_screen(level): |
179 | 45 """Create a main menu""" |
390
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
46 help_screen = HelpScreen(level, width=600) |
179 | 47 |
48 c = HelpContainer(align=0, valign=0) | |
49 c.add(help_screen, 0, 0) | |
50 | |
51 return c | |
52 | |
53 class HelpContainer(gui.Container): | |
54 def paint(self, s): | |
55 pygame.display.set_caption('Instructions') | |
181
7e556ef40100
Lighten help screen. Fix some oddities in darken modifier.
Simon Cross <hodgestar@gmail.com>
parents:
179
diff
changeset
|
56 splash = imagecache.load_image("images/splash.png", ["lighten_most"]) |
179 | 57 pygame.display.get_surface().blit(splash, (0, 0)) |
58 gui.Container.paint(self, s) | |
59 | |
60 class HelpScreen(gui.Document): | |
390
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
61 def __init__(self, level, **params): |
179 | 62 gui.Document.__init__(self, **params) |
63 | |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
64 self.cur_page = 0 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
65 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
66 self.level = level |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
67 |
179 | 68 def done_pressed(): |
566
a8dde729000a
Add 'Save and Quit' option to quit dialog. Move game events from engine to constants to ease 'import engine' fun
Neil Muller <drnlmuller@gmail.com>
parents:
471
diff
changeset
|
69 pygame.event.post(constants.GO_MAIN_MENU) |
179 | 70 |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
71 def next_page(): |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
72 self.cur_page += 1 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
73 if self.cur_page >= len(HELP): |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
74 self.cur_page = 0 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
75 self.redraw() |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
76 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
77 def prev_page(): |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
78 self.cur_page -= 1 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
79 if self.cur_page < 0: |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
80 self.cur_page = len(HELP) - 1 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
81 self.redraw() |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
82 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
83 self.done_button = gui.Button("Return to Main Menu") |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
84 self.done_button.connect(gui.CLICK, done_pressed) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
85 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
86 self.prev_button = gui.Button("Prev Page") |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
87 self.prev_button.connect(gui.CLICK, prev_page) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
88 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
89 self.next_button = gui.Button("Next Page") |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
90 self.next_button.connect(gui.CLICK, next_page) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
91 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
92 self.redraw() |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
93 |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
94 def redraw(self): |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
95 for widget in self.widgets[:]: |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
96 self.remove(widget) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
97 self.layout._widgets = [] |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
98 self.layout.init() |
179 | 99 |
100 space = self.style.font.size(" ") | |
101 | |
471 | 102 if self.cur_page == 0: |
103 full_text = "Page %d / %d\n\n" % (self.cur_page + 1, len(HELP)) + \ | |
104 HELP[self.cur_page] + '\n\n' + LEVEL_TEXT % { | |
105 'name' : self.level.level_name, | |
106 'goal' : self.level.goal | |
107 } | |
108 else: | |
109 full_text = "Page %d / %d\n\n" % (self.cur_page + 1, len(HELP)) + \ | |
110 HELP[self.cur_page] | |
390
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
111 |
2bcfccb8288e
Make help screen use goal from the level
Neil Muller <drnlmuller@gmail.com>
parents:
309
diff
changeset
|
112 for paragraph in full_text.split('\n\n'): |
179 | 113 self.block(align=-1) |
114 for word in paragraph.split(): | |
115 self.add(gui.Label(word)) | |
116 self.space(space) | |
117 self.br(space[1]) | |
118 self.br(space[1]) | |
465
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
119 self.add(self.prev_button, align=-1) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
120 self.add(self.next_button, align=1) |
263dea6d226b
Add support for multiple pages to help screen
Neil Muller <drnlmuller@gmail.com>
parents:
390
diff
changeset
|
121 self.add(self.done_button, align=0) |