Java Knight ⚔️
A turn-based RPG with Roguelike elements that runs directly in the terminal.
Introduction
Java Knight is a terminal-based RPG developed in Java that focuses on practicing and applying core Object-Oriented Programming (OOP) concepts.
In this game, players choose a hero class and explore dangerous locations filled with monsters. By defeating enemies, players gain experience, level up, and collect special keys needed to unlock the final area of the game: the Castle.
Inside the Castle awaits the final boss — the mighty Dragon.
The project was designed to demonstrate clean software architecture using concepts such as:
- Inheritance
- Encapsulation
- Polymorphism
- Abstraction
- Method Overriding
- Modular class design
⚙️ How to Compile and Run
Make sure you have Java JDK 17+ installed.
Compile the Project
Open a terminal in the project root folder and run:
javac -d out src/org/project/**/*.java
This command compiles all Java source files and stores the compiled classes inside the out directory.
Run the Game
java -cp out org.project.Main
The game will start in the terminal.
🧱 Project Structure & Classes
The project follows a modular object-oriented design.
Main
The entry point of the application.
Responsibilities:
- Starts the game
- Creates the
Gameobject - Runs the main game loop
Game
Controls the entire gameplay flow.
Responsibilities:
- Character selection
- Location selection
- Combat management
- XP and leveling
- Key collection
- Final boss battle
Entity
Base class for all living characters in the game.
Shared attributes:
- Name
- Health
- Damage
Both Player and Enemy inherit from this class.
Player (Abstract Class)
Represents the playable character.
Contains common player functionality such as:
- Health
- Mana/Stamina
- Combat actions
- XP system
- Level system
Player Classes
Knight 🛡️
- High health
- Balanced combat style
- Special ability can stun enemies
Wizard 🔮
- High mana pool
- Strong magical attacks
- Special ability deals damage and heals
Assassin 🗡️
- Fast attacks
- High critical damage
- Special ability boosts burst damage
Enemy (Abstract Class)
Base class for all enemies.
Each enemy type has unique behavior and abilities.
Enemy Types
Goblin
- Low HP
- High critical chance
Skeleton
- Can resurrect once after death
Vampire
- Steals health from the player
Dragon 🐉
- Final boss
- Ignores defense abilities
- Deals massive damage
Location
Represents explorable areas in the game.
Each location contains one specific enemy type.
Example Locations
- Dark Forest → Goblin
- Ancient Ruins → Skeleton
- Bloody Swamp → Vampire
Item
Represents collectible items such as keys dropped by enemies.
Keys are required to unlock the Castle.
Colors
Utility class containing ANSI color codes for colorful terminal output.
🧠 OOP Principles Used
Encapsulation
Player and enemy stats are protected using methods such as:
takeDamage()
heal()
instead of direct field access.
Inheritance
Shared behavior is inherited from base classes.
Entity
├── Player
│ ├── Knight
│ ├── Wizard
│ └── Assassin
│
└── Enemy
├── Goblin
├── Skeleton
├── Vampire
└── Dragon
Polymorphism
Different classes override methods such as:
attack()
specialAbility()
allowing each subclass to behave differently.
Abstraction
Abstract classes like Player and Enemy define shared structure while forcing subclasses to implement specific behavior.
🎮 How to Play
1. Choose Your Class
At the beginning of the game, choose one of three character classes:
| Class | Description |
|---|---|
| Knight | High defense and balanced damage |
| Wizard | Powerful magic attacks and healing |
| Assassin | Fast attacks and high critical damage |
2. Choose a Location
Each location contains a different enemy type.
Example:
- Mordor → Goblins
- Ancient Bones → Skeletons
- Mystic Falls → Vampires
3. Fight Enemies
During combat, you can choose from 5 actions:
- Light Attack
- Heavy Attack
- Defend
- Heal
- Special Ability
4. Gain XP and Level Up
Defeating enemies grants XP.
Leveling up increases:
- Maximum Health
- Maximum Mana/Stamina
5. Collect Keys 🗝️
Enemies have a chance to drop unique keys.
You must collect all keys before entering the Castle.
6. Defeat the Dragon 🐉
Once all keys are collected, the Castle becomes accessible.
Defeat the Dragon to win the game.
If your HP reaches 0, the game ends.
✅ Victory Condition
- Collect all keys
- Enter the Castle
- Defeat the Dragon
❌ Game Over
- Your character dies during battle
Good luck, warrior ⚔️