Deine Funktion zum Zählen der Nachbarn ist doch fast schon perfekt, nur musst Du eben dafür sorgen, das nur legale Felder gezählt werden. Du kannst dazu aber der Einfachheit halber dein Feld etwas größer machen und die zusätzlichen Randfelder einfach leer lassen:
Delphi-Quellcode:
Var
LifeWelt : Array [-1..51,-1..51] Of Integer; // bzw. Byte, reicht ja
So, nun zur Routine, die die nächste Generation ausrechnet. Ob eine Zelle stirbt oder geboren wird, hängt eindeutig von der Anzahl der Nachbarn ab, also mach es doch so:
Delphi-Quellcode:
For i:=0 to 50 do
For j := 0 to 50 do
Case Nachbarn (i,j) of
2 : // Zwei Nachbarn: Die Zelle überlebt
If alt[i,j]=1 then neu[i,j] := 1 else neu[i,j]:=0;
3 : // Drei Nachbarn: Die Zelle überlebt bzw. wird neu geboren, also...
neu[i,j] := 1; // lebt sie jetzt in jedem Fall
else
neu[i,j] := 0; // Alle anderen Fälle...
End;