From 4e929ebdab99ab56d56c03d7fa36cd1a1c0509bb Mon Sep 17 00:00:00 2001 From: kasra Date: Tue, 16 Jun 2026 16:11:17 +0330 Subject: [PATCH] Complete assignment core mechanics and add missing classes --- .idea/misc.xml | 2 +- .../src/main/java/org/project/Main.java | 129 ++++++++++++++++- .../main/java/org/project/entity/Entity.java | 24 ++-- .../org/project/entity/enemies/Dragon.java | 21 +++ .../org/project/entity/enemies/Enemy.java | 65 ++++++--- .../org/project/entity/enemies/Goblin.java | 29 ++++ .../org/project/entity/enemies/Skeleton.java | 35 ++++- .../org/project/entity/enemies/Vampire.java | 25 ++++ .../org/project/entity/players/Assassin.java | 65 +++++++++ .../entity/players/ICombatActions.java | 11 ++ .../org/project/entity/players/Knight.java | 27 +++- .../org/project/entity/players/Player.java | 136 ++++++++++++------ .../org/project/entity/players/Wizard.java | 25 ++++ .../src/main/java/org/project/item/Item.java | 6 +- .../java/org/project/item/armors/Armor.java | 22 ++- .../org/project/item/armors/KnightArmor.java | 7 +- .../project/item/consumables/Consumable.java | 10 +- .../org/project/item/consumables/Flask.java | 10 +- .../java/org/project/item/weapons/Sword.java | 16 +-- .../java/org/project/item/weapons/Weapon.java | 14 +- .../java/org/project/location/Location.java | 12 +- .../target/classes/org/project/Main.class | Bin 0 -> 5287 bytes .../classes/org/project/entity/Entity.class | Bin 0 -> 363 bytes .../org/project/entity/enemies/Dragon.class | Bin 0 -> 1003 bytes .../org/project/entity/enemies/Enemy.class | Bin 0 -> 2275 bytes .../org/project/entity/enemies/Goblin.class | Bin 0 -> 1188 bytes .../org/project/entity/enemies/Skeleton.class | Bin 0 -> 1266 bytes .../org/project/entity/enemies/Vampire.class | Bin 0 -> 1529 bytes .../org/project/entity/players/Assassin.class | Bin 0 -> 2349 bytes .../entity/players/ICombatActions.class | Bin 0 -> 288 bytes .../org/project/entity/players/Knight.class | Bin 0 -> 1668 bytes .../org/project/entity/players/Player.class | Bin 0 -> 2857 bytes .../org/project/entity/players/Wizard.class | Bin 0 -> 1680 bytes .../classes/org/project/item/Item.class | Bin 0 -> 153 bytes .../org/project/item/armors/Armor.class | Bin 0 -> 1280 bytes .../org/project/item/armors/KnightArmor.class | Bin 0 -> 335 bytes .../project/item/consumables/Consumable.class | Bin 0 -> 342 bytes .../org/project/item/consumables/Flask.class | Bin 0 -> 567 bytes .../org/project/item/weapons/Sword.class | Bin 0 -> 1078 bytes .../org/project/item/weapons/Weapon.class | Bin 0 -> 806 bytes .../org/project/location/Location.class | Bin 0 -> 1474 bytes 41 files changed, 544 insertions(+), 147 deletions(-) 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/ICombatActions.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/Wizard.java 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/ICombatActions.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/.idea/misc.xml b/.idea/misc.xml index be3fc8d..f5d9dff 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java index 6bde20e..8506c92 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -1,15 +1,132 @@ package org.project; -import org.project.location.Location; +import org.project.entity.enemies.*; +import org.project.entity.players.*; -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 locations = new ArrayList<>(); + Scanner scanner = new Scanner(System.in); + Random random = new Random(); - // TODO: IMPLEMENT GAMEPLAY + System.out.println("\u001B[33m=== The Legend of Javanest ===\u001B[0m"); + System.out.println("Choose your Hero Class:"); + System.out.println("1. Knight (High Damage)"); + System.out.println("2. Wizard (High Health)"); + System.out.println("3. Assassin (High Mana)"); + + int classChoice = scanner.nextInt(); + Player player; + if (classChoice == 2) { + player = new Wizard("Merlin"); + } else if (classChoice == 3) { + player = new Assassin("Ezio"); + } else { + player = new Knight("Ser Duncan"); + } + + boolean hasGoblinKey = false; + boolean hasSkeletonKey = false; + boolean hasVampireKey = false; + boolean gameRunning = true; + + while (gameRunning && player.isAlive()) { + boolean hasAllKeys = hasGoblinKey && hasSkeletonKey && hasVampireKey; + + System.out.println("\n\u001B[35mYou arrived at a new location.\u001B[0m"); + Enemy currentEnemy = spawnRandomEnemy(random); + System.out.println("A wild " + currentEnemy.getName() + " appears!"); + + boolean inLocation = true; + while (inLocation && player.isAlive()) { + System.out.println("\nWhat would you like to do?"); + System.out.println("1. Fight the enemy"); + System.out.println("2. Move to another location"); + if (hasAllKeys) { + System.out.println("\u001B[31m3. Go to the Castle to fight the Dragon\u001B[0m"); + } + + int choice = scanner.nextInt(); + + if (choice == 1) { + fight(player, currentEnemy, scanner); + inLocation = false; + + if (player.isAlive() && !currentEnemy.isAlive()) { + System.out.println("\u001B[32mVictory! " + currentEnemy.getName() + " was defeated.\u001B[0m"); + player.gainXP(50); + player.heal(player.getMaxHP()); + player.fillMana(player.getMaxMP()); + + if (currentEnemy instanceof Goblin && !hasGoblinKey && random.nextInt(100) < 20) { + System.out.println("\u001B[33m🗝️ You found the Goblin Key!\u001B[0m"); + hasGoblinKey = true; + } else if (currentEnemy instanceof Skeleton && !hasSkeletonKey && random.nextInt(100) < 20) { + System.out.println("\u001B[33m🗝️ You found the Skeleton Key!\u001B[0m"); + hasSkeletonKey = true; + } else if (currentEnemy instanceof Vampire && !hasVampireKey && random.nextInt(100) < 20) { + System.out.println("\u001B[33m🗝️ You found the Vampire Key!\u001B[0m"); + hasVampireKey = true; + } + } + } else if (choice == 2) { + System.out.println("You moved to a new location."); + inLocation = false; + } else if (choice == 3 && hasAllKeys) { + System.out.println("\n\u001B[31m=== You entered the Castle! ===\u001B[0m"); + Enemy dragon = new Dragon(); + fight(player, dragon, scanner); + if (player.isAlive()) { + System.out.println("\u001B[33m🎉 You defeated the Dragon and saved Javanest! You Win!\u001B[0m"); + } + gameRunning = false; + inLocation = false; + } + } + } + + if (!player.isAlive()) { + System.out.println("\u001B[31m💀 Game Over. You died.\u001B[0m"); + } + scanner.close(); + } + + private static Enemy spawnRandomEnemy(Random random) { + int r = random.nextInt(3); + if (r == 0) return new Goblin(); + if (r == 1) return new Skeleton(); + return new Vampire(); + } + + private static void fight(Player player, Enemy enemy, Scanner scanner) { + System.out.println("\u001B[31mYou chose to FIGHT!\u001B[0m"); + while (player.isAlive() && enemy.isAlive()) { + System.out.println("\n[" + player.getName() + " - " + player.getHp() + "/" + player.getMaxHP() + " HP | " + player.getMp() + "/" + player.getMaxMP() + " Mana]"); + System.out.println("[" + enemy.getName() + " - " + enemy.getHp() + "/" + enemy.getMaxHP() + " HP]"); + + System.out.println("\nYour Turn:"); + System.out.println("1. Light Attack | 2. Heavy Attack (-8 Mana) | 3. Defend (-6 Mana) | 4. Heal (-12 Mana) | 5. Special Ability (-15 Mana)"); + int action = scanner.nextInt(); + + if (player.isStunned()) { + System.out.println("\u001B[33mYou are stunned and cannot move!\u001B[0m"); + player.setStunned(false); + } else { + switch (action) { + case 1: player.lightAttack(enemy); break; + case 2: player.heavyAttack(enemy); break; + case 3: player.defendAction(); break; + case 4: player.healAction(); break; + case 5: player.specialAbility(enemy); break; + default: player.lightAttack(enemy); break; + } + } + + if (enemy.isAlive()) { + enemy.attackAction(player); + } + } } } \ 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..3249fa2 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -1,21 +1,15 @@ package org.project.entity; public interface Entity { - void attack(Entity target); - - void defend(); - - void heal(int health); - - void fillMana(int mana); - void takeDamage(int damage); - + void heal(int health); + void fillMana(int mana); + int getHp(); int getMaxHP(); - + int getMp(); int getMaxMP(); - - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} + boolean isAlive(); + String getName(); + void setStunned(boolean stunned); + boolean isStunned(); +} \ No newline at end of file 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..e2a663b --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -0,0 +1,21 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; + +public class Dragon extends Enemy { + + public Dragon() { + super("Dragon", 250, 30); + } + + @Override + public void attackAction(Entity target) { + if (!isStunned()) { + System.out.println("\u001B[31m🐉 Dragon breathes massive FIRE! (Bypasses shields)\u001B[0m"); + target.takeDamage(baseDamage); + } else { + System.out.println("🐉 Dragon is stunned, but recovers quickly!"); + setStunned(false); + } + } +} \ No newline at end of file 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..0239f4d 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,61 @@ package org.project.entity.enemies; -import org.project.item.weapons.Weapon; +import org.project.entity.Entity; -// TODO: UPDATE IMPLEMENTATION -public abstract class Enemy { - Weapon weapon; - private int hp; - private int mp; +public abstract class Enemy implements Entity { + protected String name; + protected int hp; + protected int maxHP; + protected int baseDamage; + protected boolean stunned; - public Enemy(int hp, int mp, Weapon weapon) { + public Enemy(String name, int hp, int baseDamage) { + this.name = name; this.hp = hp; - this.mp = mp; - - this.weapon = weapon; + this.maxHP = hp; + this.baseDamage = baseDamage; + this.stunned = false; } + public abstract void attackAction(Entity target); + @Override public void takeDamage(int damage) { hp -= damage; + if (hp < 0) hp = 0; + System.out.println("\u001B[31m" + name + " took " + damage + " damage!\u001B[0m"); } - public int getHp() { - return hp; + @Override + public void heal(int health) { + hp += health; + if (hp > maxHP) hp = maxHP; } - public int getMp() { - return mp; - } + @Override + public void fillMana(int mana) {} - public Weapon getWeapon() { - return weapon; - } -} + @Override + public int getHp() { return hp; } + + @Override + public int getMaxHP() { return maxHP; } + + @Override + public int getMp() { return 0; } + + @Override + public int getMaxMP() { return 0; } + + @Override + public boolean isAlive() { return hp > 0; } + + @Override + public String getName() { return name; } + + @Override + public void setStunned(boolean stunned) { this.stunned = stunned; } + + @Override + public boolean isStunned() { return stunned; } +} \ No newline at end of file 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..93fac7e --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,29 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import java.util.Random; + +public class Goblin extends Enemy { + private Random random; + + public Goblin() { + super("Goblin", 30, 10); + this.random = new Random(); + } + + @Override + public void attackAction(Entity target) { + if (!isStunned()) { + if (random.nextInt(100) < 40) { + System.out.println("\u001B[31m👹 Goblin used Critical Strike!\u001B[0m"); + target.takeDamage(baseDamage * 2); + } else { + System.out.println("👹 Goblin attacks normally!"); + target.takeDamage(baseDamage); + } + } else { + System.out.println("👹 Goblin is stunned and skips the turn!"); + setStunned(false); + } + } +} \ No newline at end of file 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..3f2f2ab 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,33 @@ package org.project.entity.enemies; -// TODO: UPDATE IMPLEMENTATION -public class Skeleton { - // TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR -} +import org.project.entity.Entity; + +public class Skeleton extends Enemy { + private boolean hasResurrected; + + public Skeleton() { + super("Skeleton", 40, 8); + this.hasResurrected = false; + } + + @Override + public void takeDamage(int damage) { + super.takeDamage(damage); + if (hp == 0 && !hasResurrected) { + System.out.println("\u001B[33m☠️ Skeleton resurrected with 50% HP!\u001B[0m"); + hasResurrected = true; + hp = maxHP / 2; + } + } + + @Override + public void attackAction(Entity target) { + if (!isStunned()) { + System.out.println("☠️ Skeleton uses Bone Strike!"); + target.takeDamage(baseDamage); + } else { + System.out.println("☠️ Skeleton is stunned and skips the turn!"); + setStunned(false); + } + } +} \ No newline at end of file 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..e534537 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,25 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; + +public class Vampire extends Enemy { + + public Vampire() { + super("Vampire", 50, 12); + } + + @Override + public void attackAction(Entity target) { + if (!isStunned()) { + System.out.println("\u001B[31m🦇 Vampire uses Life Steal!\u001B[0m"); + target.takeDamage(baseDamage); + + int healAmount = baseDamage / 2; + heal(healAmount); + System.out.println("\u001B[32m🦇 Vampire healed for " + healAmount + " HP!\u001B[0m"); + } else { + System.out.println("🦇 Vampire is stunned and skips the turn!"); + setStunned(false); + } + } +} \ No newline at end of file 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..c08cbf5 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -0,0 +1,65 @@ +package org.project.entity.players; + +import org.project.entity.Entity; + +public class Assassin extends Player { + private boolean isInvisible = false; + private boolean nextAttackCrit = false; + + public Assassin(String name) { + super(name, 80, 120, 15); + } + + @Override + public void takeDamage(int damage) { + if (isInvisible) { + System.out.println("\u001B[35m💨 " + name + " dodged the attack completely by being invisible!\u001B[0m"); + isInvisible = false; + } else { + super.takeDamage(damage); + } + } + + @Override + public void lightAttack(Entity target) { + int dmg = baseDamage; + if (nextAttackCrit) { + System.out.println("\u001B[31m💥 Critical Hit!\u001B[0m"); + dmg *= 2; + nextAttackCrit = false; + } + target.takeDamage(dmg); + } + + @Override + public void heavyAttack(Entity target) { + int cost = 8; + if (mp >= cost) { + mp -= cost; + int dmg = baseDamage * 2; + if (nextAttackCrit) { + System.out.println("\u001B[31m💥 Critical Hit!\u001B[0m"); + dmg *= 2; + nextAttackCrit = false; + } + target.takeDamage(dmg); + } else { + lightAttack(target); + } + } + + @Override + public void specialAbility(Entity target) { + int cost = 15; + if (mp >= cost) { + mp -= cost; + System.out.println("\u001B[36m🗡️ " + name + " (Assassin) used Shadow Step! (-15 Mana)\u001B[0m"); + isInvisible = true; + nextAttackCrit = true; + System.out.println("\u001B[35m" + name + " turned invisible! Next attack will dodge and crit.\u001B[0m"); + } else { + System.out.println("\u001B[34mNot enough mana! Defaulting to Light Attack.\u001B[0m"); + lightAttack(target); + } + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java new file mode 100644 index 0000000..5363408 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java @@ -0,0 +1,11 @@ +package org.project.entity.players; + +import org.project.entity.Entity; + +public interface ICombatActions { + void lightAttack(Entity target); + void heavyAttack(Entity target); + void defendAction(); + void healAction(); + void specialAbility(Entity target); +} \ No newline at end of file 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..4489228 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,25 @@ package org.project.entity.players; -// TODO: UPDATE IMPLEMENTATION -public class Knight { - // TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR -} +import org.project.entity.Entity; + +public class Knight extends Player { + + public Knight(String name) { + super(name, 100, 50, 20); + } + + @Override + public void specialAbility(Entity target) { + int cost = 15; + if (mp >= cost) { + mp -= cost; + System.out.println("\u001B[36m⚔️ " + name + " (Knight) used Shield Bash! (-15 Mana)\u001B[0m"); + target.takeDamage(baseDamage * 2); + target.setStunned(true); + System.out.println("\u001B[33m" + target.getName() + " is stunned for the next turn!\u001B[0m"); + } else { + System.out.println("\u001B[34mNot enough mana! Defaulting to Light Attack.\u001B[0m"); + lightAttack(target); + } + } +} \ No newline at end of file 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..9656a0c 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 @@ -1,65 +1,123 @@ package org.project.entity.players; import org.project.entity.Entity; -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, ICombatActions { protected String name; - Weapon weapon; - Armor armor; - private int hp; - private int maxHP; - private int mp; - private int maxMP; + protected int hp; + protected int maxHP; + protected int mp; + protected int maxMP; + protected int baseDamage; + protected boolean isDefending; + protected boolean stunned; + protected int level = 1; + protected int xp = 0; - public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { + public Player(String name, int maxHP, int maxMP, int baseDamage) { this.name = name; - this.hp = hp; - this.mp = mp; - - this.weapon = weapon; - this.armor = armor; + this.maxHP = maxHP; + this.hp = maxHP; + this.maxMP = maxMP; + this.mp = maxMP; + this.baseDamage = baseDamage; + this.isDefending = false; + this.stunned = false; } - @Override - public void attack(Entity target) { - target.takeDamage(weapon.getDamage()); - } - - @Override - public void defend() { - // TODO - } - - @Override public void takeDamage(int damage) { - hp -= damage - armor.getDefense(); + if (isDefending) { + damage /= 2; + isDefending = false; + } + hp -= damage; + if (hp < 0) hp = 0; } @Override public void heal(int health) { hp += health; - if (hp > maxHP) { - hp = maxHP; - } + if (hp > maxHP) hp = maxHP; } @Override public void fillMana(int mana) { mp += mana; - if (mp > maxMP) { - mp = maxMP; + if (mp > maxMP) mp = maxMP; + } + + @Override + public boolean isAlive() { + return hp > 0; + } + + @Override + public void setStunned(boolean stunned) { + this.stunned = stunned; + } + + @Override + public boolean isStunned() { + return stunned; + } + + public void gainXP(int amount) { + xp += amount; + if (xp >= level * 100) { + levelUp(); } } + protected void levelUp() { + level++; + maxHP += 20; + maxMP += 10; + baseDamage += 5; + hp = maxHP; + mp = maxMP; + } + @Override + public void lightAttack(Entity target) { + target.takeDamage(baseDamage); + } + + @Override + public void heavyAttack(Entity target) { + int cost = 8; + if (mp >= cost) { + mp -= cost; + target.takeDamage(baseDamage * 2); + } else { + lightAttack(target); + } + } + + @Override + public void defendAction() { + int cost = 6; + if (mp >= cost) { + mp -= cost; + isDefending = true; + } + } + + @Override + public void healAction() { + int cost = 12; + if (mp >= cost) { + mp -= cost; + heal(maxHP / 3); + } + } + + @Override public String getName() { return name; } + @Override public int getHp() { return hp; } @@ -69,6 +127,7 @@ public abstract class Player { return maxHP; } + @Override public int getMp() { return mp; } @@ -77,13 +136,4 @@ public abstract class Player { public int getMaxMP() { return maxMP; } - - public Weapon getWeapon() { - return weapon; - } - - public Armor getArmor() { - return armor; - } - -} +} \ No newline at end of file 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..c208788 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -0,0 +1,25 @@ +package org.project.entity.players; + +import org.project.entity.Entity; + +public class Wizard extends Player { + + public Wizard(String name) { + super(name, 150, 80, 12); + } + + @Override + public void specialAbility(Entity target) { + int cost = 15; + if (mp >= cost) { + mp -= cost; + System.out.println("\u001B[36m🧙‍♂️ " + name + " (Wizard) cast Life Drain! (-15 Mana)\u001B[0m"); + target.takeDamage(baseDamage * 2); + heal(maxHP / 4); + System.out.println("\u001B[32m" + name + " healed for " + (maxHP / 4) + " HP!\u001B[0m"); + } else { + System.out.println("\u001B[34mNot enough mana! Defaulting to Light Attack.\u001B[0m"); + lightAttack(target); + } + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/Item.java b/Java-Knight/src/main/java/org/project/item/Item.java index 6d6b5ad..6f0684d 100644 --- a/Java-Knight/src/main/java/org/project/item/Item.java +++ b/Java-Knight/src/main/java/org/project/item/Item.java @@ -4,8 +4,4 @@ import org.project.entity.Entity; public interface Item { void use(Entity target); - - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} +} \ No newline at end of file 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..1c77ac3 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 @@ -1,17 +1,25 @@ package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public abstract class Armor { +import org.project.item.Item; +import org.project.entity.Entity; + +public abstract class Armor implements Item { private int defense; private int maxDefense; private int durability; private int maxDurability; - private boolean isBroke; public Armor(int defense, int durability) { this.defense = defense; + this.maxDefense = defense; this.durability = durability; + this.maxDurability = durability; + this.isBroke = false; + } + + @Override + public void use(Entity target) { } public void checkBreak() { @@ -21,7 +29,6 @@ public abstract class Armor { } } - // TODO: (BONUS) UPDATE THE REPAIR METHOD public void repair() { isBroke = false; defense = maxDefense; @@ -39,4 +46,9 @@ public abstract class Armor { public boolean isBroke() { return isBroke; } -} + + public void reduceDurability(int amount) { + durability -= amount; + checkBreak(); + } +} \ No newline at end of file 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..f6e11cd 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,7 @@ package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public class KnightArmor { - // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR +public class KnightArmor extends Armor { + public KnightArmor() { + super(10, 100); + } } \ 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..0972a7d 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,6 @@ package org.project.item.consumables; -// TODO: UPDATE IMPLEMENTATION -public abstract class Consumable { - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} +import org.project.item.Item; + +public abstract class Consumable implements Item { +} \ No newline at end of file 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..f72e91c 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 @@ -2,15 +2,9 @@ package org.project.item.consumables; import org.project.entity.Entity; -// TODO: UPDATE IMPLEMENTATION -public class Flask { - /* - THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN. - */ - - // TODO: UPDATE USE METHOD +public class Flask extends Consumable { @Override public void use(Entity target) { target.heal(target.getMaxHP() / 10); } -} +} \ No newline at end of file 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..913f6eb 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 @@ -1,26 +1,20 @@ package org.project.item.weapons; import org.project.entity.Entity; - import java.util.ArrayList; -// TODO: UPDATE IMPLEMENTATION -public class Sword { - /* - THIS IS AN EXAMPLE OF A WEAPON DESIGN. - */ - - int abilityCharge; +public class Sword extends Weapon { + private int abilityCharge; public Sword() { - // TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR + super(15, 5); + this.abilityCharge = 0; } - // TODO: (BONUS) UPDATE THE UNIQUE ABILITY public void uniqueAbility(ArrayList targets) { abilityCharge += 2; for (Entity target : targets) { target.takeDamage(getDamage()); } } -} +} \ No newline at end of file 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..67e7d02 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 @@ -1,16 +1,12 @@ package org.project.item.weapons; import org.project.entity.Entity; +import org.project.item.Item; -// TODO: UPDATE IMPLEMENTATION -public abstract class Weapon { +public abstract class Weapon implements Item { private int damage; private int manaCost; - /* - TODO: ADD OTHER REQUIRED AND BONUS ATTRIBUTES - */ - public Weapon(int damage, int manaCost) { this.damage = damage; this.manaCost = manaCost; @@ -28,8 +24,4 @@ public abstract class Weapon { public int getManaCost() { return manaCost; } - - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} +} \ No newline at end of file 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..2461c34 100644 --- a/Java-Knight/src/main/java/org/project/location/Location.java +++ b/Java-Knight/src/main/java/org/project/location/Location.java @@ -1,17 +1,17 @@ package org.project.location; import org.project.entity.enemies.Enemy; - import java.util.ArrayList; public class Location { private String name; - + private ArrayList locations; private ArrayList enemies; - public Location(ArrayList locations, ArrayList enemies) { - this.locations = locations; - this.enemies = enemies; + public Location(String name, ArrayList locations, ArrayList enemies) { + this.name = name; + this.locations = locations != null ? locations : new ArrayList<>(); + this.enemies = enemies != null ? enemies : new ArrayList<>(); } public String getName() { @@ -25,4 +25,4 @@ public class Location { public ArrayList getEnemies() { return enemies; } -} +} \ No newline at end of file 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..de26ad3ad67a7b6f4280a733e8b14be0f6ba1181 GIT binary patch literal 5287 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 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..876032ae1a88fd3485dea861caa583eb8b876930 GIT binary patch literal 363 zcmYL^%}&BV6otLN^Cgubf(q%bd6)lA+g%{QW5ohx^z xE5M&{eIVj?9dzMZ2A)07KEg(iJoh~hJP&cy_yZg_Ji%$hq0{+?Gk#k*{{^aiNJanv literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class b/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class new file mode 100644 index 0000000000000000000000000000000000000000..d14e27215c92c4598214d458c372af2f4bd4846d GIT binary patch literal 1003 zcmaJ=%Wl&^6g`uKJl!@;-%TkFEfA-rZYj?OAs$VoNC6>&vS?Qmca%;W+rgexio_4_ z3#{0&1%!$~f)C(d`U5Nw*Kt5piYiNYJlE&mbLQOf&)?sE0H|Oqi3me{+v6?QNh5{} z3B)xdkYvzZuVr>T_fS~M6poUrM~kqf@XZRXJu18}9jP8L%oJ;f{Fs|7NA z?u%`1^Oj&>)eJ6UDS>4TS8$bKZir2l{s5>_@uPp0u_Ae#M3KQfdpb$_Llal^W>@K+ zu-s$e`TDD_w2s=nLNJ(;h83(*OJ9&(1IuH@U8B)=o?`5YyH5hgYSIzUx^`1|FL|>~ znOx1ac)P(p8SDqim^zR?!%}UC{J$3`bid4?aizF*^vF`uCCe6z!>YnVmjgj@#l4oG zIp@y-GK|!Nu1|SqpebEWS}||vabc>LxCKK(N6$GK*PgzifgpnqAa6TE9KZY zeq|TGAo{V7GAX7B4J4643hMzX#9{+CXveULn}a^D2^nBZr4yvyV)hfpa#JUmSt)(S z#jhwt@E+M9d5w~#=n0H~C5nJ$9&w5zq-qpn^ekW;%gDjNWS@09>^xv44&1_R;=Myv PF+>&uRd?wRy=Tukzu)<|cmMhK_1^$iuwx>Dq=A%$ zG%^gAUh*SecDTD=ezx~gG$cc2!FFx=m?2r5-R?&p`VE*C24FE1yzYLv)Af{PS-8@c z$0S7C7Jhk!Ksh2-W1eh4(PcFxKV=V%c*WTt2sDi&nnmuJjpZiWhUK&R*1+xQQ79 zMGLbiF?yaso+dDm9^P??e~o07Y}9)oqJr4X$kJo*eM}f41M3)j#J|3t#BXkKU_tMs0B zH8m)0Roqeh`)$9cGV9)9 zw;@(-RY_A1`CZjn8nz|RlfLZoPEE*`*Yx{Pqu%9q=kK*yL3-Xnffa(Rr*gYQh0cjH1%aa0X_O@s8` zrZf~mUa2WM{s}PLqFXDat|B_PDRq-*N!N##bZKZww*<*7*{5-bo_A^YJ^80d=1YHp zm2REDC|x^2Ry~GGlP9=RN}gcscd|&Jtn6UW(;}ZN`Y}kqA$3h*9K)Ez2{RY}-sl`~`jOh;m|UMz+M z9gE>(JSIEU#WG3dkyds3l@>v>f-o~WOwfRI7>41KSm)vM&ZSuACq3ueA#x&l-t$hx zGtq-x{2!ikv7Sp<4zpbfG4)jZ1S9neQW`#(f*|YpNRVs@ulk)vV&I9Y)>HcIU#y<- z+qvpJh{QRq-YPx~ogY!HRrfNb+?j(Cuz0AwgZaz!T9{EEZ1QJV>m?O!;n?|FF2s;X cqN=HWhR;d%QLqjAuVagLCau20bG*RB8<-BJN&o-= 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..875ba3cf91ebef2b103362ec9a58c62467a06bea GIT binary patch literal 1188 zcmaJ=TTc@~6#k|y^uhwA+~gu`MX)VMLGW5ok!zER#+oL=)6h=JK)XwJr$+vYPsSJD zOfXu4Mt^|+g}-1t(=A4lhHNr3=j@#GedjxKe*gLY3&1+ILhv!PZ`ykmX+;n~TM+FA zf(S8~wo^_YIrf1ls@g)|r;&*v<^lhg zJrkjH{RRdw$PkupUezp1lp0Vw8hXgUFh&@HmUySKmSPAbvdL^1*D)5vxB(OK3)Wsi z$F34pN?_OMa=(Wt?et5kQ&F{oS2H0@FwBhXF3eZYKm0sDIWs+~X3Z5PbJdYb7J0?g z+8m1b$nG4eFo~%kZW%}*$2g-$c%(5Z7QwcV*pqJBzzl9PME1BV)_9ed1p~`= zAdR^o<_+Az0>e-XRo5F`rAWmO|3zvs3L)HO7{6QzSBe)8UDL9iDz8+I<00IqnlE3H zuIYM$o75rGJ(NeTsrH4bYK|4xt$AqR5i$ho3KFl`n?PbGS)fL&+9e|2os*W>u2uJh z^P2Bf$P>%iBwv9$Qrk^uKzC9_Rlcu!zWB?_u_@S>5OXUJ#wb} zbv)2?{Lpl!Xrh2971Bd=Vl+g(^c?%KNCUWnA!KRTwlUhEIp9%g(j-z?#TpS^rwncI N&-Cd!HpuW{^DkAU9t!{f 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..5d175c48585d93f31cdc8fda8e76436b4840e6e1 GIT binary patch literal 1266 zcmaKs%Tg0T6o&uKgcDIYNmrgD4y70*<;Rm$Y0 zV_K!`#zuN8gfO}T&@}X*mtp*ZkR1w!-ZFPz2)E%lq%4XIY+Ip4G+aWIAuM@CtneBy z2?k%Pt#VmIKL!{)1MqQ>C08ZZag#LN;9C z>PxmIbXALrNUAzyG|Z@=;a%>w^Vf}Ahy*alFnmsBR+}{sVxD38tb*z4Zi_?bR#A5= zX5H0gS?IFiSV={ESHnHrCplM8THDCJ)OLESNlv40*)CEE`*Nlwo;PZ{!g;kWDamQ5aw$mrerpqvyJBPH>mYphPsWpr34(Z8DUZ_0d^>!SMOXXNBNYkbwjHS*C z*t&XFv35!BlmxX(;)0EI&Ai=k3S!Mv7wGALOsf_^lG5R$7f0Qx-T_%&vIBTPW0qD+ z^p(*ZF`_JziUg10HN1xieIlO+3pDo92|!gbj6QVZA+5C589c&cS~2xF+VS4fZV&mU zjKneej4y~CAW2i`0P)WljE)}Ris2&xgPfE8>LFrE%G;ERql@f5_z^*jf+i@ePL@IM zOUVwjLbqi}1W(Avu-J^i3^JFnd_v-BZa0i0qz*8o)Nhdb6bVm%!>k7%5mCI-EJF26#m9`v-W1&xK7g&63V2sV7s(V((>!HkhlpkIBk$CBQ;kOdumU;yJPK+ zE9D7z1;iD1+#!LG5xwXG@GgA?#2I@5x3MD2GiPSMGv_P*A#ZNbwD^kRqsNahajGa&%`Sc=glESEKKF5{M6D8S{pEDtXgL z;jgV6tp_gN!m@+6J*;4rVR0Pm^%JRH1AD$7Qpg!;ms&YW`l^R_!5Q3R5z7Z65M9Z@ z>hrjU_Z(dJa0Bl%EYGON?zqzAX+-}&&rC5XX3;~*dS-e=xj-V`^zb2Wkpcn1YdUNT z^PMt1vSK4b6I+t?(rINIO7$gkc zrXEIZxupX!J+zJECGwuL$D zx%dkE4(e9Muc;9Kcee_k>%L5G(?r=l(Kb4wi}%BH<0Zfeg?$pvmoXJo_lJY(Y2l}K zUUPhWGLSRiM^pGm$M!9#PIpssL{0d9QyFPBs?*htYQBi+emOW`xN$0{SyUZ7B1O-J zl8BSMutvR@q4oz-pc{$1G=4;@&uEv?JYO!b{AS+!1LJgs#P_lfBjw3|Wdu1Cl($xe~)4$WEmwoCsSzM+*%Rs#=lh~<9(VEc{6 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Assassin.class b/Java-Knight/target/classes/org/project/entity/players/Assassin.class new file mode 100644 index 0000000000000000000000000000000000000000..ca9f976e80c3de3ebb9c4882512d43838c452317 GIT binary patch literal 2349 zcmaJ?-BS}+96dJ)NeGLiQSc*xOAQL45>dd92$c`5R6trRR%ttPNw&$#W;c_)QTYq{ z*w^}2A3FB6PSw^K``-R9PTxDW({nc=V4+SjckkVM@A;kc``SPLdHEZFtN1E`5W+D; z474FCFyPfnxoXY3XBAY=a+R&Na#creSv5bm5mu=Tp(*j3^7VpXXGUrIQlv`Cb z+b!i678Zur+7U;43<(1rFa%D#19ZmsrSIFWK!@!wxc6<}-f%1daaV&JFwmtD4!G7s zHKUX)Y|hne)sFX&is7JvL+BPr?qad!E2|<9_UcNYyTQ-)aw{aKNYRp&yaqmO;0TTi zL|j>+wbWiADf%aEpcj1thbwZ^n)BR(RJUza=FC^pRldN?1=>pAQ?zVuZUJ(r@jGg*Z+N z^rhF&ja6QM|LXPAA585;yC5C&x~&G%>t`w*$YC&sGXh8V3D(sh5wzdV8aSsdgeuhp zmlFmiah|br>{7WIAc6j&#s3A#53i*lkWNudI*z=+1c{ATmOW)!u2(OW&5Cs8fH`k{ zE$fbAPMOLx7d5`w$beBzn5yTzBE@$t+OD-+uWVSgTQW$U)S^deYqDnRb@OFJm2Jjr za6e|-3BH|+Bo!?-ecQRJlWs{?n>bM=YbA@hmEI4j;V9k@7b_*YrEJOjTMgDET=0Be zJm6QYf-Rky4clRPF6xaX5A;|YFQS&2j;4>ssrZG>9GlOiQyU6A&BD>fvJFrFjc+g^7xJobD1T(P3M8_ zI1QGjbc<$z=@&$?D~iH*a0MwNiqqZ-2(tetlsWo9;XVSwcqVvh>($1WSp*em&LV|}&Z1joxrE ztY%tPGnl~$tDk+5mN>PY6`a>abtwrj0 z-qbFgPsTN+vEIj+%-+$H;xmkCrfucv|8VWouXJ2S`U0-nX(P`uzQg%!5aJB62N|G~ zbk`}e9-`xh$tKG-K7w(aMjoT&pCj9`Ku4BbdZ|lu)~=dwDVlF83e&|OwG?$A{5Qsh z_zUgY*VkLJUh%pHSWb3r%et^5s}=bRjmSrIqH*YKZCngCo*=2?b4h2%+XA!9L12P5 zCMobd1zunhklO3E_}r^sd+OPuNaYy@bzC1<%M=f*BMF@)aWiZBSfz)K-~j2nC& a;`&p{TMWkKU|hlH+)4259jxO^9Q_x1ydA&* literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/ICombatActions.class b/Java-Knight/target/classes/org/project/entity/players/ICombatActions.class new file mode 100644 index 0000000000000000000000000000000000000000..8f1cdeee27255522847f8ef2399d286f7d25c682 GIT binary patch literal 288 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 Z7~OZk(gYDQ&axjN4spbc?_l(he*^W3O%?zE 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..ddc37ed008853664377f2e3d7b8a6025015f1ebf GIT binary patch literal 342 zcmZut%TB^T6g{^TiltB>;R9GHE|?FHxFMRDG_ZiMpVkQuX**`x`d_Y0T=)Tgl<|%s zxPaW`QTF;@&B*p&Z0j>z|IL*dwbhON6ZKeKgfT}K`T zLSiI^!>QJ*n`smYN6VaFZaR+e?^)h*?<67Lx2N(doD8IQtK1Tbeb*9>DLh-%i^D`P zvVFpF|9^Co9fm%GsY5L+%~4eZ{)-Cuux`V3$L_bh}EHeuL^ppRkNmo=v$ z{av@J9HHEO=fLF+-)lNgf}NpnMR-E3GDI?kLUt>LC}Jio8*$hSQ~#|mANX>cA;Bx6 zF4W=r4wp5TffX$DBWYs5#yO-I26y>O?zEJsJ8M$%!=h*^hA457T=|k=B$F-v%_(%^ z`8b9!Y+}U5d5kio{!L*pcX+epz9PJECi_fRjN6#N1qQJNHNHfH0u6n@txt@$#6ylh~WgAy;mBCVc&pkObGNfIQL#wgw zZ&N|CC_J~++ON3sF|X7qk}CRDUf<$UXulIQ)Q)H}%oI;E>bj~x>O5)P^2CdlyVh2m zVKj3}xIg0NHIY80uY-h{=z{GUln~8!8nqwp2}QTlP5H2KLVKxK!O9ukR`mpB#jAUp zywRCGRu(mntCl2jmU~WfHliNYD*G*2bsq|?uoY;vpdSm}V3a-sz-Xn%Ojd~O2(HnZ zA@4rIWC4lXKr;FfEEoO&^IedZrL~`q0SjhOY$HdW-7df^=E!51#{z+Bus4)#(7u>^ z`W|NFIYG@HA+b4kj6sIi7$;+l;R_~9^SL8TALCL8Z-0H${S4@SBSZ~IQpW+L>F>-T z1qXvc-x)$r(}{z{fYoA$0rkUmED@6%RNH2!BR46sOp!Q3KlEoD`i^PbqCg0@>F7>i G-Te*Y*Z!LT literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/Weapon.class b/Java-Knight/target/classes/org/project/item/weapons/Weapon.class new file mode 100644 index 0000000000000000000000000000000000000000..8aea05a3073c61970519abe4c5132d892fabb8d3 GIT binary patch literal 806 zcmaJ<%Wl&^6g}hEabr782?Pi!ZNoDS68?Z9HlawC0xUp5EGOwGxFmMvOhEh-8zd?O zi+(^q3UOv?pn;0by>qYcIp;on`s4cvfPLH#;Gp8ejo_gwuyH8g%XlWUY5Zb*s3uyV z`Y6p({aB#V+a1-ghMJEcLWoFUJ1?g3QIVUxn*)b2(K4A~D$Y z2n_>Vo6AfN@`Vm@2~8iDBV0jCpnaZDWjfU#<9+J{0xjRECncTROLj*-t_ifxLu?NT z8xin&2}=arL4H8}#xTv)^W}W3idS+xW2QOGCvrBDMQY+Q>FT%XLZCbRhjn$bJ?>+< zAj?*7rF5m|J)>XMvY09^vh$xpff{Rm4aZF<0wFWc$~AHNm-(`osHdrEJv>|QLvt;+ z%e^`fxJv7oyYRA(Su?%Myoc+wZANdHuh2L8Um^OPWBC2eW7I!ezzy0a0YE?-qDF#s z)X`yP=M08T++;)oD|*t4sqeOB30*SJDXFxe#3c8{EDSeAi0c`w8J1kM{ro literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/Location.class b/Java-Knight/target/classes/org/project/location/Location.class new file mode 100644 index 0000000000000000000000000000000000000000..a0a5d1b1ffc0d4b4b2e96b408d680e5baf8b3375 GIT binary patch literal 1474 zcma)5-*3`T6#gz0IyIFAKD*nvuC?q z^Pqj`bbN;NE_b=V$B-;nS{W=Lqav%}8Z?IWf!8&M-auHIy+OzJ`M@>np}?THcHdzr z)X!m?zQ^6JrDBm`NvcOa@0rg%&mPzLk)MT*qzH3eLjg++nF#lYVL1Sr^st2WvWAkd zRvp*rbBAm*P2P2Ff8-H?$8mnU^-I}Xdltjf`Hqh3bAN1xam{^-KbF4F$`{j)gR^3l zl@^un#o!&W&(*o>G)DclawD>u znjVHH@h_81qA5I^ZrS53#Sk5r6K7ooXGTU0+2&y6b)1)6G+2*_Z;KVdCQW#P7B)#I zEgne;u^gbRq