2026-04-30 20:00:29 +03:30
2026-05-13 14:14:25 +03:30
2026-04-29 17:47:45 +00:00
2026-05-13 14:51:05 +03:30

Java Knight - Turn-Based RPG

Introduction

Java Knight is a turn-based RPG that runs in the terminal. The land of Javanest is cursed by a Dragon. People have turned into Goblins, Skeletons, and Vampires. You must defeat these monsters, collect their three keys, and finally kill the Dragon to break the curse.

How to Compile and Run

Prerequisites

  • Java Development Kit (JDK) 8 or later

Compilation

Open a terminal in the root folder of the project (where the org folder is located). Run this command:

javac org/project/**/.java org/project/.java

Execution

After compilation, run:

java org.project.Main

OOP Principles and Design

The project uses the following object-oriented principles:

  • Encapsulation Fields like hp, mp, damage are private or protected. Access is done through getter methods.
  • Inheritance Player (abstract) is extended by Knight, Assassin, Wizard. Enemy (abstract) is extended by Goblin, Skeleton, Vampire, Dragon.
  • Polymorphism The Entity interface allows the game to treat players and enemies the same way. The SpecialAbility() method works differently for each class.
  • Abstraction Player and Enemy have abstract methods that subclasses must implement, like SpecialAbility().
  • Method Overriding Every subclass overrides SpecialAbility(), LightAttack(), heal(), etc.

Design Patterns

  • Template Method Pattern The combat loop in Main defines the basic turn structure, while specific actions are handled by overridden methods.
  • Factory Method Pattern The method spawnRandomEnemyForLocation() creates different enemy types without exposing the creation logic.
  • Strategy Pattern The five player actions (Light Attack, Heavy Attack, Defend, Heal, Special Ability) are interchangeable strategies chosen at runtime.

Key Classes

Class Description
Entity (interface) Defines combat methods: LightAttack, HeavyAttack, defend, heal, etc.
Player (abstract) Manages HP, mana, defense stance, and common actions.
Knight High base damage. Special: shield bash (stuns enemy).
Assassin Highest mana. Special: invisible (dodge next attack + guaranteed critical hit).
Wizard Highest HP. Special: spell that damages enemy and heals self.
Enemy (abstract) Base for all monsters.
Goblin 30% critical hit chance on light attacks.
Skeleton Revives once with 50% HP.
Vampire Lifesteals 30% of damage dealt.
Dragon Final boss. Fiery breath ignores defense and deals double damage.
Main Game loop, location navigation, key collection, victory/loss logic.

How to Play

Starting the Game

Run Main.java. You will see a menu to choose your class:

  1. Knight High damage, good HP, stunning special ability.
  2. Assassin High mana pool, can turn invisible to dodge and land critical hits.
  3. Wizard Highest HP, special ability damages enemy and heals self.

Location and Exploration

You begin in a random location (Forest, Cemetery, Crypt, or Ruins). An enemy appears automatically. At each location, you have these options:

  • 1. Fight the enemy Start turn-based combat.
  • 2. Move to another location Skip the current enemy and go to a different location (a new random enemy will appear).
  • 3. Go to the Castle This option only appears after you collect all three keys. It starts the final boss fight against the Dragon.

Combat Actions (Your Turn)

During combat, you have five actions. Mana costs are shown in the menu:

Action Mana Cost Effect
1. Light Attack 0 Moderate damage
2. Heavy Attack 8 High damage
3. Defend 6 Reduces next enemy attack by 50%
4. Heal 10 Restores a portion of your HP
5. Special Ability 15 Class-unique move (see below)

Special Abilities

  • Knight Shield Bash Deals heavy damage and stuns the enemy. The enemy skips its next turn.
  • Assassin Invisibility Dodges the next enemy attack completely. Your next hit becomes a critical hit (double damage).
  • Wizard Devastating Spell Damages the enemy and heals the caster.

After Winning a Fight

  • Your HP and mana are fully restored.
  • The defeated enemy has a 20% chance to drop its unique key (Goblin Key, Skeleton Key, or Vampire Key).
  • Each key can be obtained only once. Killing more Goblins will not give another Goblin Key.

Winning the Game

  • Collect all three keys. Then the option "Go to the Castle" appears.
  • Fight the Dragon. The Dragon has 180 HP. Its normal attack deals 45 damage. Its fiery breath deals double damage and ignores your defense.
  • Defeat the Dragon to break the curse and save Javanest.

Losing the Game

  • If your HP reaches zero during any fight, the game ends with "Game Over".

Good luck, hero.

S
Description
A turn-based RPG with Roguelike elements which can be run in the terminal.
Readme MIT
4.1 MiB
Languages
Java 100%