Registriert seit: 28. Feb 2006
7 Beiträge
Delphi 7 Enterprise
|
Re: Spiel des Lebens; mal wieder
2. Mär 2006, 12:46
So, ich bin zwar ein Stück weiter, aber ich komm einfach nicht mit der Konvertierung vom stringgrid in das char-feld klar. mein prog. startet zwar, aber sobald ich die zweite generation generieren lassen möchte, stürzt es ab.
Hat jemand einen hilfreichen Tipp oder konstruktive Kritik bzw ne Idee, wie ich das umsetzen könnte. Wär super, wenn sich jemand mal meinen anscheinend verkorksten Quelltext zu Gemüte ziehen würde:
Delphi-Quellcode:
var
Lebensraumsimulator: TLebensraumsimulator;
p,s,an,n :integer; //p=eingegebene Anfagszahl Individuen, s=Seitenlänge des Grids, n=Nachbar, an=Anzahl Nachbarn
l:ARRAY of ARRAY of char;
implementation
{$R *.DFM}
Function Feldcheck(x,y:integer):integer;
VAR x2,y2 :integer;
BEGIN
an:=0;
begin
For x2:=x-1 to x+1 do
For y2:=y-1 to y+1 do
If not (x2=x) and (y2=y) then
If (x2>=0) and (x2<s) and (y2>=0) and (y2<s) then
If l[x2,y2]='*' Then inc(an);
end;
result:=an;
END;
PROCEDURE Evolution;
VAR x,y,x3,y3 :integer;
BEGIN
For x:=0 to s-1 Do
For y:=0 to s-1 Do
n:=Feldcheck(x,y);
If l[x,y]='*' Then Begin
If n=2 or 3 Then l[x3,y3]:='*'
Else l[x3,y3]:='t';
End;
If l[x,y]='t' Then Begin
If n=3 Then l[x3,y3]:='*'
Else l[x3,y3]:='t';
End;
END;
PROCEDURE Ausgabe; //Das Array mit x3 und y3 soll die Werte zwischenspeichern, hab ich mir zumindest so gedacht
VAR x,y,x3,y3:integer;
BEGIN
For x:=0 to s-1 do
For y:=0 to s-1 do
If l[x3,y3]='*' Then
Lebensraumsimulator.Stringgrid1.Cells[x,y]:='*'
Else Lebensraumsimulator.Stringgrid1.Cells[x,y]:='';
END;
procedure TLebensraumsimulator.Button5Click(Sender: TObject); //Klick "Weiter"
var x,y:integer;
begin
Button2.visible:=false;
Button3.visible:=false;
g:=g+1;
Label5.Caption:=IntToStr(g);
for x:=0 to s-1 do
for y:=0 to s-1 do
If Stringgrid1.Cells[x,y]='*' Then l[x,y]:='*' //Bei Einzelablauf erscheint an genau dieser Stelle die Fehlermeldung, Warum?
Else l[x,y]:='t';
Evolution;
Ausgabe;
end;
Schon mal im Vorraus THX
|
|
Zitat
|