364 Kapitel 8
Methoden zum Platzieren der Schiffe
Die Schiffe richtig platzieren
Bei der Platzierung der Schiffe auf dem Spielfeld gibt es zwei Dinge zu beachten. Zum
einen können die Schiffe vertikal oder horizontal ausgerichtet werden. Zum anderen dürfen
sich die Schiffe auf dem Spielfeld nicht überschneiden. Der größte Teil des Codes, den wir
schreiben, kümmert sich um diese Situationen. Wie gesagt, wir werden nicht auf jedes kleine
Detail des Codes eingehen. Es gibt nichts, was Sie nicht schon in diesem Buch gesehen
haben (bis auf eine Ausnahme, die wir Ihnen natürlich erklären werden). Dann mal los …
Wir teilen den Code in drei Methoden auf, die wir als Teil des Model-Objekts definieren:
generateShipLocations: function() {
var locations;
for (var i = 0; i < this.numShips; i++) {
do {
locations = this.generateShip();
} while (this.collision(locations));
this.ships[i].locations = locations;
}
},
Die generateShipLocations-Methode
Für jedes Schiff, das eine
Position bekommen soll …
… erstellen wir einen neuen Satz an Positionen …
… und überprüfen, ob sie sich mit
existierenden Schiffspositionen
überschneiden. In diesem Fall wird ein
neuer Versuch unternommen. Es werden
so lange neue Positionen erzeugt, bis es
keine Überschneidung mehr gibt.
Sobald wir alle Positionen haben, weisen
wir sie der Eigenschaft locations für das
betreffende Schiff im Array model.ships zu.
Hier benutzen
wir eine do
while-Schleife!
generateShipLocations: Dies ist die Master-Methode. Sie erzeugt für Sie im
Model anhand der Zahl der Schiffe (aus numShips) das ships-Array.
generateShip: Diese Methode erzeugt irgendwo auf dem Spielfeld ein einzelnes
Schiff. Die Positionen können sich möglicherweise überschneiden.
collision: Diese Methode übernimmt ein Schiff und stellt sicher, dass es sich nicht
mit einem bereits auf dem Spielfeld befindlichen Schiff überschneidet.
Wir beginnen mit der Methode
generateShipLocations. Anhand einer Schleife erzeugt sie so
lange neue Schiffe, bis das ships-Array im Model mit genug Schiffen gefüllt ist. Jedes Mal, wenn
(mithilfe der generateShip-Methode) ein neues Schiff erzeugt wird, verwendet sie die Methode
collision, um sicherzustellen, dass es keine Kollisionen gibt. Bei einer Überschneidung wird das
Schiff verworfen und ein neues erzeugt.
In diesem Code verwenden wir übrigens einen neuen Iterator, die do while-Schleife. Sie funktioniert
genau wie while, jedoch bis auf einen kleinen Unterschied: Die Anweisung im Schleifenkörper wird
hier zuerst ausgeführt, erst dann wird die Bedingung überprüft. Unter manchen logischen Umständen
kann es – wenn auch selten – sinnvoller sein, do while anstelle von while zu verwenden.
Diese Methode bauen wir in das Model-Objekt ein.

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.