fix engines bugs

This commit is contained in:
2026-07-16 16:59:03 +03:30
parent 71f1f272f2
commit 6f39911a34
5 changed files with 173 additions and 86 deletions
@@ -14,53 +14,60 @@ import java.util.Hashtable;
import java.util.Scanner;
public class SinglePlayerBattleEngine extends BattleEngine {
private Player player;
private Enemy enemy;
private final Player player;
private final Enemy enemy;
private Player playerPast;
private Enemy enemyPast;
public SinglePlayerBattleEngine(Player player, Enemy enemy) {
super(player, enemy);
this.player = (Player) Player1;
this.enemy = (Enemy) Player2;
playerPast = null;
enemyPast = null;
playerPast = player.copy();
enemyPast = enemy.copy();
}
@Override
public void StartBattle() {
EntityDiff playerDiff;
EntityDiff enemyDiff;
while (true) {
FightMoves playerMove = PlayerMovesMenu();
showMoveExplanation(playerMove, player, enemy);
if (player.GetState() != EntityState.FROZEN) {
FightMoves playerMove = PlayerMovesMenu();
showMoveExplanation(playerMove, player, enemyPast);
playerDiff = getPlayerDiff(playerPast, player);
enemyDiff = getPlayerDiff(enemyPast, enemy);
System.out.println();
showFighter(playerDiff, player);
showFighter(enemyDiff, enemy);
System.out.println();
}
if (playerPast.GetState() == EntityState.FROZEN) {
player.SetState(EntityState.ALIVE);
}
playerPast = player;
enemyPast = enemy;
EntityDiff playerDiff = getPlayerDiff(playerPast, player);
EntityDiff enemyDiff = getPlayerDiff(enemyPast, enemy);
showFighter(playerDiff, player);
showFighter(enemyDiff, enemy);
FightMoves botMove = enemy.PlayRound(player);
showMoveExplanation(botMove, enemy, player);
if (enemyPast.GetState() == EntityState.FROZEN) {
enemy.SetState(EntityState.ALIVE);
if (player.GetState() == EntityState.DEAD) {
return;
}
playerPast = player;
enemyPast = enemy;
playerPast = player.copy();
enemyPast = enemy.copy();
playerDiff = getPlayerDiff(playerPast, player);
enemyDiff = getPlayerDiff(enemyPast, enemy);
if (enemy.GetState() != EntityState.FROZEN) {
FightMoves botMove = enemy.PlayRound(player);
showMoveExplanation(botMove, enemy, playerPast);
showFighter(playerDiff, player);
showFighter(enemyDiff, enemy);
playerDiff = getPlayerDiff(playerPast, player);
enemyDiff = getPlayerDiff(enemyPast, enemy);
System.out.println();
showFighter(playerDiff, player);
showFighter(enemyDiff, enemy);
System.out.println();
}
if (enemy.GetState() == EntityState.DEAD) {
enemy.DropLoot(player);
@@ -68,9 +75,13 @@ public class SinglePlayerBattleEngine extends BattleEngine {
System.out.println(TextColor.Green + player.Name + " WON!" + TextColor.Reset);
return;
}
else if (player.GetState() == EntityState.DEAD) {
return;
if (enemyPast.GetState() == EntityState.FROZEN) {
enemy.SetState(EntityState.ALIVE);
}
playerPast = player.copy();
enemyPast = enemy.copy();
}
}
@@ -89,10 +100,12 @@ public class SinglePlayerBattleEngine extends BattleEngine {
System.out.println(entity.Name + ":");
String color = diff.health() > 0 ? TextColor.Green : TextColor.Red;
System.out.println(" Health: " + entity.Health + " " + color + diff.health() + TextColor.Reset);
String sign = diff.health() > 0 ? "+" : "-";
System.out.println(" Health: " + entity.Health + " " + color + sign + Math.abs(diff.health()) + TextColor.Reset);
color = diff.stamina() > 0 ? TextColor.Green : TextColor.Red;
System.out.println(" Stamina: " + entity.GetStamina() + " " + color + diff.stamina() + TextColor.Reset);
sign = diff.stamina() > 0 ? "+" : "-";
System.out.println(" Stamina: " + entity.GetStamina() + " " + color + sign + Math.abs(diff.stamina()) + TextColor.Reset);
if (diff.lostShield()) {
System.out.println(" Shield: " + entity.Shield.getName() + " " + TextColor.Red + "LOST" + TextColor.Reset);
@@ -104,12 +117,14 @@ public class SinglePlayerBattleEngine extends BattleEngine {
if (entity.Shield != null) {
color = diff.shieldHealth() > 0 ? TextColor.Green : TextColor.Red;
System.out.println(" Shield: " + entity.Shield.getName() + " " + color + diff.shieldHealth() + TextColor.Reset);
sign = diff.shieldHealth() > 0 ? "+" : "-";
System.out.println(" Shield: " + entity.Shield.getName() + " " + color + sign + Math.abs(diff.shieldHealth()) + TextColor.Reset);
}
if (entity.Costume != null) {
color = diff.costumeHealth() > 0 ? TextColor.Green : TextColor.Red;
System.out.println(" Costume: " + entity.Costume.getName() + " " + color + diff.shieldHealth() + TextColor.Reset);
sign = diff.costumeHealth() > 0 ? "+" : "-";
System.out.println(" Costume: " + entity.Costume.getName() + " " + color + sign + Math.abs(diff.shieldHealth()) + TextColor.Reset);
}
}
@@ -157,6 +172,7 @@ public class SinglePlayerBattleEngine extends BattleEngine {
}
private void showMoveExplanation(FightMoves move, Entity performer, Entity receiver) {
System.out.print(TextColor.Cyan);
switch (move) {
case FightMoves.LIGHT_ATTACK -> System.out.println(performer.Name + " performs a light attack");
case FightMoves.HEAVY_ATTACK -> System.out.println(performer.Name + " performs a heavy attack");
@@ -164,5 +180,6 @@ public class SinglePlayerBattleEngine extends BattleEngine {
case FightMoves.HEAL -> System.out.println(performer.Name + " heals");
case FightMoves.DEFEND -> System.out.println(performer.Name + " get their guard up!");
}
System.out.print(TextColor.Reset);
}
}