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.

Contando el número de vecinos en el Juego de la Vida de Conway.

Tengo un error en alguna parte de este código. El número de vecinos no se está contando correctamente, según mi comprensión. La función de vecinos es probablemente donde está el problema. Mi variable de campo es una matriz de caracteres de 12×12, el ‘#’ es una célula viva y el ‘-‘ es una muerta.
Soy relativamente nuevo en programación y agradecería algo de ayuda con esto.

int vecinos(int l, int c)
{
int num = 0;
for (int i = -1; i < 2; i++)
{
for (int j = -1; j < 2; j++)
{
if ((l+i < 0 || l+i > 12) && (c+j < 0 || c+j > 12))
{
continuar;
}
else if ((i != 0 || j != 0) && field[(l + i)][(c + j)] == ‘#’)
{
num++;
}
}
}
devolver num;
}

lógica//del juego
{
caracteres temp[12][12];
for (int i = 0; i < 12; i++)
{
for (int j = 0; j < 12; j++)
{
temp[i][j] = field[i][j];
}
}
para (int i = 0; i < 12; i++)
{
para (int j = 0; j < 12; j++)
{
si (field[i][j] == ‘#’)
{
si (vecinos(i, j) < 1 || vecinos(i, j) > 3)
{
temp[i][j] = ‘-‘;
}
sino
{
temp[i][j] = ‘#’;
}
}
si (field[i][j] = ‘-‘)
{
si (vecinos(i, j) == 3)
{
temp[i][j] = ‘#’;
}
sino
{
temp[i][j] = ‘-‘;
}
}
field[i][j] = temp[i][j];
}
}
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay un par de problemas con el código proporcionado:

    1. Operadores de comparación: los operadores de comparación utilizados en las declaraciones if de las funciones neighbors y logic son incorrectos. Se deben usar los operadores menor que (<) y mayor que (>) en lugar de < y >, respectivamente.
    2. Verificación de los límites: La verificación de los límites en la declaración if de la función neighbors parece ser incorrecta. La condición debería ser (l+i < 0 || l+i >= 12 || c+j < 0 || c+j >= 12) en lugar de (l+i < 0 || l+i > 12) && (c+j < 0 || c+j > 12). Esto se debe a que los índices del arreglo pueden variar de 0 a 11 (inclusivos).

    Aquí está el código corregido:

    int neighbors(int l, int c)
    {
      int num = 0;
      for (int i = -1; i < 2; i++)
      {
        for (int j = -1; j < 2; j++)
        {
          if ((l+i < 0 || l+i >= 12 || c+j < 0 || c+j >= 12))
          {
            continue;
          }
          else if ((i != 0 || j != 0) && field[(l + i)][(c + j)] == '#')
          {
            num++;
          }
        }
      }
      return num;
    }
    
    void logic()
    {
      char temp[12][12];
      for (int i = 0; i < 12; i++)
      {
        for (int j = 0; j < 12; j++)
        {
          temp[i][j] = field[i][j];
        }
      }
      for (int i = 0; i < 12; i++)
      {
        for (int j = 0; j < 12; j++)
        {
          if (field[i][j] == '#')
          {
            if (neighbors(i, j) < 2 || neighbors(i, j) > 3)
            {
              temp[i][j] = '-';
            }
            else
            {
              temp[i][j] = '#';
            }
          }
          if (field[i][j] == '-')
          {
            if (neighbors(i, j) == 3)
            {
              temp[i][j] = '#';
            }
            else
            {
              temp[i][j] = '-';
            }
          }
        }
      }
      for (int i = 0; i < 12; i++)
      {
        for (int j = 0; j < 12; j++)
        {
          field[i][j] = temp[i][j];
        }
      }
    }
    

    ¡Espero que esto ayude!

Comments are closed.