Spaces:
Configuration error
Configuration error
File size: 7,477 Bytes
69373e6 c903325 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | from pycatan.core.game import Game
from pycatan.core.building import Building
from pycatan.core.card import ResCard
from pycatan.core.statuses import Statuses
from pycatan.core.harbor import HarborType
import random
class TestGame:
def test_game_uses_three_players_by_default(self):
game = Game()
assert len(game.players) == 3
def test_game_starts_with_variable_players(self):
game = Game(num_of_players=5)
assert len(game.players) == 5
def test_adding_starting_settlements(self):
# Create game
g = Game();
# Make sure creating a starting settlement does not use any cards
g.players[0].add_cards([
ResCard.Wood,
ResCard.Brick,
ResCard.Sheep,
ResCard.Wheat
])
# Test adding a starting settlement, i.e. no cards needed
res = g.add_settlement(0, g.board.points[0][0], True)
assert res == Statuses.ALL_GOOD
assert g.board.points[0][0].building != None
assert g.board.points[0][0].building.type == Building.BUILDING_SETTLEMENT
assert g.board.points[0][0].building.point is g.board.points[0][0]
assert len(g.players[0].cards) == 4
# Test adding a settlement too close to another settlement
res = g.add_settlement(1, g.board.points[0][1], True)
assert res == Statuses.ERR_BLOCKED
# Test adding a settlement the correct distance away
res = g.add_settlement(2, g.board.points[0][2], True)
assert res == Statuses.ALL_GOOD
def test_adding_starting_roads(self):
# Create game
g = Game()
# Add starting settlement
g.add_settlement(0, g.board.points[0][0], True)
# Try adding a road
res = g.add_road(0, g.board.points[0][0], g.board.points[0][1], True)
assert res == Statuses.ALL_GOOD
res = g.add_road(0, g.board.points[1][1], g.board.points[0][0], True)
assert res == Statuses.ALL_GOOD
# Try adding a disconnected road
res = g.add_road(0, g.board.points[2][0], g.board.points[2][1], True)
assert res == Statuses.ERR_ISOLATED
# Try adding a road whose point's are not connected
res = g.add_road(0, g.board.points[0][0], g.board.points[5][5], True)
assert res == Statuses.ERR_NOT_CON
# Try adding a road connected to another player's settlement
g.add_settlement(1, g.board.points[2][2], True)
res = g.add_road(0, g.board.points[2][2], g.board.points[2][3], True)
assert res == Statuses.ERR_ISOLATED
# Test that player.add_settlement returns the proper value
def test_add_settlement(self):
g = Game()
# Try to add a settlement without the cards
g.add_settlement(0, g.board.points[0][0])
# Add cards to build a settlement
g.players[0].add_cards([
ResCard.Wood,
ResCard.Brick,
ResCard.Sheep,
ResCard.Wheat
])
# Try adding an isolated settlement
res = g.add_settlement(0, g.board.points[0][0])
assert res == Statuses.ERR_ISOLATED
assert g.board.points[0][0].building == None
# Add starting settlement and two roads to ensure there is an available position
assert g.add_settlement(0, g.board.points[0][2], True) == Statuses.ALL_GOOD
assert g.add_road(0, g.board.points[0][2], g.board.points[0][1], True) == Statuses.ALL_GOOD
assert g.add_road(0, g.board.points[0][0], g.board.points[0][1], True) == Statuses.ALL_GOOD
res = g.add_settlement(0, g.board.points[0][0])
assert res == Statuses.ALL_GOOD
assert g.board.points[0][0].building != None
assert g.board.points[0][0].building.type == Building.BUILDING_SETTLEMENT
# Test trading in cards either directly through the bank
def test_trade_in_cards_through_bank(self):
g = Game()
# Add 4 wood cards to player 0
g.players[0].add_cards([ResCard.Wood] * 4)
# Try to trade in for 1 wheat
res = g.trade_to_bank(player=0, cards=[ResCard.Wood] * 4, request=ResCard.Wheat)
assert res == Statuses.ALL_GOOD
assert not g.players[0].has_cards([ResCard.Wood])
assert g.players[0].has_cards([ResCard.Wheat])
# Try to trade in cards the player doesn't have
res = g.trade_to_bank(player=0, cards=[ResCard.Brick] * 4, request=ResCard.Ore)
assert res == Statuses.ERR_CARDS
assert not g.players[0].has_cards([ResCard.Ore])
# Try to trade in with less than 4 cards, but more than 0
g.players[0].add_cards([ResCard.Brick] * 3)
res = g.trade_to_bank(player=0, cards=[ResCard.Brick] * 4, request=ResCard.Sheep)
assert res == Statuses.ERR_CARDS
assert g.players[0].has_cards([ResCard.Brick] * 3)
assert not g.players[0].has_cards([ResCard.Sheep])
def test_trade_in_cards_through_harbor(self):
g = Game();
# Add Settlement next to the harbor on the top
res = g.add_settlement(0, g.board.points[0][2], is_starting=True)
assert res == Statuses.ALL_GOOD
# Make the harbor trade in ore for testing
for h in g.board.harbors:
if g.board.points[0][2] in h.get_points():
h.type = HarborType.Ore
print("found harbor lmao")
g.players[0].add_cards([ResCard.Ore] * 2)
# Try to use harbor
res = g.trade_to_bank(player=0, cards=[ResCard.Ore] * 2, request=ResCard.Wheat)
assert res == Statuses.ALL_GOOD
assert g.players[0].has_cards([ResCard.Wheat])
assert not g.players[0].has_cards([ResCard.Ore])
# Try to trade in to a harbor that the player does not have access to
g.players[0].add_cards([ResCard.Brick] * 2)
res = g.trade_to_bank(player=0, cards=[ResCard.Brick] * 2, request=ResCard.Sheep)
assert res == Statuses.ERR_HARBOR
assert g.players[0].has_cards([ResCard.Brick] * 2)
assert not g.players[0].has_cards([ResCard.Sheep])
# Try to trade without the proper cards
assert not g.players[0].has_cards([ResCard.Ore])
res = g.trade_to_bank(player=0, cards=[ResCard.Ore] * 2, request=ResCard.Sheep)
assert res == Statuses.ERR_CARDS
assert not g.players[0].has_cards([ResCard.Sheep])
# Try to trade with more cards than the player has
g.players[0].add_cards([ResCard.Ore])
res = g.trade_to_bank(player=0, cards=[ResCard.Ore] * 2, request=ResCard.Sheep)
assert res == Statuses.ERR_CARDS
assert not g.players[0].has_cards([ResCard.Sheep])
assert g.players[0].has_cards([ResCard.Ore])
def test_moving_robber(self):
random.seed(1)
g = Game()
# Move the robber
g.move_robber(g.board.tiles[0][0], None, None)
assert g.board.robber is g.board.tiles[0][0]
# Build a settlement at 1, 1
g.add_settlement(player=0, point=g.board.points[1][1], is_starting=True)
# Roll an 8
g.add_yield_for_roll(8)
# Ensure the player got nothing since the robber was there
assert len(g.players[0].cards) == 0
# Give the player a brick to steal
g.players[0].add_cards([ResCard.Brick])
# Move the robber to 1, 0 and steal the brick
g.move_robber(g.board.tiles[1][0], 1, 0)
# Make sure they stole the brick
assert g.players[1].has_cards([ResCard.Brick])
|