Autor |
Beitrag |
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Do 12.03.15 23:34
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.03.15 23:36
Moin!
Top, genau so!
Dann gehen wir mal an den Kern der Sache: das eigentliche Spiel. 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)?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: 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
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.03.15 23:43
Moin!
Nini hat folgendes geschrieben : | conways regeln besagen glaub ich |
Glaub ich oder weiß ich? Das dumme ist, Computer wollen immer alles ganz genau haben (so wie Lehrer ), 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... ).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: 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
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.03.15 23:50
Moin!
Und was ist mit 3 Nachbarn bei schwarzen Zellen?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Do 12.03.15 23:54
die bleibt doch schwarz oder nicht?
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.03.15 23:58
Moin!
Ja, aber du hast es nicht in deiner Liste erwähnt. (zur Erinnerung: Computer 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ß.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Fr 13.03.15 00:01
eine Zelle wird schwarz, wenn sie 2 nachbarn haben oder schwarz sind und drei nachbarn haben
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 13.03.15 00:04
Moin!
Hm, OK, hab die Frage doof formuliert, ich fasse es nochmal zusammen:
Quelltext 1: 2: 3: 4:
| alt | neu --------------------------------------- weiß | 3 Nachbarn? -> schwarz schwarz | 2 oder 3 Nachbarn? -> schwarz |
Kommt das hin oder nicht?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Fr 13.03.15 00:08
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
Dann formulieren wir mal in Pseudo-Code:
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
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Fr 13.03.15 00:17
ja, soweit versteh ich es noch und es stimmt mit der tabelle auch überein
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| TForm1 = class(TForm) Shape1: TShape; ... public Feld: TFeld; function AnzahlLebenderNachbarn(const x, y: Integer): Integer; end; ...
function TForm1.AnzahlLebenderNachbarn(const x, y: Integer): Integer; begin Result := 0; end; |
Jetzt fehlt dir noch der "Schmierzettel". Dazu legen wir einen neuen Button "btnRechnen" auf das Formular. In dessen Ereignishandler schreiben wir:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.btnRechnenClick(Sender: TObject); var FeldNeu: TFeld; begin end; |
Auf geht´s!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 14.03.15 16:11
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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:
Delphi-Quelltext 1:
| if wenn die Anzahl der schwarzen Nachbarn dieser Zelle = 3 ist | dann
Delphi-Quelltext 1:
| if (AnzahlLebenderNachbar(x, y) = 3) then |
Schau mal, ob du damit weiter kommst. 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.
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 14.03.15 17:57
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; Shape := TShape(FindComponent('Shape' +IntToStr(snr))); 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 [2, 3]) 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 Narses: Quote- durch Delphi-Tags ersetzt
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 14.03.15 18:29
Moin!
Nini hat folgendes geschrieben : | 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
Delphi-Quelltext
Nini hat folgendes geschrieben : | fehlermeldung angezeigt: "Error: Illegal Expression" |
Eine Zuweisung wird in Delphi mit ":=" gemacht, was du das hast, ist ein Vergleich, deshalb die Meldung.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 14.03.15 18:34
ok, danke, jetzt funktioniert es soweit
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
|
|