def testActionGetCard(self): b = Board() gc = GameController(b) confidenceMarkerBefore = b.confidenceMarker # Doctor the board a little. for player in gc.players: player.amount = 0 b.cardStack = [ FactoryCard(Resources.Glass, 0, 1, 1), WorkforceCard(0, 1, 3), PlusLevelCard(1, 2, 0), LoanGoodsCard(Resources.Iron, 3, 0, -4), MoneyForLevelCard(3, 3, 0, 0), WorkforceCard(0, 1, 0), ActionCard(), UpgradeCard(2), LoanCard(10, 1, -5), LoanCard(8, 1, -3), LoanGoodsCard(Resources.Brick, 4, 0, -4)] b.prepareTurn() p0, p1, p2, p3 = gc.players gc.actionGetCard(p0, 2) # Advances p0 on blue firm track. self.assertIn(PlusLevelCard(1, 2, 0), p0.cards) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Red)) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Green)) self.assertEqual([0], b.playerOrderOnFirmTrack(Resources.Blue)) self.assertEqual({0: 1}, b.positionsOnFirmTrack(Resources.Blue)) self.assertEqual(1, p0.getLevel()) self.assertEqual(confidenceMarkerBefore, b.confidenceMarker) gc.actionGetCard(p1, 2) # Does not advance on any track. self.assertIn(LoanGoodsCard(Resources.Iron, 3, 0, -4), p1.cards) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Red)) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Green)) self.assertEqual([0], b.playerOrderOnFirmTrack(Resources.Blue)) self.assertEqual({0: 1}, b.positionsOnFirmTrack(Resources.Blue)) self.assertEqual(confidenceMarkerBefore - 1, b.confidenceMarker) gc.actionGetCard(p2, 0) # Advances p2 on red firm track. self.assertIn(FactoryCard(Resources.Glass, 0, 1, 1), p2.cards) self.assertEqual([2], b.playerOrderOnFirmTrack(Resources.Red)) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Green)) self.assertEqual([0], b.playerOrderOnFirmTrack(Resources.Blue)) self.assertEqual({0: 1}, b.positionsOnFirmTrack(Resources.Blue)) self.assertEqual({2: 1}, b.positionsOnFirmTrack(Resources.Red)) self.assertEqual(confidenceMarkerBefore - 1, b.confidenceMarker) gc.actionGetCard(p3, 5) # Does not advance on any track. self.assertIn(LoanCard(10, 1, -5), p3.cards) self.assertEqual([2], b.playerOrderOnFirmTrack(Resources.Red)) self.assertEqual([], b.playerOrderOnFirmTrack(Resources.Green)) self.assertEqual([0], b.playerOrderOnFirmTrack(Resources.Blue)) self.assertEqual({0: 1}, b.positionsOnFirmTrack(Resources.Blue)) self.assertEqual({2: 1}, b.positionsOnFirmTrack(Resources.Red)) self.assertEqual(confidenceMarkerBefore - 2, b.confidenceMarker)
def testComputeGetCardValue(self): b = Board() gc = gamecontroller.GameController(b) p0, p1, p2, p3 = gc.players p0.amount = 0 ai0, ai1, ai2, ai3 = [gc.ais[i] for i in range(4)] b.cardStack = [ FactoryCard(Resources.Glass, 0, 1), WorkforceCard(0, 1), PlusLevelCard(1, 1), GoodsCard(Resources.Iron, 5, 0), MoneyForLevelCard(3, 3, 0), WorkforceCard(0, 1), ActionCard(), UpgradeCard(2), LoanCard(10, 1), LoanCard(8, 1), GoodsCard(Resources.Brick, 4, 0)] b.prepareTurn() b.revenues[Resources.Red] = 2 b.revenues[Resources.Green] = 4 b.revenues[Resources.Blue] = 8 column = BuildingColumn(Resources.Red, [ BuildingCard(5, Resources.Red, Resources.Glass), BuildingCard(3, Resources.Red, Resources.Red), ]) b.buildingColumn[Resources.Red] = column column.setRoof(RoofCard(2, 1)) b.buildingColumn[Resources.Green].setRoof(FinalRoofCard(5)) b.buildingColumn[Resources.Blue].setRoof(FinalRoofCard(5)) # Estimated confidence marker: confidenceMarker = [predictedConfidenceMarker[0][i][b.confidenceMarker] for i in range(6)] interests = sum([b.getInterestsForMarker(marker) for marker in confidenceMarker]) totalLevel = sum(range(6)) # First card gets 1 to advance on red. self.assertEqual(1 + totalLevel * 0.7 - interests, ai0.computeGetCardValue(gc, 0)) # Second card gets 2 to advance on green. self.assertEqual(2 + totalLevel - interests, ai0.computeGetCardValue(gc, 1)) # Second card gets 4 to advance on blue. self.assertEqual(4 + 2 * 6 - interests, ai0.computeGetCardValue(gc, 2)) self.assertEqual(5, ai0.computeGetCardValue(gc, 3)) self.assertEqual(9, ai0.computeGetCardValue(gc, 4)) self.assertEqual(totalLevel - interests, ai0.computeGetCardValue(gc, 5)) self.assertEqual(0, ai0.computeGetCardValue(gc, 6)) self.assertEqual(-2 * interests, ai0.computeGetCardValue(gc, 7)) buildingValue = 3 * b.getShareValueForScore(maxShareScore[0][1]) - 10 mult = ai0.loanMultiplier self.assertEqual(buildingValue * mult - interests, ai0.computeGetCardValue(gc, 8)) self.assertEqual(round(buildingValue * mult * mult - interests, 3), round(ai0.computeGetCardValue(gc, 9), 3)) self.assertEqual(4, ai0.computeGetCardValue(gc, 10))