Releasing version one.

This commit is contained in:
2026-05-13 13:21:41 +03:30
parent 78d4bedb08
commit 2ec3641f00
40 changed files with 562 additions and 62 deletions
+176 -6
View File
@@ -1,15 +1,185 @@
package org.project;
import org.project.entity.enemies.*;
import org.project.entity.players.Assassin;
import org.project.entity.players.Knight;
import org.project.entity.players.Player;
import org.project.entity.players.Wizard;
import org.project.item.armors.Armor;
import org.project.item.armors.KnightArmor;
import org.project.item.weapons.Sword;
import org.project.item.weapons.Weapon;
import org.project.location.Location;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO: ADD LOCATIONS TO YOUR GAME
List<Location> locations = new ArrayList<>();
// TODO: IMPLEMENT GAMEPLAY
public static void printBorder() {
for (int i = 0; i < 40; i++)
System.out.print("-");
System.out.println();
}
public static void printBorder(int x) {
for (int i = 0; i < 15; i++)
System.out.println();
for (int i = 0; i < x; i++)
System.out.print("-");
System.out.println();
}
public static int moveSelector() {
System.out.println("Choose your move:");
System.out.println("1. Light attack (Mana: 0) | 2. Normal attack (mana: 2) | 3. Heavy attack (mana: 3)");
System.out.println("4. Heal (5 mana) | 5. Skip");
Scanner in = new Scanner(System.in);
while (true) {
int answer = in.nextInt();
if (answer == 1 || answer == 2 || answer == 3 || answer == 4 || answer == 5)
return answer;
System.out.println("Invalid input try again.");
}
}
private static void fightEnemy(Player player, Location location, String enemyName, String locationDesc) {
String RED = "\u001B[31m";
String YELLOW = "\u001B[33m";
String RESET = "\u001B[0m";
System.out.printf("You're in the %s fighting a %s%s%s!\n", locationDesc, RED, enemyName, RESET);
while (player.isAlive() && location.getEnemy().getHP() > 0) {
// Player's turn: up to 5 actions
for (int i = 0; i < 5; i++) {
System.out.printf("%s | %sHP%s: %d, %sMP%s: %d\n",
player.getName(), RED, RESET, player.getHP(), YELLOW, RESET, player.getMP());
printBorder();
System.out.printf("%s | %sHP%s: %d, %sMP%s: %d\n",
enemyName, RED, RESET, location.getEnemy().getHP(), YELLOW, RESET, location.getEnemy().getMP());
System.out.println();
switch (moveSelector()) {
case 1: // Base Attack
location.getEnemy().takeDamage(player.getBaseDamage());
break;
case 2: // Normal Attack (2 mana)
if (player.useMana(2)) {
player.attack(location.getEnemy());
} else {
System.out.println("Not enough mana for Normal Attack!");
i--;
}
break;
case 3: // Heavy Attack (3 mana)
if (player.useMana(3)) {
player.heavyAttack(location.getEnemy());
} else {
System.out.println("Not enough mana for Heavy Attack!");
i--;
}
break;
case 4: // Heal (5 mana)
if (player.useMana(5)) {
player.heal(20);
} else {
System.out.println("Not enough mana to Heal!");
i--;
}
break;
}
printBorder();
// If enemy died or player died, end the player's turn early
if (location.getEnemy().getHP() <= 0 || !player.isAlive()) {
location.getEnemy().getKilled();
i = 5;
}
}
// Enemy's turn
if (location.getEnemy().getHP() > 0) {
for (int i = 0; i < 5; i++) {
location.getEnemy().attack(player);
printBorder();
if (!player.isAlive())
break;
}
}
// Restore mana after each full round
player.fillMana(6);
}
}
public static void main(String[] args) {
String RED = "\u001B[31m";
String YELLOW = "\u001B[33m";
String RESET = "\u001B[0m";
String GREEN = "\u001B[32m";
printBorder();
Scanner input = new Scanner(System.in);
System.out.println("Enter your name:");
String name = input.next();
printBorder();
Weapon sword = new Sword();
Armor armor = new KnightArmor();
Player player = null;
while (true) {
System.out.println("Chose your character:");
System.out.printf("1. Knight | %sHP%s: 100, %sMP%s: 10\n", RED, RESET, YELLOW, RESET);
System.out.printf("2. Wizard | %sHP%s: 150, %sMP%s: 10\n", RED, RESET, YELLOW, RESET);
System.out.printf("3. Assassin | %sHP%s: 80 , %sMP%s: 20\n", RED, RESET, YELLOW, RESET);
player = switch (input.nextInt()) {
case 1 -> new Knight(name, sword, armor);
case 2 -> new Wizard(name, sword, armor);
case 3 -> new Assassin(name, sword, armor);
default -> null;
};
if (player == null) {
System.out.println("Invalid input try again.");
} else
break;
}
Location overworld = new Location("Overworld", new Vampire(sword));
Location village = new Location("Village", new Goblin(sword));
Location nether = new Location("Nether", new Skeleton(sword));
Location end = new Location("End", new Dragon());
// Fight each enemy
fightEnemy(player, overworld, "Vampire", "Overworld");
if (!player.isAlive()) {
System.out.println("You lost!");
return;
}
fightEnemy(player, village, "Goblin", "Village");
if (!player.isAlive()) {
System.out.println("You lost!");
return;
}
fightEnemy(player, nether, "Skeleton", "Nether");
if (!player.isAlive()) {
System.out.println("You lost!");
return;
}
fightEnemy(player, end, "Dragon","End");
if (!player.isAlive()) {
System.out.println("You lost!");
return;
}
printBorder();
System.out.println(GREEN + " " + RESET);
System.out.println(RED + " VICTORY! " + RESET);
System.out.println(GREEN + " You have conquered all enemies! " + RESET);
System.out.println(GREEN + " The realm is safe, brave warrior. " + RESET);
System.out.println();
printBorder();
}
}