Skip to content

Commit

Permalink
changed addResources and removeResources
Browse files Browse the repository at this point in the history
  • Loading branch information
andsam0 committed Feb 16, 2024
1 parent 4f83f10 commit 427da3f
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 56 deletions.
38 changes: 15 additions & 23 deletions src/main/java/it/unibo/model/GameManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,7 @@ public void buildSettlement(final PropertyPosition position, final Player player
propertyManager.addSettlement(position, player);
player.incrementVictoryPoints(1);
if (turnManager.getCycle() > 2) {
Recipes.getSettlementResources().forEach((resource, amount) -> {
resourceManager.removeResources(player, resource, amount);
resourceManager.addResources(resourceManager.getBank(), resource, amount);
});
resourceManager.removeResources(player, Recipes.getSettlementResources());
}
}

Expand All @@ -133,21 +130,17 @@ public void buildCity(final PropertyPosition position, final Player player) {
propertyManager.upgradeToCity(position);
player.incrementVictoryPoints(1);
if (turnManager.getCycle() > 2) {
Recipes.getCityResources().forEach((resource, amount) -> {
resourceManager.removeResources(player, resource, amount);
resourceManager.addResources(resourceManager.getBank(), resource, amount);
});
resourceManager.removeResources(player, Recipes.getCityResources());
resourceManager.addResources(resourceManager.getBank(), Recipes.getCityResources());
}
}

@Override
public void buildRoad(final RoadPosition position, final Player player) {
roadManager.buildRoad(position, player);
if (turnManager.getCycle() > 2) {
Recipes.getRoadResources().forEach((resource, amount) -> {
resourceManager.removeResources(player, resource, amount);
resourceManager.addResources(resourceManager.getBank(), resource, amount);
});
resourceManager.removeResources(player, Recipes.getRoadResources());
resourceManager.addResources(resourceManager.getBank(), Recipes.getRoadResources());
}
}

