如果标题令人困惑,我深表歉意。我对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;
}
}
答案 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)
!