From e603d9452cdfab6868fe713aa5763ff987ed498b Mon Sep 17 00:00:00 2001 From: jull Date: Wed, 21 May 2025 10:35:29 +0200 Subject: [PATCH] feat: Another string implementing and class Menu --- src/main/java/cz/jull/Game.java | 17 ++++--- src/main/java/cz/jull/market/Market.java | 5 +- src/main/java/cz/jull/tui/Menu.java | 58 ++++++++++++++++++++++++ src/main/java/cz/jull/tui/Strings.java | 6 +++ strings.json | 10 +++- 5 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/main/java/cz/jull/tui/Menu.java diff --git a/src/main/java/cz/jull/Game.java b/src/main/java/cz/jull/Game.java index c155f84..b6bb02f 100644 --- a/src/main/java/cz/jull/Game.java +++ b/src/main/java/cz/jull/Game.java @@ -6,33 +6,31 @@ import cz.jull.stats.surroundings.ForestType; import cz.jull.stats.surroundings.PathType; import cz.jull.stats.surroundings.SoilType; import cz.jull.stats.surroundings.WaterType; +import cz.jull.tui.Cli; +import cz.jull.tui.Menu; import cz.jull.tui.Strings; import lombok.Getter; import java.util.ArrayList; import java.util.List; +@Getter public class Game { - @Getter + private final Player player = new Player(); private ForestType forestType; - @Getter private SoilType soilType; - @Getter private PathType pathType; - @Getter private WaterType waterType; private final Strings strings; - @Getter private final List buildings = new ArrayList<>(); - @Getter private Market market; private final List events = new ArrayList<>(); @@ -43,9 +41,12 @@ public class Game { public void play() { strings.print("welcome"); + Cli.pressEnter(); generateStats(); - for (int i = 0; i < 10; i++) { + Menu menu = new Menu(this); + for (int i = 0; i < 10; i++) { + menu.start(); } // TODO the whole game } @@ -63,8 +64,10 @@ public class Game { if (waterType == WaterType.WELL) { buildings.add(Item.WELL); } + System.out.println(); player.setCoins(1000); + strings.print("coins", player.getCoins()); market = new Market(this); diff --git a/src/main/java/cz/jull/market/Market.java b/src/main/java/cz/jull/market/Market.java index c38c882..e419ee6 100644 --- a/src/main/java/cz/jull/market/Market.java +++ b/src/main/java/cz/jull/market/Market.java @@ -6,10 +6,12 @@ import cz.jull.exceptions.ItemNotAvailableException; import cz.jull.exceptions.NotSufficientsCoinsException; import cz.jull.stats.surroundings.PathType; import cz.jull.stats.surroundings.SoilType; +import lombok.Getter; import java.util.ArrayList; import java.util.List; +@Getter public class Market { private final List availableItems = new ArrayList<>(List.of( Item.AXE, @@ -24,6 +26,7 @@ public class Market { game.getPlayer().setCoins(game.getPlayer().getCoins() + item.getPrice()); game.getPlayer().getInventory().remove(item); + game.getStrings().print("marketSellMessage", item); } public void buyItem(Game game, Item item) throws ItemNotAvailableException, NotSufficientsCoinsException { @@ -35,10 +38,10 @@ public class Market { System.out.println(" "); //TODO return; } - System.out.println(availableItems); if (availableItems.contains(item)) { game.getPlayer().getInventory().add(item); game.getPlayer().setCoins(game.getPlayer().getCoins() - item.getPrice()); + game.getStrings().print("marketBuyMessage", item); } else { if (List.of(Item.WHEAT_SEEDS, Item.HOPS_SEEDS, Item.GRAPEVINE_SEEDS, Item.WHEAT_FARMLAND, Item.HOPS_FARMLAND, Item.VINEYARD).contains(item)) { for (int i = 0; i < game.getWaterType().getFarmlandAndVineyardCount() ; i++) { diff --git a/src/main/java/cz/jull/tui/Menu.java b/src/main/java/cz/jull/tui/Menu.java new file mode 100644 index 0000000..3dcb229 --- /dev/null +++ b/src/main/java/cz/jull/tui/Menu.java @@ -0,0 +1,58 @@ +package cz.jull.tui; + +import cz.jull.Game; +import cz.jull.Item; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@RequiredArgsConstructor +public class Menu { + private final Game game; + + public void start() { + int index = Cli.selectOptionIndex(List.of( + "See your inventory", + "See what you have built", + "Go to Market", + "See your stats" )); + switch (index) { + case 0 -> { + + } + case 1 -> { + for (Item building : game.getBuildings()) { + System.out.println(building); + } + } + case 2 -> { + game.getStrings().print("marketGreeting"); + System.out.println(); + int marketOption = Cli.selectOptionIndex(List.of( + "Buy Item", + "Sell Item", + "Go back" + )); + switch (marketOption) { + case 0 -> { + game.getStrings().print("marketBuy"); + List availableItems = game.getMarket().getAvailableItems().stream().map(Item::toString).toList(); + int itemIndex = Cli.selectOptionIndex(availableItems); + Item item = game.getMarket().getAvailableItems().get(itemIndex); + game.getMarket().buyItem(game, item); + } + case 1 -> { + game.getStrings().print("marketSell"); + List inventory = game.getPlayer().getInventory().stream().map(Item::toString).toList(); + int itemIndex = Cli.selectOptionIndex(inventory); + Item item = game.getMarket().getAvailableItems().get(itemIndex); + game.getMarket().sellItem(game, item); + } + case 2 -> { + start(); + } + } + } + } + } +} diff --git a/src/main/java/cz/jull/tui/Strings.java b/src/main/java/cz/jull/tui/Strings.java index a57b961..4c7c048 100644 --- a/src/main/java/cz/jull/tui/Strings.java +++ b/src/main/java/cz/jull/tui/Strings.java @@ -17,6 +17,12 @@ public class Strings { private String soilType; private String pathType; private String waterType; + private String coins; + private String marketGreeting; + private String marketBuy; + private String marketBuyMessage; + private String marketSell; + private String marketSellMessage; /** * Loads strings from json file diff --git a/strings.json b/strings.json index 9f8a11c..f1a5f03 100644 --- a/strings.json +++ b/strings.json @@ -1,7 +1,13 @@ { - "welcome": "Welcome", + "welcome": "Welcome player! ", "forestType": "Your forest size: {0}", "soilType": "Your soil type size: {0}", "pathType": "Your path type: {0}", - "waterType": "Your water type: {0}" + "waterType": "Your water type: {0}", + "coins": "Amount of Coins: {0}", + "marketGreeting": "Welcome to Market!", + "marketBuy": "Pick which item you want to buy", + "marketBuyMessage": "You bought: {0}", + "marketSell": "Pick which item you want to sell", + "marketSellMessage": "You sold: {0}" } \ No newline at end of file