Question

Je suis au milieu de la rédaction de la vie de Conway, mais ma détection des cellules vivantes révèle quelques extras que le code jette lorsque j'essaie de mettre en place un clignotant (3 cellules vivantes dans une rangée) avec les coordonnées de la cellulede [36] [22] jusqu'à [36] [24]. Ma méthode de mise à jour pour les itérations est la suivante:

private void nextGeneration() {
    for (int i = 0; i < cell.length; i++) {
        for (int j = 0; j < cell[i].length; j++) {
            if(i>0 && i<79 && j>0 && j<99){
                if(cell[i][j].getAlive()){
                    cell[i][j].calcNeighbors(cell, i, j);
                    if(cell[i][j].getNeighbors() < 2){
                        cell[i][j].setAlive(false);
                    }
                    if(cell[i][j].getNeighbors() == 2 || cell[i][j].getNeighbors() == 3 && cell[i][j].getAlive()){
                        cell[i][j].setAlive(true);
                    }
                    if(cell[i][j].getNeighbors() > 3){
                        cell[i][j].setAlive(false);
                    }
                }
                else {
                    cell[i][j].calcNeighborsForNull(cell, i, j);
                    if (cell[i][j].getNeighborsForNull() == 3) {
                        cell[i][j].setAlive(true);
                    }
                }
            }
        }
    }
}

où NextGeneration () est appelé chaque seconde, et cellule [] [] est un tableau de classes cellule

Je détecte les cellules en utilisant ce code:

myNeighbors = 0;
        if(cell[i-1][j-1].myAlive){
            myNeighbors++;
            System.out.println("top left");
        }
        if(cell[i-1][j].myAlive){
            myNeighbors++;
            System.out.println("top center");
        }
        if(cell[i-1][j+1].myAlive){
            myNeighbors++;
            System.out.println("top right");
        }
        if(cell[i][j-1].myAlive){
            myNeighbors++;
            System.out.println("mid left");
        }
        if(cell[i][j+1].myAlive){
            myNeighbors++;
            System.out.println("mid right");
        }
        if(cell[i+1][j-1].myAlive){
            myNeighbors++;
            System.out.println("lower left");
        }
        if(cell[i+1][j].myAlive){
            myNeighbors++;
            System.out.println("lower center");
        }
        if(cell[i+1][j+1].myAlive){
            myNeighbors++;
            System.out.println("lower right");
        }
        System.out.println(myNeighbors +" at " + j + "," + -i);

Lorsque j'exécute le code, je reçois la sortie de la console de:

top right
mid right
2 at 22,-36
top center
top right
mid left
mid right
4 at 23,-36
top left 
top center
2 at 24,-36
mid right
lower left
lower right
3 at 23,-35
mid left
lower center
2 at 24,-35
top right
1 at 22,-36
top left
top center
mid left
3 at 24,-36
mid right
lower center
lower right
3 at 23,-35

Le compilateur pense que la cellule morte au-dessus de la vie est également en direct.Quelqu'un peut-il voir ce que je fais mal? Merci.

Était-ce utile?

La solution

Selon la façon dont votre méthode de sécurité fonctionne, la cellule que vous pensez être morte pourrait être morte pour avoir été définie sur Alive.Je devais écrire un jeu de simulation de vie pour la classe ce semestre passé et l'astuce consiste à utiliser deux "planches".Étant donné que l'ensemble de "carte" est censé être mis à jour tout à la fois, l'utilisation de votre méthode pourrait entraîner des résultats inattendus.Itérate à travers chaque cellule, mais envoyez le résultat à la deuxième carte, il n'ya donc aucun chevauchement entre l'état de la cellule à l'étape actuelle et de l'état de la cellule à l'étape suivante.C'est un peu difficile d'expliquer par le texte, mais faites-moi savoir si vous avez besoin d'une aide supplémentaire, car je pense que c'est ce que votre problème est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top