Lernpfad:Hehomon/13: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 11: Zeile 11:
[[Bild:EA_Lebensbalken.jpg|center|600px]]
[[Bild:EA_Lebensbalken.jpg|center|600px]]


Dei Balken bestehen in der einfachsten Variante aus zwei Rechtecken. Einem schwarzen Hintergrund (bzw. Rahmen) und einem farbigen Rechteck, dessen Breite den Anteil der vorhandenen Lebenspunkte anzeigt.
Die Balken bestehen in der einfachsten Variante aus zwei Rechtecken. Einem schwarzen Hintergrund (bzw. Rahmen) und einem farbigen Rechteck, dessen Breite den Anteil der vorhandenen Lebenspunkte anzeigt.


Wir wollen also einen weiteren ''Knoten'' an unseren ''Spielbaum'' hängen, an den wir wiederum die beiden Rechtecke als ''Blätter'' anhängen. Zusammen mit den Bildern der Hehomons (die ja auch ''Blätter'' im ''Spielbaum'' sind), sieht der Baum danach so aus:
Wir wollen also einen weiteren ''Knoten'' an unseren ''Spielbaum'' hängen, an den wir wiederum die beiden Rechtecke als ''Blätter'' anhängen. Zusammen mit den Bildern der Hehomons (die ja auch ''Blätter'' im ''Spielbaum'' sind), sieht der Baum danach so aus:
Zeile 59: Zeile 59:
# Übernehmt die Klasse <code>Lebensbalken</code> in euer Projekt.
# Übernehmt die Klasse <code>Lebensbalken</code> in euer Projekt.
# Analysiert den Quelltext der Klasse und versucht ihre Funktionsweise zu verstehen. Insbesondere folgende Punkte:
# Analysiert den Quelltext der Klasse und versucht ihre Funktionsweise zu verstehen. Insbesondere folgende Punkte:
#* Wie wird dei Klasse <code>Rechteck</code> benutzt? (Schaut in der [https://docs.engine-alpha.org/v3.2.0/ Dokumentation der {{Engine-Alpha}}] nach.)
#* Wie wird die Klasse <code>Rechteck</code> benutzt? (Schaut in der [https://docs.engine-alpha.org/v3.2.0/ Dokumentation der {{Engine-Alpha}}] nach.)
#* Wozu ist die Methode <code>aktualisiereDaten</code> da?
#* Wozu ist die Methode <code>aktualisiereDaten</code> da?
#* Es gibt zwei Methoden, Farben festzulegen. Welche sind dies und wie werden sie benutzt, um die Farbe des Lebensbalken zu verändern?
#* Es gibt zwei Methoden, Farben festzulegen. Welche sind dies und wie werden sie benutzt, um die Farbe des Lebensbalken zu verändern?
Zeile 66: Zeile 66:
{{Lösung:Start}}
{{Lösung:Start}}
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
import ea.*;


public class Arena extends Knoten {
   
    private Hehomon angreifer;
    private Hehomon verteidiger;
    private Lebensbalken lebenAngreifer;
    private Lebensbalken lebenVerteidiger;
   
    public Arena( Hehomon pAngreifer, Hehomon pVerteidiger ) {
        Bild hintergrund = new Bild(0, 0, "images/hintergrund.jpg");
        add(hintergrund);
       
        angreifer = pAngreifer;
        Bild bildAngreifer = new Bild(0, 50, "images/"+angreifer.getBild());
        add(bildAngreifer);
        lebenAngreifer = new Lebensbalken(angreifer, 100, 450);
        add(lebenAngreifer);
       
        verteidiger = pVerteidiger;
        Bild bildVerteidiger = new Bild(400, 50, "images/"+verteidiger.getBild());
        add(bildVerteidiger);
        lebenVerteidiger = new Lebensbalken(verteidiger, 525, 450);
        add(lebenVerteidiger);
    }
}
</syntaxhighlight>
</syntaxhighlight>
{{Lösung:End}}
{{Lösung:End}}

Version vom 20. März 2020, 23:09 Uhr

