Lernpfad:Hehomon/11

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Jetzt ist es an der Zeit, die Hehomons in die Arena zu beschwören.
So sieht die Arena bisher aus.

Beim Erstellen der Arena habt ihr schon die Klasse Bild benutzt. Die wollen wir jetzt verwenden, um das Bild von Alligung in die Arena zu zeichnen.

Entsprechend unserer Architektur nehmen wir dazu Anpassungen in den Klassen vor.

Erweiterung des Datenmodells

Zunächst müssen wir das Bild festlegen, das angezeigt werden soll. Da es sich um eine Information des Hehomons handelt, die für jedes Monster anders ist, passen wir die entsprechende Klasse an.

EA hehomon klasse 2.png
BlueJ Logo.png
Arbeitsauftrag

Fügt Hehomon eine neue Objektvariable String bild hinzu, in der der Name der Bilddatei gespeichert wird. Vergesst nicht, die Variable im Konstruktor zu initialisieren und einen Getter String getBild() zu erstellen.

Passt auch die Konstruktoren der Unterklasse an. Dort muss im Aufruf von super der neue Paramter String pBild ergänzt werden. Die Bilddatei für Alligung heißt "Alligung.png".

Lösung

Achtung: Es sind nur die Änderungen in den Klassen dargestellt.

public class Hehomon {

    // Hier die anderen Objektvariablen
    
    private String bild;

    public Hehomon( String pName, String pTyp, int pLp, int pAngr, int pVert, String pAngr1, String pAngr2, String pVert1, String pVert2, String pBild ) {
        name = pName;
        lp = pLp;
        lpMax = pLp;
        angr = pAngr;
        vert = pVert;
        angr1 = pAngr1;
        angr2 = pAngr2;
        vert1 = pVert1;
        vert2 = pVert2;
        bild = pBild;
    }
    
    // Andere Getter / Setter
    
    public String getBild() {
        return bild;
    }
}
public class Alligung extends Hehomon {
    public Alligung() {
        super("Alligung", "drache", 100, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid", "Alligung.png");
    }
    
    // Restliche Methoden (Angriffe/Verteidigungen)
}


Die Bilder anzeigen

Als nächstes ändern wir die Arena so, dass sie die Bilddateien der kämpfenden Hehomons über das Hintergrundbild zeichnet. Dazu sind mehrere Schritte nötig:

  1. Die Arena muss die beteiligten Hehomon-Objekte kennen.
  2. Beim Erstellen der Arena müssen Bild-Objekte aus den Bilddateien erstellt werden.
  3. Die Bilder müssen dem Arena-Knoten hinzugefügt werden.
EA arena klasse 2.png
BlueJ Logo.png
Arbeitsauftrag
  1. Ergänzt die Objektvariablen Hehomon angreifer und Hehomon verteidiger. Beide werden im Konstruktor durch Parameter initialisiert. Getter oder Setter sind nicht nötig.
  2. Erstellt jeweils ein Bildobjekt zum Verteidiger und Angreifer mit passenden x- und y-Koordinaten und dem Dateipfad "images/"+angreifer.getBild(). Orientiert euch dabei am Hintergrund. Die passenden Koordinaten findet ihr durch ausprobieren heraus.
  3. Fügt die Bilder mit add() dem Arena-Knoten hinzu.
Icon Info.png

Die Bilddateien der Hehomons liegen im Unterordner "images/" des Projektordners. Alle Bilder sind als PNG-Datei mit transparentem Hintergrund gespeichert und haben die Maße 400x400 Pixel.

Lösung
import ea.*; // Import der Engine-Alpha Klassen (hier konkret Knoten)

public class Arena extends Knoten {
	
    private Hehomon angreifer;
    
    private Hehomon verteidiger;
    
	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);
        
        verteidiger = pVerteidiger;
        Bild bildVerteidiger = new Bild(400, 50, "images/"+verteidiger.getBild());
        add(bildVerteidiger);
	}

}


Neue Objekte erzeugen

Die Spielsteuerung muss nun alle Teile zusammenbringen, die nötigen Hehomon-Objektinstanzen erzeugen und an den Konstruktor der Arena weitergeben. Damit die Steuerung später auch noch Zugriff auf die Hehomons hat, speichert sie die Objekte selber auch in Objektvariablen.

EA spiel klasse 2.png
BlueJ Logo.png
Arbeitsauftrag
  1. Ergänzt die Objektvariablen Hehomon angreifer und Hehomon verteidiger. Beide werden im Konstruktor durch Parameter initialisiert. Getter oder Setter sind nicht nötig.
  2. Erstellt im Konstruktor von Spiel zwei Alligung-Objekte als Angreifer und Verteidiger (angreifer = new Alligung( ... )).
  3. Übergebt der Arena im Konstruktor die beiden kämpfenden Hehomons new Arena(angreifer, verteidiger).
Lösung
import ea.*;

public class Spiel extends Game {
	
	private Arena view;
    
    private Hehomon angreifer;
    
    private Hehomon verteidiger

	public Spiel() {
		super(960, 642, "Hehomon");
        
        angreifer = new Alligung();
        verteidiger = new Alligung();
        
		view = new Arena(angreifer, verteidiger);
		wurzel.add(view);
	}
    
    @Override
    public void tasteReagieren(int tastencode) {
    }
}

Statt zwei Alligungs könnt ihr natürlich auch eure eigenen Hehomons beschwören, wenn ihr diese schon im Projekt implementiert habt.

Wenn alles geklappt hat solltet ihr die Hehomons nun in der Arena angezeigt bekommen, sobald ihr ein neues Spiel-Objekt erstellt.

Zwei Alligungs sind bereit zum Kampf.