Tuts for noobs.
authorDavid Sharpe <decoydavid@gmail.com>
Sat, 17 May 2014 23:15:18 +0000 (01:15 +0200)
committerDavid Sharpe <decoydavid@gmail.com>
Sat, 17 May 2014 23:15:18 +0000 (01:15 +0200)
data/tutorial/tutorial_screen_1.json [new file with mode: 0644]
naja/scenes/introduction.py
naja/widgets/image_box.py

diff --git a/data/tutorial/tutorial_screen_1.json b/data/tutorial/tutorial_screen_1.json
new file mode 100644 (file)
index 0000000..d9b41e1
--- /dev/null
@@ -0,0 +1 @@
+{"timestamp": "Sat May 17 23:51:34 2014", "data": {"wins_required": 4, "puzzle": false, "player_mode": 2, "locations": [{"card_name": "win1", "max_number": 1, "actions": [{"required_bits": [], "action_class": "LoseHealthOrMSB"}, {"required_bits": ["RED", "GREEN", "BLUE"], "action_class": "AcquireWinToken"}]}, {"card_name": "win2", "max_number": 2, "actions": [{"required_bits": [], "action_class": "LoseHealthOrMSB"}, {"required_bits": ["RED", "GREEN", "BLUE"], "action_class": "AcquireWinTokenAndLoseHealth"}]}, {"card_name": "win3", "max_number": 1, "actions": [{"required_bits": [], "action_class": "LoseHealthOrMSBAndSetBits"}, {"required_bits": ["RED", "GREEN", "BLUE"], "action_class": "AcquireWinToken"}]}, {"card_name": "knight_set", "actions": [{"required_bits": [], "action_class": "GainMSB"}, {"required_bits": ["BLUE"], "action_class": "SetBits"}, {"required_bits": ["RED", "GREEN"], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}]}, {"card_name": "castle_set", "actions": [{"required_bits": [], "action_class": "GainMSB"}, {"required_bits": ["GREEN"], "action_class": "SetBits"}, {"required_bits": ["RED", "BLUE"], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMove"}]}, {"card_name": "bishop_set", "actions": [{"required_bits": [], "action_class": "GainMSB"}, {"required_bits": ["RED"], "action_class": "SetBits"}, {"required_bits": ["GREEN", "BLUE"], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMove"}]}, {"card_name": "bishop_set_knight", "actions": [{"required_bits": [], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": ["BLUE"], "action_class": "SetBits"}, {"required_bits": ["RED", "GREEN"], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}]}, {"card_name": "knight_set_castle", "actions": [{"required_bits": [], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": ["GREEN"], "action_class": "SetBits"}, {"required_bits": ["RED", "BLUE"], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMove"}]}, {"card_name": "castle_set_bishop", "actions": [{"required_bits": [], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": ["RED"], "action_class": "SetBits"}, {"required_bits": ["GREEN", "BLUE"], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMove"}]}, {"card_name": "toggle-rg-r", "bits": ["RED", "GREEN"], "actions": [{"required_bits": [], "action_class": "GainHealthAndClearBitsOrMSB"}, {"required_bits": ["RED"], "action_class": "ToggleBits"}, {"required_bits": ["GREEN", "BLUE"], "action_class": "SetBits"}]}, {"card_name": "toggle-rg-g", "bits": ["RED", "GREEN"], "actions": [{"required_bits": [], "action_class": "GainHealthAndClearBitsOrMSB"}, {"required_bits": ["GREEN"], "action_class": "ToggleBits"}, {"required_bits": ["RED", "BLUE"], "action_class": "SetBits"}]}, {"card_name": "shift-n-heal", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["BLUE"], "data": {"direction": "NORTH"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "GREEN"], "action_class": "GainHealth"}]}, {"card_name": "shift-s-heal", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["BLUE"], "data": {"direction": "SOUTH"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "GREEN"], "action_class": "GainHealth"}]}, {"card_name": "shift-e-heal", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["GREEN"], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "BLUE"], "action_class": "GainHealth"}]}, {"card_name": "shift-w-heal", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["GREEN"], "data": {"direction": "WEST"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "BLUE"], "action_class": "GainHealth"}]}, {"card_name": "shift-n-harm", "actions": [{"required_bits": [], "action_class": "ToggleBitsAndHarm"}, {"required_bits": ["BLUE"], "data": {"direction": "NORTH"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "GREEN"], "action_class": "GainHealth"}]}, {"card_name": "shift-s-harm", "actions": [{"required_bits": [], "action_class": "ToggleBitsAndHarm"}, {"required_bits": ["BLUE"], "data": {"direction": "SOUTH"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "GREEN"], "action_class": "GainHealth"}]}, {"card_name": "shift-e-harm", "actions": [{"required_bits": [], "action_class": "ToggleBitsAndHarm"}, {"required_bits": ["GREEN"], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "BLUE"], "action_class": "GainHealth"}]}, {"card_name": "shift-w-harm", "actions": [{"required_bits": [], "action_class": "ToggleBitsAndHarm"}, {"required_bits": ["GREEN"], "data": {"direction": "WEST"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "BLUE"], "action_class": "GainHealth"}]}, {"card_name": "shift-e-bitshift", "actions": [{"required_bits": ["GREEN"], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": ["GREEN", "BLUE"], "data": {"shift": 1, "direction": "right"}, "action_class": "ShiftBits"}]}, {"card_name": "shift-w-bitshift", "actions": [{"required_bits": ["GREEN"], "data": {"direction": "WEST"}, "action_class": "ShiftLocations"}, {"required_bits": ["RED", "BLUE"], "data": {"shift": 1, "direction": "left"}, "action_class": "ShiftBits"}]}, {"card_name": "rot-cw-set", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["RED"], "data": {"rot_direction": "CLOCKWISE"}, "action_class": "RotateLocations"}, {"required_bits": ["BLUE"], "action_class": "SetBits"}]}, {"card_name": "rot-ccw-set", "actions": [{"required_bits": [], "action_class": "ToggleBits"}, {"required_bits": ["RED"], "data": {"rot_direction": "ANTICLOCKWISE"}, "action_class": "RotateLocations"}, {"required_bits": ["GREEN"], "action_class": "SetBits"}]}, {"card_name": "mean-card", "actions": [{"required_bits": [], "action_class": "LoseHealthOrMSB"}]}, {"card_name": "mean-card", "actions": [{"required_bits": [], "action_class": "ClearBitsAndHealth"}, {"required_bits": ["RED"], "action_class": "LoseHealthOrMSB"}]}], "player": {"position": [0, 3], "movement_mode": 0, "bits": 184}, "max_health": 4, "clock_count": 5, "replacement_params": {"max": 8, "chance": 0.2, "min": 4}, "wins": 0, "board_locations": [[[0, 0], {"replacement_time": null, "max_number": 25, "bitwise_operand": [3, 4], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [4], "data": {"direction": "SOUTH"}, "action_class": "ShiftLocations"}, {"required_bits": [5, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-s-harm"}], [[0, 1], {"replacement_time": null, "max_number": 25, "bitwise_operand": [0, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ClearBitsAndHealth"}, {"required_bits": [6], "data": {}, "action_class": "LoseHealthOrMSB"}], "card_name": "mean-card"}], [[0, 2], {"replacement_time": null, "max_number": 25, "bitwise_operand": [5, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "GainHealthAndClearBitsOrMSB"}, {"required_bits": [5], "data": {}, "action_class": "ToggleBits"}, {"required_bits": [4, 6], "data": {}, "action_class": "SetBits"}], "card_name": "toggle-rg-g"}], [[0, 3], {"replacement_time": null, "max_number": 25, "bitwise_operand": [0, 3, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBits"}, {"required_bits": [5], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-e-heal"}], [[0, 4], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [4], "data": {"direction": "SOUTH"}, "action_class": "ShiftLocations"}, {"required_bits": [5, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-s-harm"}], [[1, 0], {"replacement_time": null, "max_number": 25, "bitwise_operand": [3, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [5], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-e-harm"}], [[1, 1], {"replacement_time": 2, "max_number": 25, "bitwise_operand": [0, 5], "actions": [{"required_bits": [], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": [4], "data": {}, "action_class": "SetBits"}, {"required_bits": [5, 6], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}], "card_name": "bishop_set_knight"}], [[1, 2], {"replacement_time": null, "max_number": 25, "bitwise_operand": [2, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "GainMSB"}, {"required_bits": [4], "data": {}, "action_class": "SetBits"}, {"required_bits": [5, 6], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}], "card_name": "knight_set"}], [[1, 3], {"replacement_time": null, "max_number": 25, "bitwise_operand": [2, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "ClearBitsAndHealth"}, {"required_bits": [6], "data": {}, "action_class": "LoseHealthOrMSB"}], "card_name": "mean-card"}], [[1, 4], {"replacement_time": 2, "max_number": 25, "bitwise_operand": [1, 4, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "DoNothing"}, {"required_bits": [5], "data": {"direction": "WEST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 6], "data": {"shift": 1, "direction": "left"}, "action_class": "ShiftBits"}], "card_name": "shift-w-bitshift"}], [[2, 0], {"replacement_time": null, "max_number": 25, "bitwise_operand": [3, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [4], "data": {"direction": "NORTH"}, "action_class": "ShiftLocations"}, {"required_bits": [5, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-n-harm"}], [[2, 1], {"replacement_time": null, "max_number": 25, "bitwise_operand": [3, 7], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [5], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-e-harm"}], [[2, 2], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 4, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "GainMSB"}, {"required_bits": [5], "data": {}, "action_class": "SetBits"}, {"required_bits": [4, 6], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMove"}], "card_name": "castle_set"}], [[2, 3], {"replacement_time": 2, "max_number": 25, "bitwise_operand": [3, 4], "actions": [{"required_bits": [], "data": {}, "action_class": "GainMSB"}, {"required_bits": [4], "data": {}, "action_class": "SetBits"}, {"required_bits": [5, 6], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}], "card_name": "knight_set"}], [[2, 4], {"replacement_time": null, "max_number": 25, "bitwise_operand": [2, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBits"}, {"required_bits": [5], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-e-heal"}], [[3, 0], {"replacement_time": null, "max_number": 25, "bitwise_operand": [2, 3, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [4], "data": {"direction": "NORTH"}, "action_class": "ShiftLocations"}, {"required_bits": [5, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-n-harm"}], [[3, 1], {"replacement_time": null, "max_number": 25, "bitwise_operand": [5, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "GainHealthAndClearBitsOrMSB"}, {"required_bits": [6], "data": {}, "action_class": "ToggleBits"}, {"required_bits": [4, 5], "data": {}, "action_class": "SetBits"}], "card_name": "toggle-rg-r"}], [[3, 2], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 4], "actions": [{"required_bits": [], "data": {}, "action_class": "DoNothing"}, {"required_bits": [5], "data": {"direction": "EAST"}, "action_class": "ShiftLocations"}, {"required_bits": [4, 5], "data": {"shift": 1, "direction": "right"}, "action_class": "ShiftBits"}], "card_name": "shift-e-bitshift"}], [[3, 3], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 6], "actions": [{"required_bits": [], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": [6], "data": {}, "action_class": "SetBits"}, {"required_bits": [4, 5], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMove"}], "card_name": "castle_set_bishop"}], [[3, 4], {"replacement_time": null, "max_number": 25, "bitwise_operand": [0, 5], "actions": [{"required_bits": [], "data": {}, "action_class": "ClearBitsAndHealth"}, {"required_bits": [6], "data": {}, "action_class": "LoseHealthOrMSB"}], "card_name": "mean-card"}], [[4, 0], {"replacement_time": null, "max_number": 25, "bitwise_operand": [0, 7], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBits"}, {"required_bits": [6], "data": {"rot_direction": "CLOCKWISE"}, "action_class": "RotateLocations"}, {"required_bits": [4], "data": {}, "action_class": "SetBits"}], "card_name": "rot-cw-set"}], [[4, 1], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 7], "actions": [{"required_bits": [], "data": {}, "action_class": "ToggleBitsAndHarm"}, {"required_bits": [4], "data": {"direction": "SOUTH"}, "action_class": "ShiftLocations"}, {"required_bits": [5, 6], "data": {}, "action_class": "GainHealth"}], "card_name": "shift-s-harm"}], [[4, 2], {"replacement_time": null, "max_number": 1, "bitwise_operand": [1, 2, 6], "actions": [{"required_bits": [], "data": {}, "action_class": "LoseHealthOrMSBAndSetBits"}, {"required_bits": [4, 5, 6], "data": {}, "action_class": "AcquireWinToken"}], "card_name": "win3"}], [[4, 3], {"replacement_time": null, "max_number": 25, "bitwise_operand": [3, 4], "actions": [{"required_bits": [], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": [4], "data": {}, "action_class": "SetBits"}, {"required_bits": [5, 6], "data": {"chesspiece": "KNIGHT"}, "action_class": "AllowChessMove"}], "card_name": "bishop_set_knight"}], [[4, 4], {"replacement_time": null, "max_number": 25, "bitwise_operand": [1, 5, 6], "actions": [{"required_bits": [], "data": {"chesspiece": "CASTLE"}, "action_class": "AllowChessMoveIfMSB"}, {"required_bits": [6], "data": {}, "action_class": "SetBits"}, {"required_bits": [4, 5], "data": {"chesspiece": "BISHOP"}, "action_class": "AllowChessMove"}], "card_name": "castle_set_bishop"}]], "cheater": true, "health": 3}}
\ No newline at end of file
index a8e001fdf47bf2d17ca298304e82436ce15d898b..ddaab48d284096320093ae20983f94705d509658 100644 (file)
@@ -5,7 +5,8 @@ Load and save scenes.
 import pygame.locals as pgl
 import pygame
 
 import pygame.locals as pgl
 import pygame
 
