feat: Grouping
This commit is contained in:
2
.idea/inspectionProfiles/Project_Default.xml
generated
2
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -3,7 +3,7 @@
|
|||||||
<option name="myName" value="Project Default" />
|
<option name="myName" value="Project Default" />
|
||||||
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
<Languages>
|
<Languages>
|
||||||
<language minSize="66" name="Java" />
|
<language minSize="68" name="Java" />
|
||||||
</Languages>
|
</Languages>
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
</profile>
|
</profile>
|
||||||
|
|||||||
@@ -35,17 +35,17 @@ public class Market {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (availableItems.contains(item)) {
|
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)) {
|
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++) {
|
for (int i = 0; i < game.getWaterType().getFarmlandAndVineyardCount() ; i++) {
|
||||||
game.getPlayer().getInventory().add(item);
|
game.getPlayer().getInventory().add(item);
|
||||||
game.getPlayer().setCoins(game.getPlayer().getCoins() - item.getPrice());
|
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");
|
throw new ItemNotAvailableException("Item is not available");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ public class Market {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (game.getSoilType() == SoilType.LESS_FERTILE) {
|
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) {
|
if (game.getSoilType() == SoilType.FERTILE) {
|
||||||
|
|||||||
@@ -3,17 +3,15 @@ package cz.jull.tui;
|
|||||||
import cz.jull.Game;
|
import cz.jull.Game;
|
||||||
import cz.jull.Item;
|
import cz.jull.Item;
|
||||||
import cz.jull.actions.Action;
|
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 lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class Menu {
|
public class Menu {
|
||||||
@@ -40,10 +38,13 @@ public class Menu {
|
|||||||
"See your stats" ));
|
"See your stats" ));
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
List<String> inventory = new ArrayList<>(game.getPlayer().getInventory().stream().map(Item::toString).toList());
|
List<Item> inventory = game.getPlayer().getInventory();
|
||||||
inventory.add("Go back");
|
Map<Item, Integer> grouped = group(inventory);
|
||||||
int itemIndex = Cli.selectOptionIndex(inventory);
|
List<String> mapped = new ArrayList<>(grouped.keySet().stream().map(item -> grouped.get(item) + "x " + item).toList());
|
||||||
if (itemIndex == inventory.size() - 1) {
|
mapped.add("Go back");
|
||||||
|
|
||||||
|
int itemIndex = Cli.selectOptionIndex(mapped);
|
||||||
|
if (itemIndex == mapped.size() - 1) {
|
||||||
start();
|
start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -57,9 +58,12 @@ public class Menu {
|
|||||||
actionMenu(item, actions);
|
actionMenu(item, actions);
|
||||||
}
|
}
|
||||||
case 1 -> {
|
case 1 -> {
|
||||||
List<String> buildings = new ArrayList<>(game.getBuildings().stream().map(Item::toString).toList());
|
List<Item> buildings = game.getBuildings();
|
||||||
buildings.add("Go back");
|
Map<Item, Integer> grouped = group(buildings);
|
||||||
int itemIndex = Cli.selectOptionIndex(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) {
|
if (itemIndex == buildings.size() - 1) {
|
||||||
start();
|
start();
|
||||||
return;
|
return;
|
||||||
@@ -84,15 +88,20 @@ public class Menu {
|
|||||||
switch (marketOption) {
|
switch (marketOption) {
|
||||||
case 0 -> {
|
case 0 -> {
|
||||||
game.getStrings().print("marketBuy");
|
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);
|
int itemIndex = Cli.selectOptionIndex(availableItems);
|
||||||
Item item = game.getMarket().getAvailableItems().get(itemIndex);
|
Item item = game.getMarket().getAvailableItems().get(itemIndex);
|
||||||
game.getMarket().buyItem(game, item);
|
game.getMarket().buyItem(game, item);
|
||||||
}
|
}
|
||||||
case 1 -> {
|
case 1 -> {
|
||||||
game.getStrings().print("marketSell");
|
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);
|
Item item = game.getMarket().getAvailableItems().get(itemIndex);
|
||||||
game.getMarket().sellItem(game, item);
|
game.getMarket().sellItem(game, item);
|
||||||
}
|
}
|
||||||
@@ -111,7 +120,6 @@ public class Menu {
|
|||||||
System.out.println();
|
System.out.println();
|
||||||
game.getStrings().print("forestSize", game.getForestType().getSize());
|
game.getStrings().print("forestSize", game.getForestType().getSize());
|
||||||
System.out.println();
|
System.out.println();
|
||||||
Cli.pressEnter();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,4 +135,16 @@ public class Menu {
|
|||||||
Action action = actions.get(actionIndex);
|
Action action = actions.get(actionIndex);
|
||||||
action.execute(game, item);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user