From 3b0b4a301e1bd4b5f3dc14975ec8ac8b38d28374 Mon Sep 17 00:00:00 2001 From: Fatemesadat Mirabootalebi Date: Mon, 11 May 2026 13:40:14 -0700 Subject: [PATCH] implement Knight project --- Java-Knight/.idea/.gitignore | 10 + Java-Knight/.idea/compiler.xml | 13 + Java-Knight/.idea/encodings.xml | 7 + Java-Knight/.idea/jarRepositories.xml | 20 ++ Java-Knight/.idea/misc.xml | 12 + Java-Knight/.idea/vcs.xml | 6 + .../src/main/java/org/project/Main.java | 34 +++ .../main/java/org/project/entity/Entity.java | 8 + .../org/project/entity/enemies/Dragon.java | 38 +++ .../org/project/entity/enemies/Enemy.java | 53 +++- .../org/project/entity/enemies/Goblin.java | 27 ++ .../org/project/entity/enemies/Skeleton.java | 21 +- .../org/project/entity/enemies/Vampire.java | 26 ++ .../org/project/entity/players/Assassin.java | 11 + .../org/project/entity/players/Knight.java | 10 +- .../org/project/entity/players/Player.java | 8 +- .../org/project/entity/players/Wizard.java | 11 + .../src/main/java/org/project/item/Item.java | 10 + .../java/org/project/item/armors/Armor.java | 38 ++- .../item/armors/AssassinLeatherArmor.java | 31 +++ .../org/project/item/armors/KnightArmor.java | 29 +- .../org/project/item/armors/WizardRobe.java | 30 +++ .../project/item/consumables/Consumable.java | 29 +- .../org/project/item/consumables/Flask.java | 18 +- .../java/org/project/item/weapons/Dagger.java | 36 +++ .../java/org/project/item/weapons/Staff.java | 40 +++ .../java/org/project/item/weapons/Sword.java | 26 +- .../java/org/project/item/weapons/Weapon.java | 61 ++++- .../java/org/project/location/Location.java | 45 +++- .../java/org/project/utils/ConsoleColors.java | 23 ++ .../target/classes/org/project/Main.class | Bin 0 -> 2218 bytes .../classes/org/project/entity/Entity.class | Bin 0 -> 323 bytes .../org/project/entity/enemies/Dragon.class | Bin 0 -> 1419 bytes .../org/project/entity/enemies/Enemy.class | Bin 0 -> 1795 bytes .../org/project/entity/enemies/Goblin.class | Bin 0 -> 963 bytes .../org/project/entity/enemies/Skeleton.class | Bin 0 -> 720 bytes .../org/project/entity/enemies/Vampire.class | Bin 0 -> 888 bytes .../org/project/entity/players/Assassin.class | Bin 0 -> 597 bytes .../org/project/entity/players/Knight.class | Bin 0 -> 581 bytes .../org/project/entity/players/Player.class | Bin 0 -> 2261 bytes .../org/project/entity/players/Wizard.class | Bin 0 -> 581 bytes .../classes/org/project/item/Item.class | Bin 0 -> 244 bytes .../org/project/item/armors/Armor.class | Bin 0 -> 1122 bytes .../item/armors/AssassinLeatherArmor.class | Bin 0 -> 859 bytes .../org/project/item/armors/KnightArmor.class | Bin 0 -> 811 bytes .../org/project/item/armors/WizardRobe.class | Bin 0 -> 821 bytes .../project/item/consumables/Consumable.class | Bin 0 -> 593 bytes .../org/project/item/consumables/Flask.class | Bin 0 -> 825 bytes .../org/project/item/weapons/Dagger.class | Bin 0 -> 1072 bytes .../org/project/item/weapons/Staff.class | Bin 0 -> 1422 bytes .../org/project/item/weapons/Sword.class | Bin 0 -> 1373 bytes .../org/project/item/weapons/Weapon.class | Bin 0 -> 1627 bytes .../org/project/location/Location.class | Bin 0 -> 2057 bytes .../org/project/utils/ConsoleColors.class | Bin 0 -> 941 bytes NewReadMe.md | 248 ++++++++++++++++++ structure.txt | Bin 0 -> 2752 bytes 56 files changed, 955 insertions(+), 24 deletions(-) create mode 100644 Java-Knight/.idea/.gitignore create mode 100644 Java-Knight/.idea/compiler.xml create mode 100644 Java-Knight/.idea/encodings.xml create mode 100644 Java-Knight/.idea/jarRepositories.xml create mode 100644 Java-Knight/.idea/misc.xml create mode 100644 Java-Knight/.idea/vcs.xml 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/src/main/java/org/project/item/armors/AssassinLeatherArmor.java create mode 100644 Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/Dagger.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/Staff.java create mode 100644 Java-Knight/src/main/java/org/project/utils/ConsoleColors.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/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/AssassinLeatherArmor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/KnightArmor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/WizardRobe.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/Dagger.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Staff.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 create mode 100644 Java-Knight/target/classes/org/project/utils/ConsoleColors.class create mode 100644 NewReadMe.md create mode 100644 structure.txt diff --git a/Java-Knight/.idea/.gitignore b/Java-Knight/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/Java-Knight/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/Java-Knight/.idea/compiler.xml b/Java-Knight/.idea/compiler.xml new file mode 100644 index 0000000..935cb4a --- /dev/null +++ b/Java-Knight/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Java-Knight/.idea/encodings.xml b/Java-Knight/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/Java-Knight/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Java-Knight/.idea/jarRepositories.xml b/Java-Knight/.idea/jarRepositories.xml new file mode 100644 index 0000000..4158879 --- /dev/null +++ b/Java-Knight/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Java-Knight/.idea/misc.xml b/Java-Knight/.idea/misc.xml new file mode 100644 index 0000000..eba6e1f --- /dev/null +++ b/Java-Knight/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/Java-Knight/.idea/vcs.xml b/Java-Knight/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Java-Knight/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ 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..4101900 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -4,12 +4,46 @@ import org.project.location.Location; import java.util.ArrayList; import java.util.List; +import org.project.entity.enemies.Enemy; +import org.project.utils.ConsoleColors; public class Main { public static void main(String[] args) { // TODO: ADD LOCATIONS TO YOUR GAME List locations = new ArrayList<>(); + Location village = new Location("Village", new ArrayList<>(), new ArrayList()); + Location forest = new Location("Forest", new ArrayList<>(), new ArrayList()); + Location cave = new Location("Cave", new ArrayList<>(), new ArrayList()); + Location dungeon = new Location("Dungeon", new ArrayList<>(), new ArrayList()); + Location castle = new Location("Castle", new ArrayList<>(), new ArrayList()); + // TODO: IMPLEMENT GAMEPLAY + //The movement paths between locations + village.getLocations().add(forest); + + forest.getLocations().add(village); + forest.getLocations().add(cave); + + cave.getLocations().add(forest); + cave.getLocations().add(dungeon); + + dungeon.getLocations().add(cave); + dungeon.getLocations().add(castle); + + castle.getLocations().add(dungeon); + + locations.add(village); + locations.add(forest); + locations.add(cave); + locations.add(dungeon); + locations.add(castle); + + //THe first location in the world map + Location currentLocation = locations.get(0); + System.out.println(ConsoleColors.BRIGHT_GREEN + "Welcome to the adventure!" + ConsoleColors.RESET); + System.out.println(ConsoleColors.BRIGHT_CYAN + "You are currently in: " + currentLocation.getName() + ConsoleColors.RESET); + System.out.println(ConsoleColors.BRIGHT_YELLOW + "The world is ready. Gameplay will continue from here." + ConsoleColors.RESET); + } } \ 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..419002a 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -18,4 +18,12 @@ public interface Entity { /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ + /* + Added common entity state accessors so all entities expose their current HP and MP. + This allows combat systems and game logic to interact with Player and Enemy + through the same polymorphic interface. + */ + int getHp(); + + int getMp(); } 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..88a739d --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -0,0 +1,38 @@ +package org.project.entity.enemies; +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; +import java.util.Random; + +public class Dragon extends Enemy{ + // Reduces incoming damage by 10 points. + private final int armorDefense = 10; + private final Random random = new Random(); + + public Dragon(Weapon weapon) { + //Massive HP and MP pool to suit its Boss role. + super(350, 100, weapon); + } + + @Override + public void attack(Entity target) { + int baseDamage = weapon.getDamage(); + + //25% chance to perform "Fire Breath" which deals double damage + if (random.nextInt(100) < 25) { + System.out.println("Dragon uses Fire Breath!"); // Visual feedback for boss ability + target.takeDamage(baseDamage * 2); + } else { + target.takeDamage(baseDamage); + } + } + + @Override + public void takeDamage(int damage) { + // Minimum damage received is always 1 unless damage is 0. + int effectiveDamage = Math.max(1, damage - armorDefense); + + if (damage <= 0) effectiveDamage = 0; + + super.takeDamage(effectiveDamage); + } +} 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..249672d 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,17 +1,21 @@ 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 Weapon weapon; + protected int hp; + protected int mp; + protected int maxHp; + protected int maxMp; public Enemy(int hp, int mp, Weapon weapon) { this.hp = hp; this.mp = mp; - + this.maxHp = hp; + this.maxMp = mp; this.weapon = weapon; } @@ -20,6 +24,18 @@ public abstract class Enemy { hp -= damage; } + @Override + public void attack(Entity target) { + // English comment: Default enemy attack uses weapon damage. + if (weapon != null) { + target.takeDamage(weapon.getDamage()); + } + } + + protected void setHp(int hp) { + this.hp = hp; + } + public int getHp() { return hp; } @@ -31,4 +47,31 @@ public abstract class Enemy { public Weapon getWeapon() { return weapon; } + @Override + public void defend() { + // English comment: Default enemy defense does nothing special. + } + + @Override + public void heal(int health) { + // English comment: Clamp HP so it never exceeds maximum HP. + hp = Math.min(maxHp, hp + health); + } + + @Override + public void fillMana(int mana) { + // English comment: Clamp MP so it never exceeds maximum MP. + mp = Math.min(maxMp, mp + mana); + } + + @Override + public int getMaxHP() { + return maxHp; + } + + @Override + public int getMaxMP() { + return maxMp; + } + } 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..15330a9 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,27 @@ +package org.project.entity.enemies; +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; +import java.util.Random; + + +public class Goblin extends Enemy { + private final Random random = new Random(); + + public Goblin(Weapon weapon) { + //Lower health but higher burst damage potential + super(50, 15, weapon); + } + + @Override + public void attack(Entity target) { + + int damage = weapon.getDamage(); + + //Has a 35% chance to deal double damage. + if (random.nextInt(100) < 35) { + damage *= 2; + } + + target.takeDamage(damage); + } +} 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..6b2a49d 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,25 @@ package org.project.entity.enemies; +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 resurrected = false; + + public Skeleton(Weapon weapon) { + //A low-tier enemy with moderate HP and low mana. + super(80, 20, weapon); + } + + @Override + public void takeDamage(int damage) { + //Apply damage + super.takeDamage(damage); + + //If dies for the first time, resurrect with 50% HP. + if (hp <= 0 && !resurrected) { + resurrected = true; + hp = maxHp / 2; + } + } } 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..0b036c6 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,26 @@ +package org.project.entity.enemies; +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Vampire extends Enemy { + public Vampire(Weapon weapon) { + //Has balanced stats with sustain ability. + super(90, 30, weapon); + } + + @Override + public void attack(Entity target) { + + int damage = weapon.getDamage(); + + target.takeDamage(damage); + + //Heals for 50% of the damage dealt. + this.hp += damage / 2; + + //Ensure HP does not exceed maximum. + if (this.hp > this.maxHp) { + this.hp = this.maxHp; + } + } +} 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..08f55ea --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -0,0 +1,11 @@ +package org.project.entity.players; +import org.project.item.armors.AssassinLeatherArmor; +import org.project.item.weapons.Dagger; + +public class Assassin extends Player{ + //The highest max mana/stamina + public Assassin(String name) { + //The highest max mana/stamina and agile equipment. + super(name, 100, 100, new Dagger(), new AssassinLeatherArmor()); + } +} 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..a95f1bc 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,14 @@ package org.project.entity.players; +import org.project.item.armors.KnightArmor; +import org.project.item.weapons.Sword; // TODO: UPDATE IMPLEMENTATION -public class Knight { +public class Knight extends Player{ // TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR + // Knight-specific constructor with higher damage-oriented equipment. + public Knight(String name) { + // Base stats are selected according to README priorities: + // Knight should have the strongest base damage and solid survivability. + super(name, 120, 30, new Sword(), new KnightArmor()); + } } 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..0a70974 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,7 +5,7 @@ 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; Armor armor; @@ -18,6 +18,8 @@ public abstract class Player { this.name = name; this.hp = hp; this.mp = mp; + this.maxHP = hp; + this.maxMP = mp; this.weapon = weapon; this.armor = armor; @@ -31,6 +33,10 @@ public abstract class Player { @Override public void defend() { // TODO + // If armor is broken, defend action repairs it + if (armor != null && armor.getIsBrocke()) { + armor.repair(); + } } 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..7813a38 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -0,0 +1,11 @@ +package org.project.entity.players; +import org.project.item.armors.WizardRobe; +import org.project.item.weapons.Staff; + +public class Wizard extends Player { + // Wizard is the class with the highest max HP according to the README. + public Wizard(String name) { + //The highest max HP and enough mana for spell usage. + super(name, 150, 80, new Staff(), new WizardRobe()); + } +} 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..87f68e7 100644 --- a/Java-Knight/src/main/java/org/project/item/Item.java +++ b/Java-Knight/src/main/java/org/project/item/Item.java @@ -8,4 +8,14 @@ public interface Item { /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ + /* + Added shared item inspection and identification methods. + These methods allow unified access to item information in inventories and UI, + keeping all items (Weapon, Armor, Consumable) consistent under the same contract. + */ + String getName(); // Returns the name of the item. + + String getDescription(); // Returns a brief description of the item. + + int getValue(); // Represents shop or trade value of item. } 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..af8ee4e 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,7 +1,9 @@ package org.project.item.armors; +import org.project.item.Item; + // TODO: UPDATE IMPLEMENTATION -public abstract class Armor { +public abstract class Armor implements Item { private int defense; private int maxDefense; private int durability; @@ -16,27 +18,47 @@ public abstract class Armor { public void checkBreak() { if (durability <= 0) { - isBroke = true; defense = 0; + isBroke = true; } } // TODO: (BONUS) UPDATE THE REPAIR METHOD + /* + Repair weapon durability. + */ public void repair() { - isBroke = false; - defense = maxDefense; durability = maxDurability; } - public int getDefense() { - return defense; - } + /* + Inspection methods required by Item interface. + These are left abstract so each concrete weapon + can define its own identity and value. + */ + @Override + public abstract String getName(); + @Override + public abstract String getDescription(); + + @Override + public abstract int getValue(); + + /* + BONUS: durability getters. + */ public int getDurability() { return durability; } - public boolean isBroke() { + public int getMaxDurability() { + return maxDurability; + } + public int getDefense(){ + return defense; + } + public boolean getIsBrocke(){ return isBroke; } } diff --git a/Java-Knight/src/main/java/org/project/item/armors/AssassinLeatherArmor.java b/Java-Knight/src/main/java/org/project/item/armors/AssassinLeatherArmor.java new file mode 100644 index 0000000..be2eaaa --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/AssassinLeatherArmor.java @@ -0,0 +1,31 @@ +package org.project.item.armors; +import org.project.entity.Entity; + +public class AssassinLeatherArmor extends Armor { + //offering medium protection (2/3 of Knight) + public AssassinLeatherArmor() { + super(8, 60); + } + + // Added item identity methods required by the Item contract. + @Override + public String getName() { + return "Assassin Leather Armor"; + } + + @Override + public String getDescription() { + return "Reinforced leather armor providing a balance between protection and speed."; + } + + @Override + public int getValue() { + return 100; + } + + @Override + public void use(Entity target) { + + } + +} 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..7e08a49 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,33 @@ package org.project.item.armors; +import org.project.entity.Entity; // TODO: UPDATE IMPLEMENTATION -public class KnightArmor { +public class KnightArmor extends Armor { // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR + // Added default knight armor stats for the combat and durability systems. + public KnightArmor() { + + super(12, 120); + } + + // Added item identity methods required by the Item contract. + @Override + public String getName() { + return "Knight Armor"; + } + + @Override + public String getDescription() { + return "Heavy armor designed for frontline combat and high durability."; + } + + @Override + public int getValue() { + return 140; + } + + @Override + public void use(Entity target) { + + } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java b/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java new file mode 100644 index 0000000..b3ef34d --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java @@ -0,0 +1,30 @@ +package org.project.item.armors; +import org.project.entity.Entity; + +public class WizardRobe extends Armor{ + public WizardRobe() { + // Lower defense but reasonable durability for magic users. + super(4, 80); + } + + // Added item identity methods required by the Item contract. + @Override + public String getName() { + return "Wizard Robe"; + } + + @Override + public String getDescription() { + return "Light magical robe providing minimal protection but high mobility for casters."; + } + + @Override + public int getValue() { + return 60; + } + + @Override + public void use(Entity target) { + + } +} 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..49abf3e 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,35 @@ package org.project.item.consumables; +import org.project.entity.Entity; +import org.project.item.Item; // TODO: UPDATE IMPLEMENTATION -public abstract class Consumable { +public abstract class Consumable implements Item { /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ + // Base economic value for all consumables + protected int value; + + //To initialize consumable value + public Consumable(int value) { + this.value = value; + } + + // Shared implementation of getValue for all consumables + @Override + public int getValue() { + return value; + } + + /* + * Abstract methods force subclasses to define their own identity and behavior. + */ + @Override + public abstract String getName(); + + @Override + public abstract String getDescription(); + + @Override + public abstract void use(Entity target); } 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..dbec402 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,30 @@ package org.project.item.consumables; import org.project.entity.Entity; // TODO: UPDATE IMPLEMENTATION -public class Flask { +public class Flask extends Consumable{ /* THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN. */ + public Flask() { + super(50); + } // TODO: UPDATE USE METHOD @Override public void use(Entity target) { target.heal(target.getMaxHP() / 10); } + + // Defines the display name + @Override + public String getName() { + return "Healing Flask"; + } + + //The effect of the flask + @Override + public String getDescription() { + return "A small flask that restores a portion of the user's health."; + } + } diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java new file mode 100644 index 0000000..6bed635 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java @@ -0,0 +1,36 @@ +package org.project.item.weapons; +import org.project.entity.Entity; + +public class Dagger extends Weapon{ + private double criticalChance; + + public Dagger() { + // Dagger is meant to be quick and efficient, not the highest raw damage weapon. + super(12, 2); + this.criticalChance = 0.30; + } + + // Critical damage supports a high-risk, high-reward playstyle. + public void criticalStrike(Entity target) { + if (Math.random() < criticalChance) { + target.takeDamage(getDamage() * 2); + } else { + target.takeDamage(getDamage()); + } + } + + @Override + public String getName() { + return "Dagger"; + } + + @Override + public String getDescription() { + return "A light and deadly blade designed for quick strikes and critical hits."; + } + + @Override + public int getValue() { + return 90; + } +} diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Staff.java b/Java-Knight/src/main/java/org/project/item/weapons/Staff.java new file mode 100644 index 0000000..e554a46 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/Staff.java @@ -0,0 +1,40 @@ +package org.project.item.weapons; +import org.project.entity.Entity; +import java.util.ArrayList; + +public class Staff extends Weapon{ + private int spellCharge; + + public Staff() { + // Staff is designed around magic damage and higher mana dependency. + super(10, 8); + this.spellCharge = 0; + } + + // This ability is intended to be stronger than a normal attack and to consume buildup. + public void magicBurst(ArrayList targets) { + spellCharge++; + + if (spellCharge >= 2) { + for (Entity target : targets) { + target.takeDamage(getDamage() + 6); + } + spellCharge = 0; + } + } + + @Override + public String getName() { + return "Staff"; + } + + @Override + public String getDescription() { + return "A rune-carved staff that channels arcane energy for powerful spells."; + } + + @Override + public int getValue() { + return 120; + } +} 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..3cb124e 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,7 +5,7 @@ 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. */ @@ -14,13 +14,35 @@ public class Sword { public Sword() { // TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR + // Added default sword stats based on the combat system requirements. + super(15, 5); + + // Initialize ability charge for gameplay progression. + this.abilityCharge = 0; } // TODO: (BONUS) UPDATE THE UNIQUE ABILITY + // Added a sword-specific multi-target attack ability. + // The ability gains charge after each use and damages all enemies in range. public void uniqueAbility(ArrayList targets) { - abilityCharge += 2; + abilityCharge++; for (Entity target : targets) { target.takeDamage(getDamage()); } } + // Added item identity methods required by the Item contract. + @Override + public String getName() { + return "Sword"; + } + + @Override + public String getDescription() { + return "A balanced melee weapon used by knights."; + } + + @Override + public int getValue() { + return 100; + } } 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..661f95c 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,15 +1,29 @@ 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 */ + /* + Added shared item attributes for inspection and inventory usage. + Subclasses will define the concrete values (name, description, value). + */ + private String name; + private String description; + private int value; + + /* + Added durability system so weapons can degrade through combat usage. + */ + private int durability = 100; + private int maxDurability = 100; public Weapon(int damage, int manaCost) { this.damage = damage; @@ -19,6 +33,7 @@ public abstract class Weapon { @Override public void use(Entity target) { target.takeDamage(damage); + reduceDurability(); } public int getDamage() { @@ -28,8 +43,52 @@ public abstract class Weapon { public int getManaCost() { return manaCost; } + /* + Reduces durability whenever the weapon is used. + */ + private void reduceDurability() { + durability--; + if (durability < 0) { + durability = 0; + } + } /* TODO: ADD OTHER REQUIRED AND BONUS METHODS */ + /* + Repair weapon durability. + */ + public void repair() { + durability = maxDurability; + } + + /* + Implemented inspection methods required by Item interface. + */ + @Override + public String getName() { + return name; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public int getValue() { + return value; + } + + /* + Durability getters. + */ + public int getDurability() { + return durability; + } + + public int getMaxDurability() { + return maxDurability; + } } 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..23162cf 100644 --- a/Java-Knight/src/main/java/org/project/location/Location.java +++ b/Java-Knight/src/main/java/org/project/location/Location.java @@ -6,10 +6,11 @@ import java.util.ArrayList; public class Location { private String name; - + private ArrayList locations; private ArrayList enemies; - public Location(ArrayList locations, ArrayList enemies) { + public Location(String name, ArrayList locations, ArrayList enemies) { + this.name = name; this.locations = locations; this.enemies = enemies; } @@ -25,4 +26,44 @@ public class Location { public ArrayList getEnemies() { return enemies; } + + /** + *This method initializes the game world by creating locations + * and establishing their connections. + * @return The starting location. + */ + public static Location generateMap() { + // Create individual locations + Location village = new Location("Village", new ArrayList<>(), new ArrayList<>()); + Location forest = new Location("Forest", new ArrayList<>(), new ArrayList<>()); + Location cave = new Location("Cave", new ArrayList<>(), new ArrayList<>()); + Location dungeon = new Location("Dungeon", new ArrayList<>(), new ArrayList<>()); + Location castle = new Location("Castle", new ArrayList<>(), new ArrayList<>()); + + // Establishing connections between locations + // Village <-> Forest + village.addConnection(forest); + forest.addConnection(village); + + // Forest <-> Cave + forest.addConnection(cave); + cave.addConnection(forest); + + // Cave <-> Dungeon + cave.addConnection(dungeon); + dungeon.addConnection(cave); + + // Dungeon <-> Castle + dungeon.addConnection(castle); + castle.addConnection(dungeon); + + return village; // Start of the journey + } + + //Helper method to add a connection to avoid direct list manipulation from outside. + public void addConnection(Location location) { + if (!this.locations.contains(location)) { + this.locations.add(location); + } + } } diff --git a/Java-Knight/src/main/java/org/project/utils/ConsoleColors.java b/Java-Knight/src/main/java/org/project/utils/ConsoleColors.java new file mode 100644 index 0000000..374804b --- /dev/null +++ b/Java-Knight/src/main/java/org/project/utils/ConsoleColors.java @@ -0,0 +1,23 @@ +package org.project.utils; + +public class ConsoleColors { + public static final String RESET = "\u001B[0m"; + + public static final String BLACK = "\u001B[30m"; + public static final String RED = "\u001B[31m"; + public static final String GREEN = "\u001B[32m"; + public static final String YELLOW = "\u001B[33m"; + public static final String BLUE = "\u001B[34m"; + public static final String PURPLE = "\u001B[35m"; + public static final String CYAN = "\u001B[36m"; + public static final String WHITE = "\u001B[37m"; + + // Bold or bright variants + public static final String BRIGHT_RED = "\u001B[91m"; + public static final String BRIGHT_GREEN = "\u001B[92m"; + public static final String BRIGHT_YELLOW = "\u001B[93m"; + public static final String BRIGHT_BLUE = "\u001B[94m"; + public static final String BRIGHT_PURPLE = "\u001B[95m"; + public static final String BRIGHT_CYAN = "\u001B[96m"; + public static final String BRIGHT_WHITE = "\u001B[97m"; +} 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..45c41fa7e04298cf53a7906b2b59175585189599 GIT binary patch literal 2218 zcmah~O-vg{6#fQmuQ5v?hCmzwSyD)F_%TV^lmI17oRH8OLIO1<^lz{Sv#{PlyK5q! zd+oJSZ#}oSR23+R)K=;(_ukrLuf0{hReiI&E_RGsOP+c2-kbOHz4vxr{r%zx0QX=f z(1KPC5gk#)7`k@(0nb?6E@d8W?TUiO5Sue?)0<~#9Zlyo#2LDMrHW@-ncI%Tt2xv4 z63~>Lc7_4zlrsB{RJSvhEO5`1b|x1Rada?fdDF6ZNhFX!r}EszaBDPo?0eO7OuIB2 za2g$*%uMIwNK&i|(h;r~M-M|J%MU~xz2xq0#V!eH$8nZavfTA7-}N~i{W#B{mxNb~ z&t>QvO`qskr8ubL0t~`}7mEyM>SGS@noU1x$3+Zkc!S~8F;EI4B^c3h375$L`BVlL zLtk}}&$c0rD;mahjANpqCaYD~6J@$BE9!O-rYSQk1eZsk30|JnkYTt`Ujzl9o5@Ps zm6pg#OFC{GR~at$Z{ECCUKdtDmWAO-!`l%CFCGZnt2kn)e{-swz;(Q-;Vm6E@OG{8 zjSdOledXS=Ujrm8VmhzNd{f5^W=WUwUgl-N&{KoiPd!vlQdhpCV;;At4rRVa;o8(e z>!!D(;`g}iQH3tm<6d*q+&*#KW|*fWub0;-v!~LriiYVL1XHm(Y22qU_AOpDo>Dg& z1!;SxT@l8%Bg@8)aKxknKtq-)P><#kH!0IdRu(CV&YWqBuY;_a9eH_7T|Lm47OB4yuT@91W82I)M>xl^LM-6x0{+G+zv8eMf=tJ+PWeGm*9 zHAI8!+O2=bl5}I+{_K#$0u2t`Ee2CVl7c@nlx?BnIMf}rVPWWP%(l8;%lPVR!OZ=S z|9Ofau_`N0K`fXG$2JAeq#7W~?2eS4>p6UXNq9T5NbUO(gF%(OQQnXhgFC_qL$j)e zY0nr;)vhy!PZIbPpK0K#r?wb|kH0adeIWNlCTO3a%@%mUlTMZ4tNI2D6$94~xLve_ zJDihpud*M0jOshMu80j6*9e;v)a$ES`+_u^$a2eCH9bKf>5H~4oUFxNSGXDosgb6f zP6|~+iDB@+RjJfLUKqk1dKlEN1x!5+wBDsthIU4K^vV&~Ghcje7nlQrbMjr<709jhQUhB!OKS%~*a-t& zn8s;5LK3^^#^>n67f9htoWs{Rk8d!5@9C-fku+b?v-1mv@f$|)JH0-C;4=QgC{=8X z(G$aZ=#d%5Bpb(+U%Fw4SBMp8Y8f_PE;#CBwhbX7> 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..4f6b1a5dad0af8be0a2876679760cb9779a2af1d GIT binary patch literal 323 zcmZ{f!A`%?)!aptzUO_wISoy`r< zpWzSii(mY#Bdy8|KfvF_Fg$lR#FXg_U+&#|_w0FI&N=(vtAAerSi`qA5=dG|IY=WT zP!7VjyB`LR)V6k&uRVRhO?5rhbJw^Z2xM+~zNc>sT&~pXjnQ~dtFHS*$^F3Zxj#gE zZK0XP7_t^@2jg%A=0?AG3t=^s?Z6jsWY`VDRkfr1o)Qps3zGu*NAj_B``YWc-$}m} zbZtx^Z-}1~NLFH`(+=K4ku1X~M4-@k`?H#1H0|IFW*8UqC9ii%u`!F1h4&qt!+C-8 zqe4!QE|6_2y(+u1O%3E%H+<(DT);&E%U4fz-PZ!CN`0Z8#U)&}@PUI07T!qhNWblF z9`tA{69jz*7h^SE;64mJUvKJA$!={7ivnk2_sadA>Xp~MP?hiUrQV&h@e!_Aa2pIfLoxP@hb$%sLee}e?6tt+1jq}fl#qy(-BOsuepwDfgTcKRyGX0-+8EAK4Q zLX(cJ1T9*gYk0nT(C==k@O!z{;Z30tY|BnlhMqYOE>n8f>j_*umiolTtg&6B)^dAK z;M{R4$1I>-jMOq@{RL)EN*sH|g!Y!~4b7U^G|4yQ{(xGhHRzt4+S%bmdXI;p_GZuz zx7E65bdATQzhZpF9J@O~zY-{ziG#qM==25891T7vd6&kQT<`Mq6H-xpsd`HMoNp~2 zK~(ehGg#HpTG^GhRdxxQF`# zq+f_^D!Eks3sZ+UyUe|iZylnXpZN{be`3B+J;aBLrS$GUSW4h`*o&p;$>1kp@XsQ{ zwLtVDF{e0+)2I^ZDw!A_FeN8tKXfVn`;w7pg!xwDl0lmEey<%!M zZ@2!&r^~ayBAr~WmX2`ye+IDwWoo~G9Omiir4i)f5V?qr$o(wW2Sa2+zC_OW@(p<; G@bEPmM>|9S 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..2c232fa3bbbdaa8e5d3afad6f90757d9a8706f08 GIT binary patch literal 1795 zcmah|$x;(h6g@8_X$Tz%f#47z%qGpyI4eOMAQYj9T7`wBD<7nRhD;UOY2z2U&?<3S zxOCx1S>F4)NkXdCMRMP8&$;KGcl+1x?>_+Kuogi89U6i5u^lC|H&8V+P9olS(f{j>M`GqF^p@N&@qWAfeWn!UXMA|szAh% zN7gAen9gUmBe;aLhKvpaGXgzLKMT@1paNx^x(KE7`AlA5n&N*O%4`b+SE@yl*Sl#~ ztcNelJ68RP+$qsXe6zYMOWU$;^WHlQItTW#!1x(zzvs!4vqi7eK5 zEeDn?(Vhdl+qq|#N(EVwbX8WNlgJA+Uyte1T^48=*{Z&*?^DF)=v4G38V+<=2YQ>rYYQ<_h z=#-|`)3QQ)zUwxgeS(%Ol9*;;{_;U(A_U_igKlc0NH?yiA_7-&%_DqHIgCmepD_3n zu^En^aq$~Q17PY7)l&~ex3d&=FxEn!XwWBc9XE*frb3AUYVlS>__9|gtPE_|JV|y> zwUCAzq+!n(f!j!VnoWvqRfx1|?`h%s9#)5GMdNxI@@NDWeZkRo@T@O5izT1RgCE)| zFZhD*fOYX4&Cri!i)Qz(g%ILwf8KuLje5M%rb2h7?h)_(zwqAocpvy$9Ba2Y*V1hBeO7$I{q5ilU+^k< H6F}|{@V^*s 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..a0ab880e23f59b0a6207dde2c55b4907939bbe97 GIT binary patch literal 963 zcmaiyZEq4m5Xb+^)4_3+69t80OQBXCw5L^HVSS@$E6vr{e&U*&~Y94h+(H{+wDbvM~ad4UhuK!POLY<-mG;r#2L&Z{*GHy z=?tw`-0gcK9U63%G|3RI);bBKu%;nxz{DkntwruR9nZY(&~ZtKACMR_?ep}e!d*6S z1zGZ&Nh0WlYIR)2H4S+K1*|h{E~;2j9YbOue*uW-(=86x}b|pik zYS-)}woukkF|dsr4EaU&yuwz{a0XrSWAP8Gf;$Y`)eF@tx5#6!Pg>G##}zN8qpt8@ z^X`ytGHtKNhaK)a%AQ|F;N&T}PmN(%Uj?33 zset`?=a|iqI#BTEd_0$?A9z#0C!RV=d~){YyXu{(jVT&hfNE01LZ=X&qu8PKCRr~L z3I1p6=AM~uoPpJUKzn$XBoS&C|8{R-@#qVwnwosu-_;sCHKe*;r?HaPu;2j 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..70240432506207d455776197d2e5eb2dc323d7f9 GIT binary patch literal 720 zcma)3+iDY06kTUB=`_itxtK<4y|kGs=?KmTRD98j!6-tcf^VnEp*>CJ!sJBluLypG zU@7?E2l!FqI!V-46nxpYv)5jGuk-Eum#+Z!u~UYFf(O?}5i0^)X?_%Cd3vITCQ^yf z=9EswT1}&U`cr|G2RhN_p}^g4uh+lWuZ@bMcS>eyGL2r({od|D39Bf1DEp|u7YHsQ z{$Lo4)kK*z5vb&9I?Hozp+*AYja_riM-6p>vXNu;SjO^53Ao+ff}-i;3R(iraYjJT zvbKF(wWVS#-#=w_r~4o4a^$0Q#L2b3PSlH8e5mqQ@^HdRv!4#-v1 zb18*YoRP!0h-gk9p}riP5od{maPu71@G}}8u|em3Kr?hn5i(gXPR`J=QD!`|vv1zKou9wI{{YZK*Mx?g0o_6#1%_rAkK8B@PsLEW zVj_KcK~4m|n7Tdk7Yv2_{=}CL8E)I2*PpHTr3l=2f=A(G>b^|;etS^F5{d>)3nf?# zJF_?b>oDL!54c84+ zEo|ThLv0oy=6MygOwwDgKX<-X>2JIwbV4j+{VPRXP@&SMUjIw+7m2^bPgitdx7TuMGXV`$8C znH!Owiz+3LNh5}>MaZcZ3h+1+arr<2Kj%@#%RC6rO^W!(4QKKXEzxfd*M|n!Ara7pln<$W7p|%y2u}%+M pCHM_=QAq-Ja6#mBB=B8tGeV~v$R6ur=rp%_^&f{%SKux`2I2xWpHkwFqE zhSZhxWO&UGuT7LqZw(2PQ@PbXKuONbF5aVr03Kc4STtBg?J}gptfGH;HJsc^ago`lVzA+ z1Qts$6#t-5ZPR6L{Jvnw+0qjalTlZwN8WWQQn39VciUV^?f(Q5;Xnoqrz_01*l9;D#YltG9LRFr06hxpI9qF&{nY41(KG7|@Y4kU>^QF08c2P+j*4FOb39 z9FO>1khK{_hEB~M@>gz-xaXLyKuOQB8V!5hxq;h>u&wQc6;cFah2Vw%0b+KB(jNfz zHnro!Ej{rxb-O}6^X`aFinib5qc&GE)T_f}Fpv}K)CSkDFUK!hRNCWiRA}qx z3`WbJs-Ad|;ZvE|auw#GiafP99E@fP`?MBGHL3F&#qz~v;jK_vg1sz|SVE_;yMXad hcNz|8HKM#Mj*-J5>7&?(679lKrkiq9{e+Z;(;wd{nYsV~ literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Player.class b/Java-Knight/target/classes/org/project/entity/players/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..37bde65c3fd8dd98567199f89672763c0feccf7e GIT binary patch literal 2261 zcmah}TUQ%Z6#h=g1;RkfrR7$Fh^5J38EtFT2CKb*L@ixO7*)D=fScICj#COiBlVJ~~mz<>Tzb(i#%!K>JKrVdg&! z8L%Sts3;8WO5n0?MYPhDsH@3iSJ!ALA~;s)f8^C_W!=zBv~EO(I9p}~#`A^VqH_9Z zu+Hi4r!32ihpO_qs!WxPQaHM-1_SkUzpE2rJTtdkhd75YwwHlO%M?wTjP7!0>} zS#~x#&z(y^ad!Do$l~+qfGnJm+#t$?tg(??RwKE?Msigthv=We9e#_v{Y3jTrEUKP zWiOo~V_!MNkUe{f5jl;^X~LdLo?_abN}VG2tBJM3?;-~H9U+rZp2jeYaegmhlF!5} zzYBaE3Yf+Rw7MIjP=3f8@eF%qPQo`~PQtX$oFu2DIZ0M2vi%76BF<~H7W?5P`x&O6 z;t<iefUy)Fl2urTJ#z=97&7-K)24WiP)9n1sW?-$?t2z~A_f7_>!37$N^rQ`j5G;wGDQi-o@3ft5SM z%3}v=k3IGDFZ20?BV80-d1hyl5fl9fB4KxWNn1$Uu0`i{O3b51d-SI~^Mg zkp!YxV^}+vz6>rH!i8ep!aBpzikNFp>4DRbuUxn9Ra4lo5U~+Q!or3rw8@ZPlnFnO z!N}>md?ZL&oqC2wq0-~e+;O?zB@`|FZmC?ZEGn018&m4iYQmi8(two=cj|wD89GDu z4}fBwrg5d(f+1OvzPKHFO`#un)1{kCMYXtF=USS0ei;d#TdFz%dmJM?fkiGh lhW$>DA#BlZPZML# literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/Item.class b/Java-Knight/target/classes/org/project/item/Item.class new file mode 100644 index 0000000000000000000000000000000000000000..f4b4c63e98f9de416db9dd06095a48cbac7031f9 GIT binary patch literal 244 zcmYjLy9&ZU5S;au7#~<@Yn?RS2iU40h!z3+GaTVUybI?=@YgK-06$9Hh@j2RGCMOn z&)59{V2yEr7GY*xE-GgWm3g7PI*Toj03E`lkXI>6X>xHmHFrY0z9_;x-u=6j@!H?S z`UA`4NCNlMhO-_%%3hobdxMCMQUicxx5B9$pVZaK)kY@{{H-0TSzyJUM literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/Armor.class b/Java-Knight/target/classes/org/project/item/armors/Armor.class new file mode 100644 index 0000000000000000000000000000000000000000..40e813867ce1a57a59896d44bce2c74cc5d3a643 GIT binary patch literal 1122 zcmZuwTW=CU6#fPlw$SC$N^7;PZN0*(-4_#0YMNN92??z+7!vz7EF+zASu!j}e~kaY z7ZZtz5B>mul<}NprAT?1v*+Y|mpNzl_n)7?0K9^iMFL41mV*@10>umYQF>k3Z+mZ= z7s?L>($95Yhlc{ma;1^M5;8Wj4wm5vYzL<84NSnDo(@&dlcpD#q4$D=fZb9bRDY-h zM3td=2L;AuTO%Wzx~s#_TwZaoifh!ahesypaQhk8*Bq>Kd#)!x9ZwN9HU!qLC|60I zn7Q?zXsTSTRvH4<%b-Q1g_`cG(^0Rf%sbiaQf0Lk__EuOMspq)t?*nA1$JszBxWyn zKwAE}@;gUH$qsp}htlty$U)4KHfkU>&!DZsQ`sZ6Qn^yQoNqley5A<6JT)Avp>Omc z)Inchi3$zb9T9|PUL|hsnBJeZMES|=NXSb>5)XTsk}8kV=UEcR88y^{k@3}Q&G*hm z``KqR)*cNy0fFoE0usDddKd}Zh$F2l%4rW#q&-p0Qhy3J>D;93J-;D}1@{MpyE%sK zZjF)q76G>CT!lqvp3VX?DALyowyCl^f#DW*C?kSMUPNCk%(ixsj%D6PIkCClk^6$2 zn`9+xj3O%~aj8^-jWxorlg>t@G!G@w}P$Y=8Uyv8GoDwc zWk*g!u2rV=lnXu)xzMTP6Y1Vbsr{KF0;K#?smRB|C?8kJn!8k%VVL~Ss3V4OD&3iwQQO`AAh{CP zA|_SS_}m#%Nd?Gn!sw^Yt5x?byj9FS#rPy%~D0C-@r7ytkO 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..2a570fd2203db34b43ae3fc2e5c843e6d0bb3452 GIT binary patch literal 811 zcma))!EVz)5QhJ)ox}~MbwgXArPU&YlpqnG5Qm~l2#Sb^dMV0%<7}O+?A>a;uIM}P zC>-E~#DNFkp%7!oDxoR}A7*w&^UXiA>mNVAeFt!a{VrDEb>N3+q0O*oY#N_ib0!lP zD<|_<*xcA6epxw&_6wzzJ7j3}N29?cK)?{b(<+@iUY7*uG912@;^LCmD4)qfrCQGT zsj>Xj8tpQrB~MH~6^;u%<8#9Kth8dPGUYCZ9fS;z{x-=%t(nK`4<-!$D>IV}>tkws zT;@}0--~HRncmnWBAW=Ss<=t|ZmtT3$K(G{IAG|c(jAMOx^4Cc<1=v~;!Nl?K5fgc6r8P-*raKbhSCBh)q*%Am8ef}X@!KKNRg}vQ54SWWO25#z14bM34Rj? zI3aQ12k@g1Z|#Ue6u_4Dedx`b8Lz+p`1%dN84lanfajypK@%;8fi_8aY4nAh*-%-T zg~DXo6yY-$7+R+)SN17Gb2uK4rU3$m&9~}vc!4M$Uk z#&bQVq8q7PPRcBn=8cF`>hvQ`dZxlCS1+3lyHEwg!|4A6Ck%cf?L=g>Y$F0X3!~Eo*sW5?L0M9}fQ@l({9_;aL?m#c&h5%N>s>x*cBM|3smNx2o3GZ&2?S^wt{aja6uWEp!k2tE|1# qk1MSEYoWJsX9;~=&6A01x3%0s1>CEgv!z_;^)3$RWVlxW2R{M!JE98! 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..544034a896ba0b19c56f2f5ef504abc7ad329cc6 GIT binary patch literal 593 zcmZuu%TB^j5IqAe1w=puU#N*IDGU1n7&izB3Bd)1eW^EiNoh%YOX5GdG0~W~@B{oP z{}tppu8LUnGhY|FL1nRPdv3r7)h*V2>fhLCNU zlLGQ67$}yogA(D=4`$Xf@MEMUl~`Dg?}gFAp1LBmy1y|&U)gRX2sAKICN#E)17;Jn z*1(*w>-rB2t_-CoM$uv_g8NvKP#gM=?N01K#`(IasYe+S%;A>k|J!s3`I%6YbR&M& zfM9T8WG{F`y=4wJR~V~6dNXE}8E`8?Cy+}eeUHx(g^WIL{h2B}CDoJFOI#;@N^$H* zfg}1dUca(A$yGc99yKKC>1i|uz%yZHv=g|iIy*p`t^ ztj6d9qidWUq-gA;&KdI(RX#i#+)Fhr_QXBC{R-omgH$e;6dQ?5DFvi58sQK}0Q=*$ NKS7gugwuq5_5-%mdEx*7 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..810a535b51dd953c5b289c7d305f45e4d2f4a99d GIT binary patch literal 825 zcmah{(M}UV6g{`C-C7n{Dx!$s2pC$4Y+~Y5jfp`>Nh&eH^nIv9JFvUc%ubE|l|C7K z@B{oP(cQevDdyOj%1=!QE1?h@87oBHc+g-~Is$3}L|2Su3g>P#Ju(_>}d`w0*l zUDKCIPg?EsX|dvlIwx#)|1Z#H1-3?5YhFQLnNhpN7OGBKo)lr_A3#FDm_wN|<6^Vb zJ(VA2oXBhtA34k8W4Sp7yis}I>XDxhp?+k>wy*ZJzfZlm_KxqvV=VGA_@@Hmby(u_ z9%nDOO8gF2y1x6Yy`nZC&r!?IZ$pyUs!Nrs>(&M?>~mh7lzhvXl-0? MUA?h&qY&8q4PmybYybcN literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/Dagger.class b/Java-Knight/target/classes/org/project/item/weapons/Dagger.class new file mode 100644 index 0000000000000000000000000000000000000000..9ba58db92d5bff365abef922f7727f570165310d GIT binary patch literal 1072 zcmaJ<%Wl&^6g`udo5V>&2&E6&x`jfL(ikYaB2d+bR4MJIC`jz4&frYr*ukEF`X?;d zvta=e?*$*gmj6LqPf|#$s$R@}_?~;tojbq&{P+oA2M=>dAZZ|FB8?2gVi3A^KManA zqim@}&wedN79$-F+;k#w^wUrp8Q_dUluv!4VWehC|=fRo4c+E8H!FQ zm2|kb)#1J)7}$0WC0sF3HgOddsyODaxb1P@wfDK|5O>J^cFPQtew6qpOYAa}y z&dH|q#lfI=B*Lfs$fHcT8PIjKcqrp|luW6Pj2M=h<1?Ju%uwmZ*o_`)4Gas_GpI9@ zZ`4RiM)8oYj$!VSLWaVj;!by;_eYux!W{4(Nv>3D&Hr19d3`rl67NGqG=E>oz-O4C zM2mX^g5(Z^LFkBG8IPPFif_a{utXb8(6eN8(jy`-O@10T>AXeJCX(apM@l8ILT8Z*fGiAZR74)PDKdu;+(DHhh8pUlb^%hFZsi+w{DkbAwQ%j0)!%-7{sQ0uX47ax%s|{k0!fCmfvnnf z8LSFN*{%}n_NL(Vzz^-G(aMmVaD7)zG9>cla$%tzDYP3%o5;Xq82E4eyy7b>44JSl zJnvqO%c@{t%w5vcsM7v2rrf|Jl7GYOq|9UhPWS@yZ5j??pN){OIn1IfdPh- z2WbgkxoX>f5G`rqZmED;T2 z=Q^_usoT<*KhTQ(c9ja0KdE$s$>($vW|MRTXY9C9?w*!V)bHkcx9fW~kGBe#I3n95 zg2AvDj=yppb8rKFvDEJWx?x31j4 zr*S630{0pelAaG5(h(0`-J5iz@|d1o8mJV#On}j!UKZ^Vv`=7|{v&jnMvQhqXEB@3 zrapodWA9xJ)O8D;OtljrN(mhO?^dSSUB?Zo@FrpGRIM$y$Z|Wf#D3z0f$kp| ziW8#dT%x-P+@-(fGfJygCziYPCc4&=BqP(A15(8HrI>6HS~wg!*fMkqLx;0ww_YF0 Mda-5bbmTSj2P%p<7XSbN 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..3442bc59d453ef2b1a2eb3569c7a424c79378b5a GIT binary patch literal 1373 zcmaJ>%Tg0T6g`~;CJDpC@Q{}Qw{SE)ZveerXK!TCQbWh*MIrrS#Gv9uF{sLeX_o4_OXdq;w4ebo$u2-_F zp1UOq%9cu0>>a_Yu2Zug`#VGXqI9HMVrYwJGKq}{!iX4%n&^PZF!ta4+>YxN89I4h zmZjQV+2meHFtAJ%UFbH@W8w^A482?Y1-I);mhH6X@!hPfDTXlB;&J7A3WpC%BN$}}Ilj5?5WCEslKn8R+mJFa z#xQhTm~a$Huvh&pN*%CFoW}%1q$JdRUg269QDi!B4wEJ>;u1qt@ojPF48^H;VZ^D8 zeq+K&GQ`tXo)dFH6s?LV3t=^yZ`EsL$?sa*jx24e+N=-0K~=A~MPlmCN=K~MD|z8P z;`uUJVp+Gq%NyL2`g~vvsZCj9u(HRcG|kvAB}GH3JMwv5q#L7R7>pn5_|a5S2`Zso z={ZtIN19-pIz)&@BaG<#TSC!Tn@irU9+o}dDq-;ywk53~r+8s|jaLt}M{=^{a8>uH zISVb-oQ|la8l-cbR|ui`n&gxxof46D>FJAF!IM=bU59Qh88&#iPASoxTlWg$fz;!P z`i-8|SCsBem_9*((L9mZX@9RwVbca8IC4(PfyeCHhGqiS*8;HR` zKP3-fmQH3P0XF97#Bc@k6s^HtQ*?;-x#W`%Fhb7=YHAOiYt#GaWq5^QdKqH)igW8T z$vuqk<3a#$et*||A)jx6N&`j_rJFs0F+v?D9?R#o2z`P)S8>g+YVM!{;==;2QzbVj zw^5z8+$75_vUDKuQ~v_`eh}DgG6aw!*COuFs>`0CUH2y#yZp{~Yvt{}Y4Vuj;F02` d7O9Dosfm`U%Ov3hYftg*3D((`sdxRT^dBE+E6)G` 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..b3795a3eba3da0983a297c5a2b39a358db366290 GIT binary patch literal 1627 zcmaJ>*>2N76g`tBag(@hXlYAn>B5?rQnPOXT6RUWMW`r%#LFbHf=l8=j>GaVd;$+3 zQ4l=v0elqV%+zGV;$^O9=ALuUoO_dBzkmD$a36Qlh+)J)+(ZINf$Xk)Bkj8MYWCyu zu2TsFk~dt>4Q>gHS$#}%XqJFCHR67-CP{Fc^6&z)@CmW8y z%2b_p#dlkQ+w|1=DHAy*Ht|N*JB|TMV7gzQcBn|3n35|} z4-4IGR#|9b)AgL~PNVGjPi48TOE)XBUXs46_TgbXc;&VQRyO}(9rV4xZgtvZSp<=VUKs39lzo{aFu77{i$11O^dIvAu$N# zVK8#8IPftwOggg5ITR;564&?i%X1!Z>ezgRrvIJs5f&v*!1Z zwHEd;^;v_@a6OD9*9F8ehctIt9AWWAel1~*H_Q7}uyK|IVnBmO74cPNym{vk&Q(n7{>GB%#11Tn>qCy$2GC_ai|u zDD_DmgTt(7O#Ph*X#}oBf~SVTs}bOs`ssz0OH{0i%vvwLz=&%%`SAgx)(D+dPaDx% zCg~yQM4Ivs@BuTd-_tc4>bk1)#SA&Gb!%MVb5xC##pjKMtotuie|*3?hh(FVE!BPH zbreFO{T3~KBBbB$A-b1k>Hz={+=B6_emu9RwURM20xDkuSbH%hQTi* K!5i9{+kXHRb^##( 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..e77309837f48e9a2d545ac59f5644c935e9e482b GIT binary patch literal 2057 zcma)7&u%#^wLW&l`8dA_1;QNBZ0&pz#mod&FngX*ulus?97|@zW3{U#|rZ zlfe0W?Y;G@6zVekf(`>kfn>vT1Iuw`mEKMwY*eN2NGg|gT$0Lh`eJ3*ou+FA9iL5D z7?jY`kO-D50@sEc+HT+kT{G&8xxx;0E7Df0dYkk;QFB~-t+TaZ``=j`Eky~Eq*b?k zN1h|07X0WiyR$=r639u49awj_dkD|pE=)wV;o}uW%?R72*pT5kwupU{Ocu>4<|D(k$bp@>FBeEnR`n9 zQJ=h~3_%lQz~?NhSaW`Idc8HNidt(h7oBu<+8zr1qB z3x9w=%JJK5GOkzN?Bsdg-JLi2^6U4Hp8!m>OUNN#gi?lz0z>uE`ReGt6Abm^{-ryJ z845dI;KjQP`PsQ%5gNmE7!CC=QOI+B9DDvqH^N{P`mPcBVKib;ZL?!`8EV$w`#N#t z1;cHI3f~+%LELlvv8$oNpwusxujp9YY8f9iROzvP(c~&`o9{H-6k>(%*|$yeNW&eW zR!J4kP0Kny(=a7mlbq7FPE8FDgjwUePEPF;i`=wu>wK4S-lDsn2(v*(Jv%t;(xw@q zHc6G*_Tm0P_hZszHt}1$Njddtp#_ofLX|YhdM$~F_qv`&qTY%Kc)jdQ)^bfmyk&Mq zl-(2oFPk+;JHHkQ@2nW%CzoNu@&fm0eARcOuG9C))U0se_&q1`IHyvHKYKK_hV`Gp z((p>1a2yTX_g-?@KVx6wvql3&`lWy>rf>}| zU*bCPLx~>|KbE*b{8Zv+#Lp#uK|Ck%Jn^E$FNt-Dmx)&;ZW6Ccyg~d*;w^e}ng