From ee043bf16a47565d7781bd8a357f803a98bd8a4b Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Wed, 14 May 2014 17:28:39 +0200 Subject: [PATCH] Win and lose screens and conditions. --- naja/gameboard.py | 16 ++++++++++++++-- naja/scenes/lose.py | 35 +++++++++++++++++++++++++++++++++++ naja/scenes/win.py | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 naja/scenes/lose.py create mode 100644 naja/scenes/win.py diff --git a/naja/gameboard.py b/naja/gameboard.py index b03a209..f3e6f58 100644 --- a/naja/gameboard.py +++ b/naja/gameboard.py @@ -88,7 +88,8 @@ class GameBoard(object): def lose_health(self): self.health -= 1 - # TODO: Check win/lose + if self.health <= 0: + self.end_game(win=False) def gain_health(self): if self.health < self.max_health: @@ -96,7 +97,8 @@ class GameBoard(object): def acquire_win_token(self): self.wins += 1 - # TODO: Check win/lose + if self.wins >= self.wins_required: + self.end_game(win=True) def replace_card(self, position): location = LocationCard.new_location(choice(self.locations).copy()) @@ -111,6 +113,16 @@ class GameBoard(object): else: raise RuntimeError("Illegal player mode %s" % self.player_mode) + def end_game(self, win): + # TODO: Find a way to not have UI stuff in game logic stuff. + from naja.events import SceneChangeEvent + from naja.scenes.lose import LoseScene + from naja.scenes.win import WinScene + if win: + SceneChangeEvent.post(WinScene) + else: + SceneChangeEvent.post(LoseScene) + class LocationCard(object): """ diff --git a/naja/scenes/lose.py b/naja/scenes/lose.py new file mode 100644 index 0000000..e72d5f4 --- /dev/null +++ b/naja/scenes/lose.py @@ -0,0 +1,35 @@ +""" +Lose scene. +""" + +import pygame.locals as pgl + +from naja.constants import KEYS +from naja.scenes.scene import Scene +from naja.widgets.text import TextWidget, TextBoxWidget +from naja.events import QuitGameEvent + + +class LoseScene(Scene): + """ + Commiserations. + """ + + def __init__(self, state): + super(LoseScene, self).__init__(state) + self.add(TextWidget( + (480, 160), 'You lost!', fontsize=32, colour='white')) + self.add(TextBoxWidget( + (120, 30), '\n'.join([ + "You're not so great.", + "You did poorly.", + "You shouldn't be proud of yourself.", + ]), fontsize=32, + colour='white', padding=1, border=1, + bg_colour='black', border_colour='black', + box_width=100)) + + def handle_scene_event(self, ev): + if ev.type == pgl.KEYDOWN and ev.key in KEYS.QUIT: + QuitGameEvent.post() + return diff --git a/naja/scenes/win.py b/naja/scenes/win.py new file mode 100644 index 0000000..65765d7 --- /dev/null +++ b/naja/scenes/win.py @@ -0,0 +1,35 @@ +""" +Win scene. +""" + +import pygame.locals as pgl + +from naja.constants import KEYS +from naja.scenes.scene import Scene +from naja.widgets.text import TextWidget, TextBoxWidget +from naja.events import QuitGameEvent + + +class WinScene(Scene): + """ + Congratulations. + """ + + def __init__(self, state): + super(WinScene, self).__init__(state) + self.add(TextWidget( + (480, 160), 'You won!', fontsize=32, colour='white')) + self.add(TextBoxWidget( + (120, 30), '\n'.join([ + "You're great.", + "You did well.", + "You should be proud of yourself.", + ]), fontsize=32, + colour='white', padding=1, border=1, + bg_colour='black', border_colour='black', + box_width=100)) + + def handle_scene_event(self, ev): + if ev.type == pgl.KEYDOWN and ev.key in KEYS.QUIT: + QuitGameEvent.post() + return -- 2.34.1