# Java Knight - Turn-Based RPG Game

## Project Overview

This project is a simple turn-based RPG game written in Java.  
The player can choose a character and fight different enemies such as Skeletons, Goblins, Vampires, and a final Dragon boss.

The game focuses on basic object-oriented programming concepts like inheritance, abstraction, and interfaces.

---

## Features

- Choose between different character classes:
  - Knight
  - Assassin
  - Wizard

- Turn-based combat system
- Different enemy types with unique behaviors
- HP and MP system for player and enemies
- Weapon and armor system
- Experience points (XP) and leveling up
- Special abilities for each character
- Simple map progression (Village, Forest, Castle)

---

## Game Mechanics

### Combat System
Each turn, the player can choose one action:
- Light Attack (no MP cost)
- Heavy Attack (uses MP)
- Defend (reduces incoming damage)
- Heal (restores HP but uses MP)
- Special Ability (strong attack with MP cost)

Enemies also attack automatically after the player's turn.

---

### Level System
- Players gain XP after defeating enemies
- After reaching a certain XP threshold, the player levels up
- Leveling up increases HP and MP

---

### Items System
- Weapons increase attack power
- Armor reduces incoming damage and can break after repeated use
- Keys are collected by defeating specific enemies

---

## Object-Oriented Design

This project uses basic OOP principles:

- **Encapsulation**: All player stats are private with getters/setters
- **Inheritance**: Different player classes extend the base Player class
- **Polymorphism**: Enemies and players share the Entity interface
- **Abstraction**: Abstract Player class defines shared behavior

---

## Conclusion

In this project, I was able to build a simple text-based RPG game using basic Java concepts such as classes, inheritance, and interfaces. Through this project, I learned how different game mechanics like combat, leveling up, and inventory systems can be implemented using object-oriented programming.
