Missbrauch TimerTask?

Leon_2001

Aktives Mitglied
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
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!
 

Leon_2001

Aktives Mitglied
Hat offensichtlich damit was zu tun^^

Ich habe einfach nach Ideen gegoogelt und bin zufällig bei Java ist auch eine Insel Timer/TimerTask gelandet.Aber ich gehe mal davon aus (nachdem ich jetzt nachgelesen habe, was Threads sind), dass diese Erweiterung damit arbeitet. Diese Art ist eine sehr einfache Umsetzung, deswegen habe ich sie gewählt (von wirklich damit arbeiten kann man hier aber noch nicht reden...)... Nur ob es eine gute Umsetzung ist, weiß ich nicht:confused:
 

Ähnliche Java Themen

Neue Themen


Oben