# 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: ```bash 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** ```bash 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 `Game` object - 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: ```java takeDamage() heal() ``` instead of direct field access. --- ### **Inheritance** Shared behavior is inherited from base classes. ```text Entity ├── Player │ ├── Knight │ ├── Wizard │ └── Assassin │ └── Enemy ├── Goblin ├── Skeleton ├── Vampire └── Dragon ``` --- ### **Polymorphism** Different classes override methods such as: ```java 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: 1. Light Attack 2. Heavy Attack 3. Defend 4. Heal 5. 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 ⚔️