# 🛡️ Java‑Knight RPG
A console‑based fantasy RPG written entirely in pure Java.
Fight monsters, explore mythical locations, manage your inventory, unlock abilities and defeat the Dragon of Valhalla.
---
# 📚 Table of Contents
- Overview
- Core Features
- Player Classes
- Systems & Managers
- Items & Equipment
- Combat System
- Locations
- Boss Fight
- Project Structure
- How to Run
- Future Improvements
- Example Output
- Author
---
# ⚔️ Overview
Java‑Knight is a modular **turn‑based RPG engine** built with Java and object‑oriented design.
The project focuses on:
- Clean OOP architecture
- Modular manager systems
- Expandable combat mechanics
- Class‑based gameplay
- Status effect system
- Inventory & equipment system
The **GameLoop** controls the main gameplay cycle including player actions, combat resolution and movement between locations.
---
# 🧩 Core Features
## 🎮 Gameplay Loop
The **GameLoop** manages:
- Player creation
- Class selection
- Location movement
- Enemy spawning
- Combat handling
- Inventory usage
Locations are interconnected and enemies spawn dynamically.
---
# 🧙 Player Classes
Each class has its own stats, armor and special ability.
| Class | Ability | Description |
|------|------|------|
| Knight | Guardian Oath | Heals and increases damage |
| Wizard | Arcane Storm | Powerful magic attack |
| Assassin | Poison Dagger | Poison damage and burst attack |
---
# 🛠 Systems & Managers
The architecture separates game logic into managers.
| Manager | Responsibility |
|------|------|
| ActionDecisionManager | Handles combat decisions |
| InventoryManager | Equipment & item usage |
| ManaCostManager | Mana cost calculations |
| SpecialAbilityManager | Executes abilities |
| StatusEffectManager | Applies burn, poison, freeze |
| TotalAttackCalculator | Calculates final damage |
This modular design keeps the **GameLoop clean and maintainable**.
---
# ⚗️ Items & Equipment
## ⚔ Weapons
- Sword
- Dagger
Weapons can receive special effects.
---
## 🌫 Weapon Effects
| Effect | Description |
|------|------|
| BurnEffect | Damage over time |
| FreezeEffect | Slows or freezes target |
| PoisonEffect | Gradual HP drain |
---
## 🛡 Armor
Each class uses its own armor type.
Examples:
- KnightArmor
- WizardArmor
- AssassinArmor
Armor increases defense and survivability.
---
## 🧴 Consumables
Consumables are located in:
```
org.project.item.consumables
```
Available items:
- **HealFlask** → restores HP
- **ManaFlask** → restores MP
These can be used during gameplay from the **Inventory menu**.
---
# 🧠 Combat System
Combat is **turn‑based**.
Each round:
1. Status effects update
2. Player action
3. Enemy AI action
Features:
- Damage calculation system
- Defense mechanics
- Status effects
- Ability cooldowns
- Mana system
- XP rewards
- Key drop system
---
# 🗺 Locations
| Location | Description |
|------|------|
| Valhalla | Starting realm |
| Elysium | Sacred plains |
| Niflheim | Frozen undead land |
| Castle | Dragon battlefield |
Moving between locations spawns enemies:
- Goblin
- Skeleton
- Vampire
---
# 🐉 Boss Fight
To unlock the final boss you must collect:
- GoblinKey
- SkeletonKey
- VampireKey
After collecting all keys you can trigger:
```
Fight Dragon
```
Defeat the **Dragon of Valhalla** to win the game.
---
# 🎨 Console Colors
ANSI colors are used for better terminal visuals.
```java
Colors.RED = "\u001B[31m";
Colors.GREEN = "\u001B[32m";
Colors.YELLOW = "\u001B[33m";
Colors.CYAN = "\u001B[36m";
Colors.RESET = "\u001B[0m";
```
Example:
```
Guardian Oath: Sir Duncan heals +5 HP and gains 50% increased damage.
```
---
# 🧩 Project Structure
```
org.project
┣ abilities
┃ ┣ ArcaneStorm.java
┃ ┣ BoneStrike.java
┃ ┣ GuardianOath.java
┃ ┣ InfernoBreath.java
┃ ┣ LifeSteal.java
┃ ┣ PoisonDagger.java
┃ ┗ SpecialAbility.java
┣ combat
┃ ┣ AttackResult.java
┃ ┗ TotalAttackCalculator.java
┣ entity
┃ ┣ players
┃ ┗ enemies
┣ item
┃ ┣ armors
┃ ┣ weapons
┃ ┗ consumables
┣ managers
┃ ┣ InventoryManager.java
┃ ┣ ActionDecisionManager.java
┃ ┣ ManaCostManager.java
┃ ┣ SpecialAbilityManager.java
┃ ┗ StatusEffectManager.java
┣ weaponEffects
┃ ┣ BurnEffect.java
┃ ┣ FreezeEffect.java
┃ ┗ PoisonEffect.java
┣ location
┃ ┗ Location.java
┣ Colors.java
┣ GameLoop.java
┗ Main.java
```
---
# 🚀 How to Run
Compile the project:
```
javac -d out src/main/java/org/project/Main.java
```
Run the game:
```
java -cp out org.project.Main
```
---
# 💬 Example Console Output
```
====== JAVA KNIGHT ======
Choose class:
1. Knight (HP:150 MP:80 DMG:12)
2. Wizard (HP:80 MP:200 DMG:10)
3. Assassin (HP:90 MP:120 DMG:15)
1
==== GAME MENU ====
Location: Valhalla
Enemy: vampire{MAX_HP : 90 | MAX_MP : 80 | XP_REWARD : 80 | BASE_DAMAGE : 12 | personalArmor = vampire armor | Type: MEDIUM | Defense: 16 | Durability: 30/30}
1. Fight
2. Inventory
3. Move
0. Exit
1
⚔ COMBAT STARTED! ⚔
==== YOUR TURN ====
Sir Duncan-> HP: 150 | MP: 80 | level: 1 | XP: 0
Vampire-> HP: 90 | MP: 80
Choose attack type:
1.lightAttack
2.heavyAttack
3.heal
4.defend
5.ability
6.shielBash
7.inventory
2
Vampire got 34 damage
==== ENEMY TURN ====
enemy random choose action: lightAttack
Sir Duncan got 17 damage
```
---
# 🧠 Future Improvements
- Multiple enemies per location
- Save / Load system
- More consumables
- More classes
- Advanced enemy AI
- Graphical version (JavaFX / LWJGL)
---
# 🧑💻 Author
Created by **Mohammadreza Ashrafian**
2026
⚔️ *May your code be strong and your armor unbreakable.*