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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user