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,)
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
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):
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)