# ⚔️ Java Knight: The Legend of Javanest Java Knight is a turn-based, console-based RPG built in Java. Players take on the role of a hero tasked with saving the land of Javanest by defeating monsters, collecting mystical keys, and ultimately slaying the Dragon. --- ## 🚀 Quick Start **Prerequisites:** Java JDK 8 or higher. 1. **Navigate to the source root:** ```bash cd your-project-folder/src ``` 2. **Compile the project:** ```bash javac org/project/Main.java ``` 3. **Run the game:** ```bash java org.project.Main ``` --- ## ⚙️ Game Mechanics - **Progression & XP:** After each victory, your HP and Mana are fully recovered. Defeating enemies grants Experience Points (XP). - **The Shop:** Between fights, you can visit the inventory to convert XP into permanent stat upgrades. 1 XP can be exchanged for either 1 Max HP or 1 Max MP. - **The Hunt for Keys:** To reach the end-game, you must collect three unique keys (Goblin, Skeleton, and Vampire). These have a chance to drop after defeating the respective enemy type. - **The Castle:** The path to the final boss is locked until all three keys are in your possession. Only then can you enter the castle to face the Dragon. --- ## 🎮 How to Play ### Hero Classes - **Knight:** Balanced stats with high-damage melee capabilities. - **Assassin:** High stamina/mana efficiency with lower costs for defending. - **Wizard:** High mana pool and powerful magical abilities. ### Combat Actions On your turn, choose one of the following: 1. **Light Attack:** Moderate damage; costs **0 Mana**. 2. **Heavy Attack:** High damage; costs Mana. 3. **Special Ability:** Unique class-based move; highest Mana cost. 4. **Defend:** Reduces or blocks the next enemy attack; costs Mana. 5. **Heal:** Restores HP during combat; costs Mana. --- ## 🛠 Technical Architecture & OOP Principles This project demonstrates core Object-Oriented Programming principles: - **Inheritance:** Uses hierarchies for `Player` (Knight/Wizard/Assassin) and `Enemy` (Goblin/Skeleton/Vampire/Dragon) to share common logic while allowing unique overrides. - **Polymorphism:** The combat engine handles any `Entity` implementation. The `Weapon` system allows different damage behaviors to be executed through a single interface. - **Encapsulation:** Core stats like HP, Mana, and XP are protected. Data integrity is maintained through getters, setters, and specialized methods like `takeDamage()` and `reduceMana()`. - **Abstraction:** The `Weapon`, `Enemy`, and `Player` classes are abstract, ensuring that specific game entities must follow a strict template while hiding the complexity of underlying calculations. - **Interfaces:** The `Entity`, `Item`, and `Key` interfaces decouple behaviors from the class hierarchy, allowing for flexible interaction between different game objects.
![cover](Readme_Pictures/image.png) ###### - Born of God and Void. You shall seal the blinding light that plagues their dreams. You are the Vessel. You are the Java Knight.