Javascript vereinfachtes Game Of Life

...komplette Frage anzeigen

4 Antworten

Ich habe den Code mal für mich überarbeitet und er funktioniert folgendermaßen (habe das mal in C# gemacht, daher an den stellen, wo Debug.Write etc. steht, für Dich abändern. Kommt ja aber hauptsächlich auf die Abfrage und das Zählen der schwarzen Nachbarn an und das sollte verständlich sein) Achso, wo bei mir anz steht, ist Deine Variable "SideNums" gemeint.

    private void checkFarbwechsel()
    {
         for (var iS = 0; iS < anz; iS++)
         { // Jede Reihe durchgehen                        
             for (var iW = 0; iW < anz; iW++)
             { // Die Wagerechten Rechtecke durchgehen

                 var schwarzeNachbarn = 0;

                /*im folgenden nur die angrenzenden Felder innerhalb des Arrays durchlaufen, dafür Starte/Ende sowohl horizontal als vertikal festlegen*/
                        var BeginY = iS - 1 < 0 ? 0 : iS - 1;
                        var EndeY = iS + 1 >= anz - 1 ? anz - 1 : iS + 1;
                        var BeginX = iW - 1 < 0 ? 0 : iW - 1;
                        var EndeX = iW + 1 >= anz - 1 ? anz - 1 : iW + 1;

                        for (var y = BeginY; y <= EndeY; y++)
                            for (var x = BeginX; x <= EndeX; x++)
                            {
                                if ((x == iW) && (y == iS))
                                    continue; // ist das Feld, auf dem der Focus gerade gesetzt ist, daher weiter
                                if (RectColor[y],[x])
                                    schwarzeNachbarn++;
                            }

                        if (RectColor[iS],[iW])
                        {
                            if (schwarzeNachbarn < 2 || schwarzeNachbarn > 3)
                            {
                                RectColor[iS],[iW] = false;
                                zeichne();
                            }
                        }
                        else if(schwarzeNachbarn == 3) 
                        {
                            RectColor[iS],[iW] = true;
                            zeichne();
                        }                

                    }
                }
            }

Hmm, bei Deinem Code fällt mir erst jetzt auf: Wo änderst Du den Zustand eine Zelle (also RectColor[iS],[iW] = true/false setzen)? In der Methode RechteckNeuZeichnen? Ansonsten fehlt doch die Änderung des Zustands.

0

Hi, ich empfehle die Fehlerkonsole des Firefox. Mit ihr findet man solche Fehler ziemlich leicht. (Im Menü unter Extras -> Entwickler)

Diese Fehle sehe ich:

  • Bei dem Bezeichner SideNums ist einmal ein Tippfehler passiert.
  • Bei den Tests, ob die Koordinaten im zulässigen Bereich liegen, hast Du übersehen, daß der Array-Index bei Null beginnt und dehalb nicht gleich SideNums wird, sondern eins unterhalb SideNums endet. (Wenn SideNums, wie oben angegeben, die Anzahl der Kästchen in einer Reihe angibt.)

OK? :-)

Einige Variablen (wie bspw. iS1 sind nirgends erklärt) aber egal. Warum setzt Du bei jedem Schleifendurchlauf die Variable var schwarzeNachbarn = 0? Das müsste m. E. die erste Anweisung innerhalb der Funktion sein.

O.K., falsch von mir.

0

Ich habe die Funktion noch einmal überarbeitet und bin mir jetzt eigendlich ziehmlich sicher das es funktionieren müsste.. geht aber leider nicht http://pastebin.com/pkNycRsQ

Was möchtest Du wissen?