-from naja.constants import KEYS, SCREEN
+from naja import constants
+from naja.constants import KEYS, SCREEN, PALETTE
 from naja.events import SceneChangeEvent, LoadGameEvent
 from naja.gamestate import GameState
 from naja.scenes.scene import Scene
 from naja.events import SceneChangeEvent, LoadGameEvent
 from naja.gamestate import GameState
 from naja.scenes.scene import Scene
@@ -26,6 +27,8 @@ class IntroductionScene(Scene):
             (0, 0), "screens/splash.png")
         self.add(background)
 
             (0, 0), "screens/splash.png")
         self.add(background)
 
+        self.intro = 0
+
         selector = SelectorWidget()
         self.add(selector)
 
         selector = SelectorWidget()
         self.add(selector)
 
@@ -48,7 +51,7 @@ class IntroductionScene(Scene):
         intro = TextWidget(
             (x_offset, y_offset), 'Introductory Level', colour='white',
             centre=True)
         intro = TextWidget(
             (x_offset, y_offset), 'Introductory Level', colour='white',
             centre=True)
-        intro.add_callback('click', self.introduction_level)
+        intro.add_callback('click', self.introduction_to_screen_1)
         selector.add(intro)
 
         y_offset += 2*y_diff
         selector.add(intro)
 
         y_offset += 2*y_diff
@@ -65,23 +68,93 @@ class IntroductionScene(Scene):
         LoadGameEvent.post(state=GameState.new(deck='introduction'))
         SceneChangeEvent.post(GameScene)
 
         LoadGameEvent.post(state=GameState.new(deck='introduction'))
         SceneChangeEvent.post(GameScene)
 
-    def introduction_to_screen_1(self, event):
+    def make_game_surface(self):
         self.container.widgets = []
         state = resources.get_json('tutorial/tutorial_screen_1.json')
         dummy_game = DummyGameScene(state)
         game_surface = pygame.surface.Surface(SCREEN)
         dummy_game.render(game_surface)
         self.add(PreRenderedImageBox((0, 0), game_surface))
         self.container.widgets = []
         state = resources.get_json('tutorial/tutorial_screen_1.json')
         dummy_game = DummyGameScene(state)
         game_surface = pygame.surface.Surface(SCREEN)
         dummy_game.render(game_surface)
         self.add(PreRenderedImageBox((0, 0), game_surface))
+        return game_surface
+
+    def introduction_to_screen_1(self, event):
+        game_surface = self.make_game_surface()
+        self.intro = 1
 
         self.add(TextBoxWidget(
 
         self.add(TextBoxWidget(
-            (10, 50), '\n'.join([
-                "You are a robot, frantically trying to set the correct "
-                "bits to gain points for reasons that are unlikely ever "
-                "to become clear.",
+            (24, 72), '\n'.join([
+                "These are your robot's status bits. On the left we have "
+                "the Most Signiticant Bit (MSB, currently set), then Red, "
+                "Green (set) and Blue (set) key bits, and finally the four "
+                "bits which control movement options, of which only left is "
+                "set. You can only move in directions which are set. \n"
+                "Enter to continue.",
             ]), fontsize=32,
             ]), fontsize=32,
-            colour='white', padding=1, border=1,
-            bg_colour='black', border_colour='black',
-            box_width=740, view_port=(780, 540)))
+            colour=PALETTE.GREEN, padding=12, border=8,
+            bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN,
+            box_width=400, view_port=(500, 800)))
+
+        pygame.draw.rect(game_surface, PALETTE.GREEN, (0, 0, 480, 60), 8)
+
+    def introduction_to_screen_2(self, event):
+        game_surface = self.make_game_surface()
+        self.intro = 2
+
+        self.add(TextBoxWidget(
+            (24, 172), '\n'.join([
+                "These are your health and score. On the left we have four "
+                "health bits. The robot has taken one damage, so only three "
+                "are lit. The stars are points you have scored. Once you have "
+                "all of them you win the game! Total health and required "
+                "points vary according to the game. \n"
+                "Enter to continue.",
+            ]), fontsize=32,
+            colour=PALETTE.GREEN, padding=12, border=8,
+            bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN,
+            box_width=400, view_port=(500, 800)))
+
+        pygame.draw.rect(game_surface, PALETTE.GREEN, (0, 540, 480, 60), 8)
+
+    def introduction_to_screen_3(self, event):
+        game_surface = self.make_game_surface()
+        self.intro = 3
+
+        self.add(TextBoxWidget(
+            (24, 132), '\n'.join([
+                "This text box describes the current game mode. The game is "
+                "divided into movements and actions, and each mode has "
+                "different options, shown here.\n"
+                "During movement, you can examine the entire board, but you "
+                "can only move to hi-lighted tiles (including the one you are "
+                "on. Actions come next... \n"
+                "Enter to continue.",
+            ]), fontsize=32,
+            colour=PALETTE.GREEN, padding=12, border=8,
+            bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN,
+            box_width=400, view_port=(500, 800)))
+
+        pygame.draw.rect(game_surface, PALETTE.GREEN, (488, 416, 304, 132), 8)
+
+    def introduction_to_screen_4(self, event):
+        game_surface = self.make_game_surface()
+        self.intro = 4
+
+        self.add(TextBoxWidget(
+            (24, 72), '\n'.join([
+                "This text box shows actions available on the tile. "
+                "Some actions have requirements and are only selectable if "
+                "you have the correct bits set (unavailable actions are "
+                "greyed out). Actions usually change the bits set on "
+                "your robot. This is often not beneficial.\n"
+                "Some actions have additional effects if the MSB is "
+                "set.\n"
+                "Enter to continue.",
+            ]), fontsize=32,
+            colour=PALETTE.GREEN, padding=12, border=8,
+            bg_colour=PALETTE.BLACK, border_colour=PALETTE.GREEN,
+            box_width=400, view_port=(500, 800)))
+
+        pygame.draw.rect(game_surface, PALETTE.GREEN, (488, 52, 304, 240), 8)
 
 
     def handle_scene_event(self, ev):
 
 
     def handle_scene_event(self, ev):
