AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Schwierigkeiten mit Game of Life Algorithmus
Thema durchsuchen
Ansicht
Themen-Optionen

Schwierigkeiten mit Game of Life Algorithmus

Ein Thema von fabiO · begonnen am 11. Dez 2005 · letzter Beitrag vom 12. Jan 2006
 
fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#8

Re: Schwierigkeiten mit Game of Life Algorithmus

  Alt 12. Dez 2005, 14:16
Danke für deine Antwort!
Es funktioniert nun, jedoch musste ich noch 2 extra if-Anweisungen mit einbinden, weil es nur mit deinem code immernoch das falsche ergebniss lieferte!
Ich habe nun folgendes stehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,k,n : Integer;
begin
  for i := 1 to high(alt) do
    for k := 1 to length(alt) do begin
      n := Nachbarn (i,k);
      if (alt[i,k] = 1) AND not (n in [2,3]) then
        neu[i,k] := 0
      else if (alt[i,k] = 1) AND (n in [2,3]) then
        neu[i,k] := 1;
      if (alt [i,k] = 0) AND (n = 3) then
        neu[i,k] := 1
      else if (alt [i,k] = 0) AND not (n = 3) then
        neu[i,k] := 0;
    end;

  einlesen;
  ausgeben;
end;
Jedoch besteht mein Problem mit den Randfeldern immernoch. Ich habe keine Vorstellung, wie ich Delphi sagen soll, dass wenn ein Feld den x-Wert oder y-Wert 1 oder 50, oder auch beides, hat, dass es dann beim überschreiten der Feldgrenzen auf die gegenüberliegende Seite wechseln soll.

Ich hatte mal folgendes probiert:

Delphi-Quellcode:
if (k = 1) then
    begin
      if alt[i+1,k] = 1 then inc(c);
      if alt[i+1,k+1] = 1 then inc(c);
      if alt[i,k+1] = 1 then inc(c);
      if alt[i-1,k+1] = 1 then inc(c);
      if alt[i-1,k] = 1 then inc(c);
      if alt[i-1,50] = 1 then inc(c);
      if alt[i,50] = 1 then inc(c);
      if alt[i+1,50] = 1 then inc(c);
    end;
Nur ist diese Variante ja nicht gerade sehr effizient, weil es einfach nur Zeile für Zeile aufgeschrieben wird, was man natürlich auch machen könnte

Wie Grishnak in seinem Post (#2) schon bemerkte:


Zitat von Grishnak:
Zu Randfeldern: (...) es gibt keine Randfelder, sondern das Feld ist umlaufend (z.B. die Nachbarn von [3;1] sind dann [2;50], [3;50], [4;50], [2;1], [4;1], [2;2], [3;2] und [4;2].
Nur wie mache ich das ? Wäre echt dankbar für einen effizienteren Denkanstoß als der Meinige

gruß fabiO
  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 07:03 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 by Thomas Breitkreuz