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 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))