fix bugs and add status prints
This commit is contained in:
@@ -169,7 +169,6 @@ public class Game {
|
|||||||
System.out.println("-".repeat(30));
|
System.out.println("-".repeat(30));
|
||||||
|
|
||||||
if (player instanceof Assassin && player.getUsingSpecialAbility()) {
|
if (player instanceof Assassin && player.getUsingSpecialAbility()) {
|
||||||
player.setUsingSpecialAbility(false);
|
|
||||||
System.out.println(enemy.getClass().getSimpleName() + " skipped its turn!");
|
System.out.println(enemy.getClass().getSimpleName() + " skipped its turn!");
|
||||||
turn = 0;
|
turn = 0;
|
||||||
continue;
|
continue;
|
||||||
@@ -208,22 +207,20 @@ public class Game {
|
|||||||
private boolean handlePlayerAction(int choice, Enemy enemy) {
|
private boolean handlePlayerAction(int choice, Enemy enemy) {
|
||||||
switch (choice) {
|
switch (choice) {
|
||||||
case 1 -> { player.lightAttack(enemy); return true; }
|
case 1 -> { player.lightAttack(enemy); return true; }
|
||||||
case 2 -> { player.heavyAttack(enemy); if (player.isSuccessfulAction()) return true; }
|
case 2 -> { player.heavyAttack(enemy); return player.isSuccessfulAction();}
|
||||||
case 3 -> { player.defend(); if (player.isSuccessfulAction()) return true; }
|
case 3 -> { player.defend(); return player.isSuccessfulAction(); }
|
||||||
case 4 -> { player.heal(10); if (player.isSuccessfulAction()) return true; }
|
case 4 -> { player.heal(10); return player.isSuccessfulAction(); }
|
||||||
case 5 -> { player.specialAbility(enemy); if (player.isSuccessfulAction()) return true; }
|
case 5 -> { player.specialAbility(enemy); return player.isSuccessfulAction(); }
|
||||||
case 6 -> { player.getFlask().use(player); return true; }
|
case 6 -> { player.getFlask().use(player); return true; }
|
||||||
default -> { System.out.println("Invalid choice."); return false; }
|
default -> { System.out.println("Invalid choice."); return false; }
|
||||||
}
|
}
|
||||||
System.out.println("Not enough mana! Choose another action (1. Light attack is always free).");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean handleEnemyAction(Enemy enemy) {
|
private boolean handleEnemyAction(Enemy enemy) {
|
||||||
int choice = new Random().nextInt(3);
|
int choice = new Random().nextInt(3);
|
||||||
switch (choice) {
|
switch (choice) {
|
||||||
case 1 -> { enemy.defend(); if (enemy.isSuccessfulAction()) return true; }
|
case 1 -> { enemy.defend(); return enemy.isSuccessfulAction(); }
|
||||||
case 2 -> { enemy.heal(10); if (enemy.isSuccessfulAction()) return true; }
|
case 2 -> { enemy.heal(10); return enemy.isSuccessfulAction(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
enemy.attack(player);
|
enemy.attack(player);
|
||||||
@@ -233,9 +230,9 @@ public class Game {
|
|||||||
|
|
||||||
private void printCombatStatus(Enemy enemy) {
|
private void printCombatStatus(Enemy enemy) {
|
||||||
System.out.println("[" + player.getClass().getSimpleName() + " - " + player.getHP() + "/" + player.getMaxHP() +
|
System.out.println("[" + player.getClass().getSimpleName() + " - " + player.getHP() + "/" + player.getMaxHP() +
|
||||||
" HP | " + player.getMP() + "/" + player.getMaxMP() + "]");
|
" HP | " + player.getMP() + "/" + player.getMaxMP() + " MP]");
|
||||||
System.out.println("[" + enemy.getClass().getSimpleName() + " - " + enemy.getHP() + "/" + enemy.getMaxHP() +
|
System.out.println("[" + enemy.getClass().getSimpleName() + " - " + enemy.getHP() + "/" + enemy.getMaxHP() +
|
||||||
" HP | " + enemy.getMP() + "/" + enemy.getMaxMP() + "]");
|
" HP | " + enemy.getMP() + "/" + enemy.getMaxMP() + "MP]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class Dragon extends Enemy {
|
|||||||
}
|
}
|
||||||
target.takeDamage((int) damage);
|
target.takeDamage((int) damage);
|
||||||
setMP(getMP() - FIRE_BREATH_MP_COST);
|
setMP(getMP() - FIRE_BREATH_MP_COST);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target.isDefending()) {
|
if (target.isDefending()) {
|
||||||
@@ -43,7 +44,7 @@ public class Dragon extends Enemy {
|
|||||||
@Override
|
@Override
|
||||||
public void defend() {
|
public void defend() {
|
||||||
System.out.println("Dragon roars and ignores the chance to defend!");
|
System.out.println("Dragon roars and ignores the chance to defend!");
|
||||||
setSuccessfulAction(false);
|
setSuccessfulAction(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public class Skeleton extends Enemy{
|
|||||||
if (getHP() <= 0 && !incarnation) {
|
if (getHP() <= 0 && !incarnation) {
|
||||||
setHP(getMaxHP() / 2);
|
setHP(getMaxHP() / 2);
|
||||||
incarnation = true;
|
incarnation = true;
|
||||||
|
System.out.println("The Skeleton shatters... but dark magic pulls its bones back together!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,11 @@ public class Vampire extends Enemy{
|
|||||||
super.attack(target);
|
super.attack(target);
|
||||||
double damage = weapon.getDamage() * getAttackMultiplier();
|
double damage = weapon.getDamage() * getAttackMultiplier();
|
||||||
setAttackMultiplier(1);
|
setAttackMultiplier(1);
|
||||||
if (target.isDefending()) {
|
int lifeSteal = target.isDefending()
|
||||||
super.heal( (int) (.3 * (damage * (1 - target.getDefendRate()))));
|
? (int)(.3 * (damage * (1 - target.getDefendRate())))
|
||||||
}
|
: (int)(.3 * damage);
|
||||||
else {
|
System.out.println("Vampire drains " + lifeSteal + " HP from " + target.getClass().getSimpleName() + "!");
|
||||||
super.heal( (int) (.3 * damage));
|
setHP(getHP() + lifeSteal);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ public class Assassin extends Player {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void heavyAttack(Entity target) {
|
public void heavyAttack(Entity target) {
|
||||||
super.heavyAttack(target);
|
|
||||||
if (getUsingSpecialAbility()) {
|
if (getUsingSpecialAbility()) {
|
||||||
|
System.out.println("Assassin strikes from the shadows with lethal precision! (1.8x)");
|
||||||
setAttackMultiplier(1.8);
|
setAttackMultiplier(1.8);
|
||||||
attack(target);
|
attack(target);
|
||||||
setAttackMultiplier(1);
|
setAttackMultiplier(1);
|
||||||
@@ -36,6 +36,7 @@ public class Assassin extends Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (getMP() >= weapon.getManaCost()) {
|
else if (getMP() >= weapon.getManaCost()) {
|
||||||
|
System.out.println("Assassin delivers a heavy blow! (1.4x)");
|
||||||
setAttackMultiplier(1.4);
|
setAttackMultiplier(1.4);
|
||||||
attack(target);
|
attack(target);
|
||||||
setAttackMultiplier(1);
|
setAttackMultiplier(1);
|
||||||
@@ -63,7 +64,7 @@ public class Assassin extends Player {
|
|||||||
public void specialAbility(Entity target) {
|
public void specialAbility(Entity target) {
|
||||||
if (getMP() >= 25) {
|
if (getMP() >= 25) {
|
||||||
setUsingSpecialAbility(true);
|
setUsingSpecialAbility(true);
|
||||||
System.out.println("Assasin using SpecialAbility");
|
System.out.println("Assassin melts into the shadows... next heavy attack will be devastating!");
|
||||||
setMP(getMP() - 25);
|
setMP(getMP() - 25);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -87,7 +88,7 @@ public class Assassin extends Player {
|
|||||||
@Override
|
@Override
|
||||||
public void takeDamage(int damage) {
|
public void takeDamage(int damage) {
|
||||||
if (getUsingSpecialAbility()) {
|
if (getUsingSpecialAbility()) {
|
||||||
System.out.println("player using special ability");
|
System.out.println("Assassin vanishes into the shadows — attack missed!");
|
||||||
} else {
|
} else {
|
||||||
damage = ((AssassinArmor) (getArmor())).reduceDamage(damage, this);
|
damage = ((AssassinArmor) (getArmor())).reduceDamage(damage, this);
|
||||||
super.takeDamage(damage);
|
super.takeDamage(damage);
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public class Knight extends Player {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void heavyAttack(Entity target) {
|
public void heavyAttack(Entity target) {
|
||||||
super.heavyAttack(target);
|
|
||||||
if (getMP() >= weapon.getManaCost()) {
|
if (getMP() >= weapon.getManaCost()) {
|
||||||
setAttackMultiplier(1.5);
|
setAttackMultiplier(1.5);
|
||||||
attack(target);
|
attack(target);
|
||||||
@@ -57,6 +56,7 @@ public class Knight extends Player {
|
|||||||
if (getMP() >= 30) {
|
if (getMP() >= 30) {
|
||||||
setUsingSpecialAbility(true);
|
setUsingSpecialAbility(true);
|
||||||
setAttackMultiplier(2);
|
setAttackMultiplier(2);
|
||||||
|
System.out.println("Knight channels all strength into a devastating strike! (2x)");
|
||||||
attack(target);
|
attack(target);
|
||||||
setAttackMultiplier(1);
|
setAttackMultiplier(1);
|
||||||
setMP(getMP() - 30);
|
setMP(getMP() - 30);
|
||||||
@@ -84,6 +84,7 @@ public class Knight extends Player {
|
|||||||
super.takeDamage(damage);
|
super.takeDamage(damage);
|
||||||
if (!getArmor().checkBrake()) {
|
if (!getArmor().checkBrake()) {
|
||||||
int reflected = ((KnightArmor) armor).getReflectedDamage(damage);
|
int reflected = ((KnightArmor) armor).getReflectedDamage(damage);
|
||||||
|
System.out.println("Knight's armor reflects " + reflected + " damage back at " + attacker.getClass().getSimpleName() + "!");
|
||||||
attacker.takeDamage(reflected);
|
attacker.takeDamage(reflected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public abstract class Player implements Entity, CombatOptions {
|
|||||||
public void attack(Entity target) {
|
public void attack(Entity target) {
|
||||||
setSuccessfulAction(true);
|
setSuccessfulAction(true);
|
||||||
double damage = getAttackMultiplier() * weapon.getDamage();
|
double damage = getAttackMultiplier() * weapon.getDamage();
|
||||||
|
System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName()
|
||||||
|
+ " for " + damage + " damages!");
|
||||||
if (target.isDefending()) {
|
if (target.isDefending()) {
|
||||||
target.takeDamage( (int) (damage * (1 - target.getDefendRate())));
|
target.takeDamage( (int) (damage * (1 - target.getDefendRate())));
|
||||||
target.setDefending(false);
|
target.setDefending(false);
|
||||||
@@ -59,9 +61,7 @@ public abstract class Player implements Entity, CombatOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void heavyAttack(Entity target) {
|
public abstract void heavyAttack(Entity target);
|
||||||
System.out.println(this.getClass().getSimpleName() + " heavy attacking");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void defend(){
|
public void defend(){
|
||||||
@@ -79,12 +79,13 @@ public abstract class Player implements Entity, CombatOptions {
|
|||||||
|
|
||||||
int finalDamage = armor.getDefense() - damage;
|
int finalDamage = armor.getDefense() - damage;
|
||||||
if (finalDamage < 0) {
|
if (finalDamage < 0) {
|
||||||
System.out.println(this.getClass().getSimpleName() + " took " + -finalDamage + " damages!");
|
System.out.println(getClass().getSimpleName() + " took " + -finalDamage + " damage! (armor absorbed " + armor.getDefense() + ")");
|
||||||
setHP(getHP() + finalDamage);
|
setHP(getHP() + finalDamage);
|
||||||
armor.setDefense(0);
|
armor.setDefense(0);
|
||||||
|
System.out.println("Your armor has been destroyed!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!");
|
System.out.println(getClass().getSimpleName() + " took 0 damage! (fully absorbed by armor, " + finalDamage + " durability remaining)");
|
||||||
armor.setDefense(finalDamage);
|
armor.setDefense(finalDamage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ public class Wizard extends Player{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void heavyAttack(Entity target) {
|
public void heavyAttack(Entity target) {
|
||||||
super.heavyAttack(target);
|
|
||||||
if (getMP() >= weapon.getManaCost()) {
|
if (getMP() >= weapon.getManaCost()) {
|
||||||
setAttackMultiplier(1.3);
|
setAttackMultiplier(1.3);
|
||||||
attack(target);
|
attack(target);
|
||||||
@@ -56,10 +55,12 @@ public class Wizard extends Player{
|
|||||||
public void specialAbility(Entity target) {
|
public void specialAbility(Entity target) {
|
||||||
if (getMP() >= 20) {
|
if (getMP() >= 20) {
|
||||||
setAttackMultiplier(1.6);
|
setAttackMultiplier(1.6);
|
||||||
|
System.out.println("Wizard channels arcane energy — empowered shot fired! (1.6x)");
|
||||||
attack(target);
|
attack(target);
|
||||||
setAttackMultiplier(1);
|
setAttackMultiplier(1);
|
||||||
setMP(getMP() - 20);
|
setMP(getMP() - 20);
|
||||||
setHP(getHP() + 10);
|
setHP(getHP() + 10);
|
||||||
|
System.out.println("Wizard absorbs residual magic — restored 10 HP!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
System.out.println("Not enough MP");
|
System.out.println("Not enough MP");
|
||||||
@@ -83,6 +84,8 @@ public class Wizard extends Player{
|
|||||||
public void takeDamage(int damage) {
|
public void takeDamage(int damage) {
|
||||||
if (!getArmor().checkBrake()) {
|
if (!getArmor().checkBrake()) {
|
||||||
int finalDamage = ((WizardArmor) armor).absorbDamage(damage, getMP());
|
int finalDamage = ((WizardArmor) armor).absorbDamage(damage, getMP());
|
||||||
|
int absorbed = damage - finalDamage;
|
||||||
|
if (absorbed > 0) System.out.println("Wizard's mana field absorbs " + absorbed + " damage!");
|
||||||
super.takeDamage(finalDamage);
|
super.takeDamage(finalDamage);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class AssassinArmor extends Armor {
|
|||||||
|
|
||||||
public int reduceDamage(int damage, Player player) {
|
public int reduceDamage(int damage, Player player) {
|
||||||
if (isLowHP(player)) {
|
if (isLowHP(player)) {
|
||||||
|
|
||||||
|
System.out.println("Assassin's survival instincts kick in — damage halved!");
|
||||||
return damage / 2;
|
return damage / 2;
|
||||||
}
|
}
|
||||||
return damage;
|
return damage;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.project.item.consumables;
|
package org.project.item.consumables;
|
||||||
|
|
||||||
import org.project.entity.Entity;
|
import org.project.entity.Entity;
|
||||||
|
import org.project.entity.players.Player;
|
||||||
|
|
||||||
public class Flask extends Consumable {
|
public class Flask extends Consumable {
|
||||||
private int healAmount;
|
private int healAmount;
|
||||||
@@ -22,8 +23,10 @@ public class Flask extends Consumable {
|
|||||||
System.out.println(target.getClass().getSimpleName()
|
System.out.println(target.getClass().getSimpleName()
|
||||||
+ " restored " + healAmount + " MP!");
|
+ " restored " + healAmount + " MP!");
|
||||||
} else {
|
} else {
|
||||||
target.heal(healAmount);
|
target.setHP(target.getHP() + healAmount);
|
||||||
|
System.out.println(target.getClass().getSimpleName() + " healed " + healAmount + " HP!");
|
||||||
}
|
}
|
||||||
consume();
|
consume();
|
||||||
|
System.out.println("(" + getQuantity() + " charges remaining)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user