Add scaffolding for puzzle levels (no actual puzzle support yet).
[naja.git] / naja / scenes / new_game.py
1 """
2 Load and save scenes.
3 """
4
5 import pygame.locals as pgl
6
7 from naja.constants import KEYS
8 from naja.events import SceneChangeEvent, LoadGameEvent
9 from naja.gamestate import GameState
10 from naja.scenes.scene import Scene
11 from naja.widgets.selector import SelectorWidget
12 from naja.widgets.text import TextWidget
13
14
15 class NewGameScene(Scene):
16     def __init__(self, state):
17         super(NewGameScene, self).__init__(state)
18         selector = SelectorWidget()
19         self.add(selector)
20
21         title = TextWidget((100, 50), 'Select difficulty', colour='white')
22         self.add(title)
23
24         easy = TextWidget((200, 150), 'Easy', fontsize=32, colour='white')
25         easy.add_callback('click', self.easy_game)
26         selector.add(easy)
27
28         standard = TextWidget(
29             (200, 200), 'Standard', fontsize=32, colour='white')
30         standard.add_callback('click', self.standard_game)
31         selector.add(standard)
32
33         hard = TextWidget((200, 250), 'Hard', fontsize=32, colour='white')
34         hard.add_callback('click', self.hard_game)
35         selector.add(hard)
36
37         puzzle = TextWidget((200, 300), 'Puzzle', fontsize=32, colour='white')
38         puzzle.add_callback('click', self.puzzle_game)
39         selector.add(puzzle)
40
41     def easy_game(self, event):
42         self.start_game(GameState.new(max_health=5, wins_required=3))
43
44     def standard_game(self, event):
45         self.start_game(GameState.new(max_health=4, wins_required=4))
46
47     def hard_game(self, event):
48         self.start_game(GameState.new(max_health=3, wins_required=5))
49
50     def puzzle_game(self, event):
51         self.start_game(GameState.new(
52             deck='test_puzzle', max_health=4, wins_required=4))
53
54     def start_game(self, state):
55         from naja.scenes.game import GameScene
56         LoadGameEvent.post(state=state)
57         SceneChangeEvent.post(GameScene)
58
59     def handle_scene_event(self, ev):
60         if ev.type == pgl.KEYDOWN and ev.key in KEYS.QUIT:
61             from naja.scenes.menu import MenuScene
62             SceneChangeEvent.post(MenuScene)
63             return