knight java

This commit is contained in:
2026-05-08 01:23:52 +03:30
parent 78d4bedb08
commit 592e1a0a28
52 changed files with 951 additions and 94 deletions
+250 -4
View File
@@ -1,15 +1,261 @@
package org.project;
import org.project.entity.enemies.Dragon;
import org.project.entity.enemies.Enemy;
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.consumables.Flask;
import org.project.item.weapons.Dagger;
import org.project.location.Location;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO: ADD LOCATIONS TO YOUR GAME
List<Location> locations = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in);
private static Random random = new Random();
private static Player player;
private static List<Location> locations = new ArrayList<>();
private static boolean hasGoblinKey = false;
private static boolean hasSkeletonKey = false;
private static boolean hasVampireKey = false;
private static ArrayList<Flask> inventory = new ArrayList<>();
// TODO: IMPLEMENT GAMEPLAY
public static void main(String[] args) {
System.out.println("\u001B[33m Welcome to JAVA KNIGHT \u001B[0m");
chooseClass();
//hasGoblinKey = true;
//hasVampireKey = true;
//hasSkeletonKey = true;
setupLocations();
boolean gameRunning = true;
while (gameRunning && player.isAlive()) {
Location currentLocation = locations.get(0);
System.out.println("\n\u001B[36m you are in: " + currentLocation.getName() + "\u001B[0m");
System.out.println(player.getName() + "level: " + player.getLevel() + "HP: " + player.getHp() + "/" + player.getMaxHP() + "MP" + player.getMp() + "/" + player.getMaxMP());
System.out.println("\n\u001B[33m What do you want to do?\u001B[0m");
System.out.println("1. Fight an enemy");
System.out.println("2. Move to another location");
if (hasSkeletonKey && hasGoblinKey && hasVampireKey) {
System.out.println("3.Go to castle to fight dragon !");
} else {
System.out.println("\u001B[90m🔒 Need All 3 keys: " + (hasGoblinKey ? "✓ Goblin" : "not Goblin") + " | " + (hasSkeletonKey ? "✓ Skeleton" : "not Skeleton") + " | " + (hasVampireKey ? "✓ Vampire" : "not Vampire") + "\u001B[0m");
}
System.out.println("\n Choose: ");
int choice = getIntInput();
if (choice == 1) {
fight(currentLocation);
} else if (choice == 2) {
moveLocation();
} else if (choice == 3 && hasVampireKey && hasSkeletonKey && hasGoblinKey) {
fightDragon();
break;
}
}
if (!player.isAlive()) {
System.out.println("\u001B[31m GAME OVER" + player.getName() + "has been defeated \u001B[0m");
}
}
public static int getIntInput(){
while (!scanner.hasNextInt()){
System.out.println("Enter an number: ");
scanner.next();
}
return scanner.nextInt();
}
private static void chooseClass() {
System.out.println("\n1.Knight | 2.Wizard | 3.Assassin");
System.out.println("Choose class :");
int choice = getIntInput();
System.out.println("Enter name :");
String name = scanner.next();
switch (choice) {
case 1:
player = new Knight(name);
break;
case 2:
player = new Wizard(name);
break;
case 3:
player = new Assassin(name);
break;
default:
player = new Knight(name);
}
for (int i = 0; i < 3; i++) {
inventory.add(new Flask());
}
System.out.println("You have 3 flask");
}
private static void setupLocations(){
locations = new ArrayList<>();
locations.add(new Location("Dark forest"));
locations.add(new Location("Mine"));
locations.add(new Location("Desert"));
}
private static void moveLocation(){
System.out.println("\n Locations :");
for (int i = 0; i < locations.size(); i++) {
System.out.println((i+1) + ". " + locations.get(i).getName());
}
System.out.println("Choice :");
int choice = getIntInput()-1;
Location selected = locations.get(choice);
locations.remove(choice);
locations.add(0,selected);
}
private static void fight(Location location){
Enemy enemy = location.getRandomEnemy();
System.out.println(player.getName() + " VS " + enemy.getName());
boolean enemyTurn = false;
while (player.isAlive() && enemy.isAlive()){
if(!enemyTurn){
System.out.println( player.getHp() + "/" + player.getMaxHP() + "HP|" + player.getMp() + "/" + player.getMaxMP());
System.out.println("Enemy :" + enemy.getHp() + "/" + enemy.getMaxHP() + "HP");
System.out.println("\n1.Light(0) 2.Heavy(8) 3.Defend(6) 4.Heal(12) 5.Special 6.Flask(" + inventory.size() + ")");
System.out.println("Choice: ");
int action = getIntInput();
switch (action){
case 1:
player.lightAttack(enemy);
break;
case 2:
player.heavyAttack(enemy);
break;
case 3:
player.defend();
break;
case 4:
player.heal();
break;
case 5:
player.specialAbility(enemy);
break;
case 6:
if(!inventory.isEmpty()) inventory.remove(0).use(player);
else System.out.println("No flask");
break;
default:
player.lightAttack(enemy);
}
if(!enemy.isAlive()) break;
enemyTurn = true;
}else{
System.out.println("\n " + enemy.getName() + " attacks!");
enemy.specialAbility(player);
if(!player.isAlive()) break;
enemyTurn = false;
}
}
if(!enemy.isAlive()){
System.out.println("\u001B[32 " + " Victory!" + enemy.getXpReward() + "XP\u001B[0m");
player.gainXp(enemy.getXpReward());
checkKeyDrop(enemy);
location.removeEnemy(enemy);
player.heal(30);
player.fillMana(20);
}else if(!player.isAlive()){
System.out.println("\u001B[32" + " You were killed! \u001B[0m");
}
}
private static void checkKeyDrop(Enemy enemy){
String keyType = enemy.geTKeyType();
if(keyType == null) return;
double chance = random.nextDouble();
if(keyType.equals("Goblin key") && !hasGoblinKey && chance < 0.2 ){
hasGoblinKey = true;
System.out.println("\u001B[33m Got Goblin key! (1/3) \u001B[0m");
}else if(keyType.equals("Skeleton key") && !hasSkeletonKey && chance < 0.2 ){
hasSkeletonKey = true;
System.out.println("\u001B[33m Got Skeleton key! (2/3) \u001B[0m");
}else if(keyType.equals("Vampire key") && !hasVampireKey && chance < 0.2 ){
hasVampireKey = true;
System.out.println("\u001B[33m Got Vampire key! (3/3) \u001B[0m");
}
if(hasGoblinKey && hasSkeletonKey && hasVampireKey){
System.out.println("\u001B[33m All 3 keys collected! Castle is open! \u001B[0m");
}
}
private static void fightDragon(){
Dragon dragon = new Dragon();
System.out.println("\u001B[31m FINAL BOSS! \u001B[0m");
boolean enemyTurn = false;
while(player.isAlive() && dragon.isAlive()){
if(!enemyTurn){
System.out.println("\n " + player.getHp() + "/" + player.getMaxHP() +"| " + player.getMp() + "/" + player.getMaxMP());
System.out.println("Dragon: " + dragon.getHp() + "/" + dragon.getMaxHP());
System.out.println("\n1.Light 2.Heavy 3.Defend 4.Heal 5.Special 6.Flask (" + inventory.size() + ")");
System.out.println("Choose: ");
int action = getIntInput();
switch (action) {
case 1:
player.lightAttack(dragon);
break;
case 2:
player.heavyAttack(dragon);
break;
case 3:
player.defend();
break;
case 4:
player.heal();
break;
case 5:
player.specialAbility(dragon);
break;
case 6:
if (!inventory.isEmpty()) inventory.remove(0).use(player);
break;
default:
player.lightAttack(dragon);
}
if(!dragon.isAlive()){
break;
}else{
dragon.specialAbility(player);
enemyTurn = false;
}
}
if(!dragon.isAlive()){
System.out.println("\u001B[33m You killed dragon ! \u001B[0m");
}else{
System.out.println("\u001B[31m Dragon killed you ! \u001B[0m");
}
}
}
}