From b56299bd4e8d06cea7640df5eb031c2b66f390c1 Mon Sep 17 00:00:00 2001 From: Matin Date: Mon, 11 May 2026 23:36:58 +0330 Subject: [PATCH] Matin's implement --- .../src/main/java/org/project/GameLoop.java | 283 ++++++++++++++++++ .../src/main/java/org/project/Main.java | 4 +- .../main/java/org/project/entity/Entity.java | 9 + .../org/project/entity/enemies/Dragon.java | 47 +++ .../org/project/entity/enemies/Enemy.java | 66 +++- .../org/project/entity/enemies/Goblin.java | 47 +++ .../org/project/entity/enemies/Skeleton.java | 48 ++- .../org/project/entity/enemies/Vampire.java | 44 +++ .../org/project/entity/players/Assassin.java | 95 ++++++ .../org/project/entity/players/Knight.java | 56 +++- .../org/project/entity/players/Player.java | 135 ++++++++- .../org/project/entity/players/Wizard.java | 86 ++++++ .../java/org/project/item/armors/Armor.java | 5 + .../org/project/item/armors/KnightArmor.java | 11 +- .../project/item/consumables/Consumable.java | 24 +- .../org/project/item/consumables/Flask.java | 10 +- .../java/org/project/item/weapons/Sword.java | 20 +- .../java/org/project/item/weapons/Weapon.java | 4 +- .../java/org/project/location/Location.java | 2 +- .../target/classes/org/project/GameLoop.class | Bin 0 -> 7930 bytes .../target/classes/org/project/Main.class | Bin 0 -> 668 bytes .../classes/org/project/entity/Entity.class | Bin 0 -> 388 bytes .../org/project/entity/enemies/Dragon.class | Bin 0 -> 1832 bytes .../org/project/entity/enemies/Enemy.class | Bin 0 -> 2884 bytes .../org/project/entity/enemies/Goblin.class | Bin 0 -> 1979 bytes .../org/project/entity/enemies/Skeleton.class | Bin 0 -> 2080 bytes .../org/project/entity/enemies/Vampire.class | Bin 0 -> 1922 bytes .../org/project/entity/players/Assassin.class | Bin 0 -> 2927 bytes .../org/project/entity/players/Knight.class | Bin 0 -> 2628 bytes .../org/project/entity/players/Player.class | Bin 0 -> 5670 bytes .../org/project/entity/players/Wizard.class | Bin 0 -> 2853 bytes .../classes/org/project/item/Item.class | Bin 0 -> 153 bytes .../org/project/item/armors/Armor.class | Bin 0 -> 1052 bytes .../org/project/item/armors/KnightArmor.class | Bin 0 -> 449 bytes .../project/item/consumables/Consumable.class | Bin 0 -> 675 bytes .../org/project/item/consumables/Flask.class | Bin 0 -> 1272 bytes .../org/project/item/weapons/Sword.class | Bin 0 -> 1896 bytes .../org/project/item/weapons/Weapon.class | Bin 0 -> 777 bytes .../org/project/location/Location.class | Bin 0 -> 1239 bytes 39 files changed, 970 insertions(+), 26 deletions(-) create mode 100644 Java-Knight/src/main/java/org/project/GameLoop.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/Assassin.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/Wizard.java create mode 100644 Java-Knight/target/classes/org/project/GameLoop.class create mode 100644 Java-Knight/target/classes/org/project/Main.class create mode 100644 Java-Knight/target/classes/org/project/entity/Entity.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Dragon.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Enemy.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Goblin.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Vampire.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Assassin.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Knight.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Player.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Wizard.class create mode 100644 Java-Knight/target/classes/org/project/item/Item.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/Armor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/KnightArmor.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Consumable.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Flask.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Sword.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Weapon.class create mode 100644 Java-Knight/target/classes/org/project/location/Location.class diff --git a/Java-Knight/src/main/java/org/project/GameLoop.java b/Java-Knight/src/main/java/org/project/GameLoop.java new file mode 100644 index 0000000..e32f5cc --- /dev/null +++ b/Java-Knight/src/main/java/org/project/GameLoop.java @@ -0,0 +1,283 @@ +package org.project; + +import org.project.entity.Entity; +import org.project.entity.enemies.*; +import org.project.entity.players.*; +import org.project.location.Location; +import org.project.item.weapons.Sword; +import org.project.item.armors.KnightArmor; + +import java.util.ArrayList; +import java.util.Scanner; + +public class GameLoop +{ + private Player player; + private Enemy currentEnemy; + private Scanner scanner; + private boolean hasGoblinKey; + private boolean hasSkeletonKey; + private boolean hasVampireKey; + private boolean gameRunning; + + public GameLoop() { + scanner = new Scanner(System.in); + hasGoblinKey = false; + hasSkeletonKey = false; + hasVampireKey = false; + gameRunning = true; + } + + public void start() { + System.out.println(" Welcome to Java Knight! "); + System.out.println("================================"); + + chooseClass(); + + while (gameRunning) { + mainMenu(); + } + + scanner.close(); + } + + private void chooseClass() { + System.out.println("\nChoose your class:"); + System.out.println("1. Knight (High HP, High Damage)"); + System.out.println("2. Wizard (Highest HP, Spellcaster)"); + System.out.println("3. Assassin (Highest MP, Critical Hits)"); + System.out.print("Enter choice (1-3): "); + + int choice = scanner.nextInt(); + scanner.nextLine(); + + switch (choice) { + case 1: + player = new Knight("Sir Duncan"); + System.out.println("You have chosen the Knight!"); + break; + case 2: + player = new Wizard("Merlin"); + System.out.println("You have chosen the Wizard!"); + break; + case 3: + player = new Assassin("Shadow"); + System.out.println("You have chosen the Assassin!"); + break; + default: + player = new Knight("Sir Duncan"); + System.out.println("Default: Knight chosen!"); + } + + System.out.println("\n" + player.getName() + " the " + player.getPlayerClass()); + System.out.println("HP: " + player.getHP() + "/" + player.getMaxHP()); + System.out.println("MP: " + player.getMP() + "/" + player.getMaxMP()); + } + + private void mainMenu() { + System.out.println("\n================================="); + System.out.println("Location: Forest of Shadows"); + System.out.println("Player: " + player.getName() + " (Level " + player.level() + ")"); + System.out.println("HP: " + player.getHP() + "/" + player.getMaxHP()); + System.out.println("MP: " + player.getMP() + "/" + player.getMaxMP()); + System.out.println("================================="); + System.out.println("1.Fight Enemy"); + System.out.println("2.Move to another location"); + + if (hasAllKeys()) { + System.out.println("3.Go to Castle to fight the Dragon!"); + } + + System.out.println("4.Quit Game"); + System.out.print("Choose: "); + + int choice = scanner.nextInt(); + scanner.nextLine(); + + switch (choice) { + case 1: + spawnEnemy(); + combat(); + break; + case 2: + System.out.println("You move to a new location..."); + break; + case 3: + if (hasAllKeys()) { + fightDragon(); + } else { + System.out.println("You need all 3 keys to enter the Castle!"); + } + break; + case 4: + System.out.println("Thanks for playing Java Knight!"); + gameRunning = false; + break; + default: + System.out.println("Invalid choice!"); + } + } + + + private boolean hasAllKeys() { + return hasGoblinKey && hasSkeletonKey && hasVampireKey; + } + + private void spawnEnemy() { + int random = (int)(Math.random() * 3); + switch (random) { + case 0: + currentEnemy = new Goblin(); + break; + case 1: + currentEnemy = new Skeleton(); + break; + case 2: + currentEnemy = new Vampire(); + break; + } + } + + private void combat() { + System.out.println("\n COMBAT STARTED! "); + System.out.println("================================="); + + while (player.isAlive() && currentEnemy.isAlive()) { + playerTurn(); + if (currentEnemy.isAlive()) { + enemyTurn(); + } + } + + if (player.isAlive()) { + System.out.println("\n VICTORY! "); + handleVictory(); + } else { + System.out.println("\n GAME OVER! You have been defeated! "); + gameRunning = false; + } + } + + private void playerTurn() { + System.out.println("\n--- YOUR TURN ---"); + System.out.println("[" + player.getName() + " - " + player.getHP() + "/" + player.getMaxHP() + " HP | " + + player.getMP() + "/" + player.getMaxMP() + " MP]"); + System.out.println("[" + currentEnemy.getName() + " - " + currentEnemy.getHP() + "/" + currentEnemy.getMaxHP() + " HP]"); + System.out.println("\nChoose action:"); + System.out.println("1. Light Attack (0 MP)"); + System.out.println("2. Heavy Attack (-10 MP)"); + System.out.println("3. Defend (-6 MP)"); + System.out.println("4. Heal (-12 MP)"); + System.out.println("5. Special Ability (-15/18 MP)"); + System.out.print("Choice: "); + + int choice = scanner.nextInt(); + scanner.nextLine(); + + switch (choice) { + case 1: + player.lightAttack(currentEnemy); + break; + case 2: + player.heavyAttack(currentEnemy); + break; + case 3: + player.defend(); + break; + case 4: + player.heal(25); + break; + case 5: + player.specialAbility(currentEnemy); + break; + default: + System.out.println("Invalid! Using Light Attack."); + player.lightAttack(currentEnemy); + } + + System.out.println("\nPress Enter to continue..."); + scanner.nextLine(); + } + + private void enemyTurn() { + System.out.println("\n--- ENEMY TURN ---"); + currentEnemy.attack(player); + System.out.println("\nPress Enter to continue..."); + scanner.nextLine(); + } + + private void handleVictory() { + int xpReward = currentEnemy.getXpReward(); + player.gainXp(xpReward); + System.out.println("Earned " + xpReward + " XP!"); + + checkKeyDrop(); + + player.restoreAfterBattle(); + + System.out.println("\nPress Enter to continue..."); + scanner.nextLine(); + } + + private void checkKeyDrop() { + String enemyType = currentEnemy.getEnemyType(); + int dropChance = 30; + + if (Math.random() * 100 < dropChance) { + switch (enemyType) { + case "GOBLIN": + if (!hasGoblinKey) { + hasGoblinKey = true; + System.out.println("You obtained the GOBLIN KEY! (1/3)"); + } else { + System.out.println("You already have the Goblin Key."); + } + break; + case "SKELETON": + if (!hasSkeletonKey) { + hasSkeletonKey = true; + System.out.println("You obtained the SKELETON KEY! (2/3)"); + } else { + System.out.println("You already have the Skeleton Key."); + } + break; + case "VAMPIRE": + if (!hasVampireKey) { + hasVampireKey = true; + System.out.println("You obtained the VAMPIRE KEY! (3/3)"); + } else { + System.out.println("You already have the Vampire Key."); + } + break; + } + } else { + System.out.println("No key dropped this time... Keep fighting!"); + } + } + + private void fightDragon() { + System.out.println("\nYou enter the Castle and face the DRAGON!"); + System.out.println("THE FINAL BOSS APPEARS!"); + + currentEnemy = new Dragon(); + + while (player.isAlive() && currentEnemy.isAlive()) { + playerTurn(); + if (currentEnemy.isAlive()) { + enemyTurn(); + } + } + + if (player.isAlive()) { + System.out.println("\nCONGRATULATIONS!"); + System.out.println("You have slain the Dragon and broken the curse!"); + System.out.println("The land of Javanest is saved!"); + System.out.println("YOU WIN!"); + gameRunning = false; + } else { + System.out.println("\nThe Dragon has defeated you!"); + System.out.println("The curse remains... Game Over!"); + gameRunning = false; + } + } +} diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java index 6bde20e..3d8ef4d 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -1,7 +1,7 @@ package org.project; import org.project.location.Location; - +import org.project.GameLoop; import java.util.ArrayList; import java.util.List; @@ -11,5 +11,7 @@ public class Main { List locations = new ArrayList<>(); // TODO: IMPLEMENT GAMEPLAY + GameLoop game = new GameLoop(); + game.start(); } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/Entity.java b/Java-Knight/src/main/java/org/project/entity/Entity.java index 2a060f9..2174f4a 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -13,8 +13,17 @@ public interface Entity { int getMaxHP(); + int getHP(); + int getMaxMP(); + int getMP(); + + String getName(); + + boolean isAlive(); + + /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java new file mode 100644 index 0000000..a388d7e --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -0,0 +1,47 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Dragon extends Enemy +{ + + public Dragon() + { + super("Dragon", 150, 100, null); + } + + @Override + public int getXpReward() + { + return 500; + } + + @Override + public String getEnemyType() + { + return "DRAGON"; + } + + @Override + public void attack(Entity target) + { + int damage = 35; + System.out.println("DRAGON uses FIRE BREATH for " + damage + " damage!"); + System.out.println("The fire breath bypasses all defenses!"); + target.takeDamage(damage); + } + + @Override + public void takeDamage(int damage) + { + super.takeDamage(damage); + if (isAlive()) { + System.out.println("HP: " + getHP() + "/" + getMaxHP()); + } + } + @Override + public int getMaxMP() { + return 0; + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index e019acb..32e4387 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java @@ -1,34 +1,88 @@ package org.project.entity.enemies; +import org.project.entity.Entity; import org.project.item.weapons.Weapon; // TODO: UPDATE IMPLEMENTATION -public abstract class Enemy { +public abstract class Enemy implements Entity { Weapon weapon; private int hp; + private int maxHp; private int mp; + private int maxMp; + private String name; - public Enemy(int hp, int mp, Weapon weapon) { + + public Enemy(String name, int hp, int mp, Weapon weapon) { + this.name = name; this.hp = hp; + this.maxHp = hp; this.mp = mp; - + this.maxMp = mp; this.weapon = weapon; + } @Override - public void takeDamage(int damage) { + public void takeDamage(int damage) + { hp -= damage; + if (hp < 0) + hp = 0; + System.out.println("HP: " + hp + "/" + maxHp); } - public int getHp() { + public int getHP() { return hp; } - public int getMp() { + public int getMaxHP() {return maxHp;} + + public int getMP() { return mp; } + @Override + public void fillMana(int mana) + { + this.mp += mana; + if (mp > maxMp) + mp = maxMp; + System.out.println( name + " restored " + mana + " MP (" + mp + "/" + maxMp + ")"); + } + public Weapon getWeapon() { return weapon; } + + public void setWeapon(Weapon weapon) { this.weapon = weapon; } + + @Override + public void defend() + { + System.out.println(name+" defends!"); + } + + @Override + public void heal(int health) + { + hp += health; + if(hp > maxHp) + hp = maxHp; + System.out.println(name + " add " + health + " hp (" + hp + "/" + maxHp +")"); + } + + @Override + public String getName() {return name;} + + @Override + public boolean isAlive(){ return hp > 0;} + + public void setHp(int hp) + { + this.hp = Math.max(0,Math.min(hp,maxHp)); + } + + public abstract int getXpReward(); + public abstract String getEnemyType(); } diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java new file mode 100644 index 0000000..f7a1e59 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,47 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Goblin extends Enemy +{ + + public Goblin() + { + super("Goblin", 30, 20, null); + } + + public Goblin(Weapon weapon) + { + super("Goblin", 30, 20, weapon); + } + + @Override + public int getXpReward() { + return 50; + } + + @Override + public String getEnemyType() { + return "GOBLIN"; + } + + @Override + public void attack(Entity target) + { + boolean isCritical = Math.random() < 0.3; + int damage = isCritical ? 25 : 12; + System.out.print(getName() + " attacks"); + if (isCritical) { + System.out.print(" with CRITICAL hit!"); + } + System.out.println(" for " + damage + " damage!"); + + target.takeDamage(damage); + } + + @Override + public int getMaxMP() { + return 0; + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java index 8a6a555..84cbd9a 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java @@ -1,6 +1,52 @@ package org.project.entity.enemies; +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + // TODO: UPDATE IMPLEMENTATION -public class Skeleton { +public class Skeleton extends Enemy { // TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR + private boolean hasRevived = false; + + public Skeleton() { + super("Skeleton", 40, 15, null); + } + + public Skeleton(Weapon weapon) { + super("Skeleton", 40, 15, weapon); + } + + @Override + public void attack(Entity target) { + int damage = 15; + System.out.println(getName() + " shoots an arrow for " + damage + " damage!"); + target.takeDamage(damage); + } + + @Override + public void takeDamage(int damage) { + super.takeDamage(damage); + + if (!isAlive() && !hasRevived) { + hasRevived = true; + int revivedHp = getMaxHP() / 2; + setHp(revivedHp); + System.out.println(getName() + " rises again with " + revivedHp + " HP"); + } + } + + @Override + public int getMaxMP() { + return 0; + } + + @Override + public int getXpReward() { + return 70; + } + + @Override + public String getEnemyType() { + return "SKELETON"; + } } diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java new file mode 100644 index 0000000..28aee82 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,44 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Vampire extends Enemy +{ + + public Vampire() + { + super("Vampire", 50, 25, null); + } + + public Vampire(Weapon weapon) + { + super("Vampire", 50, 25, weapon); + } + + @Override + public void attack(Entity target) + { + int damage = 18; + int lifestealAmount = damage / 2; + System.out.println(getName() + " bites for " + damage + " damage!"); + target.takeDamage(damage); + int newHp = getHP() + lifestealAmount; + setHp(newHp); + System.out.println("HP: " + getHP() + "/" + getMaxHP()); + } + @Override + public int getXpReward() { + return 80; + } + + @Override + public String getEnemyType() { + return "VAMPIRE"; + } + + @Override + public int getMaxMP() { + return 0; + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java new file mode 100644 index 0000000..1dfd8dc --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -0,0 +1,95 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.item.armors.Armor; +import org.project.item.weapons.Weapon; + +public class Assassin extends Player +{ + private boolean isInvisible = false; + private boolean nextAttackCritical = false; + + public Assassin(String name) { + super(name, 70, 100, null, null, "Assassin", 0, 70, 100); + } + + @Override + public void lightAttack(Entity target) + { + int damage = 15; + if (nextAttackCritical) + { + damage *= 2; + System.out.println("CRITICAL HIT! "); + nextAttackCritical = false; + } + System.out.println(name + " (Assassin) used Light Attack! (0 MP)"); + target.takeDamage(damage); + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void specialAbility(Entity target) + { + if (getMP() >= 15) + { + fillMana(-15); + isInvisible = true; + nextAttackCritical = true; + System.out.println(name + " turns INVISIBLE! (-15 MP)"); + System.out.println("Next attack will be a guaranteed CRITICAL HIT!"); + System.out.println("Will dodge the next incoming attack completely!"); + } + else + System.out.println("Not enough MP for Special Ability!"); + + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + + } + + @Override + public void heavyAttack(Entity target) + { + if (getMP() >= 10) + { + fillMana(-10); + int damage = 28; + if (nextAttackCritical) + { + damage *= 2; + System.out.println("CRITICAL HIT! "); + nextAttackCritical = false; + } + System.out.println(name + " used Heavy Attack! (-10 MP)"); + target.takeDamage(damage); + } + else + System.out.println("Not enough MP!"); + + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void defend() { + if (getMP() >= 6) { + fillMana(-6); + super.defend(); + System.out.println("Defensive stance! (-6 MP)"); + } else { + System.out.println("Not enough MP!"); + } + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void heal(int health) { + if (getMP() >= 12) { + fillMana(-12); + super.heal(health); + System.out.println("Healed! (-12 MP)"); + } else { + System.out.println("Not enough MP!"); + } + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/players/Knight.java b/Java-Knight/src/main/java/org/project/entity/players/Knight.java index 14d8fa2..e5d496b 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Knight.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java @@ -1,6 +1,60 @@ package org.project.entity.players; +import org.project.entity.Entity; +import org.project.item.weapons.Sword; +import org.project.item.weapons.Weapon; + // TODO: UPDATE IMPLEMENTATION -public class Knight { +public class Knight extends Player { // TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR + public Knight(String name) { + super(name, 80, 50, null, null, "Knight", + 0, 80, 50); + + } + + public void lightAttack(Entity target) { + int damage = 20; + System.out.println(name + " (Knight) used Light Attack! (0 MP)"); + target.takeDamage(damage); + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + + public void heavyAttack(Entity target) { + if (getMP() >= 8) { + fillMana(-8); + int damage = 35; + System.out.println(name + " (Knight) used Heavy Attack! (-8 MP)"); + target.takeDamage(damage); + } + else { + System.out.println("Not enough MP for Heavy Attack! (Need 8, have " + getMP() + ")"); + } + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + @Override + public void heal(int health) { + if (getMP() >= 12) { + fillMana(-12); + super.heal(health); + System.out.println(name + " used Heal! (-12 MP)"); + } else { + System.out.println("Not enough MP to heal! (Need 12, have " + getMP() + ")"); + } + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + + public void specialAbility(Entity target) { + if (getMP() >= 15) { + fillMana(-15); + int damage = 40; + System.out.println(name + " (Knight) used SHIELD BASH! (-15 MP)"); + System.out.println("The enemy is STUNNED and loses their next turn!"); + target.takeDamage(damage); + } + else + System.out.println("Not enough MP for Shield Bash! (Need 15, have " + getMP() + ")"); + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Player.java b/Java-Knight/src/main/java/org/project/entity/players/Player.java index ff5385c..e5ce349 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Player.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java @@ -5,22 +5,45 @@ import org.project.item.armors.Armor; import org.project.item.weapons.Weapon; // TODO: UPDATE IMPLEMENTATION -public abstract class Player { +public abstract class Player implements Entity { protected String name; - Weapon weapon; + private Weapon weapon; Armor armor; private int hp; private int maxHP; private int mp; private int maxMP; + private int level; + private boolean isAlive; + private String playerClass; + private int XP; + private int XPNeedToNextLevel; + private int baseDamage; + private int specialDamage; + private boolean hasGoblinKey; + private boolean hasSkeletonkey; + private boolean hasVampireKey; + private boolean isDefending; - public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { + public Player(String name, int hp, int mp, Weapon weapon, Armor armor, String playerClass, int XP, + int maxHP, int maxMP) { this.name = name; this.hp = hp; this.mp = mp; this.weapon = weapon; this.armor = armor; + this.playerClass = playerClass; + this.XP = XP; + this.maxHP = maxHP; + this.maxMP = maxMP; + this.level = 1; + this.XPNeedToNextLevel = 100; + this.isAlive = true ; + this.baseDamage = weapon !=null ? weapon.getDamage() : 10; + this.hasGoblinKey = false; + this.hasSkeletonkey = false; + this.hasVampireKey = false; } @Override @@ -29,14 +52,35 @@ public abstract class Player { } @Override - public void defend() { + public void defend() + { // TODO + this.isDefending = true ; + System.out.println(name + " is defending "); } @Override public void takeDamage(int damage) { - hp -= damage - armor.getDefense(); + if (isDefending) + { + damage /= 2; + isDefending = false; + System.out.println("Defense halved the damage to " + damage + "!"); + } + if (armor != null) + { + int finalDamage = damage - armor.getDefense(); + if (finalDamage >= 0) + hp -= finalDamage; + } + else + hp -= damage; + if (hp <= 0) + { + isAlive = false; + hp = 0; + } } @Override @@ -60,7 +104,7 @@ public abstract class Player { return name; } - public int getHp() { + public int getHP() { return hp; } @@ -69,7 +113,7 @@ public abstract class Player { return maxHP; } - public int getMp() { + public int getMP() { return mp; } @@ -82,8 +126,85 @@ public abstract class Player { return weapon; } + public void setWeapon(Weapon weapon) + { + this.weapon = weapon; + } + public Armor getArmor() { return armor; } + public void setArmor(Armor armor) + { + this.armor = armor; + } + + public int level() + { + return level; + } + + @Override + public boolean isAlive() + { + return isAlive; + } + + public abstract void lightAttack(Entity target); + public abstract void specialAbility(Entity target); + public abstract void heavyAttack(Entity target); + + public String getPlayerClass() + { + return playerClass; + } + public void gainXp(int amount) { + this.XP += amount; + System.out.println(amount + " XP! (Total: " + XP + "/" + XPNeedToNextLevel + ")"); + + while (XP >= XPNeedToNextLevel) { + XP -= XPNeedToNextLevel; + level++; + int oldMaxHP = maxHP; + int oldMaxMP = maxMP; + maxHP += 15; + maxMP += 10; + hp = maxHP; + mp = maxMP; + XPNeedToNextLevel = level * 100; + + System.out.println(" LEVEL UP! Now level " + level + "! 🎉"); + System.out.println(" HP: " + oldMaxHP + " → " + maxHP); + System.out.println(" MP: " + oldMaxMP + " → " + maxMP); + } + } + + public void restoreAfterBattle() { + hp = maxHP; + mp = maxMP; + System.out.println(name + " fully restored!"); + System.out.println(" HP: " + hp + "/" + maxHP + " | MP: " + mp + "/" + maxMP); + } + + public boolean hasGoblinKey() { return hasGoblinKey; } + public boolean hasSkeletonKey() { return hasSkeletonkey; } + public boolean hasVampireKey() { return hasVampireKey; } + + public void addGoblinKey() { hasGoblinKey = true; } + public void addSkeletonKey() { hasSkeletonkey = true; } + public void addVampireKey() { hasVampireKey = true; } + + public boolean hasAllKeys() { + return hasGoblinKey && hasSkeletonkey && hasVampireKey; + } + + public int getXP() { + return XP; + } + + public int getXPNeedToNextLevel() { + return XPNeedToNextLevel; + } + } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java new file mode 100644 index 0000000..0a85f16 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -0,0 +1,86 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; +import org.project.item.armors.Armor; + +public class Wizard extends Player +{ + public Wizard(String name) + { + super(name, 90, 70, null, null, "Wizard", 0, 90, 70); + } + + public Wizard(String name, Weapon weapon, Armor armor) + { + super(name, 90, 70, weapon, armor, "WIZARD", 0, 90, 70); + } + + @Override + public void lightAttack(Entity target) + { + int damage = 18; + System.out.println(name + " (Wizard) used Light Attack! (0 MP)"); + target.takeDamage(damage); + System.out.println(name + " MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void specialAbility(Entity target) + { + if (getMP() >= 18) { + fillMana(-18); + target.takeDamage(35); + super.heal(20); + System.out.println("ARCANE NOVA! 35 damage + 20 heal (-18 MP)"); + } else { + System.out.println("Not enough MP for Special Ability!"); + } + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void heavyAttack(Entity target) + { + if (getMP() >= 10) + { + fillMana(-10); + System.out.println(name + " used Heavy Attack! (-10 MP)"); + target.takeDamage(30); + } + else + System.out.println("Not enough MP!"); + + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void defend() + { + if (getMP() >= 6) + { + fillMana(-6); + super.defend(); + System.out.println("Defensive stance! (-6 MP)"); + } + else + System.out.println("Not enough MP!"); + + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } + + @Override + public void heal(int health) + { + if (getMP() >= 12) + { + fillMana(-12); + super.heal(health); + System.out.println("Healed! (-12 MP)"); + } + else + System.out.println("Not enough MP!"); + + System.out.println("MP: " + getMP() + "/" + getMaxMP()); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/Armor.java b/Java-Knight/src/main/java/org/project/item/armors/Armor.java index 7ca8774..969114e 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/Armor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/Armor.java @@ -12,6 +12,9 @@ public abstract class Armor { public Armor(int defense, int durability) { this.defense = defense; this.durability = durability; + this.maxDefense = defense; + this.maxDurability = durability; + this.isBroke = false; } public void checkBreak() { @@ -36,6 +39,8 @@ public abstract class Armor { return durability; } + public int getMaxDurability() { return maxDurability; } + public boolean isBroke() { return isBroke; } diff --git a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java index eb59a46..9464ecf 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java @@ -1,6 +1,15 @@ package org.project.item.armors; // TODO: UPDATE IMPLEMENTATION -public class KnightArmor { +public class KnightArmor extends Armor +{ + public KnightArmor() + { + super(15, 50); + } + public KnightArmor(int defense, int durability) + { + super(defense, durability); + } // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java b/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java index 028e13d..e8b32e9 100644 --- a/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java +++ b/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java @@ -1,8 +1,30 @@ package org.project.item.consumables; +import org.project.entity.Entity; + // TODO: UPDATE IMPLEMENTATION -public abstract class Consumable { +public abstract class Consumable +{ /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ + protected String name; + protected int value; + + public Consumable(String name, int value) + { + this.name = name; + this.value = value; + } + public abstract void use(Entity target); + + public String getName() + { + return name; + } + + public int getValue() + { + return value; + } } diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java index c0e7a6d..acc7fd2 100644 --- a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java +++ b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java @@ -3,14 +3,20 @@ package org.project.item.consumables; import org.project.entity.Entity; // TODO: UPDATE IMPLEMENTATION -public class Flask { +public class Flask extends Consumable +{ + public Flask(String name, int value) { + super("Flask", 0); + } /* THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN. */ // TODO: UPDATE USE METHOD @Override - public void use(Entity target) { + public void use(Entity target) + { target.heal(target.getMaxHP() / 10); + System.out.println("Used Flask! Healed " + target.getMaxHP() /10 + " HP."); } } diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java index 96226ee..6d39455 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java @@ -5,22 +5,36 @@ import org.project.entity.Entity; import java.util.ArrayList; // TODO: UPDATE IMPLEMENTATION -public class Sword { +public class Sword extends Weapon { /* THIS IS AN EXAMPLE OF A WEAPON DESIGN. */ - int abilityCharge; + private int abilityCharge; public Sword() { // TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR + super(15,5); + this.abilityCharge = 0; + } + + public Sword(int damage, int manaCost) + { + super(damage, manaCost); + this.abilityCharge = 0; } // TODO: (BONUS) UPDATE THE UNIQUE ABILITY public void uniqueAbility(ArrayList targets) { abilityCharge += 2; for (Entity target : targets) { - target.takeDamage(getDamage()); + target.takeDamage(getDamage() + abilityCharge); } + System.out.println("Sword's unique ability! Damage: " + (getDamage() + abilityCharge)); + } + + public int getAbilityCharge() + { + return abilityCharge; } } diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java b/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java index cb9fcf2..93d5f79 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java @@ -3,7 +3,7 @@ package org.project.item.weapons; import org.project.entity.Entity; // TODO: UPDATE IMPLEMENTATION -public abstract class Weapon { +public class Weapon { private int damage; private int manaCost; @@ -16,7 +16,7 @@ public abstract class Weapon { this.manaCost = manaCost; } - @Override + public void use(Entity target) { target.takeDamage(damage); } diff --git a/Java-Knight/src/main/java/org/project/location/Location.java b/Java-Knight/src/main/java/org/project/location/Location.java index b0b4b98..56de67f 100644 --- a/Java-Knight/src/main/java/org/project/location/Location.java +++ b/Java-Knight/src/main/java/org/project/location/Location.java @@ -6,8 +6,8 @@ import java.util.ArrayList; public class Location { private String name; - private ArrayList enemies; + private ArrayList locations; public Location(ArrayList locations, ArrayList enemies) { this.locations = locations; diff --git a/Java-Knight/target/classes/org/project/GameLoop.class b/Java-Knight/target/classes/org/project/GameLoop.class new file mode 100644 index 0000000000000000000000000000000000000000..1370e77be1ff59b2566a77e95e83f9ae173f538a GIT binary patch literal 7930 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 F{}=TJurmMv literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/Main.class b/Java-Knight/target/classes/org/project/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..a9ea04881482f81798de868baec00f1c9e509040 GIT binary patch literal 668 zcmZva%}(1u6ot=_A15XdH-XUd)6%kms;bp>5K>hE8v_eaB*bbGEO(G&hsmT8kJU|) ziqr?_LsdQ3X+%Kv;$F`^bH6)h?B9QW{sM4_9UluQc_=qfK~*8R(cg5K>MRM*`Zw{w zDOC4OX54{7X?L&Zp{CF-HcgyK!_U_0yU2{44^KFY3M;uy!ja9TJ3Q9IILh;p4<987 z%MCPTP-X12bsk=D=6u76Hkm^COMV?IG$WJ6r;}knwimjeveJt3flhnc8d?7^L%0l@sW{hsEfOgVhC>$@Ds|j0A4Gq zj4iH0X2o22e-HJ&klTzR12wELHl`b}iVjzGtl=dq(tIm_1@r0yyvuvkqX+oRjgt>Q zuq3b&1lB^Cagn%Xo}x);P=L3m&3J`%>NPB31Diw#Jl_^x6aI#E89&vw`KIVZJiPl0 DgSC(v literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/Entity.class b/Java-Knight/target/classes/org/project/entity/Entity.class new file mode 100644 index 0000000000000000000000000000000000000000..a2468586e49b5190183a33bb637be35be3deda5f GIT binary patch literal 388 zcmZ{g%}xR_6opR_W{~j*75_G_hmG?9tW3m6!l(&}3wPI{)IymtVi_s7`uWFUO*411VHj|~*_A?uL#Aph1=d_~CP^q%}XXg=! z$XY5E0vGA{-|(RS$j+&p$#N>NmAbO|BFQk)k*nG>ZA?xj33Mziold z4|z!PU{`p^2jqM5oXY8$2^OF-Rm|{|4PZG?}hpONET-I(#RP8?ZxMt8#iF1*TPL3edrhHZ$Uf@=`E1*Pqe_D zn9KF^TO`t?Q?gOWGNG)ETevMS)R4z&+4m|^@4Nblr%+2zhxE;rX0L~u!61e#yk}z= z?+e_Dm@nfCSWUxL_YBB&2$RaFz|8KEat_@#r;@dFjs0< z!^nG&Aujt>QuLKwPi>qu4pgu!59-up%YH@H_hjIjd!p>rM=skkd1+Lx3|kz3L7<1> zyl8H#S2Cyy*t|t^xO>(l{Ow$u#&Wi#*0OReFqUh_5m%XmNJ}jPLJEw$!;ogxq!*$j z(7R*6*JU$FCn?xEYnj>cPlAeCb4~6&aSjV+usGREzOO?a$mY7zM}9R-gILq?7C0wn zTGmS2tIpE)>f&zEIrIZZI5F)+8sD&!#jVGV$cw&itY@%+O$%G5JKqXSz1uHf8(bytsGMTqE<>&Dpl_3BRB6 zRzMd|K<`{u4B)5!s(6Fc?^JZ)Gk!CaKo4Ik8=v!J$HsVsFL)DpjQIp;fzkkV4v2q# zrHuUz88Fb|+j-$zz>~z+U>Lhp_Qr2lT!&g*Qx~pJ@hov|kSIl;@&3uDf1qddoMd>7 zJ3MDcC?AaeiMt(mo6#T>2JX^njPLF^hT!lt5z#m?R6;{ge2K3}l)@+$u|z7qJh+!o zyVRTNICCR!Fgf=cQ@>!4ygbeEf8iV-Mxhw)R8-Au)PfmCaG#aT5q~b?9gJ}<0M?UDD*?#OtCsrSIa!#Qmc*xEX7|v(~LDdr@YBincl_d`!%+y%kaK~@34>I F{{UP$py>br literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class new file mode 100644 index 0000000000000000000000000000000000000000..9b1d7d0e2f20bd0e15ee12608f5217e5730607b3 GIT binary patch literal 2884 zcmai0TT>KA6#kmM%(4u^BA|%qqNuxT;ucHeryZkha?pei--Jx{HRpE?irT>rXp4J>FGX~?|kRBxp9&^N#9dC_m#&f28%b;v{ydIdVxn*ySuj`~a-R!6CZ{ARAH zP6kX2YNdw$JZfU-twL3w44XKP5kh@!$)@WFjLt`a*}l~%2UlMCkyc^wlgJwwHE{~3 z_vF2}I#>82i6FAb48`iYztV;ip?XPp^`O@({ zfx$whQaqS<7Dbc{oHy|v-WNEmiP;-Kz-X#)b>=cqIOw9d+y{ZOLU2)_7^6{%4c*6T zUs6_=1d>-Y?K+@F9O$NfK)2)tYC4O%{A@T*jzpHwqxDjY^+$VCAm`9?dGn^`m$`<>N`A4 z`s+5!a%zw3xUQWP$oj16UD=Rp^p-4CRJ3$0{O(@#N>wCLnb(24@53&lN<;`&vf)7!NeE4rTg~ugQo;7_)a_Tyov;2W6JhYVra%`BA2%ObuVssFO@8TTzO>b( zYIf1xY^_?ewyHo@UtCbW`MjoF*Z2IEY*sCQ-K}{UtT4#j!bDz_MF#XWAo4BC^WBzJ z%Zq$*@=P&d#}-OXMc+fB-LUb!1q zImj(|sIzjFkvN^ckM>@u7(kqpPOWZvWAm=NvDutFNK)ivkD=lsM*UetKNzi(QRYJz z)3RP)Wc}HJX2o%=)^uHZp5+<%THwrqoZ_GwV2_{pe^s_ZkXLe)^Rl---b~-zKw3R&zSlH#K>x= z(01sZ!kN%Jl}VEKv$z-Hd(9iARVqFC1KqmPous>uz1kNkwLl9D_M zC^UxOUhUvQERPq-;|HwoCD!ONuClhO!U2!tZ63$*Aj;ziDO$j%TvfA0c|7*(J|3^d zX7dn>q45NBQQ4$bmqvOqsKP`9O}dRHt>1k`hPxHRx;sf_E@U{@Zc@!~*r`|A5u=?tLxyL`@I5j-M}{kroT3ab z?`QZC9*4 iORgRG3ePEzF_6vBQm?Cewe-3Mm-kuTHPM2Pq5lAZ04_@a literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class new file mode 100644 index 0000000000000000000000000000000000000000..34dee23a3ecab8651e06aa3834b20b6da665d4fa GIT binary patch literal 1979 zcmah~TUQ%Z6#fngnUG8&O`(;m;Zh7x8g129)6znKHj)4mgxY#Lgb}7BGg&i-BLAeW z<$GUzus&4ngHJyB>fdp>{N^Gg5H(rr-16;j@BN*}+aC1wXk7;T-I>~ZwRDLtt!VZeG+aTDuKQrLetKzGd#s04O!18 zFn~b~Lpp{rA~4z<@tK?hkp#3oL#@iXA<&zhI-ho$!e(@gVocylT^<+(+p0>nZK{2) zTqP~#3QV>UtPNQL6S%5jQpa1!3S9D&YfV9*v*9Jg4BK&1;b|IXj_5yA*eGrm3-hJS zzNtpj5V+lDL7J8s63M9^Mz|ZzI@}Un>F$#q1YlUG7n< zC_QZXSI040uy=XZQ!*`M^{~EUIGb{(#*=i(uFBe$bWCp_9!Ax^Ny)}r%Bk(;Vd#WtN$>}KoZtF zkxDwW6&P&s+zO<4rdx1KWl|0S@tAhIp^}2$FH}5lW!VTNij%P{zbUWNuwoxNRb$!o z^h^dtd)=!W_Qry3D_1$PQ8v`Rz3ayDu|Su|1i^D#VcTWCww;W~1nx$AV)!J1Eo^Ie z|jt2v}7$Xcz!dSH?0MawdrLQT4^;cECy;Oe=Y+J&m&3*PX5LwQp{ zUKDG9FRJ&6vDGx(;&_|857EgLpiieoY9!SwenR9W_Z|3vV}dh~r~r#R?r`Vv z+zoja$>U-F;hAZ}lOoSWpXYLb4S77?Iou9)67(@BI4A@Gp3$1D>1_U(PYaxy~TP>lnfqVdKd0RlS8t z6p+P7nDWD$4njDQXNCWc%M38ZlLvT6Erw`UBtC)_GWMXe`@Z;--80W|(9^MWqT@C0 sJkdHLXJwpi(xM}D7D3s=VijwgySdt=^}0W9;4#k<+&{tR_!9kp13VAPxc~qF literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class new file mode 100644 index 0000000000000000000000000000000000000000..357330ffd30a1959728ee1e1a870f55781c29e6f GIT binary patch literal 2080 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 m&?2ezpo|K86IDEy@;bPibMjZ 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 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class b/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class new file mode 100644 index 0000000000000000000000000000000000000000..ef6d53846bcbf59f47735a9e23d5a83a35267bc4 GIT binary patch literal 449 zcma)&&q~8U5XQev+H6}>8>=@J6cO4U40!RN2qFr>;zj9wldkQS{3)A_;A43bJoo@U zlsMbw;6cG%n4KBE`OWNne!YJHxWP^b4qT3gk0v~Z{X);er7jjSF`+Ut3x&=KU4~co zVel?guFNGva}Y(t2}g_J=&zc)T+QaDu5<^(2}9$$m`aA;SmpA*%3`S>MVwNmKQ0oH zPJ~uAu9FQjS0%&o_#Yk48TeE_$-E>Qix@i7N{d*f%DhnUP*ggRx61YkehhZ95YGaK z;Is#O9MIp;CflLt3@&*Ji!m1KjgT^!J&+lEh`zZRm4O^PhUt056VT*~p$ h?%pp5pM>2N;$SVS5mbO4f)$oyi#$79pFj?_zXAEdS9<^e literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/Consumable.class b/Java-Knight/target/classes/org/project/item/consumables/Consumable.class new file mode 100644 index 0000000000000000000000000000000000000000..45d8904bc1e8803428c4f36b5384bdd6b52f25cf GIT binary patch literal 675 zcma)3%TB^T6g^W41q6$T-~&-tmYUcPz_=lpkPuv8nz$@DsY9SOr6uv7TxcROap4E} zQN}xkNE8-sdLKRK+32h44gp z$&fJWb_Qu=G-PwwK#t+m4_xaZ@Fmg`As<@<-aGlF0@(9|$U8bI+w-Gf zz^{bdR$tn4E=^HS$OwgAMS&{arA(Es#F4DQ7U)E(Zsn6v)Xg_A^K1sqtj>^sp_YPe z`WA^uzv){*hG?7ADN*NmPQwn$R7r#!!{SU1QdEWtcBy9A!~SBNMNwjs<}0*kO6EgS dakCN&&qb08VTJ=#*O2p1f5_FfwmF literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/Flask.class b/Java-Knight/target/classes/org/project/item/consumables/Flask.class new file mode 100644 index 0000000000000000000000000000000000000000..160da23e4aa931d4640bebeb8c29bab277ac26f5 GIT binary patch literal 1272 zcmah|T~pIQ6g}GlDIr=c@+FD|inO4_@2?;#9hlZB$_!W^d~s=a+R!xVBpb&56aR)j z=)i+Nz#rv!lXM`RGT6=}yPI>*z2~00fBv5S2C$7{3JHec9gBM{6+;+SFrq<0iebfZ z8+ylejzmrBrW9?x=GdO!=7*N>^y1l?VPwO!O}WW1m9HG}W3F4=Zs_~cHSLB`E>y>$ zVoZUi;R>!Y%*Kg@Elt_gx5F1hsv+bq|61B(NahRWAaY#8HDnlunu1&O$`j)#u47Wc zl!j@{FpS5tc0DSUq8(o{Oh)yXj=o35NGeJ2wvi#}H#E%QCc|`_w*-l)arw!V%|Mpq zw)7~L5)H~xF^}5{vKkh!$S@IR?&oJvIzcwe4oC(m3RML;hQ)Xr2KpO1LTZanT`;68 zrY+w4?L*-n1pQ~oRGb>Os@ye$eeZBcHchHLSNT7+LEJWPhfJ~VMV`?_9COR3kE~3s z^gUY5=lfXud@~AFngYpPa*tu|5+H-R@Az&_?3jTHHI%s?6hJO+Iga$C%R9S5Hl4bc z!c&HskDjP!L)=2PL?b{umM!hAr$_Ky#S6StU<77vknnRQrhV+RL~jTqe|LCII&PQY zTilc$FiKhCcAci18tAnAjxp$6?4&R7pxY4_z(2?E9}a_?WW;BxM^WUKwNDd3o@iy; z7H*NQqbEECuNjsHG+k7xg12PR=W7@pDT6TG6G MN~=x0!4_u!0q>whC;$Ke literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/Sword.class b/Java-Knight/target/classes/org/project/item/weapons/Sword.class new file mode 100644 index 0000000000000000000000000000000000000000..5a20514b8a94a8b612c3538bc71edf9e05844268 GIT binary patch literal 1896 zcmaJ?+ji4N6y4*S97V>d6LKMtIB5XeTvRCZg457olA_{-i$lVt4@_(=TSS&zX$hvobak~oBgw&D33;$)=4hWi=j_=U|M~Bmw*c1gjfxoJ3KANU zNHNU2UQ_RQ?hCUnbW50R{guf(uH)-F!N`zWwj4{WFeD3xQQRIu8Y2o+4WrN)=H8oM zd*yl!h78}eY)kYiE$%f<24<)@fvkct4Id!KF#dwSxx)|!rN#YC^E={;7m811#wiW6IL(l7g78G2+vZMF zzqc!8C@Yv_m>F!$bOg1auLXlj3gk5`V3A>@X^Pvt&1Gk_g)xdVSkiD7=NMGM_sssw zL?O_wfTDtuh6}jJFcy>?>|E>lq&;!CT`Klu*sta4_dUxIHQ|}OUCz+~Ue=)FBZjFq zaaUZY&c%);S~T+ocZ5&5v{9HI5({EzmQ`HE#|o}#xQ*vrf(|(?a7vk+)`*l$ zx4FYBuJl2s>sa4*&DGFE4AW6%!+t5t;!;97jB;j&wi-G++C>RrQmO%49axVLlf!NF zI{j9z9+j|s%x){hmZ=F|-`n7wNRN@4)pWS%dL-EOBfB}CQMNipeMXY>zbm!ocD=f} zZpnjC14%DSe-ZeW>k40Zyt847mfP^txW}*%K+gO5P~d#@nJ(l*$KJ@ZYzhxlJVZ^w zmbBd?hNX9owVapko~e^J$zP!p*Lj^j*dD|8gZ7Dl;of(+)38l{sp`6W-A?(i%LXDt ziCc6EN5G#A;G?g1(ESlbh1+(GEJvrI8IEIm6`T9M=_`25aQ0A7N0qAJDP4BQL&<_+ zUvxL5>6!%?J?WaHS%T(Cd`i#HXmt~DngN;8ST_ATSSkJ+l%FXO!{_uoL9ao#qkEYnJor6RJ2gqC=%G<*7eTvLRerc!1Cu6&4(xFq)%5x<5Nn#G9uCcdOm z7WqaS>`wte3NIxE&J75jjCPFU bZh)#{gT^%B?$d7*+q6z}{w?g1QPuLuV-9^3#qcoEM9f4fEWux0n z`V=X(qgWkJMqQPj$?lMyN;~PvVMnHssk5f5KSpDLTKlQml=TmI>B*QZ8}(%6ECTUN7h|KE#gNJX-lb}ZP96p)DkJj6a zPBOZn4Ors2%<96tCu6Dc9imaah1XcS#oUbryy96Q0GQ`lLIGuF3s_-i>j8#UR9TV0 z$_SeoA%_BMSkGjdb`ijT-S`IY2g(lqN|=8NSVWOq8R{il`+ul?Y+#c_f}*vIFtjz0 kGkn(sIWXJi*#=1rOg~}DA34~4Y8g|WHj=K-jky!P-((| z*Lmni{$+k)q@t3(8vy5WDbXJ-q9B$wZESFQqfa|JACt?8u} zX^%p6VlHi~)y`V6d~FT`G-Ew0)VH&UTA2)iSNSK)O!D{(R9Qn`FsDht`yZS&iU`$< z(_|RFllr1+3*s;IFyjFy)#5`c@Xv9jW$96dz?QMMx#vT<*f&w6UBV9iw-}LfEpV-O zzC(1Lp2O}uJ4fv+T?O3czrh3$pokhO*x*;kE