Das Spiel (der sogenannte Game-Loop) funktioniert nun im Grunde schon (abgesehen davon, dass es bisher keinen Sieger gibt), aber wir haben noch eine Menge feinarbeit vor uns (in der Spieleentwicklung spricht man vom polishing, also dem polieren des Spiels.

Wir können zwar Fähigkeiten einsetzen, allerdings sehen wir noch nicht die Auswirkungen. Das ändern wir nun.

Lebensbalken

Die Anzeige der Lebenspunkte soll als farbiger Balken unter dem Angreifen und Verteidiger erscheinen.

EA Lebensbalken.jpg

Die Balken bestehen in der einfachsten Variante aus zwei Rechtecken. Einem schwarzen Hintergrund (bzw. Rahmen) und einem farbigen Rechteck, dessen Breite den Anteil der vorhandenen Lebenspunkte anzeigt.

Wir wollen also einen weiteren Knoten an unseren Spielbaum hängen, an den wir wiederum die beiden Rechtecke als Blätter anhängen. Zusammen mit den Bildern der Hehomons (die ja auch Blätter im Spielbaum sind), sieht der Baum danach so aus:

EA Tree 4.png

Erstellt eine Klasse Lebensbalken sieht wie folgt aus:

public class Lebensbalken extends Knoten {
    
    private Hehomon hehomon;
    
    private Rechteck balkenHP;
    
    private Rechteck balkenHG;

    public Lebensbalken( Hehomon pHehomon, int pX, int pY ) {
        hehomon = pHehomon;

        balkenHG = new Rechteck(pX,pY,206,11);
        balkenHG.farbeSetzen("Schwarz");
        balkenHP = new Rechteck(pX+3,pY+3,200,5);
        balkenHP.farbeSetzen(new Farbe(255, 255, 255));

        aktualisiereDaten(pHp);
        
        add(balkenHG);
        add(balkenHP);
    }

    public void aktualisiereDaten( int pHpNeu ) {
        double lpAnteil = ((double)hehomon.getLp()/hehomon.getLpMax());
        
        balkenHP.breiteSetzen( (int)((double)(balkenHG.getBreite()-6) * lpAnteil) );
        balkenHP.farbeSetzen( 
            new Farbe(
                255 - ((int)(255.0 * lpAnteil)),
                (int)(255.0 * lpAnteil), 
                0
            )
        );
    }

}
Icon Heft.png
Arbeitsauftrag
  1. Übernehmt die Klasse Lebensbalken in euer Projekt.
  2. Analysiert den Quelltext der Klasse und versucht ihre Funktionsweise zu verstehen. Insbesondere folgende Punkte:
    • Wie wird die Klasse Rechteck benutzt? (Schaut in der Dokumentation der Engine-Alpha nach.)
    • Wozu ist die Methode aktualisiereDaten da?
    • Es gibt zwei Methoden, Farben festzulegen. Welche sind dies und wie werden sie benutzt, um die Farbe des Lebensbalken zu verändern?
  3. Erzeugt zwei Objekte der Klasse Lebensbalken in der Arena (je einer für jede Hehomon) und fügt sie dem Arena-Knoten hinzu (add()).
Lösung
import ea.*;

public class Arena extends Knoten {
    
    private Hehomon angreifer;
    private Hehomon verteidiger;

    private Lebensbalken lebenAngreifer;
    private Lebensbalken lebenVerteidiger;
    
    public Arena( Hehomon pAngreifer, Hehomon pVerteidiger ) {
        Bild hintergrund = new Bild(0, 0, "images/hintergrund.jpg");
        add(hintergrund);
        
        angreifer = pAngreifer;
        Bild bildAngreifer = new Bild(0, 50, "images/"+angreifer.getBild());
        add(bildAngreifer);

        lebenAngreifer = new Lebensbalken(angreifer, 100, 450);
        add(lebenAngreifer);
        
        verteidiger = pVerteidiger;
        Bild bildVerteidiger = new Bild(400, 50, "images/"+verteidiger.getBild());
        add(bildVerteidiger);

        lebenVerteidiger = new Lebensbalken(verteidiger, 525, 450);
        add(lebenVerteidiger);
    }

}