Hallo,
ich sitze gerade an einer Hausaufgabe und versuche jetzt schon etwas länger ein Problem zu lösen. Da ich aber einfach auf keine Lösung komme wende ich mich jetzt an euch.
Ich muss etwas länger ausholen, um zu erklären was ich eigentlich machen möchte.
Wir sollen eine Art RPG programmieren. Es gibt die Klassen Magier und Krieger. Beide Klassen erben von der abstrakten Klasse Charakter. Das musste ich machen, damit ein Magier einen Magier, aber auch einen Krieger angreifen kann. In der Klasse Charakter gibt es die Attribute int Gesundheit, int GesundheitMax, String Name, boolean lebendig und ich hab noch einen Zufallsgenerator aus java.util.Random importiert damit die Charaktere Angriffe verfehlen und ihnen ausweichen können.
Die Klasse Krieger hat zusätzlich double Wut und double WutMax.
Die Klasse Magier hat double Mana und ManaMax.
Das Konzept kommt übrigens von meinem Lehrer, nicht von mir.
Jetzt aber zu meinem Problem:
Der Krieger soll, wenn er angegriffen wird, die selbe Menge die er an Schaden bekommt, als Wut zugeschrieben bekommen.
Dazu müsste ich in der "removeGesundheit" Klasse quasi Wut = Wut + Wert eingeben.
Das geht aber natürlich nicht, da die Methode in der Klasse Charakter steht und es dort kein Attribut Wut gibt.
Hab schon probiert die Klasse removeGesundheit in Krieger rüberzukopieren und dort dann die Wut addition einzufügen, geht aber nicht. Und eine Methode zum Wut erhöhen kann ich ja auch nicht machen, da beim Magier ja keine Wut hinzugefügt werden soll. Im Prinzip bräuchte ich eine Fallunterscheidung die unterscheidet, ob ein Magier oder ein Krieger Schaden bekommt, dann könnte ich, im Falle eines Kriegers eine Methode des Kriegers aufrufen, die dann ihm dann die Wut gibt. Oder vielleicht kann man es noch ganz anders machen?
Ich bitte um Hilfe, bin etwas verzweifelt...
Hier noch der Code von removeGesundheit:
Die Methode wird dann zum Beispiel vom Krieger aufgerufen in der nahkampfangriff Methode:
Ich hoffe ihr habt Verstanden was ich meine (ist bei meinen Erklärungen oft nicht so leicht) und könnt mir helfen.
LG Simon
PS: Achja, ich muss das in BlueJ programmieren, falls das wichtig ist.
ich sitze gerade an einer Hausaufgabe und versuche jetzt schon etwas länger ein Problem zu lösen. Da ich aber einfach auf keine Lösung komme wende ich mich jetzt an euch.
Ich muss etwas länger ausholen, um zu erklären was ich eigentlich machen möchte.
Wir sollen eine Art RPG programmieren. Es gibt die Klassen Magier und Krieger. Beide Klassen erben von der abstrakten Klasse Charakter. Das musste ich machen, damit ein Magier einen Magier, aber auch einen Krieger angreifen kann. In der Klasse Charakter gibt es die Attribute int Gesundheit, int GesundheitMax, String Name, boolean lebendig und ich hab noch einen Zufallsgenerator aus java.util.Random importiert damit die Charaktere Angriffe verfehlen und ihnen ausweichen können.
Die Klasse Krieger hat zusätzlich double Wut und double WutMax.
Die Klasse Magier hat double Mana und ManaMax.
Das Konzept kommt übrigens von meinem Lehrer, nicht von mir.
Jetzt aber zu meinem Problem:
Der Krieger soll, wenn er angegriffen wird, die selbe Menge die er an Schaden bekommt, als Wut zugeschrieben bekommen.
Dazu müsste ich in der "removeGesundheit" Klasse quasi Wut = Wut + Wert eingeben.
Das geht aber natürlich nicht, da die Methode in der Klasse Charakter steht und es dort kein Attribut Wut gibt.
Hab schon probiert die Klasse removeGesundheit in Krieger rüberzukopieren und dort dann die Wut addition einzufügen, geht aber nicht. Und eine Methode zum Wut erhöhen kann ich ja auch nicht machen, da beim Magier ja keine Wut hinzugefügt werden soll. Im Prinzip bräuchte ich eine Fallunterscheidung die unterscheidet, ob ein Magier oder ein Krieger Schaden bekommt, dann könnte ich, im Falle eines Kriegers eine Methode des Kriegers aufrufen, die dann ihm dann die Wut gibt. Oder vielleicht kann man es noch ganz anders machen?
Ich bitte um Hilfe, bin etwas verzweifelt...
Hier noch der Code von removeGesundheit:
Code:
public void remGesundheit(int Wert) {
if(Wert >= 0) {
if(Gesundheit-Wert > 0) {
if(jaodernein()) {
Gesundheit = Gesundheit - Wert;
}else{
System.out.println("Angriff ausgewichen!");
}
} else {
System.out.println(Name + " ist gestorben!");
lebendig = false;
}
}else {
System.out.println("Wert muss positiv sein!");
}
}
Die Methode wird dann zum Beispiel vom Krieger aufgerufen in der nahkampfangriff Methode:
Code:
public void nahkampfangriff(int Wert, CHARAKTER ziel) {
if (lebendig == true) {
if(Wut-Wert >= 0) {
if(ziel.getlebendig() == true) {
if(jaodernein()) {
ziel.remGesundheit(Wert);
Wut = Wut-Wert;
} else {
System.out.println("Angriff verfehlt!");
Wut = Wut-Wert;
}
}
}else{
System.out.println("Nicht genügend Wut!");
}
}else{
System.out.println(Name + " ist tot!");
}
}
Ich hoffe ihr habt Verstanden was ich meine (ist bei meinen Erklärungen oft nicht so leicht) und könnt mir helfen.
LG Simon
PS: Achja, ich muss das in BlueJ programmieren, falls das wichtig ist.