def test_defeating_your_own_largest_army_doesnt_give_more_vps(): # Arrange: Buy all dev cards players = [SimplePlayer(Color.RED), SimplePlayer(Color.BLUE)] state = State(players) player_deck_replenish(state, players[0].color, SHEEP, 26) player_deck_replenish(state, players[0].color, WHEAT, 26) player_deck_replenish(state, players[0].color, ORE, 26) for i in range(25): apply_action( state, Action(players[0].color, ActionType.BUY_DEVELOPMENT_CARD, None)) assert get_largest_army(state) == (None, None) assert get_actual_victory_points(state, Color.RED) == 5 # Act - Assert play_dev_card(state, Color.RED, KNIGHT) play_dev_card(state, Color.RED, KNIGHT) play_dev_card(state, Color.RED, KNIGHT) assert get_largest_army(state) == (Color.RED, 3) assert get_actual_victory_points(state, Color.RED) == 7 # Act - Assert play_dev_card(state, Color.RED, KNIGHT) assert get_largest_army(state) == (Color.RED, 4) assert get_actual_victory_points(state, Color.RED) == 7
def test_largest_army_calculation_on_tie(): red = SimplePlayer(Color.RED) blue = SimplePlayer(Color.BLUE) white = SimplePlayer(Color.WHITE) state = State([red, blue, white]) player_deck_replenish(state, red.color, KNIGHT, 3) player_deck_replenish(state, blue.color, KNIGHT, 4) play_dev_card(state, Color.RED, KNIGHT) play_dev_card(state, Color.RED, KNIGHT) play_dev_card(state, Color.RED, KNIGHT) play_dev_card(state, Color.BLUE, KNIGHT) play_dev_card(state, Color.BLUE, KNIGHT) play_dev_card(state, Color.BLUE, KNIGHT) color, count = get_largest_army(state) assert color is Color.RED and count == 3 play_dev_card(state, Color.BLUE, KNIGHT) color, count = get_largest_army(state) assert color is Color.BLUE and count == 4
def test_largest_army_calculation_when_no_one_has_three(): red = SimplePlayer(Color.RED) blue = SimplePlayer(Color.BLUE) white = SimplePlayer(Color.WHITE) state = State([red, blue, white]) player_deck_replenish(state, Color.RED, WHEAT, 2) player_deck_replenish(state, Color.RED, SHEEP, 2) player_deck_replenish(state, Color.RED, ORE, 2) player_deck_replenish(state, Color.BLUE, WHEAT, 1) player_deck_replenish(state, Color.BLUE, SHEEP, 1) player_deck_replenish(state, Color.BLUE, ORE, 1) buy_dev_card(state, Color.RED, KNIGHT) buy_dev_card(state, Color.RED, KNIGHT) buy_dev_card(state, Color.BLUE, KNIGHT) play_dev_card(state, Color.RED, KNIGHT) color, count = get_largest_army(state) assert color is None and count is None
def after(self, game: Game): winner = game.winning_color() if winner is None: return # throw away data for color in game.state.colors: cities = len( get_player_buildings(game.state, color, BuildingType.CITY)) settlements = len( get_player_buildings(game.state, color, BuildingType.SETTLEMENT)) longest = get_longest_road_color(game.state) == color largest = get_largest_army(game.state)[0] == color devvps = get_dev_cards_in_hand(game.state, color, VICTORY_POINT) self.cities[color] += cities self.settlements[color] += settlements self.longest[color] += longest self.largest[color] += largest self.devvps[color] += devvps self.num_games += 1
def test_play_many_games(): for _ in range(10): # play 10 games players = [ RandomPlayer(Color.RED), RandomPlayer(Color.BLUE), RandomPlayer(Color.WHITE), RandomPlayer(Color.ORANGE), ] game = Game(players) game.play() # Assert everything looks good for color in game.state.colors: cities = len( get_player_buildings(game.state, color, BuildingType.CITY)) settlements = len( get_player_buildings(game.state, color, BuildingType.SETTLEMENT)) longest = get_longest_road_color(game.state) == color largest = get_largest_army(game.state)[0] == color devvps = get_dev_cards_in_hand(game.state, color, VICTORY_POINT) assert (settlements + 2 * cities + 2 * longest + 2 * largest + devvps) == get_actual_victory_points(game.state, color)