2016-03-22 32 views
1

我在做一個簡單的遊戲。 當我打電話的戰鬥方法,通過時被擊中的字符收到的傷害是其自身的損傷變量 例如 Knight- 健康:100 傷害:20如何在另一個對象上使用一個對象的實例變量java

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{} 

感謝

回答

3

這是因爲在你的fight()方法,你從對象自身的傷害中扣除了生命值:

health=health-damage; 

你真正想大概是:

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

您可以將參數添加到指示的戰鬥目標你的戰鬥方法。

+0

這會不會在相同的方法或獨立的方法,所有字符都屬於此類 – thebigone

+0

@thebigone您可以在BasicCharacter抽象類實現這個的一部分。所以無論誰擴展BasicCharacter都會有這個默認實現。您仍然可以選擇在子類中重寫此方法。 – user3437460

0

例子: 騎士攻擊士兵

一個簡單的方法將處理的破壞性,在送你不想破壞的對象和傷害量。

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

爲什麼有人要使用Object?你甚至不需要一個'Object'在這裏,因爲這個方法只能用於'Soldier'。那麼用「Soldier」或更好的'BasicCharacter'代替它怎麼樣? – Tom

相關問題