Hallo!
Ich möchte also ein
Game of
Life programmieren. Dazu brauche und habe ich ein Array of Integer und ein Board (in meinem Fall ein StringGrid).
Bisher habe ich nur das:
www.delphi-forum.de/...ighlight=game+++life
... und die wenig effiziente Vorgangsweise, das Ganze im StringGrid1DrawCell anzeigen zu lassen. Das ist langsam, und wenn es erst etwas "können" soll - wenn also Regeln definiert sind - und alles samt den stetigen Änderungen jedesmal komplett neu gezeichnet werden muss, dann kannst du, während das Programm läuft, im Park spazieren gehen.
Ich brauche also eine Möglichkeit, auf eine Zelle des StringGrids per Rect zuzugreifen, so, wie es im StringGrid1DrawCell passiert, nur eben nicht dort, damit ich die Änderungen - und immer dur diese - neu zeichnen kann. Also in der Weise:
Delphi-Quelltext
1:
| if (Cell[i, j] = voll) and (Cell[i, j+1] = leer) then "tu was" |
oder im Array:
Delphi-Quelltext
1:
| if (Board[i, j] = voll) and (Board[i, j+1] = leer) then "zeig das im StringGrid an" |
Hier der Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| const leer = 0; voll = 1; col = 150; row = 150;
var Form1: TForm1; Board: array [0..col-1, 0..row-1] of Integer;
procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; begin for i := 0 to col do for j := 0 to row do if Random(25) = 0 then Board[i, j] := voll else Board[i, j] := leer;
StringGrid1.Refresh; end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var i, j: Integer; begin for i := 0 to col do for j := 0 to row do if Board[i, j] = voll then with TStringGrid(Sender).Canvas do begin if (ACol = i) and (ARow = j) then begin Brush.Color := clRed; FillRect(Rect); end; end; end; |
Wie geht das?
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 14.01.2009 um 18:21
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!