# Java RPG Project A small console-based Java RPG where the player selects a character class and fights a fixed sequence of enemies: Vampire, Goblin, Skeleton, and Dragon. ## Gameplay The game flow is handled in `Main.java`: 1. The player enters a name. 2. The player chooses a class: - Knight - Wizard - Assassin 3. The game creates four locations and enemies: - Overworld -> Vampire - Village -> Goblin - Nether -> Skeleton - End -> Dragon 4. The player fights each enemy in sequence. 5. If the player dies, the game ends. 6. If all enemies are defeated, the player wins. ## Combat System Each battle is turn-based. ### Player actions The player can choose from: - light attack - normal attack - heavy attack - heal - skip ### Enemy actions Enemies attack after the player’s turn. Some enemies have special behavior: - Vampire can restore health while attacking - Goblin can land critical hits - Skeleton revives once after being defeated - Dragon acts as a boss enemy with high HP ## Core Interfaces and Classes ### `Entity` Common contract for all combatants. It defines shared behavior such as: - `attack(Entity target)` - `heal(int health)` - `fillMana(int mana)` - `takeDamage(int damage)` - `getMaxHP()` - `getMaxMP()` ### `Player` Abstract base class for all player characters. It stores: - name - weapon - armor - current and maximum HP/MP - base damage - alive status It also provides: - normal attack - heavy attack - damage handling with armor defense - healing - mana restoration ### `Enemy` Abstract base class for enemies. It stores: - weapon - HP/MP - base damage - alive status It handles damage directly and leaves defeat behavior to subclasses through `getKilled()`. ## Player Classes ### `Knight` - HP: 100 - MP: 10 - Base damage: 10 A durable melee fighter with strong base damage. ### `Wizard` - HP: 150 - MP: 10 - Base damage: 4 A high-HP character using the shared `Player` behavior. ### `Assassin` - HP: 80 - MP: 20 - Base damage: 5 A lighter character with more mana than the Knight. ## Enemy Classes ### `Vampire` - HP: 50 - MP: 50 Attacks and restores part of the damage dealt as health. ### `Goblin` - HP: 30 - MP: 50 Randomly performs either a normal or critical attack. ### `Skeleton` - HP: 50 - MP: 50 - Base damage: 10 Revives once after death, then dies permanently the second time. ### `Dragon` - HP: 500 - Base damage: 2 A boss-style enemy with a fire-breath themed attack and custom death handling. ## Items ### `Weapon` Abstract item type for damage-dealing equipment. It includes: - damage - mana cost ### `Sword` A weapon with low damage and a mana cost. It also includes a unique ability that can damage multiple targets. ### `DragonBreath` A stronger weapon used for dragon-related combat behavior. ## Armor ### `Armor` Abstract armor type with: - defense - maximum defense - durability - maximum durability - broken state Armor can be repaired, and when durability reaches zero, its defense drops to zero. ### `KnightArmor` A concrete armor type used by the player in the main game flow. #### `Flask` A healing item that restores a fraction of the target’s maximum HP. ## Location `Location` is a simple class that stores a location name and one enemy.