AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei einer Simulation

Ein Thema von BAMatze · begonnen am 1. Jan 2009 · letzter Beitrag vom 3. Jan 2009
 
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.782 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Hilfe bei einer Simulation

  Alt 1. Jan 2009, 09:50
Guten Morgen und ein frohes neues Jahr.

Ich habe mir mal Deinen Code angeschaut.

Dies ist aus der Procedure Leben_versetzen.

Delphi-Quellcode:
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;
Wenn Du dir das einmal genauer anschaust, wirst Du wahrscheinlich
auch feststellen, dass die letzten 8 Werte des Arrays Lebensform1 nicht initialisiert
werden.
In den .ix und .iy Feldern stehen irgendwelche undefinierten Werte und das
führt zu Problemen in der Procedure
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;
Wenn da sehr große negative Werte für ix und iy stehen
kann es eine Zeit lang brauchen bis .ix und .iy größer als 1 sind.

Wenn dann Dein Timer immer noch Problem machen sollte,
kannst Du ihn ja während der Berechnung uns Zeichnung deaktivieren.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  (sender as TTimer).Enabled:=false;
  Lebensform_versetzen;
  Welt_aendern;
  Weltzeichnen;
  Bildzeichnen;
  TreeView_anpassen;
  (sender as TTimer).Enabled:=true;
end;
.. und noch ein Nachtrag.

Wenn Du Deine Unterprogramme zu Methoden Deiner Form machst.
Dann kannst Du dir Konstrukte wie diese:
Delphi-Quellcode:
procedure TreeView_anpassen;
var i: integer;
begin
  Form1.TreeView1.Items.Clear;
  for i:= 0 to Length(Lebensform1)-1 do
    begin
      Form1.Treeview1.Items.Add(nil,'Lebensform ' + inttostr(i+1));
      Form1.Treeview1.Items.Add(nil,'X = ' + inttostr(Lebensform1[i].ix));
      Form1.Treeview1.Items.Add(nil,'Y = ' + inttostr(Lebensform1[i].iy));
      Form1.Treeview1.Items.Add(nil,'Nahrung = ' + inttostr(Lebensform1[i].iNahrung));
      Form1.Treeview1.Items.Add(nil,'Wasser = ' + inttostr(Lebensform1[i].iWasser));
    end;

  Form1.Treeview1.Items.Add(nil,'FeldWasser ' + inttostr(Welt[0,0].iWasser));
  Form1.Treeview1.Items.Add(nil,'FeldNahrung ' + inttostr(Welt[0,0].iNahrung));

end;
Würde dann so aussehen:

Delphi-Quellcode:
procedure TForm1.TreeView_anpassen;
var i: integer;
begin
  TreeView1.Items.Clear;
  for i:= 0 to Length(Lebensform1)-1 do
    begin
      Treeview1.Items.Add(nil,'Lebensform ' + inttostr(i+1));
      Treeview1.Items.Add(nil,'X = ' + inttostr(Lebensform1[i].ix));
      Treeview1.Items.Add(nil,'Y = ' + inttostr(Lebensform1[i].iy));
      Treeview1.Items.Add(nil,'Nahrung = ' + inttostr(Lebensform1[i].iNahrung));
      Treeview1.Items.Add(nil,'Wasser = ' + inttostr(Lebensform1[i].iWasser));
    end;

  Treeview1.Items.Add(nil,'FeldWasser ' + inttostr(Welt[0,0].iWasser));
  Treeview1.Items.Add(nil,'FeldNahrung ' + inttostr(Welt[0,0].iNahrung));

end;
.. und hat den Vorteil, wenn Du das Formular mal umbenennst
von Form1 nach Simulation o.ä. Du im QuellCode
nicht mehr allzuviel ändern mußt.



Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz