--- /dev/null
+description: "Test Puzzle"
+puzzle: true
+
+# This field is ignored, but it's a useful place to put some action definitions
+# we can reference later.
+_action_definitions:
+ # No-colour actions.
+ - &SET-BITS-DEFAULT
+ action_class: 'LoseHealthOrMSBAndSetBits'
+ required_bits: []
+ - &GAIN-HEALTH-DEFAULT
+ action_class: 'GainHealthAndClearBitsOrMSB'
+ required_bits: []
+ - &TOGGLE-BITS-DEFAULT
+ action_class: 'ToggleBits'
+ required_bits: []
+ - &BAD-DEFAULT
+ action_class: 'LoseHealthOrMSB'
+ required_bits: []
+
+ # One-colour actions.
+ - &SET-BITS-R
+ action_class: 'SetBits'
+ required_bits: [RED]
+ - &SET-BITS-G
+ action_class: 'SetBits'
+ required_bits: [GREEN]
+ - &SET-BITS-B
+ action_class: 'SetBits'
+ required_bits: [BLUE]
+
+ - &SHIFT-N
+ action_class: 'ShiftLocations'
+ required_bits: [BLUE]
+ data: {'direction': NORTH}
+ - &SHIFT-S
+ action_class: 'ShiftLocations'
+ required_bits: [BLUE]
+ data: {'direction': SOUTH}
+ - &SHIFT-E
+ action_class: 'ShiftLocations'
+ required_bits: [GREEN]
+ data: {'direction': EAST}
+ - &SHIFT-W
+ action_class: 'ShiftLocations'
+ required_bits: [GREEN]
+ data: {'direction': WEST}
+
+ - &ROT-CW
+ action_class: 'RotateLocations'
+ required_bits: [RED]
+ data: {'rot_direction': CLOCKWISE}
+ - &ROT-CCW
+ action_class: 'RotateLocations'
+ required_bits: [RED]
+ data: {'rot_direction': ANTICLOCKWISE}
+
+ # Two-colour actions.
+ - &KNIGHT-MOVE
+ action_class: 'AllowChessMove'
+ required_bits: [RED, GREEN]
+ data: {'chesspiece': KNIGHT}
+ - &CASTLE-MOVE
+ action_class: 'AllowChessMove'
+ required_bits: [RED, BLUE]
+ data: {'chesspiece': CASTLE}
+ - &BISHOP-MOVE
+ action_class: 'AllowChessMove'
+ required_bits: [GREEN, BLUE]
+ data: {'chesspiece': BISHOP}
+
+ - &HEAL-RG
+ action_class: 'GainHealth'
+ required_bits: [RED, GREEN]
+ - &HEAL-RB
+ action_class: 'GainHealth'
+ required_bits: [RED, BLUE]
+
+ # Three-colour actions.
+ - &ACQUIRE-WIN-TOKEN
+ action_class: 'AcquireWinToken'
+ required_bits: [RED, GREEN, BLUE]
+
+ # Test actions
+ - &TEST-WIN
+ action_class: 'AcquireWinToken'
+ required_bits: []
+ - &TEST-NULL
+ action_class: 'DoNothing'
+ required_bits: []
+
+# This field is ignored, but it's a useful place to put some card definitions
+# we can reference later.
+_card_definitions:
+ - &TEST-WIN-CARD
+ actions:
+ - *TEST-WIN
+ - &TEST-BORING
+ actions:
+ - *TEST-NULL
+
+cards:
+ - *TEST-WIN-CARD
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-WIN-CARD
+
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+
+ - *TEST-WIN-CARD
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-BORING
+ - *TEST-WIN-CARD
hard.add_callback('click', self.hard_game)
selector.add(hard)
+ puzzle = TextWidget((200, 300), 'Puzzle', fontsize=32, colour='white')
+ puzzle.add_callback('click', self.puzzle_game)
+ selector.add(puzzle)
+
def easy_game(self, event):
self.start_game(GameState.new(max_health=5, wins_required=3))
def hard_game(self, event):
self.start_game(GameState.new(max_health=3, wins_required=5))
+ def puzzle_game(self, event):
+ self.start_game(GameState.new(
+ deck='test_puzzle', max_health=4, wins_required=4))
+
def start_game(self, state):
from naja.scenes.game import GameScene
LoadGameEvent.post(state=state)