started implementing rotation
[naja.git] / naja / gameboard.py
index 367a9e15118b4cbd6b9fe3248a691c141f66831d..2d138b2dbe74fceb3bf313fca5eaf05755b2f22b 100644 (file)
@@ -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)