336 Kapitel 8
Planungen für das Model
Das Model
Nachdem wir das View-Objekt fertiggestellt haben, können wir uns jetzt mit dem Model befassen. Das Model
verwaltet den Zustand des Spiels und enthält auch die nötige Logik für die Änderung der verschiedenen Zustände.
Hier besteht der Zustand aus den Positionen der Schiffe, aus den Positionen, an denen ein Schiff getroffen wurde,
sowie aus der Anzahl der versenkten Schiffe. Die einzige Logik wird (im Moment) gebraucht, um zu ermitteln, ob
der Rateversuch eines Spielers zu einem Treffer geführt hat, und um das Schiff mit einem Treffer zu markieren.
Das Model-Objekt wird ungefähr so aussehen:
Model
ships: Positionen und Treffer
der Schiffe.
shipsSunk: Anzahl der
versenkten Schiffe.
fire: Methode, um auf ein Schiff zu feuern und zu ermitteln, ob
der Schuss ein Treffer oder ein Fehlerversuch war.
Diese Eigenschaften
enthalten den
aktuellen Zustand des
Spiels.
Diese Methode ist für das Feuern
auf die Schiffe zuständig.
Ändert sich der Zustand des Spiels, etwa weil ein Schiff getroffen wurde, muss der View die Darstellung
entsprechend aktualisieren. Hierfür müssen Model und View miteinander kommunizieren. Glücklicherwei-
se gibt es ein paar Methoden, die das Model hierfür benutzen kann. Wir wollen zunächst die Spiellogik im
Model umsetzen und uns dann um die Aktualisierung des Views kümmern.
Die Zusammenarbeit zwischen Model und View
Model
View
Hallo View, du musst die
Darstellung aktualisieren. Der
Benutzer hat gerade ein Schiff
an Position »B0« getroffen.
view.displayHit(“10”)
Danke für den Tipp.
Die Darstellung wird
entsprechend angepasst.
Das Model unterrichtet den
View von einer Zustandsänderung.
Dadurch kann der View die
Darstellung aktualisieren.
numShips: Die Anzahl der
Schiffe im Spiel.
shipLength: Die Anzahl der
Positionen pro Schiff.
boardSize: Die Rastergröße für
das Spielfeld.
Sie sind hier 337
Die Einzelteile zusammenfügen
A
B
C
D
E
F
G
0 1 2 3 4 5 6
Schiff 3
Schiff 2
Schiff 1
Jedes Schiff beansprucht
drei Felder auf dem
2-D-Spielfeld.
Dieses Schiff befindet sich
auf den Feldern »B0«,
»C0« und »D0«.
Ein weiteres Schiff
liegt auf den Feldern
»D2« bis »D4«.
Außerdem müssen wir die
Treffer speichern. Jedes
Schiff braucht drei Felder.
Daher müssen wir auch drei
Treffer für jedes Schiff
speichern können.
Sie brauchen ein größeres Boot und Spielfeld
Bevor wir den Code für das Model schreiben, müssen wir uns überlegen, wie wir den
Zustand der Schiffe im Model abbilden können. In der einfachen Version des Spiels, in
Kapitel 2, gab es nur ein Schiff auf 1 x 7 Feldern. Jetzt sind die Dinge etwas komplexer:
Es gibt drei Schiffe auf einem Spielfeld mit 7 x 7 Feldern. Das sieht so aus:
Wie würden Sie die Schiffe anhand der obigen Beschreibung im Model
abbilden? (Zunächst einmal nur die Felder, über den Rest machen wir uns
später Gedanken.) Kreuzen Sie die beste Lösung unten an.
Verwende auf ähnliche Weise wie in Kapitel 2
neun Variablen für die Positionen der Schiffe.
Verwende ein Array mit einem Element für
jede Zelle des Spielfelds (insgesamt 49).
Speichere die Nummer des Schiffs in jeder
Zelle, auf der sich ein Teil des Schiffs befindet.
Verwende ein Array für alle neun Positionen.
Die Elemente 0 bis 2 enthalten das erste
Schiff, 3 bis 5 das zweite und so weiter.
Verwende für jedes Schiff ein eigenes Array, in
dem jeweils die drei Positionen eines Schiffs
gespeichert werden.
Erstelle für jedes Schiff ein Objekt, das
die Positionen auf dem Spielfeld in
entsprechenden Eigenschaften speichert.
Lege die drei Schiff-Objekte in einem Array
namens ships ab.
______________________________________
______________________________________
______________________________________
TREFFER!
Das dritte Schiff befindet sich
auf den Feldern »G3« bis »G5«.
Wie Sie sehen, gibt es zwischen
den Schiffen auf dem Spielfeld
keine Überschneidungen. Auf einem
physikalischen Spielbrett wäre das
unmöglich und würde zu einem
seltsamen Spielverhalten führen.
Später zeigen wir Ihnen, wie wir
dafür sorgen, dass sich die Schiffe
trotz einer zufälligen Verteilung
nicht überschneiden.
Oder schreiben Sie hier Ihre
eigene Antwort auf.
Spitzen Sie Ihren Bleistift

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.