Die Platzierung der Schiffe kann so erfolgen:
- zufällige Orientierung festlegen (horizontal/vertikal)
- zufällige Start-Koordinaten festlegen
Für die Start-Koordinaten gibt es aber je nach Orientierung und Schiffsgröße Einschränkungen, die man schon im Vorfeld berücksichtigen kann:
- 4er Schiff horizontal
Code:
x => 1..[Spielfeldbreite]-[Schiffsgröße]+1
y => 1..[Spielfeldhöhe]
- 4er Schiff vertikal
Code:
x => 1..[Spielfeldbreite]
y => 1..[Spielfeldhöhe]-[Schiffsgröße]+1
Befinden sich jetzt schon Schiffe auf dem Spielfeld, so verringern sich auch die möglichen Felder für die Start-Koordinaten
- 3er Schiff horizontal
Hier hätte man jetzt folgende Möglichkeiten
- Ermitteln aller gültigen Start-Koordinaten und aus dieser Menge zufällig eine auswählen
- Ermitteln einer zufälligen Start-Koordinate wie gehabt und dann mit dem Spielfeld vergleichen, ob das Feld nicht belegt ist.
Das wird solange wiederholt, bis man das Schiff platzieren kann.
Wenn man das so betrachtet, dann könnte es Sinn machen, einen weiteren Feld-Status einzuführen
NearShip
und beim Platzieren des Schiffs diesen Status in alle Nachbarfelder zu schreiben. Dann wird auch die Prüfung wesentlich unkomplizierter.
Im Spiel selber wird der Status
NearShip
dann genauso behandelt wie
Water
.
Hier mal der interne Zustand des Spielfeldes nach 7 Schüssen
Legende