コード例 #1
0
class StupidBotStrategyTest(unittest.TestCase):

    def setUp(self):
        self.redPlayer = Player(PlayerColor.Red, StupidBot())
        self.bluePlayer = Player(PlayerColor.Blue, StupidBot())
        self.board = Board()
        
    def testPlacePersonsWithoutResources(self):
        nPersonsBefore = self.board.person(self.redPlayer)
        self.redPlayer.placePersons(self.board)
        self.assertGreater(self.board.person(self.redPlayer), nPersonsBefore)

      
    def testPlacingOrderWhenTwoHutsAffordable(self):
        self.board = Board([SimpleHut(Resource.wood, Resource.wood, Resource.clay), SimpleHut(Resource.wood, Resource.stone, Resource.gold), SimpleHut(Resource.wood, Resource.wood, Resource.gold), SimpleHut(Resource.wood, Resource.clay, Resource.stone)])
        self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.clay, Resource.wood, Resource.clay, Resource.stone])
        
        self.redPlayer.placePersons(self.board)
        self.assertEqual(1, self.board.person(self.redPlayer))
        self.assertTrue(self.board.farmOccupied())

        self.redPlayer.placePersons(self.board)
        self.assertEqual(3, self.board.person(self.redPlayer))
        self.assertTrue(self.board.breedingHutOccupied())
        
        # occupying the toolsmith with blue player         
        self.assertFalse(self.board.toolSmithOccupied())
        self.board.placeOnToolSmith(self.bluePlayer)
        self.assertEqual(1, self.board.person(self.bluePlayer))
        self.assertTrue(self.board.toolSmithOccupied())

        self.redPlayer.placePersons(self.board)
        self.assertEqual(4, self.board.person(self.redPlayer))
        self.assertEqual(1, self.board.personsOnHuts(self.redPlayer))
        
        self.redPlayer.placePersons(self.board)
        self.assertEqual(5, self.board.person(self.redPlayer))
        self.assertEqual(2, self.board.personsOnHuts(self.redPlayer))
        
    def testPlacingOfNoSimpleHutPersons(self):
        self.board = Board([SimpleHut(Resource.wood, Resource.wood, Resource.clay), SimpleHut(Resource.wood, Resource.wood, Resource.stone), SimpleHut(Resource.wood, Resource.wood, Resource.gold), SimpleHut(Resource.wood, Resource.clay, Resource.stone)])
        self.redPlayer.addResources([Resource.wood, Resource.wood])
        
        self.redPlayer.placePersons(self.board)
        self.assertEqual(1, self.board.person(self.redPlayer))
        self.assertTrue(self.board.farmOccupied())

        self.redPlayer.placePersons(self.board)
        self.assertEqual(3, self.board.person(self.redPlayer))
        self.assertTrue(self.board.breedingHutOccupied())
        
        self.redPlayer.placePersons(self.board)
        self.assertEqual(4, self.board.person(self.redPlayer))
        self.assertTrue(self.board.toolSmithOccupied())

        self.redPlayer.placePersons(self.board)
        self.assertEqual(5, self.board.person(self.redPlayer))

    def testFeeding(self):
        self.assertEqual(0, self.redPlayer.foodMissing())
        self.redPlayer.feed()
        self.assertEqual(0, self.redPlayer.foodMissing())
        self.redPlayer.feed()
        self.assertEqual(3, self.redPlayer.foodMissing())
    
    def testFeedingWithFoodStack(self):
        self.redPlayer.feed()
        self.redPlayer.feed()
        self.assertEqual(3, self.redPlayer.foodMissing())
        self.redPlayer.addResources([Resource.foodtrack,Resource.foodtrack])
        self.assertEqual(1, self.redPlayer.foodMissing())
    
    def testIsPayableBug(self):
        self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.wood, Resource.wood, Resource.wood, Resource.clay, Resource.clay, Resource.stone, Resource.gold,])
        firstHut = CountHut(4, 2)

        self.redPlayer.strategy.updatePlannedCosts(firstHut, self.redPlayer.resources)
        
        self.assertDictEqual({firstHut : [Resource.wood,Resource.clay,Resource.wood,Resource.wood]}, self.redPlayer.strategy.plannedCosts)
        
        secondHut = CountHut(4, 3)
        self.assertTrue(self.redPlayer.isPayable(secondHut))
        self.redPlayer.strategy.updatePlannedCosts(secondHut, self.redPlayer.resources)

        self.assertDictEqual({firstHut : [Resource.wood,Resource.clay,Resource.wood,Resource.wood], secondHut : [Resource.wood,Resource.clay,Resource.stone,Resource.wood]}, self.redPlayer.strategy.plannedCosts)
        
        thirdHut = SimpleHut(Resource.wood, Resource.stone, Resource.gold)
        self.assertTrue(self.redPlayer.isPayable(thirdHut))
        
        fourthHut = CountHut(5, 2)
        self.assertTrue(self.redPlayer.isPayable(fourthHut))
        
    def testBuyingHutsChangesScore(self):
        self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.clay, Resource.wood, Resource.clay, Resource.stone])
        hut1 = SimpleHut(Resource.wood, Resource.wood, Resource.clay)
        hut2 = SimpleHut(Resource.wood, Resource.clay, Resource.stone)
        self.redPlayer.strategy.plannedCosts = {hut1 : [Resource.wood,Resource.wood,Resource.clay], 
                                             hut2 : [Resource.wood,Resource.clay,Resource.stone]}
        
        self.assertEqual(0, self.redPlayer.point)
        self.redPlayer.buyHuts([hut1, hut2])
        self.assertEqual(22, self.redPlayer.point)
        
    def testFoodTrack(self):
        self.assertEqual(0, self.redPlayer.getFoodTrack())
        self.redPlayer.addResources([Resource.foodtrack])
        self.assertEqual(1, self.redPlayer.getFoodTrack())
        
        self.redPlayer.addResources([Resource.wood,Resource.wood,Resource.foodtrack])
        self.assertEqual(2, self.redPlayer.getFoodTrack())
        self.assertEqual([Resource.wood,Resource.wood], self.redPlayer.getNonFood())
        
        self.redPlayer.addResources([Resource.clay,Resource.foodtrack,Resource.foodtrack,Resource.wood])
        self.assertEqual(4, self.redPlayer.getFoodTrack())
        self.assertListEqual(sorted([Resource.wood,Resource.wood,Resource.clay,Resource.wood]), self.redPlayer.getNonFood())
        
    def testFoodTrackMaximum(self):
        self.assertEqual(0, self.redPlayer.getFoodTrack())
        self.redPlayer.addResources(10 * [Resource.foodtrack])
        self.assertEqual(10, self.redPlayer.getFoodTrack())

        self.redPlayer.addResources([Resource.foodtrack])
        self.assertEqual(10, self.redPlayer.getFoodTrack())

    def testBreeding(self):
        self.assertEqual(5, self.redPlayer.getPersonCount())
        self.redPlayer.addResources([9])
        self.assertEqual(6, self.redPlayer.getPersonCount())

    def testBreedingMaximum(self):
        self.assertEqual(5, self.redPlayer.getPersonCount())
        self.redPlayer.person = 10

        self.redPlayer.addResources([Resource.foodtrack])
        self.assertEqual(10, self.redPlayer.getPersonCount())

    def testPlaceOnBreedingHut(self):
        self.assertEqual(5, self.redPlayer.personsLeft(self.board))
        self.board.placeOnBreedingHut(self.redPlayer)
        self.assertEqual(3, self.redPlayer.personsLeft(self.board)) 

    def testTools(self):
        self.assertEqual([0, 0, 0], self.redPlayer.getTools())
        self.redPlayer.addResources([Resource.tool])
        self.assertEqual([1, 0, 0], self.redPlayer.getTools())

    def testToolsToUseWith_100(self):
        self.redPlayer.toolbox.upgrade()
        resource = Resource.wood
        eyes = 5
        self.assertEqual(1, self.redPlayer.toolsToUse(resource, eyes))

        resource = Resource.wood
        eyes = 4
        self.assertEqual(0, self.redPlayer.toolsToUse(resource, eyes))

    def testToolsToUseWith_110(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        
        resource = Resource.wood
        eyes = 4
        self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes))
        
    def testToolsToUseWith_111(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
                
        resource = Resource.wood
        eyes = 4
        self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes))


    def testToolsToUseWith_221_rv4(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
                
        resource = Resource.clay
        eyes = 1
        self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes))

    def testToolsToUseWith_221(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
                
        resource = Resource.wood
        eyes = 5
        self.assertEqual(4, self.redPlayer.toolsToUse(resource, eyes))

    def testToolsToUseWith_222(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        
        resource = Resource.gold
        eyes = 3
        self.assertEqual(4, self.redPlayer.toolsToUse(resource, eyes))

    def testToolsToUseWith_444(self):
        for index in range(1,13):
            self.redPlayer.toolbox.upgrade()
        
        resource = Resource.wood
        eyes = 4
        self.assertEqual(12, self.redPlayer.toolsToUse(resource, eyes))

    def testToolsToUseWith_322(self):
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
        self.redPlayer.toolbox.upgrade()
                
        resource = Resource.gold
        eyes = 3
        self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes))
        
    def testToolsToUseWith_000_OneTimeTool_2(self):
        self.redPlayer.addOneTimeTool(2)
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 1)
        
        resource = Resource.wood
        eyes = 4
        self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes))
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 0)

    def testToolsToUseWith_000_OneTimeTool_3_notUsed(self):
        self.redPlayer.addOneTimeTool(3)
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 1)
        
        resource = Resource.wood
        eyes = 4
        self.assertEqual(0, self.redPlayer.toolsToUse(resource, eyes))
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 1)

    def testToolsToUseWith_000_OneTimeTool_3_Used(self):
        self.redPlayer.addOneTimeTool(3)
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 1)
        
        resource = Resource.clay
        eyes = 5
        self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes))
        self.assertTrue(len(self.redPlayer.oneTimeTools) == 0)

    def testReapingOrder(self):
        self.assertEqual("g", self.redPlayer.chooseReapingResource("fsg"))
        self.assertEqual("s", self.redPlayer.chooseReapingResource("fs"))
        self.assertEqual("s", self.redPlayer.chooseReapingResource("fwcs"))
        self.assertEqual("c", self.redPlayer.chooseReapingResource("fwc"))
        
    def testChooseChristmas(self):
        self.assertEqual(0, self.redPlayer.getFoodTrack())
        self.assertListEqual([Resource.wood, Resource.clay, Resource.tool],
                             self.redPlayer.chooseChristmas([Resource.wood, Resource.clay, Resource.tool, Resource.foodtrack]))
        self.assertEqual(1, self.redPlayer.getFoodTrack())
        
        self.assertEqual([0,0,0], self.redPlayer.getTools())
        self.assertListEqual([Resource.wood, Resource.clay],
                             self.redPlayer.chooseChristmas([Resource.wood, Resource.clay, Resource.tool]))
        self.assertEqual([1,0,0], self.redPlayer.getTools())
        
        self.assertEqual([], self.redPlayer.getNonFood())
        self.assertListEqual([Resource.wood], self.redPlayer.chooseChristmas([Resource.wood, Resource.clay]))
        self.assertEqual([Resource.clay], self.redPlayer.getNonFood())
        
    def testBuyingCard(self):
        someSimpleHut = SimpleHut(Resource.wood, Resource.wood, Resource.clay)
        self.board = Board([someSimpleHut, someSimpleHut, someSimpleHut, someSimpleHut])
        self.redPlayer.addResources([Resource.wood, Resource.wood])
        self.assertEqual(0, len(self.redPlayer.cards))
        
        # occupying the village with blue player
        self.board.placeOnFarm(self.bluePlayer)
        self.assertEqual(1, self.board.person(self.bluePlayer))
        self.assertTrue(self.board.farmOccupied())
         
        self.board.placeOnToolSmith(self.bluePlayer)
        self.assertEqual(2, self.board.person(self.bluePlayer))
        self.assertTrue(self.board.toolSmithOccupied())
        
        self.board.placeOnBreedingHut(self.bluePlayer)
        self.assertEqual(4, self.board.person(self.bluePlayer))
        self.assertTrue(self.board.breedingHutOccupied())
        
        self.redPlayer.placePersons(self.board)
        
        redPlayerOccupiedCards = self.board.reapResources([self.redPlayer])[1]
        self.assertEqual(1, len(redPlayerOccupiedCards))
        boughtCards = self.redPlayer.buyCards(redPlayerOccupiedCards, [self.redPlayer], self.board.cardPile)
        
        self.assertEqual(1, len(boughtCards))        
        self.assertEqual(1, len(self.redPlayer.cards))
