2016-03-22 9 views
1

Ich mache ein einfaches Spiel. Wenn ich den Kampf-Methode aufrufen, die durch das Zeichen erhalten Schaden, wenn er getroffen wird, ist seine eigene Schädigungsvariable Zum Beispiel Knight- Gesundheit: 100 Schaden: 20Wie verwende ich eine Instanzvariable eines Objekts auf einem anderen Objekt? Java

Soldaten Gesundheit: 100 Schaden: 10

, wenn ich rufe meine Methode ein der Ritter den Soldaten angreift und der Soldat greift die Ritter ihre Gesundheit wie folgt

Knight-> 80 Gesundheit Soldaten> 90 Gesundheit

wenn es andersrum sein sollte rund

Beispielcode

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"); 
    } 


} 
} 

sowohl die Soldaten und die Ritter sind Subklassen von BasicCharacter

public class soldier extends BasicCharacter{} 

dank

Antwort

3

Es weil in Ihre fight() Methode, Sie ziehen die Gesundheit aus dem eigenen Schaden des Objekts:

health=health-damage; 

Was man eigentlich will, ist wahrscheinlich:

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

Sie können ein Argument zu Ihrem Kampf Methode hinzufügen, die das Kampfziel angibt.

+0

würde dies in dem gleichen Verfahren oder ein separates Verfahren, da alle Zeichen – thebigone

+0

Teil dieser Klasse sind @thebigone Sie dies für BasicCharacter in der abstrakten Klasse implementieren können. Wer also BasicCharacter erweitert, wird diese Defaut-Implementierung haben. Sie können diese Methode in der Unterklasse dennoch überschreiben. – user3437460

0

Beispiel: Ritter angreifende Soldaten

Eine einfache Methode, die die schädlichen handhaben wird, sendet in Objekt, das Sie nicht beschädigen und der Höhe des Schadens sollen.

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

Warum sollte jemand 'Objekt' benutzen? Sie wollen hier nicht einmal ein 'Objekt ', da diese Methode nur mit' Soldat 'funktionieren kann. Wie wäre es stattdessen mit "Soldier" oder besser "BasicCharacter"? – Tom

Verwandte Themen