def testComputeBuildValue(self): b = Board() gc = gamecontroller.GameController(b) gc.turnIndex = 2 p0, p1, p2, p3 = gc.players ai0, ai1, ai2, ai3 = [gc.ais[i] for i in range(4)] column = BuildingColumn(Resources.Red, [ BuildingCard(5, Resources.Red, Resources.Glass), BuildingCard(2, Resources.Red, Resources.Bank), BuildingCard(3, Resources.Red, Resources.Red), BuildingCard(3, Resources.Red, Resources.Red), ]) b.buildingColumn[Resources.Red] = column column.setRoof(RoofCard(4, 4)) b.buildingColumn[Resources.Green].setRoof(FinalRoofCard(10)) p0.amount = 100 p0.addCard(ShareCard(Resources.Red, 2)) p0.addCard(WorkforceCard(0, 1)) b.advanceShareScore(Resources.Red, 17) valueBefore = b.getShareValueForScore(maxShareScore[2][17]) valueAfter = b.getShareValueForScore(maxShareScore[2][21]) expected = 2 * (valueAfter - valueBefore) + 3 * valueAfter + 4 * 3 - 20 self.assertEqual(expected, ai0.computeBuildValue(gc, Resources.Red)) self.assertEqual(-1000, ai0.computeBuildValue(gc, Resources.Green)) p0.amount = 10 self.assertEqual(-1000, ai0.computeBuildValue(gc, Resources.Red))
def testComputeSellShareValue(self): b = Board() gc = gamecontroller.GameController(b) ai0, ai1, ai2, ai3 = [gc.ais[i] for i in range(4)] b.advanceShareScore(Resources.Red, 17) currentValue = b.getShareValueForScore(17) finalValue = b.getShareValueForScore(finalShareScore[0][17]) self.assertEqual((currentValue - finalValue) * 4, ai0.computeSellShareValue(gc, ShareCard(Resources.Red, 4)))
def testActionSellShare(self): b = Board() gc = GameController(b) # Doctor the board b.advanceShareScore(Resources.Green, 16) # Share value = 9$ confidenceMarkerBefore = b.confidenceMarker p0, p1, p2, p3 = gc.players p0.amount = 0 p0.addCard(ShareCard(Resources.Green, 3)) p0.addCard(ActionCard()) gc.actionSellShare(p0, ShareCard(Resources.Green, 3)) # 3 * 9$ self.assertEqual(27, p0.amount) self.assertNotIn(ShareCard(Resources.Green, 3), p0.cards) self.assertEqual(confidenceMarkerBefore - _confidenceLossPerSale, b.confidenceMarker) with self.assertRaises(RuntimeError): gc.actionSellShare(p0, ShareCard(Resources.Green, 3)) with self.assertRaises(RuntimeError): gc.actionSellShare(p0, ActionCard())
def testFinalizeGame(self): b = Board() gc = GameController(b) p0, p1, p2, p3 = gc.players # Doctor the board. b.advanceShareScore(Resources.Red, 20) # ==> 11$ self.assertEqual(11, b.getShareValue(Resources.Red)) b.advanceShareScore(Resources.Green, 28) # ==> 18$ self.assertEqual(18, b.getShareValue(Resources.Green)) b.advanceShareScore(Resources.Blue, 35) # ==> 20$ self.assertEqual(20, b.getShareValue(Resources.Blue)) p0.amount = 10 p0.addCard(EquipmentCard(0, 1, 2)) # + 2$ p0.addCard(LoanCard(5, 1, -3)) # - 3$ p0.addCard(ShareCard(Resources.Red, 3)) # + 3 * 11$ p0.addCard(WorkforceCard(1, 3, 0)) p0.addCard(LoanCard(4, 1, -4)) # - 4$ p0.addCard(ShareCard(Resources.Green, 2)) # + 2 * 18$ p0.addCard(EmergencyLoanCard(1, -10)) # - 10$ p0.addCard(FactoryCard(Resources.Glass, 0, 1, 0)) p0.addCard(ShareCard(Resources.Blue, 3)) # + 3 * 20$ # p1 has BonusEquipmentCard and BonusFactoryCard p1.amount = 1 p1.setLevelCard(LevelCard(3)) p1.addCard(EquipmentCard(1, 2, 5)) # + 5$ p1.addCard(FactoryCard(Resources.Iron, 1, 3, 0)) p1.addCard(LoanCard(6, 2, -6)) # - 6$ p1.addCard(MoneyForLevelCard(3, 5, 1, 0)) p1.addCard(MoneyForLevelCard(4, 10, 1, 0)) # p3 has BonusEquipmentCard and BonusFactoryCard p3.amount = 0 p3.setLevelCard(LevelCard(3)) p3.addCard(EquipmentCard(1, 2, 5)) # + 5$ p3.addCard(FactoryCard(Resources.Iron, 1, 3, 0)) p3.addCard(LoanCard(6, 2, -6)) # - 6$ p3.addCard(MoneyForLevelCard(3, 5, 1, 0)) p3.addCard(MoneyForLevelCard(4, 10, 1, 0)) gc.finalizeGame() self.assertEqual(10 + 2 - 3 + 3*11 - 4 + 2*18 - 10 + 3*20, p0.amount) self.assertEqual(0, p1.amount) self.assertEqual(0, p3.amount)