Pong/Modellierung: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 17: Zeile 17:
| nachbedingungen = Spiel läuft; aktueller Zustand: <code>running</code>
| nachbedingungen = Spiel läuft; aktueller Zustand: <code>running</code>
| beschreibung = Einer der beiden Spieler startet das Spiel, indem er den Startknopf drückt. Daraufhin wird das Spiel gestartet und der Startknopf wandelt sich in einen Stoppknopf.
| beschreibung = Einer der beiden Spieler startet das Spiel, indem er den Startknopf drückt. Daraufhin wird das Spiel gestartet und der Startknopf wandelt sich in einen Stoppknopf.
Der aktuelle Punktestand wird zurückgesetzt.  Danach wird vom Mittelpunkt des Spielfeldes ein Ball in zufälliger Richtung mit zufälliger Geschwindigkeit gestartet. Die Richtung und die Geschwindigkeit müssen allerdings so gewählt werden, dass das Spiel nicht zu einfach, zu schwierig oder gar unmöglich zu spielen ist. (Letzteres wäre der Fall, wenn sich der Ball genau entlang der Mittellinie bewegen würde.)
Der aktuelle Punktestand wird zurückgesetzt.  Danach wird vom Mittelpunkt des Spielfeldes ein Ball in zufälliger Richtung mit zufälliger Geschwindigkeit gestartet. Die Richtung und die Geschwindigkeit müssen allerdings so gewählt werden, dass das Spiel nicht zu einfach, zu schwierig oder gar unmöglich zu spielen ist. (Letzteres wäre der Fall, wenn sich der Ball genau entlang der Mittellinie bewegen würde.) Der Ball prallt von den oberen und unteren Seitenwänden sowie von den Schlägern ab. Die linken und rechten Seitenwände passiert er dagegen, wenn er nicht vorher von dem davor platzierten Schläger abprallt.
}}
}}


Zeile 24: Zeile 24:
| akteure = Spieler
| akteure = Spieler
| vorbedingungen = Spiel läuft; aktueller Zustand: <code>running</code>
| vorbedingungen = Spiel läuft; aktueller Zustand: <code>running</code>
| beschreibung = Jeder der beiden Spieler steuert einen eigenen Schläger mittels geeigneter Tasten auf der Tastatur. Der Schläger von Spieler 1 befindet sich an der linken Seite des Spielfeldes, der von Spieler 2 an der rechten. Der jeweilige Schläger bewegt sich entlange der Wand solange nach oben bzw. unten so lange der zugehörige Spieler die entsprechende Taste drückt. Während eine Richtungstaste gedrückt ist, wird der Schläger immer schneller. Bei Kollision mit einer Wand stoppt er sofort. Er kann vom Spieler dann nur noch in Gegenrichtung bewegt werden.
| beschreibung = Jeder der beiden Spieler steuert einen eigenen Schläger mittels geeigneter Tasten auf der Tastatur. Der Schläger von Spieler 1 befindet sich an der linken Seite des Spielfeldes, der von Spieler 2 an der rechten. Der jeweilige Schläger bewegt sich entlang der Wand solange nach oben bzw. unten, so lange der zugehörige Spieler die entsprechende Taste drückt. Während eine Richtungstaste gedrückt ist, wird der Schläger immer schneller. Bei Kollision mit einer Wand stoppt er sofort. Er kann vom Spieler dann nur noch in Gegenrichtung bewegt werden.
}}
}}


