Add colors to texts. Add comments to code. Fixed some bugs(Keys would not replenish after game over for the next game.).

This commit is contained in:
2026-05-09 19:34:38 +03:30
parent f07c1416df
commit 1d3fd6cfb5
15 changed files with 108 additions and 98 deletions
@@ -4,12 +4,12 @@ import org.project.entity.Entity;
import org.project.entity.enemies.*;
import org.project.entity.players.Player;
import org.project.location.Location;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import static org.project.ConsoleColors.*;
public class MenuActions {
public class MenuActions { //this class contains main game logic.
private ArrayList<Location> locations;
Scanner scanner;
@@ -18,33 +18,35 @@ public class MenuActions {
this.locations = new ArrayList<>();
}
public void startGame(Player player) {
while (player.getKeysCollectedCount() < 3) {
public void startGame(Player player) { // gameplay starts from here
Skeleton.resetKeysRemaining();
Goblin.resetKeysRemaining();
Vampire.resetKeysRemaining();
while (player.getKeysCollectedCount() < 3) { //player keeps fighting until all 3 keys are collected
askInventory(player);
Enemy enemy = chooseEnemy();
Entity winner = fight(player, enemy);
if (winner != player) {
System.out.println("Game over!\nreturning to main menu...");
System.out.println(RED + "Game over!\nreturning to main menu..." + RESET);
break;
}
}
if (player.getKeysCollectedCount() == 3) {
bossFight(player);
}
}
private void bossFight(Player player) {
System.out.println("Congratulations! You have successfully collected all 3 keys\n" +
"You may now fight the Dragon");
System.out.println("Make sure to upgrade before entering the castle!");
System.out.println(GREEN + "Congratulations! You have successfully collected all 3 keys\n" +
"You may now fight the Dragon" + RESET);
System.out.println(YELLOW + "Make sure to upgrade before entering the castle!" + RESET);
askInventory(player);
System.out.println("Entering the castle...");
System.out.println(CYAN + "Entering the castle..." + RESET);
Entity winner = fight(player, new Dragon());
if (winner != player) {
System.out.println("You were killed by the dragon. Game over!\nreturning to main menu...");
System.out.println(RED + "You were killed by the dragon. Game over!\nreturning to main menu..." + RESET);
} else {
System.out.println("Congratulations! You killed the dragon and saved Javanest!");
System.out.println(GREEN + BOLD + "Congratulations! You killed the dragon and saved Javanest!" + RESET);
}
}
@@ -53,9 +55,9 @@ public class MenuActions {
Location location = new Location();
Enemy enemy = location.getEnemies().get(0);
String enemyName = enemy.getType();
System.out.println("====================================");
System.out.println("You are in the " + location.getName() + ".\nYou may fight with a "
+ enemyName);
System.out.println(CYAN + "====================================" + RESET);
System.out.println("You are in the " + YELLOW + location.getName() + RESET +
".\nYou may fight with a " + enemyName);
System.out.println("Which option do you choose?" +"\n1- Fight with the "
+ enemyName + "\n2- Skip to Another Location");
outerLoop:
@@ -67,16 +69,12 @@ public class MenuActions {
case 2:
System.out.println("You chose not to fight...Skipping to next location...");break outerLoop;
default:
System.out.println("Invalid choice. Please choose a number (1 or 2).");
System.out.println(RED + "Invalid choice. Please choose a number (1 or 2)." + RESET);
}
}
}
}
public void addLocation(String name) {
locations.add(new Location(name));
}
public Entity fight(Player player, Enemy enemy) {
player.heal(player.getMaxHP());
player.fillMana(player.getMaxMP());
@@ -85,10 +83,10 @@ public class MenuActions {
playerTurn(player, enemy);
if (enemy.getHp() == 0) {
winner = player;
System.out.println(player.getName() + " won the fight!");
System.out.println(GREEN + player.getName() + " won the fight!" + RESET);
if (!(enemy instanceof Dragon)) {
player.setXp(player.getXp()+5);
System.out.println(player.getName() + " got 5 XP for winning the fight!");
System.out.println(GREEN + player.getName() + " got 5 XP for winning the fight!" + RESET);
}
if (enemy instanceof Skeleton) {
@@ -96,7 +94,7 @@ public class MenuActions {
if (hasKey) {
player.collectKey((Skeleton) enemy);
player.setXp(player.getXp()+20);
System.out.println(player.getName() + " got a Skeleton key and 20 XP!");
System.out.println(GREEN + player.getName() + " got a Skeleton key and 20 XP!" + RESET);
}
}
if (enemy instanceof Goblin) {
@@ -104,7 +102,7 @@ public class MenuActions {
if (hasKey) {
player.collectKey((Goblin) enemy);
player.setXp(player.getXp()+10);
System.out.println(player.getName() + " got a Goblin key and 10 XP!");
System.out.println(GREEN + player.getName() + " got a Goblin key and 10 XP!" + RESET);
}
}
if (enemy instanceof Vampire) {
@@ -112,32 +110,26 @@ public class MenuActions {
if (hasKey) {
player.collectKey((Vampire) enemy);
player.setXp(player.getXp()+30);
System.out.println(player.getName() + " got a Vampire key and 30 XP!");
System.out.println(GREEN + player.getName() + " got a Vampire key and 30 XP!" + RESET);
}
}
System.out.println("Keys collected: " + player.getStringKeysCollected());
return winner;
}
enemyTurn(player, enemy);
if (player.getHp() == 0) {
winner = enemy;
System.out.println(winner.getType() + " won the fight!");
System.out.println(RED + winner.getType() + " won the fight!" + RESET);
return winner;
}
}
}
private void enemyTurn(Player player, Enemy enemy) {
System.out.println("====================================");
System.out.println("Enemy turn. Let's see what it does!");
System.out.println(CYAN + "====================================" + RESET);
System.out.println(YELLOW + "Enemy turn. Let's see what it does!" + RESET);
System.out.println("Your hp: " + player.getHp() + "/" + player.getMaxHP());
System.out.println("Enemy hp: " + enemy.getHp() + "/" + enemy.getMaxHP());
// System.out.println("1-Light attack, mana cost: 0");
// System.out.println("2-Heavy attack, mana cost: ");
// System.out.println("3-Special Ability, mana cost: ");
// System.out.println("4-Defend, mana cost: 10"); disabled
// System.out.println("5-Heal, mana cost: 20"); disabled
while (true) {
Random random = new Random();
int choice = random.nextInt(3) + 1;
@@ -152,21 +144,15 @@ public class MenuActions {
enemy.getWeapon().useSpecialAbility(enemy, player);
System.out.println(enemy.getType() + " used special ability!"); return;
} break;
// case 4: if (enemy.getMp() >= enemy.getDefendManaCost()) {
// enemy.defend(); return;
// } break;
// case 5: if (enemy.getMp() >= enemy.getHealManaCost()) {
// enemy.heal(20); return;
// } break;
default:
System.out.println("Invalid choice");
System.out.println(RED + "Invalid choice" + RESET);
}
}
}
private void playerTurn(Player player, Enemy enemy) {
System.out.println("====================================");
System.out.println("Player turn. What do you want to do?");
System.out.println(CYAN + "====================================" + RESET);
System.out.println(YELLOW + "Player turn. What do you want to do?" + RESET);
System.out.println("Your hp: " + player.getHp() + "/" + player.getMaxHP() +
"\t Your mana: " + player.getMp() + "/" + player.getMaxMP());
System.out.println("Enemy hp: " + enemy.getHp() + "/" + enemy.getMaxHP());
@@ -184,34 +170,33 @@ public class MenuActions {
player.getWeapon().heavyAttack(player, enemy);
System.out.println("You chose heavy attack.");return;
} else {
System.out.println("Not enough mana. Choose Again: "); break;
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
}
case 3: if (player.getMp() >= player.getWeapon().getSpecialMana()){
player.getWeapon().useSpecialAbility(player, enemy);
System.out.println("You chose special ability.");return;
} else {
System.out.println("Not enough mana. Choose Again: "); break;
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
}
case 4: if (player.getMp() >= player.getDefendManaCost()) {
player.defend();
System.out.println("You chose to defend."); return;
} else {
System.out.println("Not enough mana. Choose Again: "); break;
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
}
case 5: if (player.getMp() >= player.getHealManaCost()) {
player.heal(20); return;
} else {
System.out.println("Not enough mana. Choose Again:");
System.out.println(RED + "Not enough mana. Choose Again:" + RESET);
System.out.println("You chose to heal yourself.");break;
}
default:
System.out.println("Invalid choice");
System.out.println(RED + "Invalid choice" + RESET);
}
}
}
private void askInventory(Player player) {
whileLoop:
while (true) {
System.out.println("Choose an option: ");
@@ -222,16 +207,15 @@ public class MenuActions {
case 1: shop(player); break;
case 2: return;
default:
System.out.println("Invalid choice, please choose a number (1 or 2)."); break;
System.out.println(RED + "Invalid choice, please choose a number (1 or 2)." + RESET); break;
}
}
}
private void shop(Player player) {
while (true) {
System.out.println("=====Shop=====");
System.out.println("You have " + player.getXp() + " XP");
System.out.println(CYAN + "=====Shop=====" + RESET); // exactly original string
System.out.println("You have " + YELLOW + player.getXp() + " XP" + RESET);
System.out.println("Each experience point can be converted into either 1 mana or 1 hp");
System.out.println("Which option do you choose?");
System.out.println("1- Buy hp");
@@ -247,11 +231,11 @@ public class MenuActions {
int amount = getValidIntInput();
if (amount <= player.getXp()) {
player.buyHp(amount);
System.out.println("Successfully bought " + amount + " hp.");
System.out.println(GREEN + "Successfully bought " + amount + " hp." + RESET);
System.out.println("Current hp and mana: " + "\thp: " + player.getMaxHP() +"\tmana: " + player.getMaxMP());
break switchLoop;
} else if (amount > player.getXp()) {
System.out.println("Not enough XP");
System.out.println(RED + "Not enough XP" + RESET);
}
}
case 2:
@@ -260,29 +244,28 @@ public class MenuActions {
int amount = getValidIntInput();
if (amount <= player.getXp()) {
player.buyMp(amount);
System.out.println("Successfully bought " + amount + " mana.");
System.out.println(GREEN + "Successfully bought " + amount + " mana." + RESET);
System.out.println("Current maximum hp and mana: " + "\thp: " + player.getMaxHP() +"\tmana: " + player.getMaxMP());
break switchLoop;
} else if (amount > player.getXp()) {
System.out.println("Not enough XP");
System.out.println(RED + "Not enough XP" + RESET);
}
}
case 0: return;
default:
System.out.println("Invalid choice. Please choose a number from 0-2.");
System.out.println(RED + "Invalid choice. Please choose a number from 0-2." + RESET);
}
}
}
}
private int getValidIntInput() {
while (!scanner.hasNextInt()) {
System.out.print("Please enter a valid number: ");
System.out.print(RED + "Please enter a valid number: " + RESET);
scanner.next();
}
int input = scanner.nextInt();
scanner.nextLine(); // Clear buffer
return input;
}
}
}