Как получить значение метода в области выполнения, которое было изменено внутри метода? - PullRequest
0 голосов
/ 17 января 2019

Прошу прощения, если название сбивает с толку. Я очень плохо знаком с Java-кодированием и только что закончил курс по кодированию, который я получил в моей школе.

Я пытаюсь создать небольшую текстовую приключенческую игру на Java с помощью программы под названием codehs. В игре есть игрок, имеющий класс для своей статистики. В игре также есть монстры, у которых есть отдельный класс, основанный на их индивидуальных характеристиках. Каждый монстр создается случайным образом за столкновение и порождается из пула монстров, которые масштабируются с уровнем игрока.

Моя проблема возникает, когда я начинаю бой между игроком и монстром. В настоящее время я начинаю бой с помощью метода, называемого «бой с монстром», где метод вводит уровень игроков и их здоровье в переменную, называемую HP (отдельно от класса статистики). Проблема в том, что после боя мой игрок, очевидно, потерял часть HP в бою, но поскольку переменная HP изменяется внутри метода, после боя он возвращается к полному HP по умолчанию, когда я пытаюсь отобразить текущее HP , Есть ли способ, которым я могу отображать HP игрока после боя в области бега?

Я прошу прощения за длинную формулировку и, вероятно, ужасное понимание Java, но я был бы признателен за любую помощь, пытаясь сделать эту работу.

Редактировать: вот код

То, что я называю в области бега: monsterFight (player.getLevel (), player.getHP ());

Метод борьбы с монстрами:

public void monsterFight (int level, int HP) {

    int whatMonster = Randomizer.nextInt(1,3);

    Monster monster = null;

    if(whatMonster == 1)
    {
    monster = new Monster("Gremlin", level, 1500);
    }

    if(whatMonster == 2)
    {
    monster = new Monster("Troll", level, 3000);
    }

    if(whatMonster == 3)
    {
    monster = new Monster("Brute", level, 4000);
    }

    Monster.getHP();
    System.out.println(monster);


    int enemHP = Monster.getHP();
    while (HP > 0 && enemHP > 0)
    {
        System.out.println("");
        String fbfAttack = readLine("How will you attack? Choose lightning or fireball: ");

        if (fbfAttack.equals("lightning"))
        {
            System.out.println("Your lightning blasts the ");
            int damage = Randomizer.nextInt(400,500);
            enemHP = enemHP - damage;
        }

        if (fbfAttack.equals("fireball"))
        {
            System.out.println("Your fire burns the " + monster.getName());
            int damage = Randomizer.nextInt(700,1000);
            enemHP = enemHP - damage;
        }

        if (enemHP <= 0)
        {
            break;
        }

        System.out.println("The " + monster.getName() + " is at: " + enemHP + "HP");
        int enemAttack = Randomizer.nextInt(200,300);
        HP = HP - enemAttack;
        System.out.println("The " + monster.getName() + " attacks! Your HP: " + (HP));
        }
        if (HP < 0)
        {
            System.out.println("Game over, you died");
            System.exit(0);
        }
        System.out.println("HP in fight method " + HP);
        newHP(HP);

}

public int newHP(int HP)
{
    return HP;
}

}

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ты очень близко. Прежде всего, позвольте мне сказать, что есть много способов решить эту проблему. Вот один из них:

Вы можете передать объект player в monsterFight(Player player)

public class Player {

   private int health;
   private int lvl;

   public Player(int health, int lvl) {
       this.health = health;
       this.lvl = lvl;    
   }

  ...
  // getters & setters

}

, а затем в monsterFight(Player player) вы можете звонить player.setHealth(health) всякий раз, когда игрок теряет здоровье!

0 голосов
/ 17 января 2019

Мне кажется, что у вас должен быть объект, который инициализирован в главном или в котором его состояние сохранено где-то глобально, и после каждого боя вы меняете HP игрока на новое значение для этого объекта. Чтобы показать HP, вы просто запрашиваете состояние объекта.

Player p;
object Player {
   int level;
   int health;
}

public int getLevel(){
   return this.level
}

public int setLevel(int level){
   this.level = level
}

public int getHealth(){
   return this.health
}

public int setHealth(int health){
   this.health = health
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...