Files
HW-04-JAVA-KNIGHT/README.md
T
2026-05-13 14:51:05 +03:30

110 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.