Autor Beitrag
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Do 12.03.15 23:34 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 for y := 0 to N-1 do
       for x := 0 to N-1 do begin
           snr := x +y *N +1// Nr. des Shapes berechnen
           Shape := TShape(FindComponent('Shape' +IntToStr(snr))); // Komponente suchen
           if (feld[x,y]) then
              shape.brush.color := clblack
           else
             shape.brush.color := clwhite;


so, da hätt ich auch selbst drauf kommen könne :P

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.03.15 23:36 
Moin!

Top, genau so! :zustimm:

Dann gehen wir mal an den Kern der Sache: das eigentliche Spiel. 8) Könntest du mal kurz die Regeln zusammenfassen, nach denen bestimmt wird, wie eine neue Generation berechnet wird (ruhig in Umgangssprache, das übersetzen wir dann nach und nach in Code)? :les:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Do 12.03.15 23:40 
conways regeln besagen glaub ich, dass eine schwarze zelle weiß wird , wenn sie 0,1,4,5,6,7,8 nachbarn hat, es passiert nihts mit einer zelle, wenn sie zwei nachbarn hat und eine weiße zelle wird schwarz, wenn sie 3 nachbarn hat
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.03.15 23:43 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
conways regeln besagen glaub ich
Glaub ich oder weiß ich? :gruebel: :zwinker: Das dumme ist, Computer wollen immer alles ganz genau haben (so wie Lehrer :lol:), also kann ich dir das nicht ersparen:

Schreib mal bitte getrennt auf, welche Bedingungen zu einer neuen schwarzen, und welche zu einer neuen weißen Zelle führen (diesmal aber bitte mit dem Attribut "wissen", nicht glauben... 8)).

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Do 12.03.15 23:48 
ich weiß, dass es folgendermaßen ist:
weiß --> schwarz bei 3 Nachbarn
schwarz --> weiß bei 0,1,4,5,6,7,8 Nachbarn
keine Änderung bei 2 Nachbarn
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.03.15 23:50 
Moin!

Und was ist mit 3 Nachbarn bei schwarzen Zellen? :lupe:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Do 12.03.15 23:54 
die bleibt doch schwarz oder nicht?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.03.15 23:58 
Moin!

Ja, aber du hast es nicht in deiner Liste erwähnt. :nixweiss: (zur Erinnerung: Computer :arrow: ganz genau aufschreiben) ;)

OK, nächster Schritt: Verändere bitte die Aufzählung so, dass nur berücksichtigt wird, wie schwarze Zellen in der neuen Generation entstehen (also die Regeln formulieren, die schwarze Zellen zur Folge haben [egal ob neue oder "alte"]). Wenn etwas nicht erwähnt wird, wird die Zelle eben automatisch weiß. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Fr 13.03.15 00:01 
eine Zelle wird schwarz, wenn sie 2 nachbarn haben oder schwarz sind und drei nachbarn haben
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 13.03.15 00:04 
Moin!

Hm, OK, hab die Frage doof formuliert, ich fasse es nochmal zusammen:
ausblenden Quelltext
1:
2:
3:
4:
alt     | neu
---------------------------------------
weiß    | 3 Nachbarn? -> schwarz
schwarz | 2 oder 3 Nachbarn? -> schwarz

Kommt das hin oder nicht? :lupe:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Fr 13.03.15 00:08 
ja, das stimmt so
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 13.03.15 00:15 
Moin!

Gut, weiter geht´s.

Wir brauchen eine Art "Schmierzettel" bei der Berechnung der neuen Generation, wir müssen uns ja die Farbe der neuen Zellen "woanders" merken, damit wir die Rechenergebnisse der umliegenden Zellen nicht verfälschen. :idea:

Dann formulieren wir mal in Pseudo-Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
für alle Zellen im Feld
  wenn die alte Zelle weiß ist
    wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 3 ist
      neue Zelle schwarz machen
    sonst
      neue Zelle weiß machen
  sonst (die alte Zelle ist dann logischerweise schwarz)
    wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 2 oder 3 ist
      neue Zelle schwarz machen
    sonst
      neue Zelle weiß machen

Kannst du mir folgen? Entspricht dieses Vorgehen den gerade in der Tabelle aufgestellten Regeln?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Fr 13.03.15 00:17 
ja, soweit versteh ich es noch und es stimmt mit der tabelle auch überein
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 13.03.15 00:24 
Moin!

Gut, dann hast du sicher bemerkt, dass wir da eine Funktion verwenden, nämlich das "Anzahl der schwarzen Nachbarn"-Dings. ;) Das lassen wir auch mal so und kümmern uns später darum, dass diese Funktion das tut, was sie soll. Deshalb fügen wir in den Code nur eine leere Hülse ein (damit man es trotzdem schon kompilieren kann, obwohl es nicht tut, was es soll):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  TForm1 = class(TForm)
    Shape1: TShape;
    ...
  public
    Feld: TFeld; // das ist der interne Speicher für die Zellen (=Shapes in der GUI)
    function AnzahlLebenderNachbarn(const x, y: Integer): Integer;
  end;
...

