Niestety, szukałem i nic złego nie znalazłem ;(. Może ktoś by się dopatrzył, oto kod:
unit silnik;
interface
type
TFieldType = 0..1;
TField = array[0..101,0..101] of TFieldType; // mapa zaczyna sie od 1, a konczy na 100. Wiekszy obszar zostal wprowadzony dla poprawnego dzialania programu
TCellNeighbours = record
map : array [1..3, 1..3] of TFieldType;
count : integer;
end;
TLife = class
private
FField : TField;
function CheckCell(CellX, CellY : integer; output : TCellNeighbours) : boolean;
function GetField : TField;
public
property Field : TField read GetField;
procedure CreateMap(generates : integer);
constructor Create;//(FirstGenerate : TField);
end;
implementation
function TLife.CheckCell(CellX, CellY : integer; output : TCellNeighbours) : boolean;
var
i, j: integer;
begin
result := false;
for i:=1 to 3 do for j:=1 to 3 do output.map[i,j] := 0;
if FField[CellX, CellY] = 0 then
begin
for j:=0 to 2 do
begin
for i:=0 to 2 do
begin
if FField[CellX+i-1, CellY+j-1] = 1 then
begin
inc(result);
output.map[i+1, j+1] := 1;
end;
end;
end;
result := true;
end;
end;
procedure TLife.CreateMap(generates : integer);
var
gen, i, j : integer;
output : TCellNeighbours;
map2 : TField;
begin
for i:=0 to 101 do for j:=0 to 101 do map2[i,j] := 0;
for gen:=1 to generates do
begin
for j:=1 to 100 do
begin
for i:=1 to 100 do
begin
checkCell(i,j,output);
if (FField[i,j]=0) and (output.count = 2) then map2[i,j] := 1
else if (FField[i,j]=1) and (output.count <> 2) then map2[i,j] := 0;
end;
end;
FField := map2;
end;
end;
function TLife.GetField : TField;
begin
result := FField;
end;
constructor TLife.Create;//FirstGenerate : TField);
var
i, j : integer;
m : TField;
begin
inherited;
for i:=0 to 101 do for j:=0 to 101 do m[i,j] := 0;
m[11,10] := 1;
m[12,11] := 1;
m[10,12] := 1;
m[11,12] := 1;
m[12,12] := 1;
FField := m;
//FField := FirstGenerate;
end;
end.
Opis funkcji, procedur i konstruktora:
CheckCell - zwraca ilość i położenie komórek sąsiadujących względem podanej komórki;
GetField - użyta do właściwości, podaje aktualną mapę;
CreateMap - tworzy x-te pokolenie z mapie FField i zapisuje je do niej;
Create - tworzy standardową mapę i zapisuje ją do FField.
Na marginesie podam, że chodzi o grę w życie. Kompletnie nie wiem co może być przyczyną...