@@ -89,3 +162,14 @@ class IntroductionScene(Scene):
             from naja.scenes.menu import MenuScene
             SceneChangeEvent.post(MenuScene)
             return
             from naja.scenes.menu import MenuScene
             SceneChangeEvent.post(MenuScene)
             return
+        if ev.type == pgl.KEYDOWN and ev.key in KEYS.SELECT:
+            if 0 < self.intro < 5:
+                if self.intro == 1:
+                    self.introduction_to_screen_2(ev)
+                elif self.intro == 2:
+                    self.introduction_to_screen_3(ev)
+                elif self.intro == 3:
+                    self.introduction_to_screen_4(ev)
+                else:
+                    self.introduction_level(ev)
+            return
index e9b4bf398d4e941dc731d795338e7e79324ca0b5..45c4a8c984c6fd1a5a1b4f005bcf0b0bc588df68 100644 (file)
@@ -29,7 +29,7 @@ class PreRenderedImageBox(Widget):
 
     def __init__(self, pos, image):
         super(PreRenderedImageBox, self).__init__(pos)
 
     def __init__(self, pos, image):
         super(PreRenderedImageBox, self).__init__(pos)
-        self.surface = image.copy()
+        self.surface = image
 
     def prepare(self):
         self.size = self.surface.get_rect().size
 
     def prepare(self):
         self.size = self.surface.get_rect().size