From b6bff21a11392ff94f5bef534878a7a893344920 Mon Sep 17 00:00:00 2001 From: Kevin Schmidt Date: Wed, 12 Mar 2025 13:03:33 +0100 Subject: [PATCH] TD-52 buy tower for Money --- .../de/towerdefence/server/match/Match.java | 20 ++++++++++++++----- .../server/match/MatchService.java | 2 +- .../match/placing/InvalidPlacementReason.java | 3 ++- ws/ws.yml | 1 + 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/towerdefence/server/match/Match.java b/src/main/java/de/towerdefence/server/match/Match.java index c69b6c3..e8e786e 100644 --- a/src/main/java/de/towerdefence/server/match/Match.java +++ b/src/main/java/de/towerdefence/server/match/Match.java @@ -4,7 +4,6 @@ import de.towerdefence.server.player.Player; import de.towerdefence.server.server.channels.match.money.PlayerMoneyCallback; import de.towerdefence.server.server.channels.match.placing.InvalidPlacementReason; import de.towerdefence.server.server.channels.match.placing.Tower; -import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Optional; @@ -12,6 +11,7 @@ import java.util.Optional; @Getter public class Match { + public static final int TOWER_PRICE = 20; public final static int MAP_SIZE_X = 10; public final static int MAP_SIZE_Y = 20; public final static int START_MONEY = 50; @@ -59,11 +59,13 @@ public class Match { if (player1Map[x][y] != null) { throw new InvalidPlacementException(InvalidPlacementReason.LOCATION_USED); } + removeMoney(player, TOWER_PRICE); player1Map[x][y] = tower; } else { if (player2Map[x][y] != null) { throw new InvalidPlacementException(InvalidPlacementReason.LOCATION_USED); } + removeMoney(player, TOWER_PRICE); player2Map[x][y] = tower; } return getOpponent(player); @@ -87,16 +89,24 @@ public class Match { player2Money += money; } - public void removeMoney(Player player, int money) { + public void removeMoney(Player player, int price) throws InvalidPlacementException { if (player == player1) { - player1Money -= money; + if (price < player1Money) { + player1Money -= price; + } else { + throw new InvalidPlacementException(InvalidPlacementReason.NOT_ENOUGH_MONEY); + } } if (player == player2) { - player2Money -= money; + if (price < player2Money) { + player2Money -= price; + } else { + throw new InvalidPlacementException(InvalidPlacementReason.NOT_ENOUGH_MONEY); + } } } - public void setPlayerMoneyCallback( Player player, PlayerMoneyCallback playerMoneyCallback) { + public void setPlayerMoneyCallback(Player player, PlayerMoneyCallback playerMoneyCallback) { if (player == player1) { this.player1MoneyCallback = playerMoneyCallback; } diff --git a/src/main/java/de/towerdefence/server/match/MatchService.java b/src/main/java/de/towerdefence/server/match/MatchService.java index 3f27222..234392c 100644 --- a/src/main/java/de/towerdefence/server/match/MatchService.java +++ b/src/main/java/de/towerdefence/server/match/MatchService.java @@ -29,7 +29,7 @@ public class MatchService { /** * @return opponent */ - public Player placeTower(Player player, int x, int y) throws InvalidPlacementException { + public Player placeTower(Player player, int x, int y) throws InvalidPlacementException{ return playerMatches.get(player).addTower(player, new Tower(), x, y); } diff --git a/src/main/java/de/towerdefence/server/server/channels/match/placing/InvalidPlacementReason.java b/src/main/java/de/towerdefence/server/server/channels/match/placing/InvalidPlacementReason.java index f049fe9..5c16215 100644 --- a/src/main/java/de/towerdefence/server/server/channels/match/placing/InvalidPlacementReason.java +++ b/src/main/java/de/towerdefence/server/server/channels/match/placing/InvalidPlacementReason.java @@ -7,7 +7,8 @@ import lombok.Getter; @AllArgsConstructor public enum InvalidPlacementReason { OUT_OF_BOUNDS("out-of-bounds"), - LOCATION_USED("location-used"); + LOCATION_USED("location-used"), + NOT_ENOUGH_MONEY("not-enough-money"); private final String jsonName; } diff --git a/ws/ws.yml b/ws/ws.yml index f2f1cd3..a0a9743 100644 --- a/ws/ws.yml +++ b/ws/ws.yml @@ -218,6 +218,7 @@ channels: enum: - "out-of-bounds" - "location-used" + - "not-enough-money" required: - $id - x