function TForm1.AnzahlLebenderNachbarn(const x, y: Integer): Integer;
begin
  Result := 0// das ist natürlich Blödsinn
end;


Jetzt fehlt dir noch der "Schmierzettel". ;) Dazu legen wir einen neuen Button "btnRechnen" auf das Formular. In dessen Ereignishandler schreiben wir:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.btnRechnenClick(Sender: TObject);
  var
    FeldNeu: TFeld; // der "Schmierzettel", wird genauso benutzt, wie das andere Feld
begin
  // hier kommt jetzt dein Versuch einer Übersetzung des Pseudo-Codes rein
end;

Auf geht´s! :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Sa 14.03.15 16:11 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var x, y, snr: Integer;

    feldneu : tfeld;
    Shape: TShape;
begin
     for y := 0 to N-1 do
         for x := 0 to N-1 do begin
       snr := x +y *N +1// Nr. des Shapes berechnen
       Shape := TShape(FindComponent('Shape' +IntToStr(snr))); // Komponente suchen
      if not (feldneu[x,y]) then begin
         if   wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 3 ist
              then (Shape.Brush.Color = clBlack)
              else (Shape.Brush.Color = clWhite) end;
         else if  wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 2 oder 3 ist
      neue Zelle schwarz machen
              then (Shape.Brush.Color = clblack)
              else (Shape.Brush.Color = clwhite);

  end;

end;


soweit habe ich es hinbekommen, aber jetzt weiß ich nicht mehr weiter

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 14.03.15 17:45 
Moin!

Hast du die (Dummy-)Funktion AnzahlLebenderNachbarn() wie oben beschrieben in deinen Code übernommen?

Man ruft eine Funktion einfach über ihren Namen auf, also wird aus:
ausblenden Delphi-Quelltext
1:
if   wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 3 ist					
dann
ausblenden Delphi-Quelltext
1:
if (AnzahlLebenderNachbar(x, y) = 3then					

Schau mal, ob du damit weiter kommst. :idea: Zumindest solltest du es dann kompilieren können.

Hinweis: Das ist natürlich noch nicht fertig, sondern nur ein Zwischenschritt, weil wir ja noch diese Funktion mit dem "echten Inhalt" füllen müssen, aber eins nach dem anderen. ;)

cu
Narses

PS: Und schau doch bitte mal, ob du die Einrückungen noch etwas schöner machen kannst. Das ist zwar nur "Schmuck am Christbaum" (also für die Funktionalität des Codes nicht wichtig, ja, ich weiß), aber trotzdem macht es den Code deutlich besser lesbar und damit verständlicher. :zustimm:

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Sa 14.03.15 17:57 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
for y := 0 to N-1 do
         for x := 0 to N-1 do begin
             snr := x +y *N +1// Nr. des Shapes berechnen
             Shape := TShape(FindComponent('Shape' +IntToStr(snr))); // Komponente suchen
              if not (feldneu[x,y]) then
                   if   (AnzahlLebenderNachbarn(x, y) = 3)
                   then (Shape.Brush.Color = clBlack)
                   else (Shape.Brush.Color = clWhite)
              else if  (AnzahlLebenderNachbarn(x, y) in [23])
                   then (Shape.Brush.Color = clblack)
                   else (Shape.Brush.Color = clwhite);
         end;


Ich hab das jetzt so verändert, ind den letzten 5 zeilen werden mir die fehlermeldung angezeigt: "Error: Illegal Expression"
die funktion hab ich ei gebaut und das was ich gemacht hatte mit einrückungen hat's einfach nicht übernommen beim kopieren .,.

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 14.03.15 18:29 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
das was ich gemacht hatte mit einrückungen hat's einfach nicht übernommen beim kopieren
Wenn du den Code in Delphi-Tags einfasst, dann passt das auch mit den Einrückungen:

[delphi]begin
end;[/delphi]

wird dann zu
ausblenden Delphi-Quelltext
1:
2:
begin
end;


user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
fehlermeldung angezeigt: "Error: Illegal Expression"
Eine Zuweisung wird in Delphi mit ":=" gemacht, was du das hast, ist ein Vergleich, deshalb die Meldung. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Sa 14.03.15 18:34 
ok, danke, jetzt funktioniert es soweit :)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 14.03.15 18:46 
Moin!

Fein. :)

Allerdings :? Hast du noch zwei logische Fehler drin:

1. Du fragst Felder aus dem "Schmierzettel" ab (FeldNeu), statt aus dem internen Feld. Du musst natürlich Felder aus dem internen Feld abfragen und dir das Ergebnis im Schmierzettel merken.

2. steckt schon im Verbesserungsvorschlag von oben drin: du färbst direkt die Shapes in der GUI, statt in den Schmierzettel zu schreiben.

Das meinte ich vorhin mit dem Zwischenschritt: man wird noch keine direkte Auswirkungen sehen, wenn man auf den Button btnRechnen klickt.

cu
Narses

PS: Wenn du nicht weißt, worauf ich hinaus will, sag's ruhig, dann müssen wir noch mehr auf das Konzept eingehen. Zeig auch ruhig nochmal den aktuellen Code.

_________________
There are 10 types of people - those who understand binary and those who don´t.