diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class index 5ba526b..77c3560 100644 Binary files a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class and b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Game.class differ diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class index 4363d65..14d839e 100644 Binary files a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class and b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/Player.class differ diff --git a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class index fb88db6..82069e9 100644 Binary files a/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class and b/out/production/TamaGolem/it/arnaldo/unibs/tamagolem/TamaGolem.class differ diff --git a/src/ElementGraph.java b/src/ElementGraph.java index 58b587e..b7f7d45 100644 --- a/src/ElementGraph.java +++ b/src/ElementGraph.java @@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem; import java.util.*; + public class ElementGraph { private final Set elements; diff --git a/src/Game.java b/src/Game.java index 35b1f0b..23bcdc5 100644 --- a/src/Game.java +++ b/src/Game.java @@ -1,16 +1,17 @@ package it.arnaldo.unibs.tamagolem; +import it.kibo.fp.lib.InputData; import it.kibo.fp.lib.Menu; +import it.kibo.fp.lib.PrettyStrings; import java.util.HashMap; import java.util.List; +import java.util.Scanner; public class Game { private final Player player1; private final Player player2; private final ElementGraph worldBalance; - private boolean restart = false; - private Modes mode; private int numberOfElements; private int numberOfStones; private int numberOfTamaGolems; @@ -39,76 +40,104 @@ public class Game { return worldBalance; } - public boolean isRestart() { - return restart; - } - - public void setRestart(boolean restart) { - this.restart = restart; - } - private void loop(){ - List elementsNames = worldBalance.getElementsNames(); + // setup dei tamagolem + boolean golem1Setupped = setupGolem(player1.getNextTamaGolem(), player1); - // setto la mappa con le pietre ancora disponibili - for (Element element : elementsNames) { - stonesPerElement.put(element, numberOfStonesPerElement); + // se viene scelto di uscire + if (!golem1Setupped) { + return; } - // aggiungo i tamagolem - for (int i = 0; i < numberOfTamaGolems; i++) { - player1.addTamaGolem(new TamaGolem(lifePoints)); - player2.addTamaGolem(new TamaGolem(lifePoints)); + boolean golem2Setupped = setupGolem(player2.getNextTamaGolem(), player2); + + // se viene scelto di uscire + if (!golem2Setupped) { + return; } - - while(!player1.getTamaGolems().isEmpty() && !player2.getTamaGolems().isEmpty()) { - // setup del primo tamagolem - setupGolem(player1.getNextTamaGolem()); - setupGolem(player2.getNextTamaGolem()); + // fno a quando uno dei due giocatori non vince + while(!checkVictory()) { FightEsit esito = fight(); - switch (esito) { - case GOLEM1 -> System.out.println(player1.getName() + " won the first fight"); - case GOLEM2 -> System.out.println(player2.getName() + " won the first fight"); - } - // dopo il fight i tamagolem morti vengono rimossi checkDeathsTamagolems(player1, player2); + + switch (esito) { + case GOLEM1: + System.out.println(PrettyStrings.frame(player1.getName() + " won the fight", 30, true, true)); + next(); + if(player2.isAlive()){ + boolean golemSetupped = setupGolem(player2.getNextTamaGolem(), player2); + if (!golemSetupped) { + return; + } + } + + break; + case GOLEM2: + System.out.println(PrettyStrings.frame(player2.getName() + " won the fight", 30, true, true)); + next(); + if(player1.isAlive()) { + boolean golemSetupped = setupGolem(player1.getNextTamaGolem(), player1); + if (!golemSetupped) { + return; + } + } + break; + } + } - if (player1.getTamaGolems().isEmpty()) { - System.out.println(player2.getName() + " won the game"); + if (!player1.isAlive()) { + System.out.println(PrettyStrings.frame(player2.getName() + " won the game", 30, true, true)); } else { - System.out.println(player1.getName() + " won the first game"); + System.out.println(PrettyStrings.frame(player1.getName() + " won the game", 30, true, true)); } - - - - System.out.println("GameLoop"); + next(); } - private void setupGolem(TamaGolem golem) { + private boolean setupGolem(TamaGolem golem, Player player) { + System.out.println(PrettyStrings.frame("Setting up " + player.getName() + " TamaGolem", 30, true, true)); + System.out.println("You can assign " + numberOfStones + " stones to your tamaGolem"); + next(); List elementsNames = worldBalance.getElementsNames(); + for (int i = 0; i < numberOfStones; i++) { - Menu stonesMenu = new Menu("TamaGolem", getMenuOptions(), true, true, false); - int firstmenuChoise = stonesMenu.choose(); - golem.addElementalStone(elementsNames.get(firstmenuChoise - 1)); - stonesPerElement.put(elementsNames.get(firstmenuChoise - 1), stonesPerElement.get(elementsNames.get(firstmenuChoise - 1)) - 1); + boolean stoneAssigned = false; + do { + Menu stonesMenu = new Menu("Stones available", getMenuOptions(), true, true, false); + int stonesMenuChoice = stonesMenu.choose(); + + if (stonesMenuChoice == 0) { + return false; + } + + Element chosenElement = elementsNames.get(stonesMenuChoice - 1); + int remaining = stonesPerElement.get(chosenElement); + + if (remaining > 0) { + golem.addElementalStone(chosenElement); + stonesPerElement.put(chosenElement, remaining - 1); + stoneAssigned = true; + } else { + System.out.println(PrettyStrings.frame(chosenElement + " stones are finished, choose another elemental stone", 100, true, true)); + } + } while (!stoneAssigned); } - golem.print(); + System.out.println(player.getName() + " setupped golem: \n\tLP: " + golem.getLifePoints() + "\n\t Stones: " + golem.getElementalStones() + "\n"); + next(); + return true; } - private void checkDeathsTamagolems(Player p1, Player p2) { p1.getTamaGolems().removeIf(tg -> !tg.isAlive()); p2.getTamaGolems().removeIf(tg -> !tg.isAlive()); } - private void setup() { // N numberOfElements = worldBalance.getElements().size(); @@ -123,7 +152,7 @@ public class Game { totalNumberOfStones = (int) Math.ceil((2.0 * numberOfTamaGolems * numberOfStones)); // Stones for each element - numberOfStonesPerElement = totalNumberOfStones / numberOfElements; + numberOfStonesPerElement = (int) Math.ceil((double)totalNumberOfStones / (double)numberOfElements); // deve essere uguale alla somma della potenza di tutti gli elementi @@ -131,16 +160,31 @@ public class Game { lifePoints = totalPower; + List elementsNames = worldBalance.getElementsNames(); + + // setto la mappa con le pietre ancora disponibili + for (Element element : elementsNames) { + stonesPerElement.put(element, numberOfStonesPerElement); + } + + // aggiungo i tamagolem + System.out.println(numberOfTamaGolems); + for (int i = 0; i < numberOfTamaGolems; i++) { + player1.addTamaGolem(new TamaGolem(lifePoints)); + player2.addTamaGolem(new TamaGolem(lifePoints)); + } + } public void start() { setup(); loop(); worldBalance.printGraph(); + next(); } private boolean checkVictory(){ - return !player1.isAlive() || !player2.isAlive(); + return !(player1.isAlive() && player2.isAlive()); } private String[] getMenuOptions() { @@ -164,7 +208,7 @@ public class Game { int interaction = worldBalance.getInteractionBetween(firstStone, secondStone); System.out.println(player1.getName() + "'s tamagolem throws " + firstStone.name() + " and " + player2.getName() + "'s tamagolem throws " + secondStone.name()); - + next(); if (interaction > 0){ golem2.getDamage(interaction); System.out.println(player2.getName() + "'s tamagolem gets " + interaction + " damage"); @@ -172,6 +216,7 @@ public class Game { golem1.getDamage(-1 * interaction); System.out.println(player1.getName() + "'s tamagolem gets " + -1 * interaction + " damage"); } + next(); } if (golem1.isAlive()){ @@ -180,4 +225,9 @@ public class Game { return FightEsit.GOLEM2; } -} + public void next(){ + Scanner reader = new Scanner(System.in); + System.out.print("Press ENTER to continue... "); + reader.nextLine(); + } +;} diff --git a/src/GameLoop.java b/src/GameLoop.java index b96cd95..a8e1b55 100644 --- a/src/GameLoop.java +++ b/src/GameLoop.java @@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem; import it.kibo.fp.lib.InputData; import it.kibo.fp.lib.Menu; +import it.kibo.fp.lib.PrettyStrings; public class GameLoop { private Game game; @@ -12,25 +13,25 @@ public class GameLoop { int firstmenuChoise; do { - createNewGame(); - game.start(); + boolean playGame = createNewGame(); + if (playGame) { + game.start(); + } firstmenuChoise = firstMenu.choose(); } while (firstmenuChoise == 1); } - public void createNewGame() { + public boolean createNewGame() { String[] diffucultyMenuEntries = {"Easy", "Medium", "Hard"}; Menu difficultyMenu = new Menu("Select Mode", diffucultyMenuEntries, true, true, false); - Player p1 = new Player(InputData.readNonEmptyString(""" - \s + Player p1 = new Player(InputData.readString(PrettyStrings.frame(""" Player 1: - \tChoose your name:\s""", true)); + \tChoose your name\s""", 30, false, false), true)); - Player p2 = new Player(InputData.readNonEmptyString(""" - \s + Player p2 = new Player(InputData.readString(PrettyStrings.frame(""" Player 2: - \tChoose your name:\s""", true)); + \tChoose your name\s""", 30, false, false), true)); int difficultyChoise = difficultyMenu.choose(); Modes difficulty = null; @@ -41,6 +42,10 @@ public class GameLoop { case 3 -> difficulty = Modes.HARD; } - game = new Game(p1, p2, WorldBuilder.buildWorld(difficulty)); + if (difficulty != null){ + game = new Game(p1, p2, WorldBuilder.buildWorld(difficulty)); + return true; + } + return false; } } diff --git a/src/Player.java b/src/Player.java index dcae3ac..97b8357 100644 --- a/src/Player.java +++ b/src/Player.java @@ -36,13 +36,7 @@ public class Player { } public boolean isAlive() { - for (TamaGolem golem : tamaGolems) { - if (golem.getLifePoints() > 0) { - return true; - } - } - - return false; + return !tamaGolems.isEmpty(); } diff --git a/src/TamaGolem.java b/src/TamaGolem.java index 144d17f..fc09da9 100644 --- a/src/TamaGolem.java +++ b/src/TamaGolem.java @@ -12,6 +12,10 @@ public class TamaGolem { this.elementalStones = new ArrayDeque<>(); } + public Deque getElementalStones() { + return elementalStones; + } + public void addElementalStone(Element stone) { elementalStones.add(stone); }