Fourth Assignment - Java Knight ⚔️
Java Knight ⚔️
A turn-based RPG game written in Java using Object-Oriented Programming (OOP) principles.
📖 Story
For centuries, the land of Javanest lived peacefully until a powerful Dragon attacked the kingdom and cursed its people.
The curse transformed innocent humans into terrifying monsters such as:
- Skeletons ☠️
- Goblins 👹
- Vampires 🧛
The Dragon hid inside its Castle and divided the three magical keys among the monsters.
Your mission is to:
- Defeat enemies
- Collect all three keys
- Become stronger through battles
- Enter the Castle
- Defeat the Dragon and save Javanest
🎮 Game Features
- Turn-based combat system
- Different player classes
- Enemy special abilities
- Mana/Stamina system
- Weapons and armors
- Healing system
- RPG progression mechanics
- Object-Oriented design
🧱 Project Structure
src/
└── org.project
├── entity
│ ├── Entity.java
│ ├── enemies
│ │ ├── Enemy.java
│ │ └── Skeleton.java
│ └── players
│ ├── Player.java
│ └── Knight.java
│
├── item
│ ├── Item.java
│ ├── armors
│ │ ├── Armor.java
│ │ └── KnightArmor.java
│ ├── weapons
│ │ ├── Weapon.java
│ │ └── Sword.java
│ └── consumables
│ ├── Consumable.java
│ └── Flask.java
│
├── location
│ └── Location.java
│
└── Main.java
🧠 OOP Concepts Used
This project was designed using multiple OOP principles.
✅ Inheritance
Knight extends PlayerSkeleton extends EnemySword extends WeaponKnightArmor extends Armor
✅ Abstract Classes
Used to avoid duplicated code:
EntityPlayerEnemyWeaponArmorConsumable
✅ Interfaces
The Item interface is implemented by:
WeaponArmorConsumable
✅ Encapsulation
Important fields such as:
- HP
- Mana
- Defense
- Durability
are protected/private and accessed using getters.
✅ Polymorphism
Methods like:
attack()use()takeDamage()
behave differently depending on the object type.
✅ Method Overriding
Examples:
attack()takeDamage()uniqueAbility()
are overridden in subclasses.
⚔️ Player Class
Knight
The Knight is a powerful melee fighter with:
- High damage
- Strong defense
- Heavy attacks
- Shield abilities
Knight Abilities
- Light Attack
- Heavy Attack
- Defend
- Heal
- Special Ability (Shield Bash)
👹 Enemies
Skeleton ☠️
Special Ability
Can revive once with 50% HP after dying.
🛡️ Items
Weapons
Sword ⚔️
- Deals damage to enemies
- Has a special ability attacking multiple targets
Armors
KnightArmor 🛡️
- Reduces incoming damage
- Has durability system
Consumables
Flask 🧪
- Restores player health
❤️ Combat System
The game uses a turn-based combat system.
Example combat loop:
while (player.isAlive() && enemy.isAlive()) {
player.attack(enemy);
if (enemy.isAlive()) {
enemy.attack(player);
}
}
▶️ How to Run
Compile
javac src/org/project/Main.java
Run
java org.project.Main
☕ Requirements
- Java JDK 21 or newer
- IntelliJ IDEA or any Java IDE
🎨 Console Output
The game uses terminal messages to display:
- Attacks
- Damage
- Healing
- Mana usage
- Enemy actions
Example:
⚔️ Knight used Heavy Attack!
💀 Skeleton revived with 50% HP!
🧪 Flask healed the player!
🚀 Future Improvements
Possible future features:
- Goblin enemy
- Vampire enemy
- Dragon boss
- XP and Level system
- Inventory system
- Merchant/shop system
- Multiplayer mode
- PvP mode
- ANSI colored terminal output
👨💻 Developer Notes
This project was developed as the Fourth Assignment for Advanced Programming.
The main goal of the project is practicing:
- Clean architecture
- OOP design
- Java inheritance hierarchy
- Combat system implementation
🏆 Final Goal
Collect all three keys, enter the Castle, defeat the Dragon, and save the land of Javanest.