diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 4158879..ddbacd6 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -16,5 +16,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java
index 6bde20e..31d857b 100644
--- a/Java-Knight/src/main/java/org/project/Main.java
+++ b/Java-Knight/src/main/java/org/project/Main.java
@@ -1,15 +1,139 @@
package org.project;
+import org.project.entity.enemies.*;
+import org.project.entity.players.Assassin;
+import org.project.entity.players.Knight;
+import org.project.entity.players.Player;
+import org.project.entity.players.Wizard;
import org.project.location.Location;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Random;
+import java.util.Scanner;
public class Main {
public static void main(String[] args) {
- // TODO: ADD LOCATIONS TO YOUR GAME
- List locations = new ArrayList<>();
- // TODO: IMPLEMENT GAMEPLAY
+ Scanner scanner = new Scanner(System.in);
+
+ // Enemies
+ Enemy goblin = new Goblin();
+ Enemy skeleton = new Skeleton();
+ Enemy vampire = new Vampire();
+ Enemy dragon = new Dragon();
+ Enemy[] enemies = {goblin, vampire, skeleton}; // An array of the enemies except Dragon which is the final boss
+
+ // Locations, one for each enemy
+ Location forest = new Location("Whispering forest", goblin);
+ Location catacombs = new Location("forgotten catacombs", skeleton);
+ Location castle = new Location("crimson castle", vampire);
+ Location peak = new Location("ashen peak", dragon);
+ Location[] locations = {forest, catacombs, castle}; // An array of the location except peak where is the Dragon(final boss) located
+
+ System.out.println(" =============== Java Knight ===============\n");
+ boolean running = true;
+ while(running){
+
+ System.out.println(" Choose your option:");
+ System.out.println(" 1. Start game" +
+ " 2. Exit");
+ int option = scanner.nextInt();
+ if(option == 1){
+ startGame(locations);
+ } else if (option == 2) {
+ running = false;
+ break;
+ }
+
+
+ }
+
+
}
+
+ public static void startGame(Location[] locations){
+ //
+ Scanner scanner = new Scanner(System.in);
+ Random random = new Random();
+
+ // Set up
+ System.out.print(" Enter your name: ");
+ String name = scanner.next();
+ Player player = null;
+ int option = 0;
+ while(option > 3 || option < 1){
+ System.out.println("\n Select your character: (Enter number)");
+ System.out.println(" 1. Knight" +
+ " 2. Assassin" +
+ " 3. Wizard");
+ if (scanner.hasNextInt()) {
+ option = scanner.nextInt();
+ } else {
+ System.out.println(" Invalid input! Please enter a number.");
+ scanner.next();
+ }
+ }
+ switch (option){
+ case 1:
+ player = new Knight(name);
+ System.out.printf("Your Character: %s, Your Name: %s\n", "Knight", player.getName());
+ break;
+ case 2:
+ player = new Assassin(name);
+ System.out.printf("Your Character: %s, Your Name: %s\n", "Assassin", player.getName());
+ break;
+ case 3:
+ player = new Wizard(name);
+ System.out.printf("\nYour Character: %s, Your Name: %s\n\n", "Wizard", player.getName());
+ break;
+ default:
+ player = null;
+ break;
+ }
+
+
+ // Choosing location and enemy
+ Location loc = locations[random.nextInt(locations.length)];
+ loc = setLocation(loc, locations, player, random, scanner);
+ System.out.println(" =============== Prepare to fight ===============");
+
+ }
+
+ public static Location setLocation(Location currentLocation, Location[] locations, Player player, Random random, Scanner scanner){
+ System.out.printf(" %s should fight %s in %s\n", player.getName(), currentLocation.getEnemy().getName(), currentLocation.getName());
+ int option = 0;
+ while(option > 3 || option < 1){
+ System.out.println(" Choose your option: ");
+ System.out.println(" 1. Fight " + currentLocation.getEnemy().getName() +
+ " 2. Change location");
+ if (scanner.hasNextInt()) {
+ option = scanner.nextInt();
+ } else {
+ System.out.println(" Invalid input! Please enter a number.");
+ scanner.next();
+ }
+ }
+
+ if(option == 1){
+ return currentLocation;
+ }
+ else if(option == 2){
+ Location[] temp_locations = new Location[locations.length - 1];
+ int counter = 0;
+ for(Location l : locations){
+ if (l != currentLocation) {
+ temp_locations[counter] = l;
+ counter++;
+ }
+ }
+ currentLocation = temp_locations[random.nextInt(temp_locations.length)];
+ System.out.println(" Changing locations...");
+ setLocation(currentLocation, locations, player, random, scanner);
+ }
+ else{
+ System.out.println(" Invalid input! Try again.");
+ setLocation(currentLocation, locations, player, random, scanner);
+ }
+ return currentLocation;
+ }
+
}
\ No newline at end of file
diff --git a/Java-Knight/src/main/java/org/project/entity/Entity.java b/Java-Knight/src/main/java/org/project/entity/Entity.java
index e3f164e..f8fe429 100644
--- a/Java-Knight/src/main/java/org/project/entity/Entity.java
+++ b/Java-Knight/src/main/java/org/project/entity/Entity.java
@@ -2,7 +2,7 @@ package org.project.entity;
public interface Entity {
- public void specialAbility(Entity target);
+ void specialAbility(Entity target);
void defend();
diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java
index cce3fac..e30afa8 100644
--- a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java
@@ -1,7 +1,6 @@
package org.project.entity.enemies;
import org.project.entity.Entity;
-import org.project.item.weapons.Dagger;
import org.project.item.weapons.Flame;
import org.project.item.weapons.Weapon;
@@ -21,7 +20,7 @@ public class Dragon extends Enemy{
}
@Override
- public void SpecialAbility(Entity target) {
+ public void specialAbility(Entity target) {
target.takeDamage(weapon.getDamage());
}
@@ -37,6 +36,7 @@ public class Dragon extends Enemy{
return maxHP;
}
+ @Override
public String getName(){
return "Dragon";
}
diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java
index 3906a72..9776609 100644
--- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java
@@ -9,6 +9,7 @@ public abstract class Enemy implements Entity {
private boolean defending = false;
protected boolean lifeStealing = false;
private boolean stunned = false;
+ private boolean dodged = false;
public Enemy(int hp, Weapon weapon) {
this.hp = hp;
@@ -24,13 +25,20 @@ public abstract class Enemy implements Entity {
target.takeDamage(weapon.getDamage());
}
- public abstract void SpecialAbility(Entity target);
-
@Override
public void defend() {
defending = true;
}
+ @Override
+ public void stun(boolean value) {
+ stunned = value;
+ }
+
+ @Override
+ public void dodge(boolean value) {
+ dodged = value;
+ }
public int getHp() {
return hp;
@@ -51,4 +59,7 @@ public abstract class Enemy implements Entity {
public boolean isStunned() {
return stunned;
}
+
+ public abstract String getName();
+
}
diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java
index 8ac8a53..2362728 100644
--- a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java
@@ -16,7 +16,7 @@ public class Goblin extends Enemy{
}
@Override
- public void SpecialAbility(Entity target) {
+ public void specialAbility(Entity target) {
target.takeDamage(criticalHit_damage);
}
@@ -32,6 +32,7 @@ public class Goblin extends Enemy{
return maxHP;
}
+ @Override
public String getName(){
return "Goblin";
}
diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java
index e27398e..c28b4b9 100644
--- a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java
@@ -15,7 +15,7 @@ public class Skeleton extends Enemy{
}
@Override
- public void SpecialAbility(Entity target) {
+ public void specialAbility(Entity target) {
hp = maxHP/2; // revive
}
@@ -31,6 +31,7 @@ public class Skeleton extends Enemy{
return maxHP;
}
+ @Override
public String getName(){
return "Skeleton";
}
diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java
index fa905b5..bf48d3e 100644
--- a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java
+++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java
@@ -15,7 +15,7 @@ public class Vampire extends Enemy{
}
@Override
- public void SpecialAbility(Entity target) {
+ public void specialAbility(Entity target) {
lifeStealing = true;
target.takeDamage((8/10)*(weapon.getDamage()));
hp += (int)((2/10)*(weapon.getDamage()));
@@ -33,6 +33,7 @@ public class Vampire extends Enemy{
return maxHP;
}
+ @Override
public String getName(){
return "Vampire";
}
diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java
index c0e7a6d..e192ce0 100644
--- a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java
+++ b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java
@@ -1,16 +1,16 @@
-package org.project.item.consumables;
-
-import org.project.entity.Entity;
-
-// TODO: UPDATE IMPLEMENTATION
-public class Flask {
- /*
- THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN.
- */
-
- // TODO: UPDATE USE METHOD
- @Override
- public void use(Entity target) {
- target.heal(target.getMaxHP() / 10);
- }
-}
+//package org.project.item.consumables;
+//
+//import org.project.entity.Entity;
+//
+//// TODO: UPDATE IMPLEMENTATION
+//public class Flask {
+// /*
+// THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN.
+// */
+//
+// // TODO: UPDATE USE METHOD
+// @Override
+// public void use(Entity target) {
+// target.heal(target.getMaxHP() / 10);
+// }
+//}
diff --git a/Java-Knight/src/main/java/org/project/location/Location.java b/Java-Knight/src/main/java/org/project/location/Location.java
index b0b4b98..68dbc72 100644
--- a/Java-Knight/src/main/java/org/project/location/Location.java
+++ b/Java-Knight/src/main/java/org/project/location/Location.java
@@ -6,23 +6,19 @@ import java.util.ArrayList;
public class Location {
private String name;
+ private Enemy enemy;
- private ArrayList enemies;
-
- public Location(ArrayList locations, ArrayList enemies) {
- this.locations = locations;
- this.enemies = enemies;
+ public Location(String name, Enemy enemy) {
+ this.name = name;
+ this.enemy = enemy;
}
public String getName() {
return name;
}
- public ArrayList getLocations() {
- return locations;
+ public Enemy getEnemy() {
+ return enemy;
}
- public ArrayList getEnemies() {
- return enemies;
- }
}
diff --git a/Java-Knight/target/classes/org/project/Main.class b/Java-Knight/target/classes/org/project/Main.class
new file mode 100644
index 0000000..bbf3fd4
Binary files /dev/null and b/Java-Knight/target/classes/org/project/Main.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/Entity.class b/Java-Knight/target/classes/org/project/entity/Entity.class
new file mode 100644
index 0000000..30abbf6
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/Entity.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class b/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class
new file mode 100644
index 0000000..78f9e30
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class
new file mode 100644
index 0000000..ac5f525
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class
new file mode 100644
index 0000000..0045ffb
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class
new file mode 100644
index 0000000..831aea0
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class
new file mode 100644
index 0000000..b116442
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/players/Assassin.class b/Java-Knight/target/classes/org/project/entity/players/Assassin.class
new file mode 100644
index 0000000..2a61d76
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/players/Assassin.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/players/Knight.class b/Java-Knight/target/classes/org/project/entity/players/Knight.class
new file mode 100644
index 0000000..3bd04b4
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/players/Knight.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/players/Player.class b/Java-Knight/target/classes/org/project/entity/players/Player.class
new file mode 100644
index 0000000..12b591e
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/players/Player.class differ
diff --git a/Java-Knight/target/classes/org/project/entity/players/Wizard.class b/Java-Knight/target/classes/org/project/entity/players/Wizard.class
new file mode 100644
index 0000000..9c3fdfc
Binary files /dev/null and b/Java-Knight/target/classes/org/project/entity/players/Wizard.class differ
diff --git a/Java-Knight/target/classes/org/project/item/Item.class b/Java-Knight/target/classes/org/project/item/Item.class
new file mode 100644
index 0000000..3db1242
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/Item.class differ
diff --git a/Java-Knight/target/classes/org/project/item/armors/Armor.class b/Java-Knight/target/classes/org/project/item/armors/Armor.class
new file mode 100644
index 0000000..b9768d9
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/armors/Armor.class differ
diff --git a/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class b/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class
new file mode 100644
index 0000000..6c1893a
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class differ
diff --git a/Java-Knight/target/classes/org/project/item/consumables/Consumable.class b/Java-Knight/target/classes/org/project/item/consumables/Consumable.class
new file mode 100644
index 0000000..4da62af
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/consumables/Consumable.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/Bite.class b/Java-Knight/target/classes/org/project/item/weapons/Bite.class
new file mode 100644
index 0000000..531c37e
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/Bite.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/BoneClub.class b/Java-Knight/target/classes/org/project/item/weapons/BoneClub.class
new file mode 100644
index 0000000..5713d2f
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/BoneClub.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/Dagger.class b/Java-Knight/target/classes/org/project/item/weapons/Dagger.class
new file mode 100644
index 0000000..8444f23
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/Dagger.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/DualDagger.class b/Java-Knight/target/classes/org/project/item/weapons/DualDagger.class
new file mode 100644
index 0000000..3208275
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/DualDagger.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/Flame.class b/Java-Knight/target/classes/org/project/item/weapons/Flame.class
new file mode 100644
index 0000000..f0e9f7c
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/Flame.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/MagicStaff.class b/Java-Knight/target/classes/org/project/item/weapons/MagicStaff.class
new file mode 100644
index 0000000..915d4a6
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/MagicStaff.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/Sword.class b/Java-Knight/target/classes/org/project/item/weapons/Sword.class
new file mode 100644
index 0000000..d504817
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/Sword.class differ
diff --git a/Java-Knight/target/classes/org/project/item/weapons/Weapon.class b/Java-Knight/target/classes/org/project/item/weapons/Weapon.class
new file mode 100644
index 0000000..2b9d4f3
Binary files /dev/null and b/Java-Knight/target/classes/org/project/item/weapons/Weapon.class differ
diff --git a/Java-Knight/target/classes/org/project/location/Location.class b/Java-Knight/target/classes/org/project/location/Location.class
new file mode 100644
index 0000000..70e4f1e
Binary files /dev/null and b/Java-Knight/target/classes/org/project/location/Location.class differ