In dieser Methode kannst du dich schon mal recht lange aufhalten:
Delphi-Quellcode:
procedure Bewegen(var Objekt: TLebensform);
var i: integer;
begin
repeat
case random(3) of
0: Objekt.ix := Objekt.ix - 1;
1: Objekt.ix := Objekt.ix;
2: Objekt.ix := Objekt.ix + 1;
end;
until Objekt.ix > 1;
repeat
case random(3) of
0: Objekt.iy := Objekt.iy - 1;
1: Objekt.iy := Objekt.iy;
2: Objekt.iy := Objekt.iy + 1;
end;
until Objekt.iy > 1;
end;
Nehmen wir mal an, ix ist am Anfang 1 (passiert dann, wenn der Elternteil auf 2 sitzt) und der erste Aufruf von Random(3) gibt 0 zurück, dann kann es recht lange dauern, bis ix > 1 wird. Wenn das Ganze erstmal ins Negative abdriftet, brauchst du schon eine ganze Menge 2er Ergebnisse um über 1 zu kommen, denn jede 0 zieht dich wieder zurück. Da du eh nur Werte > 1 akzeptierst, kannst due das Ganze auch direkt nach unten begrenzen anstatt das dem Zufallsgenerator zu überlassen.
Delphi-Quellcode:
procedure Bewegen(var Objekt: TLebensform);
begin
case random(3) of
0: Objekt.ix := Objekt.ix - 1;
1: Objekt.ix := Objekt.ix;
2: Objekt.ix := Objekt.ix + 1;
end;
if Object.ix < 2 then Object.ix := 2;
case random(3) of
0: Objekt.iy := Objekt.iy - 1;
1: Objekt.iy := Objekt.iy;
2: Objekt.iy := Objekt.iy + 1;
end;
if Object.iy < 2 then Object.iy := 2;
end;
Nebenbei, was ist eigentlich mit den oberen Schranken?
Ein weiterer Geschwindigkeitsvorteil läßt sich herausholen, wenn du die Sequenz
Delphi-Quellcode:
SetLength(LebenTemp,Length(Lebensform1));
for iIndex := 0 to Length(LebenTemp)-1 do
begin
LebenTemp[iIndex].ix := Lebensform1[iIndex].ix;
LebenTemp[iIndex].iy := Lebensform1[iIndex].iy;
LebenTemp[iIndex].iNahrung := Lebensform1[iIndex].iNahrung;
LebenTemp[iIndex].iWasser := Lebensform1[iIndex].iWasser;
LebenTemp[iIndex].iSchwanger := Lebensform1[iIndex].iSchwanger;
LebenTemp[iIndex].bFortpflanzen := Lebensform1[iIndex].bFortpflanzen;
end;
SetLength(Lebensform1, Length(LebenTemp)+8);
for iIndex := 0 to Length(LebenTemp)-1 do
begin
Lebensform1[iIndex].ix := LebenTemp[iIndex].ix;
Lebensform1[iIndex].iy := LebenTemp[iIndex].iy;
Lebensform1[iIndex].iNahrung := LebenTemp[iIndex].iNahrung;
Lebensform1[iIndex].iWasser := LebenTemp[iIndex].iWasser;
Lebensform1[iIndex].iSchwanger := LebenTemp[iIndex].iSchwanger;
Lebensform1[iIndex].bFortpflanzen := LebenTemp[iIndex].bFortpflanzen;
end;
iIndez := 0;
durch folgendes ersetzt:
Delphi-Quellcode:
iIndez := Length(Lebensform1);
SetLength(Lebensform1, iIndez + 8);
Allerdings wird dir das Ganze irgendwann auch nichts mehr nützen, da bei entsprechend vielen Lebensformen der Berechnungsuafwand halt immer größer wird und auch mehr Zeit beansprucht. In dem Fall muss das Simulationsintervall Wohl oder Übel erhöht werden.