Choose locations for the board.
[naja.git] / naja / gameboard.py
index 5728d5d0f28535abfeadcbb5ab3f98c3a24b74b7..de0bc1e3f31c5b4b196d41a9345747a065900595 100644 (file)
@@ -16,7 +16,7 @@ class GameBoard(object):
         self.wins_required = state['wins_required']
         self.health = state['health']
         self.wins = state['wins']
-        self.locations = self.import_locations(state['locations'])
+        self.locations = [item.copy() for item in state['locations']]
         self.player = player
         self.board_locations = board_locations
 
@@ -34,7 +34,8 @@ class GameBoard(object):
             'locations': locations_definition,
         }
         player = Player(initial_bits, initial_pos)
-        board_locations = cls.generate_board(locations_definition)
+        board_locations = cls.import_board_locations(
+            cls.generate_board(locations_definition))
         return cls(state, player, board_locations)
 
     @classmethod
@@ -51,14 +52,11 @@ class GameBoard(object):
             'health': self.health,
             'wins_required': self.wins_required,
             'wins': self.wins,
-            'locations': self.export_locations(),
+            'locations': [item.copy() for item in self.locations],
             'player': self.player.export(),
             'board_locations': self.export_board_locations(),
         }
 
-    def export_locations(self):
-        return [location.export() for location in self.locations]
-
     @classmethod
     def import_locations(cls, locations_definition):
         return [
@@ -68,7 +66,7 @@ class GameBoard(object):
     def export_board_locations(self):
         return dict(
             (position, location.export())
-            for position, location in self.board_locations)
+            for position, location in self.board_locations.iteritems())
 
     @classmethod
     def import_board_locations(cls, board_locations_definition):
@@ -78,8 +76,13 @@ class GameBoard(object):
 
     @classmethod
     def generate_board(cls, locations_definition):
-        # TODO: Choose some locations.
-        return {}
+        board_locations = {}
+        for x in range(5):
+            for y in range(5):
+                board_location = LocationCard.new_location(
+                    choice(locations_definition).copy())
+                board_locations[(x, y)] = board_location.export()
+        return board_locations
 
     def lose_health(self):
         self.health -= 1
@@ -97,7 +100,6 @@ class LocationCard(object):
 
     @classmethod
     def import_location(cls, state):
-        # TODO: Import real locations.
         location_actions = [
             cls.build_action(definition) for definition in state['actions']]
         return cls(state['bitwise_operand'], location_actions)