From a982311f469eebbcbdbbd1b5d1e7fb376df8cbbd Mon Sep 17 00:00:00 2001 From: L3o15 Date: Wed, 14 May 2025 19:40:07 +0200 Subject: [PATCH] Game loop and fight --- src/Game.java | 115 +++++++++++++++++++++++++++++++++++++++++- src/Player.java | 28 ++++++++++ src/WorldBuilder.java | 2 + 3 files changed, 144 insertions(+), 1 deletion(-) diff --git a/src/Game.java b/src/Game.java index 8347bc6..35b1f0b 100644 --- a/src/Game.java +++ b/src/Game.java @@ -2,6 +2,7 @@ package it.arnaldo.unibs.tamagolem; import it.kibo.fp.lib.Menu; +import java.util.HashMap; import java.util.List; public class Game { @@ -9,6 +10,15 @@ public class Game { private final Player player2; private final ElementGraph worldBalance; private boolean restart = false; + private Modes mode; + private int numberOfElements; + private int numberOfStones; + private int numberOfTamaGolems; + private int totalNumberOfStones; + private int numberOfStonesPerElement; + private int totalPower; + private int lifePoints; + private HashMap stonesPerElement; public Game(Player player1, Player player2, ElementGraph worldBalance) { this.player1 = player1; @@ -37,7 +47,69 @@ public class Game { this.restart = restart; } - public void start() { + private void loop(){ + List elementsNames = worldBalance.getElementsNames(); + + // setto la mappa con le pietre ancora disponibili + for (Element element : elementsNames) { + stonesPerElement.put(element, numberOfStonesPerElement); + } + + // aggiungo i tamagolem + for (int i = 0; i < numberOfTamaGolems; i++) { + player1.addTamaGolem(new TamaGolem(lifePoints)); + player2.addTamaGolem(new TamaGolem(lifePoints)); + } + + + while(!player1.getTamaGolems().isEmpty() && !player2.getTamaGolems().isEmpty()) { + // setup del primo tamagolem + setupGolem(player1.getNextTamaGolem()); + setupGolem(player2.getNextTamaGolem()); + + 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); + } + + if (player1.getTamaGolems().isEmpty()) { + System.out.println(player2.getName() + " won the game"); + } else { + System.out.println(player1.getName() + " won the first game"); + } + + + + + System.out.println("GameLoop"); + } + + private void setupGolem(TamaGolem golem) { + 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); + } + + golem.print(); + } + + + 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(); @@ -67,4 +139,45 @@ public class Game { worldBalance.printGraph(); } + private boolean checkVictory(){ + return !player1.isAlive() || !player2.isAlive(); + } + + private String[] getMenuOptions() { + List elementsNames = worldBalance.getElementsNames(); + String[] menuOptions = new String[numberOfElements]; + + for (int i = 0; i < numberOfElements; i++) { + menuOptions[i] = elementsNames.get(i) + " -> (" + stonesPerElement.get(elementsNames.get(i)) + ")"; + } + + return menuOptions; + } + + public FightEsit fight() { + TamaGolem golem1 = player1.getNextTamaGolem(); + TamaGolem golem2 = player2.getNextTamaGolem(); + + while (golem1.isAlive() && golem2.isAlive()) { + Element firstStone = golem1.useElementalStone(); + Element secondStone = golem2.useElementalStone(); + int interaction = worldBalance.getInteractionBetween(firstStone, secondStone); + + System.out.println(player1.getName() + "'s tamagolem throws " + firstStone.name() + " and " + player2.getName() + "'s tamagolem throws " + secondStone.name()); + + if (interaction > 0){ + golem2.getDamage(interaction); + System.out.println(player2.getName() + "'s tamagolem gets " + interaction + " damage"); + } else { + golem1.getDamage(-1 * interaction); + System.out.println(player1.getName() + "'s tamagolem gets " + -1 * interaction + " damage"); + } + } + + if (golem1.isAlive()){ + return FightEsit.GOLEM1; + } + return FightEsit.GOLEM2; + } + } diff --git a/src/Player.java b/src/Player.java index 201deae..dcae3ac 100644 --- a/src/Player.java +++ b/src/Player.java @@ -18,4 +18,32 @@ public class Player { public ArrayList getTamaGolems() { return tamaGolems; } + + public TamaGolem getNextTamaGolem() { + if (tamaGolems.isEmpty()) { + return null; + } else { + return tamaGolems.get(0); + } + } + + public void addTamaGolem(TamaGolem t) { + tamaGolems.add(t); + } + + public void removeTamaGolem(TamaGolem t) { + tamaGolems.remove(t); + } + + public boolean isAlive() { + for (TamaGolem golem : tamaGolems) { + if (golem.getLifePoints() > 0) { + return true; + } + } + + return false; + } + + } diff --git a/src/WorldBuilder.java b/src/WorldBuilder.java index 19a62d8..41e9a03 100644 --- a/src/WorldBuilder.java +++ b/src/WorldBuilder.java @@ -44,12 +44,14 @@ public class WorldBuilder { for (int i = 0; i < numElements; i++) { Element e1 = selectedElements.get(i); int[] row = new int[pairIndex.size()]; + for (Element e2 : selectedElements) { if (e1 == e2) continue; int dir = linkDirections.get(e1).get(e2); int pos = pairIndex.get(Set.of(e1, e2)); row[pos] = dir; } + A[i] = row; b[i] = 0; }