Клеточный автомат «Жизнь» — доделать немного

Клеточный автомат "Жизнь" - доделать немного
Помогите пожалуйста с прогой.
Условие: Жизнь - это сообщество конвиков, что населяют определенные острова. Каждый такой остров состоит из прямоугольник участков.
Участок может иметь хозяина - конвика. С течением времени происходит смерть и рождение конвіків, то есть переменная поколений.
Новое поколение получается из предыдущего по таким правилам:
1) ВЫЖИВАНИЕ ИЛИ ГИБЕЛЬ.Если живая клетка имеет меньше 2 или более 3 соседей в окрестности из 8 клеток то в следующем поколении она умирает (моделирование реальных условий - недостатка питания или перенаселенности), в противном случае она выживает;
2) РОЖДЕНИЕ. В пустой клетке появляется живая клетка, если у исходной клетки ровно 3 соседа.
Гибель и рождение всех организмов происходит одновременно.

Не знаю как организовать процедуру поколений
Помогите, я просто дальше не врублюсь...
Код:
Program AutoLife;
Uses crt;
Const Line=10; Column=10;
Type Matrix=Array[1..Line,1..Column] of integer;
Var Life,LifeTmp:Matrix; N:byte;

Procedure NullMatrix(Var A:Matrix); {создания матрицы клеточного автомата}
var i,j:integer;
begin
For i:=1 to Line do Begin
For j:=1 to Column do Begin
A[i,j]:=0; {заполнения матрицы нолями}
write(A[i,j],' ');
end;
writeln;
end;
end;

Procedure Input_Komviks(Var A:Matrix; K:byte); {ввод конвиков}
var i,j:integer; all:longint;
begin
repeat
write('Введите кол-во конвиков [1..100]: '); readln(K);
if ((K<1) or (K>100)) then Begin
writeln('В не верно задали кол-во конвиков');
writeln('Введите еще раз...');
readkey;
end;
until ((K>0) and (K<101));
randomize;
For all:=1 to K do Begin
i:=random(9)+1; {загадываем случайным способом координаторы по строкам}
j:=random(9)+1; {загадываем случайным способом координаторы по столбцам}
A[i,j]:=1;
end;
end;

Procedure Output_Life(Var A:Matrix); {вывод матрицы}
var i,j:integer; A1:Matrix;
begin
For i:=1 to Line do Begin
For j:=1 to Column do Begin
write(A[i,j],' ');
end;
writeln;
end;
end;

Procedure NewLife(Var A,A1:Matrix; K:byte); {новое поколение}
var i,j,all,count:integer;
begin
writeln;
For i:=1 to Line do Begin
For j:=1 to Column do Begin
if ((i>0) and (j>0)) then Begin
if ((i-1>0) and (j-1>0)) then A1[i,j]:=1;
if ((i+1>0) and (j+1>0)) then A1[i,j]:=1;
end else A1[i,j]:=0;
end;
end;
end;

Begin
clrscr;
NullMatrix(Life);
Input_Komviks (Life,N);
Output_Life(Life);
NewLife(Life,LifeTmp,N);
readkey;
End.

  • честно разбиратся во всем нагромаждение кода лень
    принцип должен быть такой
    1. сформировать список смертников
    2. сформировать список рождающих
    3 сформировать список свободных мест
    4 убрать смертников
    5. расселить новых