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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
179
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 """Help screen."""
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3 from pgu import gui
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4 import pygame
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5 import constants
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
6 import imagecache
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
10
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
11 Introduction:
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
12
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
13 The aim of the game is to make as much money as possible from your chicken
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14 farm. The problem is the foxes, which want to eat your chickens. Since hiring
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
15 guards is both too expensive and unreliable, the obvious solution is to help
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
16 the chickens defend themselves.
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
17
471
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
18 You lose if you end a night with no chickens left.
179
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
19
471
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
20 """ % constants.NAME,
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
21
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
22 """Important Game mechanics:
179
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
23
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
29 Buildings require wood to construct. You can either trade money for wood,
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
30 or, by equipping a chicken with an axes, and placing it near trees, your
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
31 chickens will chop down trees at the end of the day.
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
32
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
33 Chickens that aren't in buildings will move around at the end of the day.
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
47
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
48 c = HelpContainer(align=0, valign=0)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
49 c.add(help_screen, 0, 0)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
50
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
51 return c
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
52
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
53 class HelpContainer(gui.Container):
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
54 def paint(self, s):
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
57 pygame.display.get_surface().blit(splash, (0, 0))
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
58 gui.Container.paint(self, s)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
59
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
62 gui.Document.__init__(self, **params)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
99
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
100 space = self.style.font.size(" ")
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
101
471
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
102 if self.cur_page == 0:
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
103 full_text = "Page %d / %d\n\n" % (self.cur_page + 1, len(HELP)) + \
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
104 HELP[self.cur_page] + '\n\n' + LEVEL_TEXT % {
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
105 'name' : self.level.level_name,
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
106 'goal' : self.level.goal
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
107 }
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
108 else:
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
109 full_text = "Page %d / %d\n\n" % (self.cur_page + 1, len(HELP)) + \
c34d53edfa12 Tweak help info
Neil Muller <drnlmuller@gmail.com>
parents: 465
diff changeset
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
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
113 self.block(align=-1)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
114 for word in paragraph.split():
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
115 self.add(gui.Label(word))
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
116 self.space(space)
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
117 self.br(space[1])
e2b5262c2b11 Add basic help screen
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
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)