[Godot] - El juego de la Vida

AikonCWD

El juego de la vida

Introducción

Continuando con los autómatas celulares, no podía olvidarme de El juego de la Vida de John Conway. Quizás el más conocido de todos ya que con 4 simples reglas se consigue simular algo parecido a microbios reproduciéndose y muriéndose, con efectos visuales bastante bonitos.

Se dispone de un tablero en el que cada celda puede estar viva o muerta en función de unas reglas sencillas. Este "juego" ha despertado gran interés debido a la versatilidad y a la aparición de patrones que producen efectos sorprendentes (como el pentaminó R o el deslizador).

Algoritmo

Cada célula tiene 8 células "vecinas", que son las que están próximas a ella, incluidas las diagonales. Las células tienen dos estados: están "vivas" o "muertas". El estado de las células evoluciona a lo largo de unidades de tiempo discretas. El estado de todas las células se tiene en cuenta para calcular el estado de las mismas al turno siguiente. Todas las células se actualizan simultáneamente en cada turno, siguiendo estas reglas:

  • Cualquier célula con menos de 2 vecinos, muere. Por soledad
  • Cualquier célula con 2 o 3 vecinos, sobrevive. Por comunidad
  • Cualquier célula con más de 3 vecinos, muere. Por sobrepoblación
  • Cualquier célula muerta con exactamente 3 vecinos, nace. Por reproducción

Tipos de patrones

Una vez se plantean estas reglas sobre el tablero, rápidamente se observa como cobra "vida". Se pueden distinguir patrones y figuras concretas, divididas de la siguiente forma:

Vidas estáticas
Patrones que no cambian de forma (ni mueren ni se crean caldas) entre los diferentes ciclos

Osciladores
Patrones que cambian N veces y vuelven a su estado inicial, haciendo que su movimiento sea cíclico, infinito y estático

Naves espaciales
Son un tipo de osciladores que mantienen su forma original pero se desplazan. Son cíclicos e infinitos, pero no estáticos.

EstáticosOsciladoresNaves
BloqueBlinkerDeslizador
ColmenaRanaNave pequeña
HogazaFaroNave mediana
BarcoPulsarName grande
TinaPeriod 15

Matusalenes
Finalmente nos encontramos con los matusalenes. Son patrones que pueden evolucionar a lo largo de muchos turnos, o generaciones, antes de estabilizarse. El patrón Diehard desaparece después de 130 turnos, mientras que Acorn tarda 5206 turnos en estabilizarse en forma de muchos osciladores, y en ese tiempo genera 13 planeadores.

Fuente: wikipedia.org


Proyecto en Godot

He decidido implementar en Godot un pequeño playground del juego de la vida. Permite dibujar patrones con click izquierdo y borrar con derecho. Puedes ir paso a paso en la generación de ciclos o ejecutar de forma secuencial, así como generar patrones random.

El tablero está montado sobre un "torus". Las celdas generadas en los extremos aparecen en su lado opuesto. Tenéis disponible el código fuente aquí: https://github.com/aikoncwd/Game-of-Life

Espero que os guste! :)

3
eondev

Estos proyectos están muy chulos.
Cuál tienes pensado hacer ahora?

1 respuesta
Slowbro

#1 Me he acordado de ti hoy, ya que no sabia que se podía implementar un computador con gliders xD

Por si te animas

1 respuesta
AikonCWD

#2 Van a ser una serie de 3. Hormiga de Langton, Juego de la Vida y mañana pondré el Rule 30 de Wolfram: https://en.wikipedia.org/wiki/Rule_30

En realidad será un generador de autómatas elementales, desde el Rule 0 hasta el 255: https://mathworld.wolfram.com/ElementaryCellularAutomaton.html

#3 Tanto el juego de la vida como la hormiga de Langton tienen universalidad, y por tanto, se puede computar y crear algoritmos, puertas lógicas, etc... Es una locura pero como cumplen las reglas básicas de una máquina de Turing, técnicamente la computación es viable (en la práctica no xd). Gracias por el link! :)

1
carra

Anda, no contento con hacer el proyecto te has pegado el curro de documentar todos esos patrones de las naves espaciales. Muy bueno!

Usuarios habituales

  • carra
  • AikonCWD
  • Slowbro
  • eondev

Tags