如何在另一个对象java上使用一个对象的实例变量

时间:2016-03-22 15:40:42

标签: java object

我正在做一个简单的游戏。 当我调用战斗方法时,角色在被击中时受到的伤害是它自己的伤害变量 例如 骑士- 健康:100 伤害:20

Soldier- 健康:100 伤害:10

当我打电话给我的方法时,骑士攻击士兵,士兵攻击骑士他们的健康状况如下

Knight-> 80生 Soldier-> 90健康

应该是反过来的

示例代码

public abstract class BasicCharacter 
{
private double health;
private double damage;
private double attackProbability;
private String name;


public BasicCharacter(double hp,double attp,double d, String n)
{   
    health=hp;
    attackProbability=attp;
    damage=d;
    name=n; 


}


public void setHealth(double hp)
{  
    health=hp;
}

public double getHealth()
{
    return health;
}



public double getDamage()
{
    return damage;
}




public void fight()
{


    double prob=Math.random();

    if(prob<attackProbability)
    {
        JOptionPane.showMessageDialog(null, name+" attacked for " + damage+    "\n" + name + " health " + health +" left");
        health=health-damage;
    }
    else {

        JOptionPane.showMessageDialog(null, name + " missed");
    }


}
}

士兵和骑士都是BasicCharacter的子类

  public class soldier extends BasicCharacter{} 

感谢

2 个答案:

答案 0 :(得分:3)

这是因为在你的fight()方法中,你正在从对象自身的伤害中扣除健康状况:

health=health-damage;

你真正想要的可能是:

fight(BasicCharacter target){
    target.setHealth(target.getHealth() - this.damage);
}

你可以为你的战斗方法添加一个参数来指示战斗目标。

答案 1 :(得分:0)

实施例: 骑士攻击士兵

一种简单的方法,可以处理破坏,发送你想要破坏的物体和损坏量。

public void damaging(Object object, Double damage){
 if(object instanceof Soldier){
 ((Soldier)object).setHealth(((Soldier)object).getHealth()-damage);
 }
}