Hallo,
ich habe heute versuchst ein Beispiel aus meinem Schulbuch umzusetzen. Es ist ein Klassendiagramm mit den Klassen Held,Monster,Waffe usw.
Ich habe bereits die Klassen Held, Monster und Kampfregler implementiert. Der Kampfregler soll dabei den Kampf steuern(zumindest habe ich mir das so gedacht). Nun liegt ein Rundenbasiertes Kampfsystem zwar nahe, jedoch dachte ich, dass es,dafür dass es ein Konsolenspiel/Textadventure ist und auf eine krasse Grafik verzichtet (das würde meine aktuellen Kentnisse ziemlich übersteigen, ein spannenderes Kampfsystem sein darf. Also ein Real Time Kampfsystem bei dem gleichzeitig angegriffen wird, also es auf die Reaktionsgeschwindigkeit auch ein wenig ankommt.
Die Idee: Der Gegner greift in einem festen Zeitintervall an, während der Spieler immer angreift, sobald irgendwas eingegeben wird (bei mir im Moment "w").
Umsetzung: Zuerst dachte ich daran die Zeit zählen zu lassen seit dem Aufruf mit Time.now() und sowas zu machen wie "immer wenn zahl in Millisekunden durch irgendeine zahl teilbar ist, greift das Monster an". Durch Zufall bin ich jedoch auf den TimerTask (über Java ist auch eine Insel) gestoßen. Dabei erbt die Klasse Monster von TimerTask und führt mit der Methode run() immer Angriffe alle 2 Sekunden aus (bis einer der Leben auf Null sinkt) ... Parallel erfolgt ein dauerhafter scanner.nextLine Aufruf für den Spieler zum angreifen....
Jedoch frage ich mich, ob das wirklich die richtige Lösung ist oder eventuell Nachteile hat. Die meisten machen das anscheinend mit Threads (keine Ahnung, was das ist).
hier mal ein Auszug(ich habe versuchst die Methoden und Variablen so zu nennen,dass es nachvollziehbar sein sollte):
Klasse Kampfregeler
Klasse Monster
Vielen Dank!
ich habe heute versuchst ein Beispiel aus meinem Schulbuch umzusetzen. Es ist ein Klassendiagramm mit den Klassen Held,Monster,Waffe usw.
Ich habe bereits die Klassen Held, Monster und Kampfregler implementiert. Der Kampfregler soll dabei den Kampf steuern(zumindest habe ich mir das so gedacht). Nun liegt ein Rundenbasiertes Kampfsystem zwar nahe, jedoch dachte ich, dass es,dafür dass es ein Konsolenspiel/Textadventure ist und auf eine krasse Grafik verzichtet (das würde meine aktuellen Kentnisse ziemlich übersteigen, ein spannenderes Kampfsystem sein darf. Also ein Real Time Kampfsystem bei dem gleichzeitig angegriffen wird, also es auf die Reaktionsgeschwindigkeit auch ein wenig ankommt.
Die Idee: Der Gegner greift in einem festen Zeitintervall an, während der Spieler immer angreift, sobald irgendwas eingegeben wird (bei mir im Moment "w").
Umsetzung: Zuerst dachte ich daran die Zeit zählen zu lassen seit dem Aufruf mit Time.now() und sowas zu machen wie "immer wenn zahl in Millisekunden durch irgendeine zahl teilbar ist, greift das Monster an". Durch Zufall bin ich jedoch auf den TimerTask (über Java ist auch eine Insel) gestoßen. Dabei erbt die Klasse Monster von TimerTask und führt mit der Methode run() immer Angriffe alle 2 Sekunden aus (bis einer der Leben auf Null sinkt) ... Parallel erfolgt ein dauerhafter scanner.nextLine Aufruf für den Spieler zum angreifen....
Jedoch frage ich mich, ob das wirklich die richtige Lösung ist oder eventuell Nachteile hat. Die meisten machen das anscheinend mit Threads (keine Ahnung, was das ist).
hier mal ein Auszug(ich habe versuchst die Methoden und Variablen so zu nennen,dass es nachvollziehbar sein sollte):
Klasse Kampfregeler
Java:
public void kampf(Monster monster1, Held held1){
Timer timer = new Timer();
monster1.setGegner(held1);
timer.schedule(monster1, 0, 2000);
heldAngriff(monster1,held1, timer);
}
public void heldAngriff(Monster monster1, Held held1, Timer timer){
if(held1.getLebenspunkte() > 0 && monster1.getLebenspunkte() > 0){
if(getString().equals("w")){
monster1.setLebenspunkte(monster1.getLebenspunkte() - held1.getStaerke());
System.out.println("Das Monster wurde getroffen, seine Hp sinken auf " + monster1.getLebenspunkte());
}
heldAngriff(monster1,held1,timer);
}
else{
if(monster1.getLebenspunkte() == 0)
System.out.println("Monster wurde besiegt");
else
System.out.println("Du wurdest besiegt");
timer.cancel();
}
}
Klasse Monster
Java:
@Override
public void run(){
if(gegner.getLebenspunkte() > 0 && this.getLebenspunkte() > 0){
gegner.setLebenspunkte(gegner.getLebenspunkte() - this.angriffswert);
System.out.println("Du wurdest getroffen, deine Hp sinken auf " + gegner.getLebenspunkte());
}
else{
if(gegner.getLebenspunkte() == 0)
System.out.println("Du wurdest besiegt");
else
System.out.println("Monster wurde besiegt");
cancel();
}
}
Vielen Dank!