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.*;
public class ElementGraph {
private final Set<GraphElement> elements;

View file

@ -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<Element> 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;
}
}
if (player1.getTamaGolems().isEmpty()) {
System.out.println(player2.getName() + " won the game");
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.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<Element> 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;
}
golem.print();
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);
}
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<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() {
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();
}
;}

View file

@ -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();
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;
}
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() {
for (TamaGolem golem : tamaGolems) {
if (golem.getLifePoints() > 0) {
return true;
}
}
return false;
return !tamaGolems.isEmpty();
}

View file

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