Zeile 69: Zeile 69:
| beschreibung = Sobald ein Spieler 10 Punkte gesammelt hat, weil sein Gegner 10 Bälle hat passieren lassen, ist er der Gewinner und das Spiel wird beendet. Der aktuelle Punktestand wird noch angezeigt. Der Schläger wandelt sich in eine Startknopf. Das heißt, einer der Spieler kann jederzeit ein neues Spiel starten.
| beschreibung = Sobald ein Spieler 10 Punkte gesammelt hat, weil sein Gegner 10 Bälle hat passieren lassen, ist er der Gewinner und das Spiel wird beendet. Der aktuelle Punktestand wird noch angezeigt. Der Schläger wandelt sich in eine Startknopf. Das heißt, einer der Spieler kann jederzeit ein neues Spiel starten.
}}
}}
}}
==Modellierung==
{{collapsible
|id=DataModel
|head=<h3>Details</h3>
body=
====Objekte ====
Die Analyse der Use Cases legt nahe, dass folgende Objekte benötigt werden.
''Model und View''':
* Eine Bühne auf der das Spiel stattfindet
* Ein Ball (der bei Start einer neuen Spielrunde oder eines neuen Spiels wiederverwendet wird)
* Zwei Schläger
* Zwei Textfelder zur Anzeige des Spielstands (Score)
* Ein Start/Stopp-Knopf, mit der das Spiel gestartet bzw. abgebrochen werden kann.
Für jedes dieser Objekte müssen sowohl die Model-Eigenschaften (Größe, Position, Geschwindigkeit etc.)
als auch die View-Eigenschaften (Aussehen) definiert werden. In jedem Fall kann entweder ein JavaScript-Objekt definiert werden,
das sowohl die Model-, als auch die View-Eigenschaften festlegt. Oder es können jeweils zwei Objekte definiert werden, eines mit den Model-Eigenschaften und eines mit den View-Eigenschaften.
''Controller''
* Tastatursteuerung
Die Steuerung der Schläger erfolgt über die Tastatur. Für jeden Tastendruck muss analysiert werden, welche der Tasten gedrückt (keydown) oder losgelassen (keyup) wurde. Wenn es sich um eine Taste handelt, die einem Spieler zugeordnet ist, muss der zugehörige Schläger (direkt oder indirekt über die Spiellogik) informiert werden, damit er die gewünschte Aktion (Bewegung nach oben starten, Bewegung nach unten starten, Bewegung stoppen) durchführt.
''Spiellogik''
Die Spiellogik ist für die Verwaltung aller Spielzustände zuständig:
* Starten und stoppen der Game Loop.
* Positionieren und zufälliges Starten des Balls in der Mitte des Spielfelds zu Beginn einer jeden Runde.
* Aktualisieren des Spielstandes und Start einer neuen Runde bzw. Beendigung des Spiels, sobald der Ball die Bühne verlässt.
* Beenden des Spiels, sobald ein ein Spielpartner gewonnen hat. 


}}
}}

Version vom 19. November 2018, 14:40 Uhr

Use Cases (Anwendungfälle)

Datei:WK Pong01 Use Cases.png
Use Cases des Spiels Pong

Details

Im Spiel Pong git es zwei Akteure, die Spieler. Innerhalb des Spiels werden sie durch ihre Avatare, jeweils ein Schläger, vertreten. (Formal gibt es in UML keine Akteure innerhalb eines Systems. Da aber die spielentscheidenden Aktionen nicht durch die Spieler selbst, die nur die Schläger nach links oder rechts steuern können, sondern durch ihre Avatare ausgeführt werden, setze ich mich hier über den UML-Standard hinweg.)

Use Cases für Spieler

Name Spiel starten
Akteur(e) Spieler
Vorbedingung(en) Spiel wurde noch nicht gestartet; aktueller Zustand: stopped
Nachbedingung(en) Spiel läuft; aktueller Zustand: running
Beschreibung Einer der beiden Spieler startet das Spiel, indem er den Startknopf drückt. Daraufhin wird das Spiel gestartet und der Startknopf wandelt sich in einen Stoppknopf. Der aktuelle Punktestand wird zurückgesetzt. Danach wird vom Mittelpunkt des Spielfeldes ein Ball in zufälliger Richtung mit zufälliger Geschwindigkeit gestartet. Die Richtung und die Geschwindigkeit müssen allerdings so gewählt werden, dass das Spiel nicht zu einfach, zu schwierig oder gar unmöglich zu spielen ist. (Letzteres wäre der Fall, wenn sich der Ball genau entlang der Mittellinie bewegen würde.) Der Ball prallt von den oberen und unteren Seitenwänden sowie von den Schlägern ab. Die linken und rechten Seitenwände passiert er dagegen, wenn er nicht vorher von dem davor platzierten Schläger abprallt.
Name Schläger bewegen
Akteur(e) Spieler
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Beschreibung Jeder der beiden Spieler steuert einen eigenen Schläger mittels geeigneter Tasten auf der Tastatur. Der Schläger von Spieler 1 befindet sich an der linken Seite des Spielfeldes, der von Spieler 2 an der rechten. Der jeweilige Schläger bewegt sich entlang der Wand solange nach oben bzw. unten, so lange der zugehörige Spieler die entsprechende Taste drückt. Während eine Richtungstaste gedrückt ist, wird der Schläger immer schneller. Bei Kollision mit einer Wand stoppt er sofort. Er kann vom Spieler dann nur noch in Gegenrichtung bewegt werden.
Name Score betrachten
Akteur(e) Spieler
Beschreibung Die Spieler können jederzeit während des Spiels und auch nach Spielende den Punktestand einsehen. Angezeigt wird, wie viele Punkte jeder Spieler bislang erzielt hat, d. h., wie viele Bälle der Gegner hat passieren lassen.
Name Spiel abbrechen
Akteur(e) Spieler
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Nachbedingung(en) Spiel wurde beendet; aktueller Zustand: stopped
Beschreibung Einer der beiden Spieler bricht das laufende Spiel ab, indem er den Stoppknopf drückt. Daraufhin wird das Spiel ohne weitere Warnung beendet und der Startknopf wandelt sich in einen Startknopf. Der aktuelle Punktestand ist noch zu erkennen.

Use Cases für Avatare (Schläger)

Name mit Ball kollidieren
Akteur(e) Avatare (Schläger)
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Beschreibung Sobald der Ball mit einem Schläger kollidiert, prallt er (nach Möglichkeit physikalisch korrekt) von diesem ab. Sollte sich der Schläger zum Zeitpunkt der Kollision bewegen, so wird eine Reibung zwischen Ball und Schläger simuliert. Das heißt, der Ball wird ein wenig in die Bewegungsrichtung des Schlägers abgelenkt. Die Ablenkung ist proportional zur Geschwindigkeit des Schlägers zum Kollisionszeitpunkt.
Name stoppen
Akteur(e) Avatare (Schläger)
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Beschreibung Wenn der Schläger mit der oberen oder unteren Seitenwand des Spielfeldes kollidiert bleibt er schlagartig stehen.
Name Ball passieren lassen
Akteur(e) Avatare (Schläger)
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Beschreibung Wenn sich ein Ball auf die Wand hinter einem Schläger zubewegt und nicht mit dem Schläger kollidiert, verschwindet er hinter dem Schläger und der Spielpartner erhält einen Punkt. Danach wird vom Mittelpunkt des Spielfeldes ein neuer Ball in zufälliger Richtung mit zufälliger Geschwindigkeit gestartet.
Name Spiel beenden
Akteur(e) Avatare (Schläger)
bedingte
Erweiterung von
Ball passieren lassen
Bedingung: Einer der beiden Spieler (bzw. dessen Schläger) kann zum zehnten Mal einen Ball nicht zurückschlagen, sondern lässt ihn passieren.
Vorbedingung(en) Spiel läuft; aktueller Zustand: running
Nachbedingung(en) Spiel wurde beendet; aktueller Zustand: stopped
Beschreibung Sobald ein Spieler 10 Punkte gesammelt hat, weil sein Gegner 10 Bälle hat passieren lassen, ist er der Gewinner und das Spiel wird beendet. Der aktuelle Punktestand wird noch angezeigt. Der Schläger wandelt sich in eine Startknopf. Das heißt, einer der Spieler kann jederzeit ein neues Spiel starten.

Modellierung

Details

body=

Objekte

Die Analyse der Use Cases legt nahe, dass folgende Objekte benötigt werden.

Model und View':

  • Eine Bühne auf der das Spiel stattfindet
  • Ein Ball (der bei Start einer neuen Spielrunde oder eines neuen Spiels wiederverwendet wird)
  • Zwei Schläger
  • Zwei Textfelder zur Anzeige des Spielstands (Score)
  • Ein Start/Stopp-Knopf, mit der das Spiel gestartet bzw. abgebrochen werden kann.

Für jedes dieser Objekte müssen sowohl die Model-Eigenschaften (Größe, Position, Geschwindigkeit etc.) als auch die View-Eigenschaften (Aussehen) definiert werden. In jedem Fall kann entweder ein JavaScript-Objekt definiert werden, das sowohl die Model-, als auch die View-Eigenschaften festlegt. Oder es können jeweils zwei Objekte definiert werden, eines mit den Model-Eigenschaften und eines mit den View-Eigenschaften.

Controller

  • Tastatursteuerung

Die Steuerung der Schläger erfolgt über die Tastatur. Für jeden Tastendruck muss analysiert werden, welche der Tasten gedrückt (keydown) oder losgelassen (keyup) wurde. Wenn es sich um eine Taste handelt, die einem Spieler zugeordnet ist, muss der zugehörige Schläger (direkt oder indirekt über die Spiellogik) informiert werden, damit er die gewünschte Aktion (Bewegung nach oben starten, Bewegung nach unten starten, Bewegung stoppen) durchführt.

Spiellogik Die Spiellogik ist für die Verwaltung aller Spielzustände zuständig:

  • Starten und stoppen der Game Loop.
  • Positionieren und zufälliges Starten des Balls in der Mitte des Spielfelds zu Beginn einer jeden Runde.
  • Aktualisieren des Spielstandes und Start einer neuen Runde bzw. Beendigung des Spiels, sobald der Ball die Bühne verlässt.
  • Beenden des Spiels, sobald ein ein Spielpartner gewonnen hat.

{{{body}}}