El juego de la vida | Programar Plus

No es realmente un “juego”, sino más bien un conjunto de reglas del matemático John Horton Conway. Imagine una cuadrícula de celdas, como una hoja de cálculo o un <table>. Cada célula está viva o muerta. Las “rondas” pasan una por una. En cada ronda, hay reglas sobre si una célula viva debe continuar viva o morir, y si una célula muerta debe continuar muerta o volverse viva.

Las normas

Está destinado a replicar un entorno de la vida real. Las células pueden morir ya sea por subpoblación o sobrepoblación, y solo viven en situaciones perfectas. Las reglas son bastante simples:

  1. Célula viva – Menos de 2 vecinos vivos – muere (subpoblación).
  2. Celda viva – 2 o 3 vecinos – sigue viviendo (situación perfecta).
  3. Célula viva – Más de 3 vecinos vivos – Muere (sobrepoblación).
  4. Célula muerta – Exactamente tres vecinos vivos – se vuelve vivo (reproducción).

¿Por qué hablas de esto?

Me siento muy nostálgico al respecto. Una versión visual de The Game of Life fue el primer proyecto de programación que hice en la escuela secundaria. O si no el primero, el primero en el que tuve un “¡Ajá!” El momento y la programación y el diseño realizados podrían ser súper divertidos e interesantes.

Dele el problema a cualquier programador y probablemente lo resolverán de una manera ligeramente diferente.

  • ¿En qué idioma debe estar escrito?
  • ¿Cómo lo diseñamos limpiamente?
  • ¿Cómo podemos hacerlo computacionalmente rápido?
  • ¿Qué tan grande podemos hacerlo antes de que disminuya la velocidad?
  • ¿Cómo almacenamos mejor los datos y estados?
  • ¿Cómo se manejan los bordes?

Dele el problema a cualquier diseñador y los resultados se verán diferentes.

  • ¿Qué colores tienen sentido?
  • ¿Deberíamos tener diferentes colores para los estados más allá de vivo y muerto?
  • ¿Qué tamaño deben tener las celdas para ser interesantes?
  • ¿Qué tan rápidas deben ser las rondas para ser interesantes sin ser abrumadoras?
  • ¿Puedes interactuar con él?
  • ¿Puedes avanzar y retroceder en el tiempo?
  • ¿Cómo enciendes y apagas las celdas? ¿Hacer clic? ¿Arrastrando? ¿Aleatorización?
  • ¿Cuáles son las formas más interesantes que se pueden hacer? ¿Podemos mostrar esos?

También menciono esto porque recuerdo haber intentado hacer una demostración hace unos años que fue tan horrible que estoy celoso de todas las geniales. Básicamente, usé jQuery para consultar el DOM en busca de vecinos de cada celda y fue tan ineficiente que probablemente debería haber sido golpeado con una antena.

Ejemplos

Mi primera versión fue en Turbo Pascal en un viejo Apple. Me complace mucho saber que este pequeño ejercicio matemático visual está vivo y bien hoy, y la gente está usando una herramienta que construí para hacer versiones. ¡Incluso entre demostraciones que usan la misma tecnología, el enfoque puede ser diferente! También tengo una colección.

JavaScript en lienzo

Con un toque de jQuery:

Vea el juego de la vida de Pen Conway por John H Moore (@john-h-moore) en CodePen.

Sin que:

Vea Pen Game of Life de Qbit (@Qbit42) en CodePen.

Vea el juego Pen Game of Life on Canvas de Dennis Kerzig (@wottpal) en CodePen.

JavaScript en un <table>

Vea Pen payKn de Alan R. Soares (@alanrsoares) en CodePen.

Backbone.js

Vea Game of Life de Pen Conway en Backbone por Eric Miller (@SimpleAsCouldBe) en CodePen.

Usando CSS box-shadow para dibujar celdas

Vea el juego de la vida Pen box-shadow de Joris van de Donk (@jorisvddonk) en CodePen.

En CoffeeScript

Vea el Pen mctCv de Hanganu Petru-Alin (@Lynku) en CodePen.

En D3.js

¡Rápido!

Vea el Pen Game of Life – D3 de Reed Spool (@reedspool) en CodePen.

Estos son solo ejemplos de front-end, pero puede encontrar fácilmente ejemplos en cualquier idioma. Consulte Golly para conocer las versiones nativas de la aplicación y la página de Wikipedia para obtener más información. Una cosa particularmente interesante sobre El juego de la vida es que son posibles todo tipo de estructuras extrañas que “crean vida” o la sostienen de formas extrañas.

Una cosa que nunca he visto es una versión Pure CSS. ¿Es siquiera posible? Sería muy complicado con posicionamientos extraños y selectores complejos. Pero dicen que Sass es “Turing completo”, lo que significa que es posible, ¿no? ¿O hay otras limitaciones en juego allí?

Me interesaría ver más ejemplos extraños de The Game of Life. O cualquier historia que tengas al respecto de tu pasado =).

(Visited 5 times, 1 visits today)