コード例 #2
0
class BoardTest(unittest.TestCase):

    def setUp(self):
        self.board = Board()
        self.redPlayer = Player(PlayerColor.Red, StupidBot())
        self.bluePlayer = Player(PlayerColor.Blue, StupidBot())
        self.players = [self.redPlayer, self.bluePlayer]

    def testBoardInitialization(self):
        self.assertListEqual([7,7,7,7], self.board.numberOfHutsLeft())
        self.assertEqual(36, self.board.numberOfCardsLeft())

    def testAvailableHuts(self):
        ahs = self.board.availableHuts()
        self.assertEqual(4, len(ahs))
        self.assertIsInstance(ahs[0], Hut)
    
    def testPlaceOnHut(self):
        ahs = self.board.availableHuts()
        targetHut = ahs[0]
        self.board.placeOnHutIndex(0, self.redPlayer)
        ahs = self.board.availableHuts()
        self.assertEqual(3, len(ahs), "should only be 3 huts left")
        self.assertNotIn(targetHut, ahs, "hut should not be available")

    def testPersonCountAfterPlacingOnHut(self):
        self.assertEqual(0, self.board.person(self.redPlayer))
        self.assertEqual(0, self.board.personsOnHuts(self.redPlayer))
        self.board.placeOnHutIndex(0, self.redPlayer)
        self.assertEqual(1, self.board.person(self.redPlayer))
        self.assertEqual(1, self.board.personsOnHuts(self.redPlayer))

        self.assertEqual(0, self.board.person(self.bluePlayer))
        self.assertEqual(0, self.board.personsOnHuts(self.bluePlayer))        
        self.board.placeOnHutIndex(1, self.bluePlayer)
        self.assertEqual(1, self.board.person(self.bluePlayer))
        self.assertEqual(1, self.board.personsOnHuts(self.bluePlayer))  
        
    def testPlacePersonsWithoutResources(self):
        self.assertEqual(0, self.board.person(self.redPlayer))
        self.board.addHunters(2, self.redPlayer)
        self.board.addLumberjacks(2, self.redPlayer)

        self.assertEqual(4, self.board.person(self.redPlayer))

        self.board.addClayDiggers(1, self.redPlayer)
        
        self.assertEqual(5, self.board.person(self.redPlayer))
       
    def testIllegalPlacement(self):
        self.board.addStoneDiggers(2, self.redPlayer)
        
        self.assertEqual(2, self.board.person(self.redPlayer))
        from Board import PlacementError
        with self.assertRaises(PlacementError):
            self.board.addStoneDiggers(1, self.redPlayer)
        
        self.assertEqual(2, self.board.person(self.redPlayer))
        
    def testIsFinished(self):
        self.board = Board([SimpleHut(Resource.wood,Resource.wood,Resource.clay), 
                            SimpleHut(Resource.wood,Resource.wood,Resource.clay), 
                            SimpleHut(Resource.wood,Resource.wood,Resource.clay), 
                            SimpleHut(Resource.wood,Resource.wood,Resource.clay)])
        self.assertFalse(self.board.isFinished())
        self.board = Board([SimpleHut(Resource.wood,Resource.wood,Resource.clay), 
                            SimpleHut(Resource.wood,Resource.wood,Resource.clay), 
                            SimpleHut(Resource.wood,Resource.wood,Resource.clay)])
        self.assertTrue(self.board.isFinished())
        
    def testReapResources(self):
        hutForRed = SimpleHut(Resource.wood, Resource.wood, Resource.clay)
        hutForBlue = SimpleHut(Resource.wood, Resource.clay, Resource.clay)
        self.board = Board([hutForRed, hutForBlue, SimpleHut(Resource.wood,Resource.clay,Resource.stone), SimpleHut(Resource.clay,Resource.stone,Resource.gold)])
        self.board.placeOnHut(hutForRed, self.redPlayer)
        self.board.placeOnHut(hutForBlue, self.bluePlayer)
        
        huts, cards = self.board.reapResources(self.players)
        self.assertEqual(1, len(huts))
        self.assertEqual([hutForRed], huts)
        self.players.reverse()
        
        huts, cards = self.board.reapResources(self.players)
        self.assertEqual([hutForBlue], huts)
        
    def testBuyingFirstCard(self):
        firstCards = self.board.cardPile[:4]
        nextCards = self.board.cardPile[4:8]
        self.assertListEqual(firstCards, self.board.openCards())
        # buy the cheapest card
        self.board.removeCards([firstCards[0]])
        self.assertListEqual(firstCards[1:] + nextCards[:1], self.board.openCards())

    def testBuyingFirstAndThirdCard(self):
        firstCards = self.board.cardPile[:4]
        nextCards = self.board.cardPile[4:8]
        # buy the cheapest card
        self.board.removeCards([firstCards[0], firstCards[2]])
        self.assertListEqual([firstCards[1], firstCards[3]] + nextCards[:2], self.board.openCards())
        

    def testReapResourcesWithFarm(self):
        self.board.placeOnFarm(self.redPlayer)
        self.board.addClayDiggers(4, self.redPlayer)
        huts = self.board.reapResources(self.players)
        self.assertEqual(1, self.redPlayer.getFoodTrack())