Beste forumleden,
Ik ben bezig met een 'Game of Life' te programmeren. En ik heb het werkend! (yeah).
De display is een Drawgrid, de gebruiker kan zelf het aantal Cols,Rows selecteren en dit gaat tot 40 prima, 50 redelijk en vanaf 60 gaat het zichtbaar trager.
Ik denk dat het 'm erin zit dat de gehele grid gerepaint wordt. Ik heb al geprobeerd refresh of invalidate te gebruiken, maar dit maakt weinig verschil.
Zijn er wellicht snellere methodes om de nieuwe generatie in een Drawgrid te krijgen?
Ik haal de informatie nu uit een 2d array of integer (0= dode cel, 1 = levende cel).
OnDrawCell haalt de info uit de Array
Code:
procedure TForm.gridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
begin
case CurGen[ACol,ARow] of
0 : grid.Canvas.Brush.Color := ClWhite;
1 : grid.Canvas.Brush.Color := ClBlack;
end;
grid.Canvas.FillRect(grid.CellRect(ACol,ARow));
end;
Of....... zit het misschien in het assignen van de Array's? (Ik heb dus 2 2d array's, huidige generatie en volgende generatie)
Die worden in een for loop ge-assinged.
Code:
for i := 0 to grid.ColCount -1 do
for j := 0 to grid.RowCount -1 do
Curgen[i,j] := NextGen[i,j];
Tips en ideeën zijn welkom!
Bookmarks