From 8292a195eeba42e60f9917214350e604554bb6d9 Mon Sep 17 00:00:00 2001 From: adrianna Date: Fri, 16 May 2014 16:41:17 +0200 Subject: [PATCH] started implementing rotation --- naja/actions.py | 8 ++++++++ naja/constants.py | 5 +++++ naja/gameboard.py | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/naja/actions.py b/naja/actions.py index 0626b34..cfa1011 100644 --- a/naja/actions.py +++ b/naja/actions.py @@ -140,6 +140,14 @@ class ShiftLocations(LocationAction): board.shift_locations(self.data['direction']) +class RotateLocations(LocationAction): + TEXT = "Rotate adjacent locations %(rot_direction)s." + GLYPHS = (ACTION_GLYPHS.CHANGE_BOARD,) + + def perform_action(self, board, location): + board.rotate_locations(self.data['rot_direction']) + + class AllowChessMove(LocationAction): TEXT = "Move like a %(chesspiece_name)s for one turn." GLYPHS = (ACTION_GLYPHS.MOVEMENT,) diff --git a/naja/constants.py b/naja/constants.py index 440a2d5..424f65a 100644 --- a/naja/constants.py +++ b/naja/constants.py @@ -51,6 +51,11 @@ MOVES = AttrDict({ }) CHESS_PIECES = AttrDict((k, v) for k, v in MOVES.items() if v > 0) +ROTATION = AttrDict({ + 'CLOCKWISE': 0, + 'ANTICLOCKWISE': 1, +}) + # Player defaults PLAYER_DEFAULTS = AttrDict({ 'INITIAL_BITS': 0x0f, diff --git a/naja/gameboard.py b/naja/gameboard.py index 367a9e1..2d138b2 100644 --- a/naja/gameboard.py +++ b/naja/gameboard.py @@ -2,7 +2,7 @@ from random import choice from naja.constants import( BITS, DIRECTION_BITS, CONDITION_BITS, PLAYER_DEFAULTS, - ACT, EXAMINE) + ACT, EXAMINE, ROTATION) from naja.player import Player from naja import actions @@ -117,7 +117,6 @@ class GameBoard(object): new_i = (new_i + change) % 5 shifted_locations[mkpos(new_i)] = self.board_locations[mkpos(i)] - print change, is_vertical, shifted_locations self.board_locations.update(shifted_locations) def shift_locations(self, direction): @@ -130,6 +129,35 @@ class GameBoard(object): elif BITS[direction] == BITS.WEST: self.shift_location_row(-1, is_vertical=False) + def rotate_locations(self, direction): + px, py = self.player.position + locations_to_rotate = [] + rotated_locations = {} + + if py > 0: + for i in range(max(0, px -1), min(5, px + 2)): + locations_to_rotate.append((i, py - 1)) + + if px > 0: + locations_to_rotate.append((px - 1, py)) + + if px < 4: + locations_to_rotate.append((px + 1, py)) + + if py < 4: + for i in range(max(0, px -1), min(5, px + 2)): + locations_to_rotate.append((i, py + 1)) + + if direction == ROTATION.CLOCKWISE: + new_positions = locations_to_rotate[1:] + locations_to_rotate[0] + elif direction == ROTATION.ANTICLOCKWISE: + new_positions = locations_to_rotate[-1] + locations_to_rotate[:-1] + + for old, new in zip(locations_to_rotate, new_positions): + rotated_locations[old] = self.board_locations[new] + + self.board_locations.update(rotated_locations) + def allow_chess_move(self, chesspiece): self.player.allow_chess_move(chesspiece) -- 2.34.1