# 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.