diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..935cb4a
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..c16bbb5
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..4158879
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index a20905f..be3fc8d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,13 @@
+
+
+
+
diff --git a/Java-Knight/pom.xml b/Java-Knight/pom.xml
new file mode 100644
index 0000000..863ff5c
--- /dev/null
+++ b/Java-Knight/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ org.project
+ Java-Knight
+ 1.0-SNAPSHOT
+
+
+ 25
+ 25
+ UTF-8
+
+
+
\ 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
new file mode 100644
index 0000000..c2e0550
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/Main.java
@@ -0,0 +1,15 @@
+package org.project;
+
+import org.project.location.Location;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ // TODO: ADD SOME LOCATIONS TO YOUR GAME
+ List locations = new ArrayList<>();
+
+ // TODO: IMPLEMENT GAMEPLAY
+ }
+}
\ 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
new file mode 100644
index 0000000..2a060f9
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/entity/Entity.java
@@ -0,0 +1,21 @@
+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);
+
+ int getMaxHP();
+
+ int getMaxMP();
+
+ /*
+ TODO: ADD OTHER REQUIRED AND BONUS METHODS
+ */
+}
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
new file mode 100644
index 0000000..1fcc491
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java
@@ -0,0 +1,35 @@
+package org.project.entity.enemies;
+
+import org.project.object.weapons.Weapon;
+
+// TODO: UPDATE IMPLEMENTATION
+public abstract class Enemy {
+ Weapon weapon;
+ private int hp;
+ private int mp;
+
+ public Enemy(int hp, int mp, Weapon weapon) {
+ this.hp = hp;
+ this.mp = mp;
+
+ this.weapon = weapon;
+ }
+
+ // TODO: (BONUS) UPDATE THE FORMULA OF TAKING DAMAGE
+ @Override
+ public void takeDamage(int damage) {
+ hp -= damage;
+ }
+
+ public int getHp() {
+ return hp;
+ }
+
+ public int getMp() {
+ return mp;
+ }
+
+ public Weapon getWeapon() {
+ return weapon;
+ }
+}
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
new file mode 100644
index 0000000..8c3e638
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java
@@ -0,0 +1,6 @@
+package org.project.entity.enemies;
+
+// TODO: UPDATE IMPLEMENTATION
+public class Skeleton {
+ // TODO: DESIGN ENEMY'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR
+}
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
new file mode 100644
index 0000000..14d8fa2
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java
@@ -0,0 +1,6 @@
+package org.project.entity.players;
+
+// TODO: UPDATE IMPLEMENTATION
+public class Knight {
+ // TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR
+}
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
new file mode 100644
index 0000000..674905a
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java
@@ -0,0 +1,89 @@
+package org.project.entity.players;
+
+import org.project.entity.Entity;
+import org.project.object.armors.Armor;
+import org.project.object.weapons.Weapon;
+
+// TODO: UPDATE IMPLEMENTATION
+public abstract class Player {
+ protected String name;
+ Weapon weapon;
+ Armor armor;
+ private int hp;
+ private int maxHP;
+ private int mp;
+ private int maxMP;
+
+ public Player(String name, int hp, int mp, Weapon weapon, Armor armor) {
+ this.name = name;
+ this.hp = hp;
+ this.mp = mp;
+
+ this.weapon = weapon;
+ this.armor = armor;
+ }
+
+ @Override
+ public void attack(Entity target) {
+ target.takeDamage(weapon.getDamage());
+ }
+
+ @Override
+ public void defend() {
+ // TODO: (BONUS) IMPLEMENT A DEFENSE METHOD FOR SHIELDS
+ }
+
+ // TODO: (BONUS) UPDATE THE FORMULA OF TAKING DAMAGE
+ @Override
+ public void takeDamage(int damage) {
+ hp -= damage - armor.getDefense();
+ }
+
+ @Override
+ public void heal(int health) {
+ hp += health;
+ if (hp > maxHP) {
+ hp = maxHP;
+ }
+ }
+
+ @Override
+ public void fillMana(int mana) {
+ mp += mana;
+ if (mp > maxMP) {
+ mp = maxMP;
+ }
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public int getHp() {
+ return hp;
+ }
+
+ @Override
+ public int getMaxHP() {
+ return maxHP;
+ }
+
+ public int getMp() {
+ return mp;
+ }
+
+ @Override
+ public int getMaxMP() {
+ return maxMP;
+ }
+
+ public Weapon getWeapon() {
+ return weapon;
+ }
+
+ public Armor getArmor() {
+ return armor;
+ }
+
+}
diff --git a/Java-Knight/src/main/java/org/project/location/Location.java b/Java-Knight/src/main/java/org/project/location/Location.java
new file mode 100644
index 0000000..dfa9cb8
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/location/Location.java
@@ -0,0 +1,32 @@
+package org.project.location;
+
+import org.project.entity.enemies.Enemy;
+
+import java.util.ArrayList;
+
+public class Location {
+ private String name;
+
+ private ArrayList enemies;
+
+ public Location(ArrayList locations, ArrayList enemies) {
+ this.locations = locations;
+ this.enemies = enemies;
+ }
+
+ /*
+ TODO: (BONUS) RESET EACH LOCATION AFTER PLAYER LEAVES
+ */
+
+ public String getName() {
+ return name;
+ }
+
+ public ArrayList getLocations() {
+ return locations;
+ }
+
+ public ArrayList getEnemies() {
+ return enemies;
+ }
+}
diff --git a/Java-Knight/src/main/java/org/project/object/Object.java b/Java-Knight/src/main/java/org/project/object/Object.java
new file mode 100644
index 0000000..922cbd5
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/Object.java
@@ -0,0 +1,11 @@
+package org.project.object;
+
+import org.project.entity.Entity;
+
+public interface Object {
+ void use(Entity target);
+
+ /*
+ TODO: ADD OTHER REQUIRED AND BONUS METHODS
+ */
+}
diff --git a/Java-Knight/src/main/java/org/project/object/armors/Armor.java b/Java-Knight/src/main/java/org/project/object/armors/Armor.java
new file mode 100644
index 0000000..346c25e
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/armors/Armor.java
@@ -0,0 +1,42 @@
+package org.project.object.armors;
+
+// TODO: UPDATE IMPLEMENTATION
+public abstract class Armor {
+ 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.durability = durability;
+ }
+
+ public void checkBreak() {
+ if (durability <= 0) {
+ isBroke = true;
+ defense = 0;
+ }
+ }
+
+ // TODO: (BONUS) UPDATE THE REPAIR METHOD
+ public void repair() {
+ isBroke = false;
+ defense = maxDefense;
+ durability = maxDurability;
+ }
+
+ public int getDefense() {
+ return defense;
+ }
+
+ public int getDurability() {
+ return durability;
+ }
+
+ public boolean isBroke() {
+ return isBroke;
+ }
+}
diff --git a/Java-Knight/src/main/java/org/project/object/armors/KnightArmor.java b/Java-Knight/src/main/java/org/project/object/armors/KnightArmor.java
new file mode 100644
index 0000000..0dedcc2
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/armors/KnightArmor.java
@@ -0,0 +1,6 @@
+package org.project.object.armors;
+
+// TODO: UPDATE IMPLEMENTATION
+public class KnightArmor {
+ // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR
+}
\ No newline at end of file
diff --git a/Java-Knight/src/main/java/org/project/object/consumables/Consumable.java b/Java-Knight/src/main/java/org/project/object/consumables/Consumable.java
new file mode 100644
index 0000000..fd8962c
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/consumables/Consumable.java
@@ -0,0 +1,8 @@
+package org.project.object.consumables;
+
+// TODO: UPDATE IMPLEMENTATION
+public abstract class Consumable {
+ /*
+ TODO: ADD OTHER REQUIRED AND BONUS METHODS
+ */
+}
diff --git a/Java-Knight/src/main/java/org/project/object/consumables/Flask.java b/Java-Knight/src/main/java/org/project/object/consumables/Flask.java
new file mode 100644
index 0000000..d7e515d
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/consumables/Flask.java
@@ -0,0 +1,16 @@
+package org.project.object.consumables;
+
+import org.project.entity.Entity;
+
+// TODO: UPDATE IMPLEMENTATION
+public class Flask {
+ /*
+ THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN.
+ */
+
+ // TODO: (BONUS) UPDATE USE METHOD
+ @Override
+ public void use(Entity target) {
+ target.heal(target.getMaxHP() / 10);
+ }
+}
diff --git a/Java-Knight/src/main/java/org/project/object/weapons/Sword.java b/Java-Knight/src/main/java/org/project/object/weapons/Sword.java
new file mode 100644
index 0000000..a0e3cc3
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/weapons/Sword.java
@@ -0,0 +1,26 @@
+package org.project.object.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 Sword() {
+ // TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR
+ }
+
+ // TODO: (BONUS) UPDATE THE UNIQUE ABILITY
+ public void uniqueAbility(ArrayList targets) {
+ abilityCharge += 2;
+ for (Entity target : targets) {
+ target.takeDamage(getDamage());
+ }
+ }
+}
diff --git a/Java-Knight/src/main/java/org/project/object/weapons/Weapon.java b/Java-Knight/src/main/java/org/project/object/weapons/Weapon.java
new file mode 100644
index 0000000..35e1ecc
--- /dev/null
+++ b/Java-Knight/src/main/java/org/project/object/weapons/Weapon.java
@@ -0,0 +1,35 @@
+package org.project.object.weapons;
+
+import org.project.entity.Entity;
+
+// TODO: UPDATE IMPLEMENTATION
+public abstract class Weapon {
+ 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;
+ }
+
+ @Override
+ public void use(Entity target) {
+ target.takeDamage(damage);
+ }
+
+ public int getDamage() {
+ return damage;
+ }
+
+ public int getManaCost() {
+ return manaCost;
+ }
+
+ /*
+ TODO: ADD OTHER REQUIRED AND BONUS METHODS
+ */
+}
diff --git a/README.md b/README.md
index e006786..8555a93 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ git checkout -b develop
A well-structured OOP hierarchy is crucial. Avoid duplicating code by placing shared logic in abstract classes.
-- **Entities & Locations:** You have `Entity`, `Object`, and `Location`.
+- **Entities & Locations:** You have `Entity`, `Object`(Bonus) , and `Location`.
- **Players:** `Player` is an abstract class implementing `Entity`. Subclasses: `Wizard`, `Knight`, `Assassin`.
- **Base Stat Differences:** Each class must have distinct starting stats. For example:
- **Knight:** Highest Base Damage.
@@ -47,7 +47,11 @@ A well-structured OOP hierarchy is crucial. Avoid duplicating code by placing sh
- **Assassin:** Highest Max Stamina/Mana.
- **Enemies:** `Enemy` is an abstract class implementing `Entity`. Subclasses: `Skeleton`, `Goblin`, `Vampire`, and **`Dragon`**.
- **The Boss:** Even though `Dragon` is the final boss, it **must** be a subclass of `Enemy` to inherit common combat properties, while possessing extremely high stats and unique mechanics.
-- **Objects:** `Consumable`, `Armor`, `Weapon` are abstract classes implementing `Object`.
+- **Objects (Bonus):** `Consumable`, `Armor`, `Weapon` are abstract classes implementing `Object`. example :
+ - KnightArmor extends Armor - you can add more subclasses of Armor for extra score
+ - Sword extends Weapon - you can add more subclasses of Weapon for extra score
+
+
### 3️⃣ Step 3: Implement Player & Monster Methods 🏹
diff --git a/Readme_Pictures/structure.png b/Readme_Pictures/structure.png
new file mode 100644
index 0000000..3b53890
Binary files /dev/null and b/Readme_Pictures/structure.png differ