Lernpfad:Hehomon/15: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 47: Zeile 47:
}
}
</graphviz></center>
</graphviz></center>
Die grau hinterlegten Aktionen haben wir noch nicht implementiert. Sie legen die Siegbedingung fest, und was bei ihrem Eintreten passieren soll. Wir müssen für unser Spiel also jedes Mal nach dem Anwenden einer Fähigkeit noch eine Abfrage ergänzen, die prüft, ob der Gegner noch Lebenspunkte hat oder nicht.
Die grau hinterlegten Aktionen haben wir noch nicht implementiert. Sie legen die Siegbedingung fest, und was bei ihrem Eintreten passieren soll.  


Wir müssen für unser Spiel also jedes Mal nach dem Anwenden einer Fähigkeit noch eine Abfrage ergänzen, die prüft, ob der Gegner noch Lebenspunkte hat oder nicht.
Das Prüfen der Bedingung ist Aufgabe des ''Controllers'', die Anzeige des Siegers übernimmt die ''View''.
{{Aufgabe:Start|Icon=BlueJ Logo.png}}
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
     private void pruefeSiegbedingung() {
     private void pruefeSiegbedingung() {
         if(leomonGegner1.getHP() <= 0) {
         if(verteidiger.getLp() <= 0) {
              
             view.angreiferGewinnt();
         }
         } else if(angreifer.getLp() <= 0) {
        else if(leomonGegner2.getHP() <= 0) {
            view.verteidigerGewinnt();
 
         }
         }
     }
     }
</syntaxhighlight>
# Übernehmt die Methode <code>private void pruefeSiegbedingung()</code> in die Klasse <code>Spiel</code>.
# Ruft die Methode jedes Mal auf, wenn der Angreifer oder der Verteidiger eine seiner Fähigkeiten benutzt hat.
# Ergänzt die Methoden <code>public void angreiferGewinnt()</code> und <code>public void verteidigerGewinnt()</code> in der Klasse <code>Arena</code>. Implementiert sie dann jeweils als Siegerehrung für den Gewinner des Spiels. Zum Beispiel könntet ihr das Bild und den Namen des Gewinners groß in der Mitte anzeigen. Tipps dazu findet ihr unten.
{{Aufgabe:End}}


    private void angreiferGewinnt() {
<syntaxhighlight lang="java">
            information.setzeInhalt(leomonGegner2.getName() + " hat gewonnen.");
private void angreiferGewinnt() {
            leomon1.sichtbarSetzen(false);
    anzeige.setText(angreifer.getName() + " hat gewonnen.");
            leomon2.positionSetzen(205,5);
    verteidiger.sichtbarSetzen(false);
            leomon1HP.sichtbarSetzen(false);
    angreifer.positionSetzen(205, 5);
            leomon1HPBG.sichtbarSetzen(false);
    lebenAngreifer.sichtbarSetzen(false);
            leomon2HP.sichtbarSetzen(false);
    lebenVerteidiger.sichtbarSetzen(false);
            leomon2HPBG.sichtbarSetzen(false);
}
    }


    private void verteidigerGewinnt() {
private void verteidigerGewinnt() {
            information.setzeInhalt(leomonGegner2.getName() + " hat gewonnen.");
    anzeige.setText(verteidiger.getName() + " hat gewonnen.");
            leomon1.sichtbarSetzen(false);
    angreifer.sichtbarSetzen(false);
            leomon2.positionSetzen(205,5);
    verteidiger.positionSetzen(205, 5);
            leomon1HP.sichtbarSetzen(false);
    lebenAngreifer.sichtbarSetzen(false);
            leomon1HPBG.sichtbarSetzen(false);
    lebenVerteidiger.sichtbarSetzen(false);
            leomon2HP.sichtbarSetzen(false);
}
            leomon2HPBG.sichtbarSetzen(false);
    }
</syntaxhighlight>
</syntaxhighlight>

Version vom 25. März 2020, 14:52 Uhr

Ein wichtiger - nein, der wichtigste - Bestandteil fehlt noch: Die Siegerehrung!

Die Siegbedingung

Jedes Spiel hat eine Siehbedingung die entscheidet, wann einer (oder manchmal mehrere) der Spieler das Spiel gewonnen hat.

