Update user interface

This commit is contained in:
L3o15 2025-05-15 11:07:29 +02:00
parent a982311f46
commit e24b6f4965
8 changed files with 118 additions and 64 deletions

View file

@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem;
import java.util.*; import java.util.*;
public class ElementGraph { public class ElementGraph {
private final Set<GraphElement> elements; private final Set<GraphElement> elements;

View file

@ -1,16 +1,17 @@
package it.arnaldo.unibs.tamagolem; package it.arnaldo.unibs.tamagolem;
import it.kibo.fp.lib.InputData;
import it.kibo.fp.lib.Menu; import it.kibo.fp.lib.Menu;
import it.kibo.fp.lib.PrettyStrings;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Scanner;
public class Game { public class Game {
private final Player player1; private final Player player1;
private final Player player2; private final Player player2;
private final ElementGraph worldBalance; private final ElementGraph worldBalance;
private boolean restart = false;
private Modes mode;
private int numberOfElements; private int numberOfElements;
private int numberOfStones; private int numberOfStones;
private int numberOfTamaGolems; private int numberOfTamaGolems;
@ -39,76 +40,104 @@ public class Game {
return worldBalance; return worldBalance;
} }
public boolean isRestart() {
return restart;
}
public void setRestart(boolean restart) {
this.restart = restart;
}
private void loop(){ private void loop(){
List<Element> elementsNames = worldBalance.getElementsNames(); // setup dei tamagolem
boolean golem1Setupped = setupGolem(player1.getNextTamaGolem(), player1);
// setto la mappa con le pietre ancora disponibili // se viene scelto di uscire
for (Element element : elementsNames) { if (!golem1Setupped) {
stonesPerElement.put(element, numberOfStonesPerElement); return;
} }
// aggiungo i tamagolem boolean golem2Setupped = setupGolem(player2.getNextTamaGolem(), player2);
for (int i = 0; i < numberOfTamaGolems; i++) {
player1.addTamaGolem(new TamaGolem(lifePoints)); // se viene scelto di uscire
player2.addTamaGolem(new TamaGolem(lifePoints)); if (!golem2Setupped) {
return;
} }
// fno a quando uno dei due giocatori non vince
while(!player1.getTamaGolems().isEmpty() && !player2.getTamaGolems().isEmpty()) { while(!checkVictory()) {
// setup del primo tamagolem
setupGolem(player1.getNextTamaGolem());
setupGolem(player2.getNextTamaGolem());
FightEsit esito = fight(); 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 // dopo il fight i tamagolem morti vengono rimossi
checkDeathsTamagolems(player1, player2); 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()) { if (!player1.isAlive()) {
System.out.println(player2.getName() + " won the game"); System.out.println(PrettyStrings.frame(player2.getName() + " won the game", 30, true, true));
} else { } else {
System.out.println(player1.getName() + " won the first game"); System.out.println(PrettyStrings.frame(player1.getName() + " won the game", 30, true, true));
} }
next();
System.out.println("GameLoop");
} }
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<Element> elementsNames = worldBalance.getElementsNames(); List<Element> elementsNames = worldBalance.getElementsNames();
for (int i = 0; i < numberOfStones; i++) { for (int i = 0; i < numberOfStones; i++) {
Menu stonesMenu = new Menu("TamaGolem", getMenuOptions(), true, true, false); boolean stoneAssigned = false;
int firstmenuChoise = stonesMenu.choose(); do {
golem.addElementalStone(elementsNames.get(firstmenuChoise - 1)); Menu stonesMenu = new Menu("Stones available", getMenuOptions(), true, true, false);
stonesPerElement.put(elementsNames.get(firstmenuChoise - 1), stonesPerElement.get(elementsNames.get(firstmenuChoise - 1)) - 1); 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) { private void checkDeathsTamagolems(Player p1, Player p2) {
p1.getTamaGolems().removeIf(tg -> !tg.isAlive()); p1.getTamaGolems().removeIf(tg -> !tg.isAlive());
p2.getTamaGolems().removeIf(tg -> !tg.isAlive()); p2.getTamaGolems().removeIf(tg -> !tg.isAlive());
} }
private void setup() { private void setup() {
// N // N
numberOfElements = worldBalance.getElements().size(); numberOfElements = worldBalance.getElements().size();
@ -123,7 +152,7 @@ public class Game {
totalNumberOfStones = (int) Math.ceil((2.0 * numberOfTamaGolems * numberOfStones)); totalNumberOfStones = (int) Math.ceil((2.0 * numberOfTamaGolems * numberOfStones));
// Stones for each element // 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 // deve essere uguale alla somma della potenza di tutti gli elementi
@ -131,16 +160,31 @@ public class Game {
lifePoints = totalPower; lifePoints = totalPower;
List<Element> 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() { public void start() {
setup(); setup();
loop(); loop();
worldBalance.printGraph(); worldBalance.printGraph();
next();
} }
private boolean checkVictory(){ private boolean checkVictory(){
return !player1.isAlive() || !player2.isAlive(); return !(player1.isAlive() && player2.isAlive());
} }
private String[] getMenuOptions() { private String[] getMenuOptions() {
@ -164,7 +208,7 @@ public class Game {
int interaction = worldBalance.getInteractionBetween(firstStone, secondStone); int interaction = worldBalance.getInteractionBetween(firstStone, secondStone);
System.out.println(player1.getName() + "'s tamagolem throws " + firstStone.name() + " and " + player2.getName() + "'s tamagolem throws " + secondStone.name()); System.out.println(player1.getName() + "'s tamagolem throws " + firstStone.name() + " and " + player2.getName() + "'s tamagolem throws " + secondStone.name());
next();
if (interaction > 0){ if (interaction > 0){
golem2.getDamage(interaction); golem2.getDamage(interaction);
System.out.println(player2.getName() + "'s tamagolem gets " + interaction + " damage"); System.out.println(player2.getName() + "'s tamagolem gets " + interaction + " damage");
@ -172,6 +216,7 @@ public class Game {
golem1.getDamage(-1 * interaction); golem1.getDamage(-1 * interaction);
System.out.println(player1.getName() + "'s tamagolem gets " + -1 * interaction + " damage"); System.out.println(player1.getName() + "'s tamagolem gets " + -1 * interaction + " damage");
} }
next();
} }
if (golem1.isAlive()){ if (golem1.isAlive()){
@ -180,4 +225,9 @@ public class Game {
return FightEsit.GOLEM2; return FightEsit.GOLEM2;
} }
} public void next(){
Scanner reader = new Scanner(System.in);
System.out.print("Press ENTER to continue... ");
reader.nextLine();
}
;}

View file

@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem;
import it.kibo.fp.lib.InputData; import it.kibo.fp.lib.InputData;
import it.kibo.fp.lib.Menu; import it.kibo.fp.lib.Menu;
import it.kibo.fp.lib.PrettyStrings;
public class GameLoop { public class GameLoop {
private Game game; private Game game;
@ -12,25 +13,25 @@ public class GameLoop {
int firstmenuChoise; int firstmenuChoise;
do { do {
createNewGame(); boolean playGame = createNewGame();
game.start(); if (playGame) {
game.start();
}
firstmenuChoise = firstMenu.choose(); firstmenuChoise = firstMenu.choose();
} while (firstmenuChoise == 1); } while (firstmenuChoise == 1);
} }
public void createNewGame() { public boolean createNewGame() {
String[] diffucultyMenuEntries = {"Easy", "Medium", "Hard"}; String[] diffucultyMenuEntries = {"Easy", "Medium", "Hard"};
Menu difficultyMenu = new Menu("Select Mode", diffucultyMenuEntries, true, true, false); Menu difficultyMenu = new Menu("Select Mode", diffucultyMenuEntries, true, true, false);
Player p1 = new Player(InputData.readNonEmptyString(""" Player p1 = new Player(InputData.readString(PrettyStrings.frame("""
\s
Player 1: Player 1:
\tChoose your name:\s""", true)); \tChoose your name\s""", 30, false, false), true));
Player p2 = new Player(InputData.readNonEmptyString(""" Player p2 = new Player(InputData.readString(PrettyStrings.frame("""
\s
Player 2: Player 2:
\tChoose your name:\s""", true)); \tChoose your name\s""", 30, false, false), true));
int difficultyChoise = difficultyMenu.choose(); int difficultyChoise = difficultyMenu.choose();
Modes difficulty = null; Modes difficulty = null;
@ -41,6 +42,10 @@ public class GameLoop {
case 3 -> difficulty = Modes.HARD; 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;
} }
} }

View file

@ -36,13 +36,7 @@ public class Player {
} }
public boolean isAlive() { public boolean isAlive() {
for (TamaGolem golem : tamaGolems) { return !tamaGolems.isEmpty();
if (golem.getLifePoints() > 0) {
return true;
}
}
return false;
} }

View file

@ -12,6 +12,10 @@ public class TamaGolem {
this.elementalStones = new ArrayDeque<>(); this.elementalStones = new ArrayDeque<>();
} }
public Deque<Element> getElementalStones() {
return elementalStones;
}
public void addElementalStone(Element stone) { public void addElementalStone(Element stone) {
elementalStones.add(stone); elementalStones.add(stone);
} }