# ⚔️ Java Knight RPG

## 🎮 Introduction
Java Knight is a text-based RPG game developed in Java using Object-Oriented Programming principles.  
The player explores different locations, fights enemies, collects keys, gains experience, and becomes stronger throughout the adventure.  
Each enemy has unique abilities, and the final goal is to defeat the Dragon Boss and complete the quest.

---

# 🛠️ Compile & Run

## ✅ Compile
Open the terminal in the project folder and run:

```bash
javac *.java
```

## ▶️ Run
After compiling, start the game using:

```bash
java Main
```

---

# 🧩 Classes & OOP Design

## 🧱 Entity
The base class of all living characters in the game.  
It contains common attributes such as:
- Name
- Health
- Damage
- Defense

This class demonstrates:
- Inheritance
- Encapsulation

---

## 🛡️ Player
Represents the main playable character.  
The player can:
- Fight enemies
- Gain XP
- Level up
- Collect keys
- Move between locations

Concepts used:
- Encapsulation
- Method overriding
- State management

---

## ⚔️ Knight
A specialized version of the Player class with stronger combat abilities and better starting stats.

Concepts used:
- Inheritance
- Polymorphism

---

## 👾 Enemy
Base class for all enemy types in the game.  
Defines common enemy behavior such as:
- Attacking
- Taking damage
- Health management

Concepts used:
- Abstraction
- Inheritance

---

## 💀 Skeleton
A simple enemy with balanced combat stats.

---

## 👹 Goblin
A fast enemy with a chance to deal critical damage.

---

## 🧛 Vampire
An enemy capable of stealing health from the player during combat.

---

## 🐉 Dragon
The final boss of the game with powerful attacks that can ignore defense.

---

## 📍 Location
Handles the world map and movement system.  
Each location contains:
- Enemies
- Connected locations
- Exploration logic

Concepts used:
- Object relationships
- Composition

---

## 🎒 Item
Represents collectible and usable objects inside the game.  
Items can help the player by:
- Restoring health
- Increasing power
- Supporting progression

Concepts used:
- Encapsulation
- Object interaction

---

# 🧠 OOP Principles Used

- ✅ Inheritance
- ✅ Encapsulation
- ✅ Polymorphism
- ✅ Abstraction

The project is fully designed using Object-Oriented Programming to make the code modular, reusable, and easier to maintain.

---

# 🎯 How to Play

## 🎮 Controls
The game is menu-based.  
Players select actions by entering numbers in the terminal.

Example actions:
- Attack enemy
- View stats
- Move to another location
- Continue exploration

---

## 📊 Player Stats

### ❤️ Health
Determines how much damage the player can survive.

### ⚔️ Damage
Controls attack power against enemies.

### 🛡️ Defense
Reduces incoming damage.

### ✨ XP
Earned after defeating enemies and used for leveling up.

### 🔑 Keys
Required to unlock progression and reach the final boss.

---

## 🌍 Gameplay Flow

1. Start the game
2. Explore locations
3. Fight enemies
4. Gain XP and level up
5. Collect keys
6. Reach the Dragon Castle
7. Defeat the Dragon Boss

---

# 👩‍💻 Credits

Developed with Java and Object-Oriented Programming concepts.

Made by Romina
