Meine Varianten wären:
a) ein zweidimensionales Array, -> dann sind die nachbarn von zelle x,y eben (x+1, y), (x-1, y), (x, y+1), (x, y-1) mit den Werten jeweils modulo dem Maximalwert in der entsprechenden Richtung, das vorher auszurechnen ist Quatsch, das bisschen Rechnerei erledigt ein Prozessor heutzutage nebenbei. Den Maximalwert legst du halt in deiner World-Klasse bei der Initialisierung ab.
b) überhaupt kein Array, sondern ein Graph von Objekten. Jedes Objekt kennt seine Nachbarn (sprich hat eine Referenz auf Sie, abgelegt in Properties oder in einem Array) und das wars. Da musst du dir halt beim Initialisieren merken, welche Objekte ihre Nachbarn noch nicht vollständig kennen und die am Ende entsprechen setzen.
Je nachdem was du hinterher damit machen willst, ist eben die eine oder die andere Variante schöner.
Ansonsten: Schau dir doch mal eine der zigtausen GameOfLife Implementierungen an. Da wird vermutlich auch eine dabei sein, die einen Torus verwendet.
Ein anderer Kommentar: nur weil etwas ein C-Array benutzt heisst das noch lange nicht, dass es kein schönes Objective-C sei. Nicht für alle Problemstellungen sind Objekte eine gute Lösung. In vielen Objekt-orientierten Sprachen hat man leider nur Objekte, weshalb alle möglichen Probleme in Objektform gegossen werden. Aber merke: "Wenn du nur einen Hammer besitzt, sieht alles aus wie ein Nagel." Objective-C erlaubt uns zum Glück auch die ganz klassische Imperative Programmierung zu verwenden.
a) ein zweidimensionales Array, -> dann sind die nachbarn von zelle x,y eben (x+1, y), (x-1, y), (x, y+1), (x, y-1) mit den Werten jeweils modulo dem Maximalwert in der entsprechenden Richtung, das vorher auszurechnen ist Quatsch, das bisschen Rechnerei erledigt ein Prozessor heutzutage nebenbei. Den Maximalwert legst du halt in deiner World-Klasse bei der Initialisierung ab.
b) überhaupt kein Array, sondern ein Graph von Objekten. Jedes Objekt kennt seine Nachbarn (sprich hat eine Referenz auf Sie, abgelegt in Properties oder in einem Array) und das wars. Da musst du dir halt beim Initialisieren merken, welche Objekte ihre Nachbarn noch nicht vollständig kennen und die am Ende entsprechen setzen.
Je nachdem was du hinterher damit machen willst, ist eben die eine oder die andere Variante schöner.
Ansonsten: Schau dir doch mal eine der zigtausen GameOfLife Implementierungen an. Da wird vermutlich auch eine dabei sein, die einen Torus verwendet.
Ein anderer Kommentar: nur weil etwas ein C-Array benutzt heisst das noch lange nicht, dass es kein schönes Objective-C sei. Nicht für alle Problemstellungen sind Objekte eine gute Lösung. In vielen Objekt-orientierten Sprachen hat man leider nur Objekte, weshalb alle möglichen Probleme in Objektform gegossen werden. Aber merke: "Wenn du nur einen Hammer besitzt, sieht alles aus wie ein Nagel." Objective-C erlaubt uns zum Glück auch die ganz klassische Imperative Programmierung zu verwenden.