Game of Life "unendlichkeits" Problem

qdoi123

Mitglied
Ich habe das Spiel "Game of Life" graphisch nach programmiert, bin aber auf eine kleine Hürde gestoßen.
Die Zellen habe ich in ein zweidimensionales Array gespeichert, dabei wird jede Zelle einzeln auf die Anzahl der lebenden Nachbarn überprüft. Das Problem sind aber die Randzellen. Wenn ich von der Zelle [0][0] die Nachbarn überprüfe (also [-1][0]), [1][0],[0][-1],...,) dann stellt sich die Frage. Was mache ich mit den Zellen die es nicht gibt. Also die mit einem Negativen Index. Bis jetzt habe ich mit einer if Abfrage verhindert, dass eine Zelle mit negativem Index
ausgewählt werden kann. Das Problem dabei ist, dass der Rand dann einfach als permanent tote Zellen gesehen wird.

Beim Game of Life müsste es aber theoretisch ein Unendlich großes "Spielfeld" geben. Für mich ergeben sich nun 3 möglichkeiten:
1.Einen toten Rand lassen, was aber das Endergebnis verfälscht.
2. Das Spielfeld Torusförmig darstellen, sprich was unten rausgeht kommt oben wieder rein
3. Das Spielfeld sehr viel größer initialisieren, aber nur einen Teil davon anzeigen um eine Unendlichkeit vorzutäuschen.

Was wäre die eleganteste Lösung für soetwas?

Ein Beispiel: Ein Gleiter der auf den Rand trifft wird bei 1. einfach zerstört und es entsteht irgendetwas daraus, bei 2. würder er an der anderen Seite wieder reinkommen und bei 3. würde er verschwinden, zwar noch da existieren(bis er auf den Rand des nicht sichtbaren trifft), aber nicht mehr Sichtbar sein.

Hat vielleicht jemand eine Idee wie ich das realisieren könnte?
 

stg

Top Contributor
"die eleganteste Lösung" gibt es nicht. Die Ansätze 1+2 sind beide in Ordnung, 3 ist im Grunde das gleiche wie 1. Alternativ könntest du auch, sobald sich etwas dem Rand nähert, in diese Richtung weiteren Speicher anfordern und das Spielfeld damit vergrößern.
Aber gegen 1+2 ist wie gesagt bereits nichts auszusetzen. Man sollte nur erwähnen, was man macht :)
 

qdoi123

Mitglied
Also das einfachste wäre aufjedenfall Methode 1. Das muss ich dann aber wo erwähnen, dass das nicht ganz dem Original entspricht.
Mich würde ja interessieren wie das andere gelöst haben...
 

stg

Top Contributor
Ich find ja Variante 2 noch viel einfacher...

Und natürlich entspricht das nicht "ganz dem Original". Wie denn auch? Gängige und sinnvolle Lösungsansätze sind genau die hier bereits erwähnten. Da wirst du auch keine weitere gescheite Antwort mehr drauf bekommen können.
 

Ähnliche Java Themen

Neue Themen


Oben