Spielerwechsel in rundenbasierten Strategie Spielen

Ich bin gerade dabei ein kleines 2 Spieler Schiffeversenken zu entwickeln. Auch wenn das praktisch Schwachsinn ist, spielen beide Spieler (erstmal) am selben Rechner.
Grundsätzlich habe ich auch schon einen Plan davon, wie ich das ganze umsetzen will und mir zu den meißten Problemen, die auftreten könnten zumindest Gedanken gemacht. Womit ich ein noch Probleme habe ist der wechsel des Spielers, der am Zug ist. Wie das setzen der Schiffe auf das Spielfeld abläuft lasse ich ersteinmal außenvor.
Was noch zu erwähnen wäre ist, dass ich das Verfahren gerne auf mehr als 2 Spieler erweitern können würde. Mein nächstes Projekt soll in eine ähnliche Richtung gehen und ich würde gerne einige Elemente wiederverwenden.

Mein Ansatz sieht bisher wie folgt aus:

Ich habe 4 (für das Problem relevante) Klassen:

  • World: Die Spielwelt. Im Prinzip ein 2 Dimensionales Array, das Objekte der Klasse Field speichert. Es gibt 2 Objekte, für jedes Feld eins.
  • Field: Enthält Informationen darüber, ob sich auf einem Feld ein Schiff befindet und ob es beschossen wurde. Außerdem noch ein paar andere Informationen um das ganze auch hübsch ausgeben zu können.
  • Player: Verwaltet Informationen zum Spieler. 2 Objekte, für jeden Spieler eins.
  • Game: Hier läuft der Gameloop, initialisierungen finden statt und noch ein paar andere Dinge. Kurz gesagt: Hier laufen alle Fäden zusammen. Es gibt nur ein Objekt.

Sobald ein Spieler auf ein Feld klickt (schießt), wird unabhängig davon ob der Spieler auch dran ist in World eine Methode aufgerufen. Übergeben wird die Position des beschossenen Feldes. Es wird dabei davon ausgegangen, dass Spieler nicht auf ihr eigenes Feld schießen. Wird also auf das Feld von Spieler1 geklickt, wird davon ausgegangen, dass diese Aktion von Spieler2 ausgeführt wurde.

World fragt darauf hin Game, ob der Spieler auch dran ist. Game bestitzt ein Attribut, das immer auf das Spieler Objekt des Spieler zeigt, der gerade am Zug ist.

[INDENT]>>Ist der Spieler tatsächlich an der Reihe wird der Zug ausgeführt. World verändert das entsprechende Field. Anschließend wird das Attribut in Game, das auf den Spieler am Zug zeigt auf den nächsten Spieler gesetzt. Game verwaltet dazu alle Spieler Objekte in einer Liste.

Ist der Spieler nicht an der Reihe, endet die Methode in World ohne das etwas passiert.[/INDENT]


Soweit meine ersten Überlegungen. Mir gefällt das so aber noch nicht. Besonders damit, dass das Zug-Attribut am Ende jedes Zuges um einen Spieler weiter gesetzt wird, habe ich meine Probleme.
Gibt es eine Standart Lösung für solche Situationen? Oder hat jemand schonmal etwas ähnliches programmiert und würde mir verraten wie er das Problem gelöst hat?

Gruß, Gnoccy

naja, dein game? modell? wie auch immer hält den aktuell aktiven Spieler, das wär´s dann auch schon. Hat Sp. 1 seinen Zug erfolgreich beendet, ist der nächste drann und wird demnach im game oder wo auch immer gesetzt.
Oft geht das mit der Prüfung, ob gewonnen oder verloren einher.

Gruß Vanny

Jub sieht soweit (da ja an einem Rechner) von der Idee für den Anfang gar nicht schlecht aus.

Zwecks welcher Spieler dran ist, die Spielervariable in deinem World oder wo auch immer plus eins am ende eines Erfolgreichem Zug (Siegescheck) und wenn es die max nummer erreicht hat, wieder auf 1 bzw Informatiker-like 0.

if (spieler > spielerAnzahl){
   spieler = 1;
}  ```

dieser spieler kann dann der Index deines Spielers in einer Liste, Array, ... sein, in dem du alle Spieler speicherst.

sonntag