update game loop
This commit is contained in:
@@ -20,15 +20,15 @@ import java.util.Scanner;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
Weapon wp = new Sword(12, 5);
|
||||
Weapon wp = new Sword(12, 15);
|
||||
ArrayList<Player> players = new ArrayList<>();
|
||||
players.add(new Assassin("Pia", 100, 100, wp, new KnightArmor(0, 1)));
|
||||
players.add(new Knight("Khan", 100, 100, wp, new KnightArmor(50, 1)));
|
||||
players.add(new Wizard("Daalou", 100, 100, wp, new KnightArmor(50, 1)));
|
||||
players.add(new Assassin("Pia", 100, 100, wp, new KnightArmor(8, 1)));
|
||||
players.add(new Knight("Khan", 100, 120, wp, new KnightArmor(12, 1)));
|
||||
players.add(new Wizard("Daalou", 100, 90, wp, new KnightArmor(15, 1)));
|
||||
ArrayList<Enemy> enemies = new ArrayList<>();
|
||||
enemies.add(new Goblin(100, 100, wp));
|
||||
enemies.add(new Skeleton(50, 100, wp));
|
||||
enemies.add(new Vampire(90, 110, wp));
|
||||
enemies.add(new Goblin(80, 100, wp));
|
||||
enemies.add(new Skeleton(70, 100, wp));
|
||||
enemies.add(new Vampire(90, 90, wp));
|
||||
ArrayList<Location> locations = new ArrayList<>();
|
||||
locations.add(new Location("Jungle", enemies));
|
||||
locations.add(new Location("China", new ArrayList<>(enemies.subList(0, 2))));
|
||||
@@ -128,16 +128,26 @@ public class Main {
|
||||
System.out.println("choose your action:\n1.light attack 2.heavy attack 3.defend 4.heal 5.special ability");
|
||||
choice = sc.nextInt();
|
||||
switch (choice) {
|
||||
case 1: player.lightAttack(enemy);
|
||||
break;
|
||||
case 2: player.heavyAttack(enemy);
|
||||
break;
|
||||
case 3: player.defend();
|
||||
break;
|
||||
case 4: player.heal(10);
|
||||
break;
|
||||
case 5: player.specialAbility(enemy);
|
||||
break;
|
||||
case 1:
|
||||
player.lightAttack(enemy);
|
||||
break;
|
||||
case 2:
|
||||
player.heavyAttack(enemy);
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
case 3:
|
||||
player.defend();
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
case 4:
|
||||
player.heal(10);
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
|
||||
case 5:
|
||||
player.specialAbility(enemy);
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
default:
|
||||
System.out.println("invalid choice");
|
||||
}
|
||||
@@ -149,15 +159,30 @@ public class Main {
|
||||
}
|
||||
if (turn == 1) {
|
||||
System.out.println("-".repeat(30));
|
||||
if (player instanceof Assassin) {
|
||||
if (player.getUsingSpecialAbility()){
|
||||
player.setUsingSpecialAbility(false);
|
||||
turn = 0;
|
||||
System.out.println(enemy.getClass().getSimpleName() + " skipped it's turn!");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
System.out.println(enemy.getClass().getSimpleName() + "'s turn: ");
|
||||
turn = 0;
|
||||
choice = new Random().nextInt(3);
|
||||
switch (choice) {
|
||||
case 0: enemy.attack(player);
|
||||
break;
|
||||
case 1: enemy.defend();
|
||||
break;
|
||||
case 2: enemy.heal(10);
|
||||
case 0:
|
||||
enemy.attack(player);
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 1; continue;}
|
||||
case 1:
|
||||
enemy.defend();
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
case 2:
|
||||
enemy.heal(10);
|
||||
if (player.isSuccessful()) break;
|
||||
else {turn = 0; continue;}
|
||||
}
|
||||
}
|
||||
System.out.println("[" + player.getClass().getSimpleName() + " - " + player.getHP() + "/" + player.getMaxHP()
|
||||
|
||||
@@ -17,6 +17,7 @@ public abstract class Enemy implements Entity {
|
||||
private double attackMultiplier = 1;
|
||||
private boolean hasKey = false;
|
||||
private static boolean keyFound = false;
|
||||
private boolean successful = true;
|
||||
|
||||
public Enemy(int hp, int mp, Weapon weapon) {
|
||||
this.hp = hp;
|
||||
@@ -24,30 +25,13 @@ public abstract class Enemy implements Entity {
|
||||
this.mp = mp;
|
||||
this.maxMP = mp;
|
||||
this.weapon = weapon;
|
||||
if (!keyFound) {
|
||||
hasKey = Math.random() < .2;
|
||||
}
|
||||
// if (hasKey) {
|
||||
// keyFound = true;
|
||||
// }
|
||||
}
|
||||
//implement this in Main
|
||||
private boolean checkTargetAbility(Player target) {
|
||||
if (target instanceof Knight) {
|
||||
boolean check = target.getUsingSpecialAbility();
|
||||
return check;
|
||||
}
|
||||
return false;
|
||||
if (!keyFound) { hasKey = Math.random() < .2;}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attack(Entity target) {
|
||||
if (getMP() >= weapon.getManaCost()) {
|
||||
System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName());
|
||||
if (checkTargetAbility((Player) target)) {
|
||||
System.out.println("target is using special ability");
|
||||
return;
|
||||
}
|
||||
double damage = getAttackMultiplier() * weapon.getDamage();
|
||||
if (target.isDefending()) {
|
||||
target.takeDamage((int) (damage * (1 - target.getDefendRate())));
|
||||
@@ -58,6 +42,7 @@ public abstract class Enemy implements Entity {
|
||||
setMP(getMP() - weapon.getManaCost());
|
||||
}
|
||||
else System.out.println("not enough mana");
|
||||
setSuccessful(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,6 +53,7 @@ public abstract class Enemy implements Entity {
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
System.out.println(this.getClass().getSimpleName() + " is healing " + health + " HPs");
|
||||
setHP(getHP() + health);
|
||||
}
|
||||
|
||||
@@ -75,10 +61,14 @@ public abstract class Enemy implements Entity {
|
||||
public void takeDamage(int damage) {
|
||||
if (isDefending()) {
|
||||
setHP(getHP() - (int) ((1 - getDefendRate())) * damage);
|
||||
System.out.println(this.getClass().getSimpleName() + " took " + (int) ((1 - getDefendRate())) * damage + " damages!");
|
||||
}
|
||||
setHP(getHP() - damage);
|
||||
if (getHP() <= 0) {
|
||||
setHP(0);
|
||||
else {
|
||||
System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!");
|
||||
setHP(getHP() - damage);
|
||||
if (getHP() <= 0) {
|
||||
setHP(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,5 +159,13 @@ public abstract class Enemy implements Entity {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setSuccessful (boolean successful) {
|
||||
this.successful = successful;
|
||||
}
|
||||
|
||||
public boolean isSuccessful() {
|
||||
return successful;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,30 +11,32 @@ public class Goblin extends Enemy{
|
||||
|
||||
@Override
|
||||
public void attack(Entity target) {
|
||||
setAttackMultiplier(2);
|
||||
setAttackMultiplier(1.8);
|
||||
super.attack(target);
|
||||
setAttackMultiplier(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 5) {
|
||||
if (getMP() >= 20) {
|
||||
super.defend();
|
||||
setMP(getMP() - 5);
|
||||
setMP(getMP() - 20);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 6) {
|
||||
if (getMP() >= 15) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 6);
|
||||
setMP(getMP() - 15);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,23 +20,25 @@ public class Skeleton extends Enemy{
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 3) {
|
||||
if (getMP() >= 8) {
|
||||
super.defend();
|
||||
setMP(getMP() - 3);
|
||||
setMP(getMP() - 8);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 6) {
|
||||
if (getMP() >= 18) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 6);
|
||||
setMP(getMP() - 18);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,23 +26,25 @@ public class Vampire extends Enemy{
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 3) {
|
||||
if (getMP() >= 15) {
|
||||
super.defend();
|
||||
setMP(getMP() - 3);
|
||||
setMP(getMP() - 15);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 6) {
|
||||
if (getMP() >= 12) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 6);
|
||||
setMP(getMP() - 12);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,54 +22,58 @@ public class Assassin extends Player {
|
||||
public void heavyAttack(Entity target) {
|
||||
super.heavyAttack(target);
|
||||
if (getUsingSpecialAbility()) {
|
||||
setAttackMultiplier(3);
|
||||
setAttackMultiplier(1.8);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setUsingSpecialAbility(false);
|
||||
}
|
||||
|
||||
else if (getMP() >= weapon.getManaCost()) {
|
||||
setAttackMultiplier(2.5);
|
||||
setAttackMultiplier(1.4);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setMP(getMP() - weapon.getManaCost());
|
||||
} else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 4) {
|
||||
if (getMP() >= 12) {
|
||||
super.defend();
|
||||
setMP(getMP() - 4);
|
||||
setMP(getMP() - 12);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void specialAbility(Entity target) {
|
||||
if (getMP() >= 20) {
|
||||
if (getMP() >= 25) {
|
||||
setUsingSpecialAbility(true);
|
||||
System.out.println("your next heavy-attack will be free!");
|
||||
setMP(getMP() - 20);
|
||||
System.out.println("Assasin using SpecialAbility");
|
||||
setMP(getMP() - 25);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 5) {
|
||||
if (getMP() >= 12) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 5);
|
||||
setMP(getMP() - 12);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,49 +22,53 @@ public class Knight extends Player {
|
||||
public void heavyAttack(Entity target) {
|
||||
super.heavyAttack(target);
|
||||
if (getMP() >= weapon.getManaCost()) {
|
||||
setAttackMultiplier(1.8);
|
||||
setAttackMultiplier(1.5);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setMP(getMP() - weapon.getManaCost());
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 4) {
|
||||
if (getMP() >= 16) {
|
||||
super.defend();
|
||||
setMP(getMP() - 4);
|
||||
setMP(getMP() - 16);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void specialAbility(Entity target) {
|
||||
if (getMP() >= 20) {
|
||||
if (getMP() >= 30) {
|
||||
setUsingSpecialAbility(true);
|
||||
setAttackMultiplier(2);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setMP(getMP() - 20);
|
||||
setMP(getMP() - 30);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setUsingSpecialAbility(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 5) {
|
||||
if (getMP() >= 10) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 5);
|
||||
setMP(getMP() - 10);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ public abstract class Player implements Entity, combatOptions {
|
||||
private boolean hasGoblinKey = false;
|
||||
private boolean hasSkeletonKey = false;
|
||||
private boolean hasVampireKey = false;
|
||||
private boolean successful = true;
|
||||
|
||||
public Player(String name, int hp, int mp, Weapon weapon, Armor armor) {
|
||||
this.name = name;
|
||||
@@ -70,16 +71,19 @@ public abstract class Player implements Entity, combatOptions {
|
||||
|
||||
int finalDamage = armor.getDefense() - damage;
|
||||
if (finalDamage < 0) {
|
||||
System.out.println(this.getClass().getSimpleName() + " took " + -finalDamage + " damages!");
|
||||
setHP(getHP() + finalDamage);
|
||||
armor.setDefense(0);
|
||||
}
|
||||
else {
|
||||
System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!");
|
||||
armor.setDefense(finalDamage);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
System.out.println(this.getClass().getSimpleName() + " is healing " + health + " HPs");
|
||||
setHP(getHP() + health);
|
||||
}
|
||||
|
||||
@@ -185,4 +189,12 @@ public abstract class Player implements Entity, combatOptions {
|
||||
else { hasVampireKey = true; }
|
||||
}
|
||||
|
||||
public void setSuccessful (boolean successful) {
|
||||
this.successful = successful;
|
||||
}
|
||||
|
||||
public boolean isSuccessful() {
|
||||
return successful;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,31 +21,33 @@ public class Wizard extends Player{
|
||||
public void heavyAttack(Entity target) {
|
||||
super.heavyAttack(target);
|
||||
if (getMP() >= weapon.getManaCost()) {
|
||||
setAttackMultiplier(1.6);
|
||||
setAttackMultiplier(1.3);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setMP(getMP() - weapon.getManaCost());
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
if (getMP() >= 4) {
|
||||
if (getMP() >= 15) {
|
||||
super.defend();
|
||||
setMP(getMP() - 4);
|
||||
setMP(getMP() - 15);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void specialAbility(Entity target) {
|
||||
if (getMP() >= 20) {
|
||||
setAttackMultiplier(2);
|
||||
setAttackMultiplier(1.6);
|
||||
attack(target);
|
||||
setAttackMultiplier(1);
|
||||
setMP(getMP() - 20);
|
||||
@@ -53,17 +55,19 @@ public class Wizard extends Player{
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
if (getMP() >= 5) {
|
||||
if (getMP() >= 10) {
|
||||
super.heal(health);
|
||||
setMP(getMP() - 5);
|
||||
setMP(getMP() - 10);
|
||||
}
|
||||
else {
|
||||
System.out.println("Not enough MP");
|
||||
setSuccessful(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user