如何在方法内部更改的运行区域中获取方法的值?

时间:2019-01-17 15:36:25

标签: java variables

如果标题令人困惑,我深表歉意。我对Java编码非常陌生,刚刚完成了我高中提供的编码课程。

我正在尝试通过一个名为codehs的程序使用Java创建一个小型的文字冒险游戏。在游戏中,有一个玩家,并为其数据统计了一个等级。游戏中还有一些怪物,它们根据各自的统计信息具有单独的类别。每个怪物都会在每次遭遇时随机创建,并从一群随玩家等级缩放的怪物中产生。

当我在玩家和怪物之间进行战斗时,就会出现我的问题。我目前正在通过一种称为“怪物战斗”的方法来发起战斗,该方法在一个名为HP(与统计信息类分开保存)的变量中输入玩家的等级及其健康状况。问题是,在战斗之后,我的玩家显然在战斗中损失了一些生命值,但是由于在方法内部更改了HP变量,因此当我尝试显示当前生命值时,它会在战斗后恢复为默认的完整生命值。在奔跑区域中进行战斗后,有什么方法可以显示玩家的生命值吗?

对于冗长的措词以及对Java可能的糟糕理解,我深表歉意,但是我非常感谢您尝试进行此工作。

编辑:这是一些代码

我在运行区域中所说的: monsterFight(player.getLevel(),player.getHP());

怪物战斗方法:

公共无效的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 :(得分:0)

在我看来,您应该有一个在主体中初始化的对象,或者其状态保存在全局某处,并且在每次战斗之后,您将玩家的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
}

答案 1 :(得分:0)

您非常亲密。首先,我只想说有很多解决方法。这是一个:

您可以将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)