Mercurial > sypikslang
annotate gamelib/mainmenu.py @ 142:3e02a8ccd72b
pep8 and pyflakes
author | Rizmari Versfeld <rizziepit@gmail.com> |
---|---|
date | Fri, 11 May 2012 00:28:35 +0200 |
parents | abbceec3cc8b |
children | 821ecb98e888 |
rev | line source |
---|---|
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
3 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
4 """The main menu""" |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
5 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
6 import pygame |
88 | 7 import os |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
8 from pygame import image |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
9 |
88 | 10 try: |
11 import simplejson | |
12 json = simplejson | |
13 except ImportError: | |
14 import json | |
15 | |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
16 from gamelib import data |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
17 from gamelib.gui_base import Window |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
136
diff
changeset
|
18 from gamelib.gui import BigButton, IconButton |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
19 from gamelib.engine import AddWindow |
63
364ff3479ef2
Remove duplicate point tracking. Rename classes for future refactoring
Neil Muller <drnlmuller@gmail.com>
parents:
53
diff
changeset
|
20 from gamelib.gamegui import LabWindow |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
21 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
22 from gamelib.constants import WIDTH, HEIGHT |
88 | 23 from gamelib.game_base import get_save_filename |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
24 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
25 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
26 class MainMenuButton(BigButton): |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
27 WIDTH = 276 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
28 HEIGHT = 75 |
76 | 29 BG_IMAGE_NORMAL = image.load(data.filepath('images/main_normal.png')) |
30 BG_IMAGE_DOWN = image.load(data.filepath('images/main_down.png')) | |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
31 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
32 |
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
33 class NewGameButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
34 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
35 def __init__(self, parent): |
79 | 36 super(NewGameButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
37 (HEIGHT - self.HEIGHT) / 2 - self.HEIGHT), | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
38 'Start New Game') |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
39 self.parent = parent |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
40 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
41 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
42 self.parent.start_new_game() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
43 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
44 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
45 class ResumeGameButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
46 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
47 def __init__(self, parent): |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
48 super(ResumeGameButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
79 | 49 (HEIGHT - self.HEIGHT) / 2), 'Resume Game') |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
50 self.parent = parent |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
51 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
52 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
53 self.parent.resume_game() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
54 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
55 |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
56 class QuitButton(MainMenuButton): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
57 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
58 def __init__(self): |
74
22b65c943712
prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents:
63
diff
changeset
|
59 super(QuitButton, self).__init__(((WIDTH - self.WIDTH) / 2, |
79 | 60 (HEIGHT - self.HEIGHT) / 2 + self.HEIGHT), 'Quit') |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
61 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
62 def on_click(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
63 pygame.event.post(pygame.event.Event(pygame.QUIT)) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
64 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
65 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
66 class MainMenu(Window): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
67 |
88 | 68 def __init__(self, screen, savefile): |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
69 super(MainMenu, self).__init__(screen) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
70 self.game_window = None |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
71 self.resume = None |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
72 self.screen = screen |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
73 self.background_colour = (0, 0, 0) |
75 | 74 self.background_image = image.load(data.filepath('images/temp.jpg')) |
142 | 75 self.add_child(IconButton((0, 0), 'rocketry')) |
76 self.add_child(IconButton((64, 0), 'marinebiology')) | |
77 self.add_child(IconButton((128, 0), 'robotics')) | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
78 button1 = NewGameButton(self) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
79 self.add_child(button1) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
80 button2 = QuitButton() |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
81 self.add_child(button2) |
88 | 82 if savefile: |
83 self.load_game(savefile) | |
84 else: | |
85 # See if we have an autosave file | |
86 savefile = get_save_filename() | |
87 if os.path.exists(savefile): | |
88 self.load_game(savefile) | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
89 |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
90 def start_new_game(self): |
88 | 91 self.game_window = LabWindow(self.screen, None) |
92 self.add_resume() | |
93 AddWindow.post(self.game_window) | |
94 | |
95 def load_game(self, savefile): | |
96 if os.access(savefile, os.R_OK): | |
97 f = open(savefile, 'r') | |
90
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
98 try: |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
99 game_data = json.load(f) |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
100 except json.JSONDecodeError: |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
101 print 'Unable to load the autosave file - skipping' |
0823e2529c23
Add robustness around the savefile stuff
Neil Muller <drnlmuller@gmail.com>
parents:
88
diff
changeset
|
102 game_data = None |
88 | 103 f.close() |
136
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
104 try: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
105 self.game_window = LabWindow(self.screen, game_data) |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
106 if game_data: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
107 self.add_resume() |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
108 except Exception, e: |
1a648d07d67e
Handle broken (but valid JSON) autosave more gracefully.
Jeremy Thurgood <firxen@gmail.com>
parents:
98
diff
changeset
|
109 print 'Error loading autosave (%r) - ignoring' % (e,) |
88 | 110 # We stay at the main menu, so the user can can to continue or not |
111 | |
112 def add_resume(self): | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
113 if not self.resume: |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
114 # Add the resume button |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
115 self.resume = ResumeGameButton(self) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
116 self.add_child(self.resume) |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
117 |
98 | 118 def game_over(self): |
119 if self.resume: | |
120 self.remove_child(self.resume) | |
121 self.resume = None | |
122 | |
53
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
123 def resume_game(self): |
655a6912e0ae
Split gui stuff out of main.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff
changeset
|
124 AddWindow.post(self.game_window) |