es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C++ Juego de la Vida, dificultad para reproducir las siguientes generaciones

Actualmente estamos intentando crear el juego de la vida, está mostrando todas las generaciones (6) y recibe la entrada del usuario (o si se elige hacerlo automáticamente), pero la siguiente generación después de la población inicial no se actualiza siguiendo las reglas del juego de la vida, sino que se mantiene igual que la población inicial:

Reglas:
1. Cualquier célula viva con menos de dos vecinos vivos muere, como si estuviera subpoblada.
2. Cualquier célula viva con dos o tres vecinos vivos sobrevive a la próxima generación.
3. Cualquier célula viva con más de tres vecinos vivos muere, como si estuviera sobrepoblada.
4. Cualquier célula muerta con exactamente tres vecinos vivos se convierte en una célula viva, como si fuera por reproducción.

¡Se agradecería cualquier ayuda para corregir este error!

// Generar la siguiente generación
void reproducir(int grid[][m]){
    int newGrid[n][m];

for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
        newGrid[i][j] = grid[i][j]; // Copiar la cuadrícula antigua a una nueva cuadrícula
    }
}

// Aplicar las reglas para la siguiente generación
for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
        int celulasVecinas = contarVecinos(grid, i, j);

        // Reglas para las células vivas
        if (celulasVecinas < 2 && grid[i][j] == 1) {
            newGrid[i][j] = 0;
        }
        if (celulasVecinas > 3 && grid[i][j] == 1) {
            newGrid[i][j] = 0;
        }
        if (celulasVecinas == 2 && grid[i][j] == 1) {
            newGrid[i][j] = 1;
        }
        if (celulasVecinas == 3 && grid[i][j] == 1) {
            newGrid[i][j] = 1;
        }

        // Reglas para las células muertas
        if (celulasVecinas == 3 && grid[i][j] == 0) {
            newGrid[i][j] = 1;
        }
    }
}
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos errores en la función de reproducción que deben corregirse para asegurar que la siguiente generación se actualice siguiendo las reglas del Juego de la Vida.

    En primer lugar, en las sentencias ‘if’ donde se establece el nuevo estado de una celda basado en el número de vecinos que tiene, el operador == debe cambiarse por =. Esto se debe a que el operador == se utiliza para comparación, mientras que el operador = se utiliza para asignación. Por lo tanto, en lugar de comparar el valor de newGrid[i][j] con 0 o 1, debemos asignarle el valor de 0 o 1 según las reglas.

    En segundo lugar, en la función de reproducción, estamos copiando la rejilla antigua a una nueva rejilla antes de aplicar las reglas. Pero deberíamos aplicar las reglas a la rejilla antigua y actualizar los valores en la nueva rejilla en consecuencia. Por lo tanto, debemos intercambiar el uso de grid y newGrid en las sentencias ‘if’ donde estamos comprobando el valor de una celda en la rejilla antigua.

    Aquí está la función de reproducción corregida:

    // Producir la siguiente generación
    void reproduce(int grid[][m]){
        int newGrid[n][m];
    
        // Aplicando reglas para la siguiente generación
        for (int i=0; i<n; i++)="" {="" for="" (int="" j="0;"></n;><m; j++)="" {="" int="" cellneighbours="countNeighbours(grid," i,="" j);="" reglas="" para="" celdas="" vivas="" if="" (cellneighbours="" <="" 2="" &&="" grid[i][j]="=" 1)="" {="" newgrid[i][j]="0;" }="" else="" if="" (cellneighbours=""> 3 && grid[i][j] == 1) {
                    newGrid[i][j] = 0;
                } else if ((cellNeighbours == 2 || cellNeighbours == 3) && grid[i][j] == 1) {
                    newGrid[i][j] = 1;
                }
    
                // Reglas para celdas muertas
                if (cellNeighbours == 3 && grid[i][j] == 0) {
                    newGrid[i][j] = 1;
                } else {
                    newGrid[i][j] = grid[i][j];
                }
            }
        }
    
        // Copiar la nueva rejilla a la rejilla antigua
        for (int i=0; i<n; i++)="" {="" for="" (int="" j="0;"></n;><m; j++) {
                grid[i][j] = newgrid[i][j];
            }
        }
    }
    

    esto debería solucionar el problema y asegurar que la siguiente generación se actualice siguiendo las reglas del juego de la vida. j++)=”” {=”” grid[i][j]=”newGrid[i][j];” }=”” }=”” }=”” ="" esto="" debería="" solucionar="" el="" problema="" y="" asegurar="" que="" la="" siguiente="" generación="" se="" actualice="" siguiendo="" las="" reglas="" del="" juego="" de="" la=""></m; j++) {
    grid[i][j] = newgrid[i][j];
    }
    }
    }

    esto debería solucionar el problema y asegurar que la siguiente generación se actualice siguiendo las reglas del juego de la vida.></m;>

Comments are closed.