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