From b03aad94201ff8910b02f9e6d2043eed1628f7c2 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 12 May 2026 23:03:26 +0330 Subject: [PATCH] Implement Player classes --- .../main/java/org/project/entity/Entity.java | 3 ++ .../org/project/entity/players/Assassin.java | 32 +++++++++++++ .../org/project/entity/players/Knight.java | 32 +++++++++++-- .../org/project/entity/players/Player.java | 48 ++++++++++++------- .../org/project/entity/players/Wizard.java | 32 +++++++++++++ 5 files changed, 126 insertions(+), 21 deletions(-) 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 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 88e1844..e3f164e 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -2,6 +2,7 @@ package org.project.entity; public interface Entity { + public void specialAbility(Entity target); void defend(); @@ -11,6 +12,8 @@ public interface Entity { void takeDamage(int damage); + void stun(boolean value); + void dodge(boolean value); } 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..0f646eb --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -0,0 +1,32 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.item.weapons.DualDagger; +import org.project.item.weapons.Weapon; + + +public class Assassin extends Player { + + protected String name; + Weapon weapon; + private static final int maxHP = 110; + private static final int maxMP = 110; + + public Assassin(String name){ + Weapon AssassinWeapon = new DualDagger(); + super(name, maxHP, maxMP, AssassinWeapon); + } + + @Override + public void lightAttack(Entity target) { + target.takeDamage(18); + } + + + @Override + public void specialAbility(Entity target) { + target.takeDamage(52); // critical attack + this.mp -= 30; + dodge(true); + } +} 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..abaa1f9 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,32 @@ 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; +import org.project.item.weapons.Sword; +import org.project.item.weapons.Weapon; + + +public class Knight extends Player { + + protected String name; + Weapon weapon; + private static final int maxHP = 130; + private static final int maxMP = 70; + + public Knight(String name){ + Weapon knightWeapon = new Sword(); + super(name, maxHP, maxMP, knightWeapon); + } + + @Override + public void lightAttack(Entity target) { + target.takeDamage(22); + } + + + @Override + public void specialAbility(Entity target) { + target.takeDamage(30); + this.mp -= 25; + target.stun(true); + } } 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..5c43722 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,42 +1,43 @@ 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 { protected String name; Weapon weapon; - Armor armor; - private int hp; + protected int hp; private int maxHP; - private int mp; + protected int mp; private int maxMP; + private int xp; + private boolean defending = false; + private boolean stunned = false; + private boolean dodged = false; - public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { + + public Player(String name, int hp, int mp, Weapon weapon) { this.name = name; this.hp = hp; this.mp = mp; - this.weapon = weapon; - this.armor = armor; } - @Override - public void attack(Entity target) { + public void heavyAttack(Entity target){ // Uses weapons target.takeDamage(weapon.getDamage()); + mp -= weapon.getManaCost(); } + public abstract void lightAttack(Entity target); + @Override public void defend() { - // TODO + defending = true; } - @Override public void takeDamage(int damage) { - hp -= damage - armor.getDefense(); + hp -= damage; } @Override @@ -48,6 +49,15 @@ public abstract class Player { } @Override + public void stun(boolean value) { + stunned = value; + } + + @Override + public void dodge(boolean value) { + dodged = value; + } + public void fillMana(int mana) { mp += mana; if (mp > maxMP) { @@ -56,6 +66,7 @@ public abstract class Player { } + // Getter Methods public String getName() { return name; } @@ -64,7 +75,6 @@ public abstract class Player { return hp; } - @Override public int getMaxHP() { return maxHP; } @@ -73,7 +83,6 @@ public abstract class Player { return mp; } - @Override public int getMaxMP() { return maxMP; } @@ -82,8 +91,11 @@ public abstract class Player { return weapon; } - public Armor getArmor() { - return armor; + public boolean isDefending() { + return defending; } + public boolean isDodged() { + return dodged; + } } 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..32c210a --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -0,0 +1,32 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.item.weapons.MagicStaff; +import org.project.item.weapons.Weapon; + + +public class Wizard extends Player { + + protected String name; + Weapon weapon; + private static final int maxHP = 150; + private static final int maxMP = 85; + + public Wizard(String name){ + Weapon WizardWeapon = new MagicStaff(); + super(name, maxHP, maxMP, WizardWeapon); + } + + @Override + public void lightAttack(Entity target) { + target.takeDamage(16); + } + + + @Override + public void specialAbility(Entity target) { + target.takeDamage(32); // cast spell + this.mp -= 28; + heal(15); + } +}