From de49aa72249f2fded44e53831f5680d9a48d7f5b Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Wed, 14 May 2014 23:00:12 +0200 Subject: [PATCH] Shift board locations. --- data/location_decks/test.yaml | 6 ++++- naja/actions.py | 8 +++++++ naja/gameboard.py | 43 +++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/data/location_decks/test.yaml b/data/location_decks/test.yaml index e64c10d..b577ba3 100644 --- a/data/location_decks/test.yaml +++ b/data/location_decks/test.yaml @@ -39,4 +39,8 @@ cards: - *ACQUIRE-WIN-TOKEN - actions: - *GAIN-HEALTH-DEFAULT - - *TOGGLE-BITS-C \ No newline at end of file + - *TOGGLE-BITS-C + - actions: + - action_class: 'ShiftLocations' + required_bits: [CYAN, MAGENTA] + data: {'direction': NORTH} diff --git a/naja/actions.py b/naja/actions.py index f62b463..9c4e8f3 100644 --- a/naja/actions.py +++ b/naja/actions.py @@ -96,3 +96,11 @@ class GainHealthAndClearBitsOrMSB(LocationAction): board.gain_health() if not self.check_and_clear_MSB(board.player): board.player.bits.clear_bits(location.bitwise_operand) + + +class ShiftLocations(LocationAction): + # TODO: Direction parameter in TEXT. + TEXT = "Shift board locations." + + def perform_action(self, board, location): + board.shift_locations(self.data['direction']) diff --git a/naja/gameboard.py b/naja/gameboard.py index dd0861e..7e8f273 100644 --- a/naja/gameboard.py +++ b/naja/gameboard.py @@ -104,6 +104,49 @@ class GameBoard(object): location = LocationCard.new_location(choice(self.locations).copy()) self.board_locations[position] = location + def shift_locations(self, direction): + px, py = self.player.position + shifted_locations = {} + # TODO: Make this less horrible. Also test it. + if BITS[direction] == BITS.NORTH: + for y in range(5): + if y == py: + continue + new_y = y - 1 + if new_y == py: + new_y -= 1 + new_y %= 5 + shifted_locations[(px, new_y)] = self.board_locations[(px, y)] + elif BITS[direction] == BITS.SOUTH: + for y in range(5): + if y == py: + continue + new_y = y + 1 + if new_y == py: + new_y += 1 + new_y %= 5 + shifted_locations[(px, new_y)] = self.board_locations[(px, y)] + elif BITS[direction] == BITS.EAST: + for x in range(5): + if x == px: + continue + new_x = x + 1 + if new_x == px: + new_x += 1 + new_x %= 5 + shifted_locations[(new_x, py)] = self.board_locations[(x, py)] + elif BITS[direction] == BITS.WEST: + for x in range(5): + if x == px: + continue + new_x = x - 1 + if new_x == px: + new_x -= 1 + new_x %= 5 + shifted_locations[(new_x, py)] = self.board_locations[(x, py)] + + self.board_locations.update(shifted_locations) + def change_mode(self, new_mode): """Advance to the next mode""" if new_mode == self.player_mode: -- 2.34.1