El juego utiliza un tablero que, para esta implementación, tendrá una dimensión de 15 filas por 20 columnas. Cada celda de este tablero podrá estar ocupada por una célula o podrá estar vacía. En el juego se parte de una configuración inicial de células (suministrada por el usuario o generada al azar) y se deja evolucionar esta población de acuerdo a las siguientes reglas definidas por Conway:
|
|
|
|
||||||||||||||||||||||||||||||||||||
|
la célula central morirá en la siguiente generación por superpoblación (4 vecinos) | Una nueva célula nacerá en la siguiente generación en la casilla central (3 vecinos) | La celda central seguirá conteniendo una célula viva en la siguiente generación (2 vecinos) |
Algunas configuraciones iniciales interesantes:
|
|
|
|
||||||||||||||||||||||||||||||||||||
|
patrón oscilante ("faro") | patrón "deslizador" | patrón simple
de evolución muy compleja
(R-pentomino) |
b) La supervivencia, nacimiento o muerte de las células deberá determinarse considerando sus vecinos en esa generación. Es decir, no deberán realizarse cambios sobre el tablero hasta que no se haya determinado el destino de todas las celdas en la siguiente generación.
El programa aceptará o generará una configuración inicial de células sobre el tablero definido. El programa permitirá tanto calcular la evolución de esta población de generación en generación como calcular de una vez el resultado tras N generaciones (parámetro suministrado por el usuario). Tras mostrar por pantalla la población obtenida (en la generación siguiente en el primer caso o tras N generaciones en el segundo), el programa permitirá:
a) Terminar el juego.
b) Guardar la configuración obtenida a fichero.
c) Editar de forma manual el tablero (eliminando células
y/o creando otras nuevas).
d) Continuar calculando nuevas generaciones.
El programa permitirá definir la configuración inicial por cualquiera de estos procedimientos:
a) Leyendo datos suministrados por teclado.
b) Generando aleatoriamente la configuración inicial.
En este modo, el usuario fijará por teclado el número de
celdas ocupadas por células, y el programa distribuirá estas
células de forma aleatoria sobre el tablero.
c) Leyendo datos de un fichero.
El programa permitirá configurar el comportamiento del juego con células que se encuentren en los bordes del tablero. En particular, será posible seleccionar cualquiera de estas posibilidades:
a) Tablero plano. Una celda en el borde del tablero
evolucionará como si todos sus vecinos no accesibles fueran celdas
vacías.
b) Tablero cilíndrico. En este modo, se
tomarán la primera y última columnas del tablero como
contiguas.
c) Tablero toroidal. En este modo, se considerarán
como contiguas tanto la primera y última columnas del tablero como
la primera y última fila.
Evaluación
No se evaluará el aspecto gráfico más allá de la presentación básica del juego.
Se evaluará positivamente :
a) Modularidad y estructuración del código.
b) Cantidad y calidad de los comentarios.
c) Claridad en el código.
d) Calidad de la documentación asociada, memoria
y análisis.
e) Uso de estructuras de datos adecuadas al problema.
f) Nombre de las variables y constantes acordes a la
función que desempeñan en el programa.
Se penalizará fuertemente :
a) Uso de programación no estructurada, es decir
uso de goto, exit y halt.
b) Uso de variables globales dentro de funciones o procedimientos.
c) Funciones o procedimientos no documentados. Cada función
o procedimiento debe tener unos comentarios de cabecera con información
de :
1) qué es lo que realiza la
función.
2) qué parámetros de
entrada recibe, y cuál es la función de cada uno de ellos.
3) qué parámetros de
salida recibe, y cuál es la función de cada uno de ellos.
4) qué valor devuelve.
5) requisitos, o precondiciones en
los valores de los parámetros en la llamada a la función,
y qué condiciones de error se manejan dentro de cada función.
d) Paso de parámetros innecesarios a funciones
y procedimientos.
e) Programas que funcionen incorrectamente.