Está escrito al vuelo, así que hay que 'cocinarlo' un poquito... pero es un punto de partida adecuado si uno está en blanco...
...por ejemplo al comienzo falta un parámetro de 'ocupación' que determinaría cuanto debe rellenarse el tablero al comienzo. Aquí la función New, un poquito más desarrollada:
...para la enumeración, es preferible que CELULA_VIVA sea 9 y la muerta, sea 0, porque al crear el array, por defecto (según el lenguaje usado, claro), es 0 para todo el array, así basta luego marcar las vivas...
...o por ejemplo la partida acaba no solo cuando queden menos células de las indicadas sino también si se diera el caso (mucho menos probable por supuesto), que el mundo estuviera repleto. (... O Si vidas = (filas * columnas) - maxSeres luego Finpartida) //maxSeres sería al igual que minSeres, un punto de inflexión determinado, por defecto debiera ser filas * columnas.
...o en la función ContarMisVecinos, detrás del bucle (al final) olvidé descontar a sí mismo como vecino:
...o alguna discrepancia/inconsistencia menor: e alguna parte declaro NumVecinos, pero luego uso Vecinos...
En fin, cosas de escribir al vuelo... pero fáciles de darse cuenta y corregir al pasarlo a código.
Y por supuesto, el ejemplo no sigue al pie de la letra las reglas del enunciado de quien pregunta, requiere adaptarlo a las reglas que uno desee... Lo cual es trivial cuando uno lo entiende bien.
p.d.:
...por cierto, la función de contar los vecinos, cuenta los 24 vecinos, no los 8...
...por ejemplo al comienzo falta un parámetro de 'ocupación' que determinaría cuanto debe rellenarse el tablero al comienzo. Aquí la función New, un poquito más desarrollada:
Código [Seleccionar]
int Filas, Columnas, MundoMuere
funcion New(int F, int C, int MM, ocupacion)
int i, j, k, max
filas = f
columnas = C
Si (MM < 0) luego MM=0)
MundoMuere = MM
si ocupacion < minocupacion // por ejemplo 10 (en referencia al 10%)
ocupacion = minocupacion
osi ocupacion > maxocupacion // por ejemplo 40 (en referencia al 40%)
ocupacion = maxocupacion
fin si
max = (((Filas * Columnas) / 100) * ocupacion)
dimensionar Mapa(filas, columnas)
bucle para i desde 1 hasta max
j = aleatorio entre 0 y Filas-1
k = aleatorio entre 0 y Columnas-1
Mapa(j, k).Estado = ESTADO_VIVA
siguiente
DibujarMapa
fin funcion
...para la enumeración, es preferible que CELULA_VIVA sea 9 y la muerta, sea 0, porque al crear el array, por defecto (según el lenguaje usado, claro), es 0 para todo el array, así basta luego marcar las vivas...
...o por ejemplo la partida acaba no solo cuando queden menos células de las indicadas sino también si se diera el caso (mucho menos probable por supuesto), que el mundo estuviera repleto. (... O Si vidas = (filas * columnas) - maxSeres luego Finpartida) //maxSeres sería al igual que minSeres, un punto de inflexión determinado, por defecto debiera ser filas * columnas.
...o en la función ContarMisVecinos, detrás del bucle (al final) olvidé descontar a sí mismo como vecino:
Código [Seleccionar]
// ya fue contada en el bucle, ahora se descuenta así misma.
Si (mapa(fila,columna).estado = ESTADO_VIVA ) luego vecinos -=1
...o alguna discrepancia/inconsistencia menor: e alguna parte declaro NumVecinos, pero luego uso Vecinos...
En fin, cosas de escribir al vuelo... pero fáciles de darse cuenta y corregir al pasarlo a código.
Y por supuesto, el ejemplo no sigue al pie de la letra las reglas del enunciado de quien pregunta, requiere adaptarlo a las reglas que uno desee... Lo cual es trivial cuando uno lo entiende bien.
p.d.:
...por cierto, la función de contar los vecinos, cuenta los 24 vecinos, no los 8...