Expand All @@ -156,28 +149,27 @@ public CardType buyCard(final Player player) {
if (!canBuyCard(player)) {
throw new IllegalArgumentException("Player " + player + " can't buy a card during the first turn cycles");
}
Recipes.getCardResources()
.forEach((resource, amount) -> resourceManager.removeResources(player, resource, amount));
resourceManager.removeResources(player, Recipes.getCardResources());
final CardType card = developmentCards.getCard();
switch (card) {
case VICTORY_POINT:
player.incrementVictoryPoints(1);
break;
case FREE_SETTLEMENT:
Recipes.getSettlementResources()
.forEach((resource, amount) -> resourceManager.addResources(player, resource, amount));
resourceManager.addResources(player, Recipes.getSettlementResources());
break;
case FREE_ROAD:
Recipes.getRoadResources()
.forEach((resource, amount) -> resourceManager.addResources(player, resource, amount));
resourceManager.addResources(player, Recipes.getRoadResources());
break;
case MONOPOLY:
final Random random = new Random();
final ResourceType selectedType = List.of(ResourceType.values())
.get(random.nextInt(ResourceType.values().length));
this.players.stream().filter(p -> !p.equals(player)).forEach(p -> {
resourceManager.addResources(player, selectedType, resourceManager.getResource(p, selectedType));
resourceManager.removeResources(p, selectedType, resourceManager.getResource(p, selectedType));
resourceManager.addResources(player,
Map.of(selectedType, resourceManager.getResource(p, selectedType)));
resourceManager.removeResources(p,
Map.of(selectedType, resourceManager.getResource(p, selectedType)));
});
break;
default:
Expand Down Expand Up @@ -274,9 +266,9 @@ public Map<Player, Map<ResourceType, Integer>> produceResources(final int number
}));
producedResources.forEach((resource, amount) -> {
if (resourceManager.getResource(resourceManager.getBank(), resource) >= amount) {
players.forEach(player -> resourceManager.addResources(player, resource,
playersResources.get(player).get(resource)));
resourceManager.removeResources(resourceManager.getBank(), resource, amount);
players.forEach(player -> resourceManager.addResources(player, Map.of(resource,
playersResources.get(player).get(resource))));
resourceManager.removeResources(resourceManager.getBank(), Map.of(resource, amount));
} else {
players.forEach(player -> playersResources.get(player).put(resource, 0));
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/it/unibo/model/resource/ResourceManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ public interface ResourceManager {
* @param resource resource type
* @param amount amount of resource
*/
void addResources(ResourceOwner owner, ResourceType resource, int amount);
void addResources(ResourceOwner owner, Map<ResourceType, Integer> proposedResources);

/**
* Remove the given amount of the given resource to the given owner.
*
* @param owner owner of the resources
* @param resource resource type
* @param amount amount of resource
*/
void removeResources(ResourceOwner owner, ResourceType resource, int amount);
void removeResources(ResourceOwner owner, Map<ResourceType, Integer> proposedResources);

/**
* Get the amount of the given resource of the given owner.
Expand Down
34 changes: 18 additions & 16 deletions src/main/java/it/unibo/model/resource/ResourceManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,27 @@ public ResourceManagerImpl(final List<Player> players, final int bankResourcesAm
allEntityResources.put(bank, bank.getDefaultResources());
}

private boolean checkResourcesPositive(Map<ResourceType, Integer> resources) {
return resources.values().stream().allMatch(amount -> amount >= 0);
}

@Override
public void addResources(final ResourceOwner owner, final ResourceType resource, final int amount) {
if (amount >= 0) {
allEntityResources.get(owner).compute(resource, (k, v) -> v + amount);
} else {
public void addResources(ResourceOwner owner, Map<ResourceType, Integer> resources) {
if (!checkResourcesPositive(resources)) {
throw new IllegalArgumentException("amount must be positive");
}
resources.forEach((resource, amount) -> allEntityResources.get(owner).compute(resource, (k, v) -> v + amount));
}

@Override
public void removeResources(final ResourceOwner owner, final ResourceType resource, final int amount) {
if (allEntityResources.get(owner).get(resource) >= amount) {
allEntityResources.get(owner).compute(resource, (k, v) -> v - amount);
} else {
public void removeResources(ResourceOwner owner, Map<ResourceType, Integer> resources) {
if (!checkResourcesPositive(resources)) {
throw new IllegalArgumentException("amount must be positive");
}
if (!hasResources(owner, resources)) {
throw new IllegalArgumentException("amount must be lower than the total resource");
}
resources.forEach((resource, amount) -> allEntityResources.get(owner).compute(resource, (k, v) -> v - amount));
}

@Override
Expand All @@ -56,14 +61,11 @@ public int getResource(final ResourceOwner owner, final ResourceType resource) {
public void trade(final ResourceOwner proposer, final ResourceOwner accepter,
final Map<ResourceType, Integer> proposedResources,
final Map<ResourceType, Integer> wantedResources) {
proposedResources.entrySet().forEach(resource -> {
removeResources(proposer, resource.getKey(), resource.getValue());
addResources(accepter, resource.getKey(), resource.getValue());
});
wantedResources.entrySet().forEach(resource -> {
addResources(proposer, resource.getKey(), resource.getValue());
removeResources(accepter, resource.getKey(), resource.getValue());
});

addResources(proposer, wantedResources);
addResources(accepter, proposedResources);
removeResources(proposer, proposedResources);
removeResources(accepter, wantedResources);
}

@Override
Expand Down
33 changes: 19 additions & 14 deletions src/test/java/it/unibo/model/ResourceManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void init() {
@Test
void testAddResources() {
assertEquals(0, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
resourceManager.addResources(PLAYER1, ResourceType.BRICK, 3);
resourceManager.addResources(PLAYER1, Map.of(ResourceType.BRICK, 3));
assertEquals(3, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
}

Expand All @@ -49,8 +49,8 @@ void testAddResources() {
@Test
void testRemoveResources() {
assertEquals(0, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
resourceManager.addResources(PLAYER1, ResourceType.BRICK, 5);
resourceManager.removeResources(PLAYER1, ResourceType.BRICK, 3);
resourceManager.addResources(PLAYER1, Map.of(ResourceType.BRICK, 5));
resourceManager.removeResources(PLAYER1, Map.of(ResourceType.BRICK, 3));
assertEquals(2, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
}

Expand All @@ -62,22 +62,27 @@ void testTrade() {
final Map<ResourceType, Integer> proposedResources = new HashMap<>();
final Map<ResourceType, Integer> wantedResources = new HashMap<>();

resourceManager.addResources(PLAYER1, ResourceType.BRICK, 5);
resourceManager.addResources(PLAYER1, ResourceType.WOOL, 5);
resourceManager.addResources(PLAYER1, ResourceType.GRAIN, 5);
resourceManager.addResources(PLAYER2, ResourceType.LUMBER, 5);
resourceManager.addResources(PLAYER2, ResourceType.ORE, 5);
resourceManager.addResources(PLAYER1, Map.of(ResourceType.BRICK, 5, ResourceType.WOOL, 5, ResourceType.GRAIN, 5,
ResourceType.LUMBER, 5, ResourceType.ORE, 5));
resourceManager.addResources(PLAYER2, Map.of(ResourceType.BRICK, 2, ResourceType.WOOL, 3));
wantedResources.put(ResourceType.BRICK, 2);
wantedResources.put(ResourceType.WOOL, 3);
assertTrue(resourceManager.hasResources(PLAYER1, wantedResources));
proposedResources.put(ResourceType.LUMBER, 2);
proposedResources.put(ResourceType.ORE, 4);
assertTrue(resourceManager.canTrade(PLAYER2, PLAYER1, proposedResources, wantedResources));
resourceManager.trade(PLAYER2, PLAYER1, proposedResources, wantedResources);
assertEquals(3, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
assertEquals(2, resourceManager.getResource(PLAYER1, ResourceType.WOOL));
assertEquals(3, resourceManager.getResource(PLAYER2, ResourceType.LUMBER));
assertEquals(1, resourceManager.getResource(PLAYER2, ResourceType.ORE));

assertTrue(resourceManager.canTrade(PLAYER1, PLAYER2, proposedResources, wantedResources));
resourceManager.trade(PLAYER1, PLAYER2, proposedResources, wantedResources);

assertEquals(7, resourceManager.getResource(PLAYER1, ResourceType.BRICK));
assertEquals(8, resourceManager.getResource(PLAYER1, ResourceType.WOOL));
assertEquals(3, resourceManager.getResource(PLAYER1, ResourceType.LUMBER));
assertEquals(1, resourceManager.getResource(PLAYER1, ResourceType.ORE));

assertEquals(0, resourceManager.getResource(PLAYER2, ResourceType.BRICK));
assertEquals(0, resourceManager.getResource(PLAYER2, ResourceType.WOOL));
assertEquals(2, resourceManager.getResource(PLAYER2, ResourceType.LUMBER));
assertEquals(4, resourceManager.getResource(PLAYER2, ResourceType.ORE));

}
// CHECKSTYLE: MagicNumber ON
Expand Down

0 comments on commit 427da3f

Please sign in to comment.