feat: Grouping

This commit is contained in:
2025-05-26 18:47:55 +02:00
parent a9591ce829
commit 30c272bb9f
3 changed files with 42 additions and 22 deletions

View File

@@ -3,7 +3,7 @@
<option name="myName" value="Project Default" />
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<Languages>
<language minSize="66" name="Java" />
<language minSize="68" name="Java" />
</Languages>
</inspection_tool>
</profile>

View File

@@ -35,17 +35,17 @@ public class Market {
}
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++) {
game.getPlayer().getInventory().add(item);
game.getPlayer().setCoins(game.getPlayer().getCoins() - item.getPrice());
}
return;
} else {
game.getPlayer().getInventory().add(item);
game.getPlayer().setCoins(game.getPlayer().getCoins() - item.getPrice());
}
game.getStrings().print("marketBuyMessage", item);
} else {
throw new ItemNotAvailableException("Item is not available");
}
}
@@ -57,7 +57,7 @@ public class Market {
}
if (game.getSoilType() == SoilType.LESS_FERTILE) {
availableItems.addAll(List.of(Item.FENCE_WITH_COWS, Item.WHEAT_FARMLAND));
availableItems.addAll(List.of(Item.FENCE_WITH_COWS, Item.HOPS_FARMLAND, Item.HOPS_SEEDS));
}
if (game.getSoilType() == SoilType.FERTILE) {

View File

@@ -3,17 +3,15 @@ package cz.jull.tui;
import cz.jull.Game;
import cz.jull.Item;
import cz.jull.actions.Action;
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 lombok.RequiredArgsConstructor;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RequiredArgsConstructor
public class Menu {
@@ -40,10 +38,13 @@ public class Menu {
"See your stats" ));
switch (index) {
case 0 -> {
List<String> inventory = new ArrayList<>(game.getPlayer().getInventory().stream().map(Item::toString).toList());
inventory.add("Go back");
int itemIndex = Cli.selectOptionIndex(inventory);
if (itemIndex == inventory.size() - 1) {
List<Item> inventory = game.getPlayer().getInventory();
Map<Item, Integer> grouped = group(inventory);
List<String> mapped = new ArrayList<>(grouped.keySet().stream().map(item -> grouped.get(item) + "x " + item).toList());
mapped.add("Go back");
int itemIndex = Cli.selectOptionIndex(mapped);
if (itemIndex == mapped.size() - 1) {
start();
return;
}
@@ -57,9 +58,12 @@ public class Menu {
actionMenu(item, actions);
}
case 1 -> {
List<String> buildings = new ArrayList<>(game.getBuildings().stream().map(Item::toString).toList());
buildings.add("Go back");
int itemIndex = Cli.selectOptionIndex(buildings);
List<Item> buildings = game.getBuildings();
Map<Item, Integer> grouped = group(buildings);
List<String> mapped = new ArrayList<>(grouped.keySet().stream().map(item -> grouped.get(item) + "x " + item).toList());
mapped.add("Go back");
int itemIndex = Cli.selectOptionIndex(mapped);
if (itemIndex == buildings.size() - 1) {
start();
return;
@@ -84,15 +88,20 @@ public class Menu {
switch (marketOption) {
case 0 -> {
game.getStrings().print("marketBuy");
List<String> availableItems = game.getMarket().getAvailableItems().stream().map(Item::toString).toList();
List<String> availableItems = game.getMarket().getAvailableItems().stream().map(item -> item + ": " + item.getPrice() + " coins").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<String> inventory = game.getPlayer().getInventory().stream().map(Item::toString).toList();
int itemIndex = Cli.selectOptionIndex(inventory);
List<Item> inventory = game.getPlayer().getInventory();
Map<Item, Integer> grouped = group(inventory);
List<String> mapped = new ArrayList<>(grouped.keySet().stream().map(item -> grouped.get(item) + "x " + item).toList());
mapped.add("Go back");
int itemIndex = Cli.selectOptionIndex(mapped);
Item item = game.getMarket().getAvailableItems().get(itemIndex);
game.getMarket().sellItem(game, item);
}
@@ -111,7 +120,6 @@ public class Menu {
System.out.println();
game.getStrings().print("forestSize", game.getForestType().getSize());
System.out.println();
Cli.pressEnter();
}
}
}
@@ -127,4 +135,16 @@ public class Menu {
Action action = actions.get(actionIndex);
action.execute(game, item);
}
private Map<Item, Integer> group(List<Item> items) {
Map<Item, Integer> group = new HashMap<>();
for (Item item : items) {
if (group.containsKey(item)) {
group.put(item, group.get(item) + 1);
} else {
group.put(item, 1);
}
}
return group;
}
}