Player.select_territory returns territory name rather than instance.
[pyrisk.git] / risk / base.py
index 9fdda2630e28ed9670a4eff1cf7999051ea10f31..6f62c78aa471ffa14233fb2d5ba2b69a03bb3bcf 100644 (file)
@@ -422,7 +422,7 @@ class Player (NameMixin, ID_CmpMixin):
         """Return the selected territory
         """
         free_territories = [t for t in world.territories() if t.player == None]
-        return random.sample(free_territories, 1)[0]
+        return random.sample(free_territories, 1)[0].name
     def play_cards(self, world, log, play_required=True):
         """Decide whether or not to turn in a set of cards.
 
@@ -492,7 +492,7 @@ class Engine (ID_CmpMixin):
         for p in self.players:
             p.alive = True
         random.shuffle(self.players)
-        deck.shuffle()
+        self.deck.shuffle()
         self.select_territories()
         self.place_initial_armies()
         for p in self.players:
@@ -527,14 +527,14 @@ class Engine (ID_CmpMixin):
                              for p in self.players]))
         self.play_cards_and_place_armies(player)
         captures = self.attack_and_fortify(player)
-        if captures > 0 and len(self.deck) > 0 and len(self.living_players()) > 1:
-            self.deal(player, 1)
+        self.end_of_turn_cards(player, captures)
     def select_territories(self):
         for t in self.world.territories():
             t.player = None
         for i in range(len(list(self.world.territories()))):
             p = self.players[i % len(self.players)]
-            t = p.select_territory(self.world, self.log)
+            t_name = p.select_territory(self.world, self.log)
+            t = self.world.territory_by_name(t_name)
             if t.player != None:
                 raise PlayerError('Cannot select %s owned by %s'
                                   % (t, t.player))
@@ -688,6 +688,11 @@ class Engine (ID_CmpMixin):
         if len(self.living_players()) > 1:
             player.report(self.world, self.log)
             # else the game is over, and killed will hear about this then.
+    def end_of_turn_cards(self, player, captures):
+        """Deal end-of-turn reward for any territory captures.
+        """
+        if captures > 0 and len(self.deck) > 0 and len(self.living_players()) > 1:
+            self.deal(player, 1)
     def living_players(self):
         return [p for p in self.players if p.alive == True]