Die Mechaniken, wie man dieses Spielziel erreicht, sowie die Siegbedingung nennt man das Spieldesign (oder im englischen Gamedesign).

Icon Heft.png
Arbeitsauftrag

Tauscht euch kurz darüber aus, wie das Spieldesign bei Hehomon/Pokémon aussieht. Stellt euch vor, ihr schreibt eine Spielanleitung zum Spiel. Wie würdet ihr den Spielablauf beschreiben?

Die Aktionen, die ein Spieler ausführen kann und die Reaktionen der anderen Spieler vom Start des Spiel bis zum Eintreten der Siegbedingung bilden der Spielablauf (oder Spielfluss). Er lässt sich auch gut als Ablaufdiagramm (oder Flussdiagramm) darstellen:

<graphviz caption="Spielfluß für Hehomon" format="png">

digraph {

   s[shape="circle", style=rounded, style="filled", color="black"];
   e[shape="circle", style=rounded, style="filled", color="black"];
   
   a1[shape="rect", style="", label="Angreifer am Zug"]
   a2[shape="parallelogram", style="", label="Fähigkeit auswählen"]
   a3[shape="rect", style="", label="Fähigkeit anwenden"]
   a4[shape="rect", style="filled", label="Angreifer gewinnt"]
   
   v1[shape="rect", style="", label="Verteidiger am Zug"]
   v2[shape="parallelogram", style="", label="Fähigkeit auswählen"]
   v3[shape="rect", style="", label="Fähigkeit anwenden"]
   v4[shape="rect", style="filled", label="Verteidiger gewinnt"]
   if1[shape="diamond", style="filled", label="Hat Verteidiger\n0 LP?"];
   if2[shape="diamond", style="filled", label="Hat Angreifer\n0 LP?"];


   s -> a1 -> a2 -> a3 -> if1;
   if1 -> v1[label="nein"];
   if1 -> a4[label="ja"];
   v1 -> v2 -> v3 -> if2;
   if2 -> a1[label="nein"];
   if2 -> v4[label="ja"];
   a4 -> e;
   v4 -> e;
   {rank=same; a1 v1}
   {rank=same; a2 v2}
   {rank=same; a3 v3}
   {rank=same; if1 if2}
   {rank=same; a4 v4}

}

</graphviz>

Die grau hinterlegten Aktionen haben wir noch nicht implementiert. Sie legen die Siegbedingung fest, und was bei ihrem Eintreten passieren soll.

Wir müssen für unser Spiel also jedes Mal nach dem Anwenden einer Fähigkeit noch eine Abfrage ergänzen, die prüft, ob der Gegner noch Lebenspunkte hat oder nicht.

Das Prüfen der Bedingung ist Aufgabe des Controllers, die Anzeige des Siegers übernimmt die View.

BlueJ Logo.png
Arbeitsauftrag
    private void pruefeSiegbedingung() {
        if(verteidiger.getLp() <= 0) {
            view.angreiferGewinnt();
        } else if(angreifer.getLp() <= 0) {
            view.verteidigerGewinnt();
        }
    }
  1. Übernehmt die Methode private void pruefeSiegbedingung() in die Klasse Spiel.
  2. Ruft die Methode jedes Mal auf, wenn der Angreifer oder der Verteidiger eine seiner Fähigkeiten benutzt hat.
  3. Ergänzt die Methoden public void angreiferGewinnt() und public void verteidigerGewinnt() in der Klasse Arena. Implementiert sie dann jeweils als Siegerehrung für den Gewinner des Spiels. Zum Beispiel könntet ihr das Bild und den Namen des Gewinners groß in der Mitte anzeigen. Tipps dazu findet ihr unten.


private void angreiferGewinnt() {
    anzeige.setText(angreifer.getName() + " hat gewonnen.");
    verteidiger.sichtbarSetzen(false);
    angreifer.positionSetzen(205, 5);
    lebenAngreifer.sichtbarSetzen(false);
    lebenVerteidiger.sichtbarSetzen(false);
}

private void verteidigerGewinnt() {
    anzeige.setText(verteidiger.getName() + " hat gewonnen.");
    angreifer.sichtbarSetzen(false);
    verteidiger.positionSetzen(205, 5);
    lebenAngreifer.sichtbarSetzen(false);
    lebenVerteidiger.sichtbarSetzen(false);
}