首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储不断变化的int变量

存储不断变化的int变量
EN

Stack Overflow用户
提问于 2017-11-16 11:31:40
回答 3查看 282关注 0票数 0

所以我试着写一个最简单的游戏,每次“怪物”攻击“玩家”,我希望变量"int totalHealth“被降低。

代码语言:javascript
运行
复制
public void attack(Player somePlayer) {

    int totalHealth = somePlayer.getHitPoints() + somePlayer.getStrength();

    int remainingHealth = totalHealth - damage;
    if (remainingHealth == 0 || remainingHealth < 0) {
        System.out.println("Your player died");
    } else {
        System.out.println("The monster attacked " + somePlayer.getName() + " and made " + this.damage + " damage");
        System.out.println("Your remaining health is - " + (remainingHealth - somePlayer.getStrength()));
    }

}

但问题是变量"remainingHealth“保持不变,只有当我第一次运行代码时它会降低,每次它保持不变时,我猜问题就在这一行中:

代码语言:javascript
运行
复制
int totalHealth = somePlayer.getHitPoints() + somePlayer.getStrength();

我想每次我运行代码

代码语言:javascript
运行
复制
somePlayer.getHitpoints() 

从构造函数中获取插入的整数,这就是问题所在。

我需要想办法将剩余的健康状况以某种方式存储在变量中。

球员班:

代码语言:javascript
运行
复制
public class Player implements ISavable{

private String name;
private int hitPoints ;
private int strength ;
private String weapon;
private int damage;
private int totalHealth = hitPoints + strength;

public Player(String name, int damage , int hitPoints , int strength) {
    this.name = name;
    this.damage = damage;
    this.weapon = "Sword";
    this.hitPoints = hitPoints;
    this.strength = strength;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getHitPoints() {
    return hitPoints;
}

public void setHitPoints(int hitPoints) {
    this.hitPoints = hitPoints;
}

public int getStrength() {
    return strength;
}

public void setStrength(int strength) {
    this.strength = strength;
}

public String getWeapon() {
    return weapon;
}

public void setWeapon(String weapon) {
    this.weapon = weapon;
}

public int getTotalHealth() {
    return totalHealth;
}

public void setTotalHealth(int totalHealth) {
    this.totalHealth = totalHealth;
}

@Override
public String toString() {
    return "Player{" +
            "name='" + name + '\'' +
            ", hitPoints=" + hitPoints +
            ", strength=" + strength +
            ", weapon='" + weapon + '\'' +
            '}';
}

@Override
public List<String> write() {
    List<String> values = new ArrayList<String>();
    values.add(0, this.name);
    values.add(1, "" + this.hitPoints);
    values.add(2, "" + this.strength);
    values.add(3, "" + this.weapon);
    values.add(4,"" + this.damage);
    return values;
}

@Override
public void read(List<String> savedValues) {
    if (savedValues != null && savedValues.size()>0){
        this.name = savedValues.get(0);
        this.hitPoints = Integer.parseInt(savedValues.get(1));
        this.strength = Integer.parseInt(savedValues.get(2));
        this.weapon = savedValues.get(3);
    }
}

public void attack(Monster someMonster){
    int health = someMonster.getHitPoints();
    int remainingHealth = health - damage;
    if (remainingHealth == 0 || remainingHealth < 0) {
        System.out.println("You killed the monster !!!");
    } else {
        System.out.println("You attacked the monster " + " and made " + this.damage + " damage");
        System.out.println("Monsters remaining health is - " + remainingHealth);
    }

    if (someMonster.isDead()){
        this.hitPoints = 100;
        this.strength = 50;
    }
}

public void healPlayer(Player somePlayer){
    int hp = somePlayer.getHitPoints();
    hp += 10;
    System.out.println("You healed the player for 10hp , your current hp is " + hp);
}

}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-16 11:36:54

您不是在更新totalHealth的值,每次调用攻击者()方法时都会初始化它,因此您始终具有相同的健康状态。

您可以解决这个问题,并将其放到攻击者()方法中--行:

代码语言:javascript
运行
复制
int totalHealth = somePlayer.getHitPoints() + somePlayer.getStrength();

编辑:

代码语言:javascript
运行
复制
public void attack(Player somePlayer) {

    somePlayer.totalHealth = somePlayer.totalHealth - this.damage;
    if (somePlayer.totalHealth.equals(0) || somePlayer.totalHealth < 0) {
        System.out.println("Your player died");
    } else {
        System.out.println("The monster attacked " + somePlayer.getName() + " and made " + this.damage + " damage");
        System.out.println("Your remaining health is - " + (somePlayer.totalHealth - somePlayer.getStrength()));
    }

}
票数 1
EN

Stack Overflow用户

发布于 2017-11-16 11:37:13

Player上创建一个函数updateHealth(int newHealth),该函数将从getHitPoints()返回到newHealth的变量进行设置。然后,只需在somePlayer.updateHealth(somePlayer.getHitPoints() - damage);函数的末尾追加attack

票数 0
EN

Stack Overflow用户

发布于 2017-11-16 12:02:19

您应该有一个健康的表示,在Player totalHealth中定义。

您可以使用计算总生命值的方法(因为您的玩家可以获得一个增加强度的项目,或者一个允许治疗您的项目)。

然后,您应该在Player中使用另一个变量remainingHealth并将其初始化为remainingHealth = totalHealth

代码语言:javascript
运行
复制
    public class Player {

    float totalHealth;
    float remainingHealth;
    ...

    public Player(...) {
        this.remainingHealth = this.totalHealth;
        ...
    }
    ...

}

当你想降低你的球员的健康,你应该使用remainingHealth。

代码语言:javascript
运行
复制
    public void attack(Player somePlayer) {

    somePlayer.remainingHealth -= this.damage;
    if (somePlayer.remainingHealth <= 0) {
        System.out.println("Your player died");
    } else {
        System.out.println("The monster attacked ...");
        System.out.println("Your remaining health is - " + somePlayer.remainingHealth);
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47328574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档