Metodología y Tecnología de la Programación I

Curso 2001/2002. Convocatoria de Febrero

Proyecto: El juego de la vida

Descripción

Se pide implementar el juego de la vida, propuesto por el matemático americano John Conway.

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:

Ejemplos:
 
X - -
- x -
- - -
X X X
- X -
- - X
X - X
- - -
- - X
X - -
- x -
- - X
La célula central desaparecerá en la siguiente generación por soledad (1 vecino)
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:
 
x x -
x - x
- x x
- - -
x x x
- - -
- x -
- x x
x - x
- x x
x x -
- x -
patrón estático("barco")
patrón oscilante ("faro") patrón "deslizador" patrón simple de evolución muy compleja
(R-pentomino)

Notas Importantes

a) A efectos de aplicación de las reglas, una celda del tablero se considerará  rodeada por ocho celdas vecinas (celdas a izquierda-derecha, arriba-abajo y las cuatro celdas contiguas en diagonal).

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.

Implementación

El programa incorporará las características que se describen a continuació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.

Entrega: 18 de Enero de 2002

Se deberá entregar, en un disquete libre de virus :
a) Programas fuentes, debidamente documentados.
b) Memoria, en formato txt, con información sobre :
    1) Las estructuras de datos utilizadas.
    2) Análisis de cómo se ha implementado el juego, módulos principales, comunicación entre ellos, etc.
    3) Qué pruebas se han efectuado, y cuáles han sido los resultados.
    4) Qué ficheros son necesarios para la compilación y ejecución del juego.
c) Programas ejecutables y otros archivos necesarios para la ejecución correcta del programa.