Update user interface
This commit is contained in:
parent
a982311f46
commit
e24b6f4965
8 changed files with 118 additions and 64 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem;
|
|||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class ElementGraph {
|
||||
private final Set<GraphElement> elements;
|
||||
|
||||
|
|
140
src/Game.java
140
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<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();
|
||||
}
|
||||
;}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue