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.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
public class ElementGraph {
|
public class ElementGraph {
|
||||||
private final Set<GraphElement> elements;
|
private final Set<GraphElement> elements;
|
||||||
|
|
||||||
|
|
144
src/Game.java
144
src/Game.java
|
@ -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();
|
||||||
|
}
|
||||||
|
;}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue