Ejemplo n.º 1
0
  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)
Ejemplo n.º 2
0
  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))