Trabajo

De Wiki del curso de C
Saltar a: navegación, buscar

Información

El proyecto del curso va a ser implementar una versión de el juego de la vida. Se hará de forma incremental, aplicando los conceptos impartidos en cada clase.

Enlaces de interés


Tareas

  • Las tareas se entregarán mediante un pull request, tal y como se explica en este documento.
  • Cada tarea deberá componerse de uno o más commits (preferiblemente varios si es compleja).
  • No se aceptará un pull request que incluya varias tareas.
  • Se recomienda que se realicen las tareas antes de la fecha de entrega, ya que se mandarán tareas nuevas que se irán acumulando.

Versión inicial del juego de la vida

Temas Fecha de entrega
1-5 08/04/2016

Implementa una primera versión del juego de la vida:

  • Utiliza una programación modular y crea un makefile para automatizar la compilación
  • Representa el mundo mediante un array bidimensional de tamaño fijo
  • Ejecuta un numero fijo de iteraciones
  • Muestra el estado inicial y final del mundo mediante printf
  • Comprueba los resultados obtenidos con uno de los simuladores enlazados

Utilizar reserva dinámica de memoria y objetos

Temas Fecha de entrega
6-7 19/04/2016
  • El tamaño del mundo debe poder elegirse en tiempo de ejecución
  • Descompón tu programa en los módulos y objeto(s) que creas convenientes.

Argumentos de main y listas encadenadas

Temas Fecha de entrega
8-9 23/04/2016
  • Haz que el tamaño de tu mundo se pueda pasar como argumentos al lanzar tu programa. Utiliza getoptlong
  • Utiliza las listas encadenadas del núcleo de linux para optimizar el recorrer las células vivas. Por cada una de las células vivas debes inspeccionar ésta y sus vecinas (ver transparencias).

Entrada/Salida

Temas Fecha de entrega
8-9 26/04/2016
  • Añade un parámetro de entrada más a tu programa ("-f <fichero_config>") para pasarle un archivo de configuración donde tendrás guardados parámetros de la simulación. Haz un análisis simple de este fichero: las opciones con un formato estricto y siempre en el mismo orden.
  • Haz que al final de la simulación se guarde en un archivo un historial del número de células vivas en cada iteración. Utiliza un formato que depués puedas representar con un programa como gnuplot: "<num iteración><tabulación><num células vivas><nueva línea>".
  • EXTRA: Haz que al final de la simulación se guarde un archivo con el último estado del mundo, y que éste se pueda cargar al inicio del programa para continuar con la simulación.

Objetos (II): Herencia

Temas Fecha de entrega
8-9 03/05/2016
  • Divide tu arquitectura en tres objetos:
    • world: Objeto abstracto que no tienen implementada las funciones world_get_cell y world_set_cell, pero sí el resto
    • world_normal: Objeto que hereda de world e implementa las funciones world_get_cell y world_set_cell para acceder a un mundo finito con límites.
    • world_toroidal: Objeto que hereda de world e implementa las funciones world_get_cell y world_set_cell para accedar al mundo de forma toroidal.

Imagen con la estructura de clases a modo de guía. Los métodos y atributos variaran en función de tu implementación:

Gol uml.png


Objetos (II): Interfaz gráfica con GTK

Temas Fecha de entrega
14 06/05/2016

Usando como plantilla el código que se proporciona, crea una interfaz gráfica para tu juego de la vida con, al menos, las siguientes características:

  • Se puede elegir el tamaño y el tipo del mundo antes de empezar la simulación
  • Se puede detener y continuar la simulación
  • Se puede avanzar la simulación paso a paso
  • Se pueden añadir células vivas haciendo click izquierdo con el ratón en el área de dibujado
  • Se pueden eliminar células vivas haciendo click derecho con el ratón en el área de dibujado
  • Se puede elegir la velocidad de simulación

IMPORTANTE: Para que se te corrija esta tarea has de tener aceptado el pull request de todas las anteriores. No se corregirá ningún código de tareas anteriores que incluya algún elemento relacionado con la interfaz gráfica.