Почему здоровье Врага перестает восстанавливаться

#java #loops #oop

Вопрос:

Я воссоздаю текстовую RPG dungeon, созданную ранее с помощью ООП, но столкнулся с проблемой. Ниже у нас есть класс для последовательности сражений. При вводе входных данных для атаки и использования зелий здоровья все работает по назначению, за исключением одной вещи. После победы над первым врагом здоровье врагов перестает восстанавливаться, когда появляется новый, в результате чего их показатели здоровья становятся отрицательными. Это почему?

ПРАВКА: Я нашел решение!

 import java.util.Scanner;  import java.util.Random;    public class BattleSequence {    public static void main(String args[]) {    Scanner input = new Scanner(System.in);    Player player = new Player();  Enemy enemy = new Enemy();  Potion potion = new Potion();  Random rand = new Random();    System.out.println("Welcome to the dungeon!");    enemy.randomEnemy = enemy.enemyType[rand.nextInt(enemy.enemyType.length)];  System.out.println("# A "   enemy.randomEnemy   " appears! #");      while (player.start == 0) {  System.out.println("---------------------------");  System.out.println("Your current health is "   player.playerHealth   ".");  System.out.println("Your current attack damage is "   player.playerAttackDamage   ".");  System.out.println("Your current level is "   player.playerLevel   ".");  System.out.println("Your currently have "   player.playerHealthPotions   " health potions.");  System.out.println("---------------------------");    System.out.println("What would you like to do?n");  System.out.println("Type 1 to attack, 2 to use health potion, and 3 to runn");    String Input = input.nextLine();  if (Input.equals("1")) {  System.out.println("---------------------------");  System.out.println("You strike the "   enemy.randomEnemy   " for "   player.playerAttackDamage   " damage.n");  System.out.println("---------------------------");  enemy.enemyHealth -= player.playerAttackDamage;  if (enemy.enemyHealth gt;= player.playerAttackDamage) {  System.out.println("The "   enemy.randomEnemy   " has "   enemy.enemyHealth   " health remaining.n");  }  }    else if (Input.equals("2")) {    if (player.playerHealthPotions gt; 0) {  player.playerHealth  = potion.potionHealAmount;  player.playerHealthPotions = player.playerHealthPotions - 1;  System.out.println("You drank a health potion healing you for "   potion.potionHealAmount   " health. You now have "   player.playerHealthPotions   " health potions remaining.n");  }  else {  System.out.println("You have no more potions available, fight enemies for a chance to receive more.n");  }  }  if (enemy.enemyHealth lt; 1) {  System.out.println("The "   enemy.randomEnemy   " has been defeated.n");  enemy.randomEnemy = enemy.enemyType[rand.nextInt(enemy.enemyType.length)];  System.out.println("# A "   enemy.randomEnemy   " appears! #");    }  else {  System.out.println("The "   enemy.randomEnemy   " strikes you for "   enemy.randomDamage   " damage.n");  player.playerHealth -= enemy.randomDamage;  }        }      }  }  

Комментарии:

1. Что вы имеете в виду под «прекращением сброса»? Вы никогда ничего не делаете, чтобы сбросить его. Вы назначаете врагу только новый тип врага. Как вы думаете, почему здоровье восстановится? Как вы думаете, какая часть вашего кода приведет к его сбросу?

2. Вы должны начать думать о создании методов в объекте врага, чтобы переопределить нового врага, такого как враг.побежденный() назначит новый тип и установит HP для назначенного типа HP. Таким образом, у вас не будет многословного кода, и он будет работать нормально каждый раз. Я думаю, что установка нового типа, если враг, как вы, не влияет на его атрибут HP.

3. Я понимаю это и просто изучал это. Однако причина, по которой я задавался этим вопросом, заключается в том, что значения здоровья врагов сбрасывались при победе над врагом, но больше этого не происходит. Это навело меня на мысль, что каждый новый враг будет появляться со сброшенными ценностями.

4. Это не код ооп… Ооп означает инкапсуляцию и создание объектов. Например, создание нового вражеского объекта всякий раз, когда вам нужен новый враг. Ваши проблемы связаны с тем, что вы не следуете принципам проектирования ООП. Вам нужно сбросить hp вашего врага вручную.