From 427da3f139af47c9f9ae80a80964ef0fe00651fa Mon Sep 17 00:00:00 2001 From: Andrea Samori Date: Fri, 16 Feb 2024 16:34:57 +0100 Subject: [PATCH] changed addResources and removeResources --- .../java/it/unibo/model/GameManagerImpl.java | 38 ++++++++----------- .../unibo/model/resource/ResourceManager.java | 6 +-- .../model/resource/ResourceManagerImpl.java | 34 +++++++++-------- .../it/unibo/model/ResourceManagerTest.java | 33 +++++++++------- 4 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/main/java/it/unibo/model/GameManagerImpl.java b/src/main/java/it/unibo/model/GameManagerImpl.java index 1281f2f..0e70dd1 100644 --- a/src/main/java/it/unibo/model/GameManagerImpl.java +++ b/src/main/java/it/unibo/model/GameManagerImpl.java @@ -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()); } } @@ -133,10 +130,8 @@ 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()); } } @@ -144,10 +139,8 @@ public void buildCity(final PropertyPosition position, final Player player) { 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()); } } @@ -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: @@ -274,9 +266,9 @@ public Map> 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)); } diff --git a/src/main/java/it/unibo/model/resource/ResourceManager.java b/src/main/java/it/unibo/model/resource/ResourceManager.java index 03a3753..c3e6b4c 100644 --- a/src/main/java/it/unibo/model/resource/ResourceManager.java +++ b/src/main/java/it/unibo/model/resource/ResourceManager.java @@ -17,8 +17,8 @@ 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 proposedResources); + /** * Remove the given amount of the given resource to the given owner. * @@ -26,7 +26,7 @@ public interface ResourceManager { * @param resource resource type * @param amount amount of resource */ - void removeResources(ResourceOwner owner, ResourceType resource, int amount); + void removeResources(ResourceOwner owner, Map proposedResources); /** * Get the amount of the given resource of the given owner. diff --git a/src/main/java/it/unibo/model/resource/ResourceManagerImpl.java b/src/main/java/it/unibo/model/resource/ResourceManagerImpl.java index 8887a0c..6edd1af 100644 --- a/src/main/java/it/unibo/model/resource/ResourceManagerImpl.java +++ b/src/main/java/it/unibo/model/resource/ResourceManagerImpl.java @@ -29,22 +29,27 @@ public ResourceManagerImpl(final List players, final int bankResourcesAm allEntityResources.put(bank, bank.getDefaultResources()); } + private boolean checkResourcesPositive(Map 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 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 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 @@ -56,14 +61,11 @@ public int getResource(final ResourceOwner owner, final ResourceType resource) { public void trade(final ResourceOwner proposer, final ResourceOwner accepter, final Map proposedResources, final Map 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 diff --git a/src/test/java/it/unibo/model/ResourceManagerTest.java b/src/test/java/it/unibo/model/ResourceManagerTest.java index 53155ae..5eb2475 100644 --- a/src/test/java/it/unibo/model/ResourceManagerTest.java +++ b/src/test/java/it/unibo/model/ResourceManagerTest.java @@ -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)); } @@ -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)); } @@ -62,22 +62,27 @@ void testTrade() { final Map proposedResources = new HashMap<>(); final Map 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