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
                        Delphi-Quelltext                    
           	 										| 1:
 | if (Cell[i, j] = voll) and (Cell[i, j+1] = leer) then "tu was"					 | 
		
	  
oder im Array:
		                     
             Delphi-Quelltext
                        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
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 14.01.2009 um 18:21gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!