ATopeCode
Blog sobre Desarrollo de Software

miércoles, 25 de abril de 2012

El Juego de la Vida

El juego de la vida es un juego de 0 jugadores. Consiste en ir activando celdas vivas dentro de una matriz, normalmente cuadrada (filas=columnas). Las celdas activadas se considera que están "vivas", y las que no lo están "muertas".

Una vez que el jugador pone vida en las celdas que desea, el juego comienza a generar vida o muerte en base a unas reglas sencillas, sin que el jugador tenga nada más que hacer que observar como evoluciona la matriz según al patrón que el introdujo.

Las reglas de evolución del juego son:

  • Una celda muerta con exactamente 3 celdas vecinas vivas "nace" (al turno siguiente estará viva).
  • Una celda viva con 2 ó 3 celdas vecinas vivas sigue viva, en otro caso muere o permanece muerta (por "soledad" o "superpoblación").





Hay varias comunidades de usuarios que se dedican a crear patrones o figuras que van evolucionando sin llegar a morir del todo, es decir, la matriz siempre tiene vida, y la evolución de la figura suele ser cíclica. Mola bastante ver como evolucionan estas figuras, y cada uno puede intentar hacer las suyas.

Hace poco me hice una versión en C# del juego de la vida. Está programado en modo consola ya que es un programa bastante sencillo, y también le da un aspecto más retro XD
En el menú del programa se pueden introducir varias figuras predefinidas, pero moviéndonos con los cursores del teclado por la matriz y pulsando 1 o 0 para dar o quitar vida a las celdas, se puede hacer todo tipo de figuras.

Descargar Juego de la Vida v1.8


A continuación pongo el código fuente para descargarlo por si a alguien le interesa el algoritmo que hace evolucionar las celdas del juego. Es un una sola clase (.cs) implementada en Visual Studio 2010 y el algoritmo que genera el juego está en el método "GenerarJuego()". Los métodos de la clase son de tipo "static" para usarlos sin tener que declarar ningún objeto, es decir, se accede a ellos desde el nombre de la clase como si fuera una librería de funciones tipo C/C++.

En el código se puede ver como hay que usar 2 matrices, una almacena el estado actual de las celdas vivas/muertas y en la otra se genera el nuevo estado haciendo los cálculos necesarios. Una vez calculada la nueva matriz, se copia sobre la anterior para en el próximo ciclo volver a calcular el nuevo estado en la segunda matriz a partir de primera y así sucesivamente. Creo que es lo único difícil de entender, el resto es picar código para alante.

Código Fuente del Juego de la Vida

No hay comentarios:

Publicar un comentario