6. Conway's Game of Life
Descripcion
En esta actividad, implementaras el Game of Life de John Conway (tambien llamado "Life") en StarLogo Nova. La configuracion del juego Life es una cuadricula infinita donde inicialmente algunas celdas estan coloreadas (manteniendo el estado "viva"). Indicar cuales celdas estan vivas al inicio es la unica accion requerida del jugador, ya que el juego establece su siguiente etapa basandose en el estado previo de la cuadricula.
Reglas
La forma en que Life transiciona de etapa a etapa es actualizando cada celda de la cuadricula de acuerdo con las siguientes reglas:
- Supervivencia: Una celda viva con 2 o 3 vecinas vivas sobrevive en la siguiente etapa (una vecina es una celda que esta adyacente horizontal, vertical o diagonalmente)
- Subpoblacion: Una celda viva muere si tiene menos de 2 vecinas vivas
- Sobrepoblacion: Una celda viva con mas de 3 vecinas vivas muere
- Reproduccion: Una celda muerta con exactamente 3 vecinas vivas revive
Patches y Conway's Game of Life
Con las funciones de Patch en StarLogo Nova version 3, podemos implementar Life! Los Patches representan las cuadriculas que dividen el SpaceLand. El SpaceLand esta compuesto por 101x101 patches, y cada patch tiene coordenadas de -50 a 50 (inclusive), con el patch (0, 0) en el centro. Debido a que el SpaceLand tiene un numero finito de cuadriculas, pero Life funciona en una cuadricula infinita, haremos que las celdas vivas se envuelvan alrededor del SpaceLand (lo que creara patrones interesantes para las naves espaciales).
Parte 1: Configuracion Inicial de Patches
Objetivos: Establecer un subconjunto de Patches como vivos
Bloques de Codigo Utiles
| Bloque | Cajon | Uso |
|---|---|---|
![]() | Environment | Obtiene el Patch en una coordenada especifica. Se puede usar al trabajar con traits. |
![]() | Traits | Cambia el trait de un agente, en este caso cambia el color. |
![]() | Environment | Restablece los traits de Patch: se puede elegir entre restablecer color, altura, traits personalizados o todo. |
Codigo de Setup
En la pagina World, programa algunos patches para que esten vivos una vez que se presione setup. Una configuracion sugerida es una columna vertical de 5 patches. Para otros disenos interesantes, consulta las Sugerencias de Configuracion Inicial al final de este tutorial.

Verifica tu Progreso!
Cuando hagas clic en setup, veras la barra vertical. Si activas el modo de edicion de terreno, puedes contar y confirmar que su altura es de 5 patches.
Parte 2: Contando Celdas Vecinas Vivas
Objetivos: Aprender a usar variables al determinar celdas vecinas y contar celdas vivas
Pasos
- Crear variables para cada patch vecino
- Establecer las variables con las coordenadas correctas, teniendo en cuenta las coordenadas de los bordes
- Contar el numero de vecinas vivas
Bloques de Codigo Utiles
| Bloque | Cajon | Uso |
|---|---|---|
![]() | Variables | Inicializa una variable con un valor dado. |
![]() | Variables | Actualiza la variable a un nuevo valor. La variable se elige de un menu desplegable, por lo que para poder actualizarla, necesita ser inicializada primero. |
![]() | Variables | Devuelve el valor de una variable dada. |
Las variables solo existen dentro del bloque de codigo en el que se declaran.
1. Contar Celdas Vivas
Para contar continuamente el numero de celdas vivas que rodean una celda determinada, podemos usar el bloque de deteccion contando el numero de patches que estan vivos (color = black) dentro de 1.5 pasos, y asignarlo a una variable live_cells. Los patches solo se cuentan en esta area si el centro del patch esta dentro de un radio de 1.5 (1.5 pasos contara todos los patches adyacentes).

2. Manejar el Envolvimiento de Bordes (Eje X)
Para hacer la cuadricula "infinita", los patches en los bordes se envuelven y cuentan las celdas vivas en el borde opuesto tambien. Para hacer esto, si un patch tiene una x de -50 o 50 (esta en el borde izquierdo o derecho), haz que cree un breed contador que establezca su x en el lado opuesto y en el borde extremo del mapa (x=-50.5 o 50.5). Luego incrementa live_cells por la cantidad de patches vivos contados por el breed contador dentro de 1.4 pasos (1.5 pasos contaria innecesariamente un patch extra).

3. Manejar el Envolvimiento de Bordes (Eje Y)
Luego repite los mismos pasos pero sustituyendo x por y.
4. Manejar el Envolvimiento de Esquinas
Si el patch es uno de los 4 patches de esquina, haz que sume 1 a live_cells si el patch en la esquina opuesta diagonalmente esta vivo.

Codigo Completo de la Parte 2
Aqui esta el codigo completo para contar celdas vecinas vivas, incluyendo toda la logica de envolvimiento de bordes y esquinas:
Parte 3: Aplicar las Reglas del Game of Life y Establecer Traits Personalizados
Ahora que tenemos el conteo de celdas vivas, podemos proceder a aplicar las reglas para los Patches.
1. Aplicar las Reglas del Game of Life
Debido a que esencialmente cambiamos los patches uno por uno, cambiar inmediatamente los colores de la celda interferiria con el conteo de vecinas vivas para otros patches. Por lo tanto, tendremos dos traits personalizados que recuerdan si el patch cambiara su color.
En la pagina Patch, crea dos traits personalizados:
dies-- contendra el valorTruesi un patch esta vivo y morira en la siguiente etapalives-- seraTruecuando un patch muerto cobra vida
Si tanto dies como lives son False, significa que el patch mantiene su estado en la siguiente etapa.

Regla de Muerte
Un patch vivo morira si: hay menos de 2 vecinas vivas (subpoblacion), o mas de 3 vecinas vivas (sobrepoblacion).
Regla de Nacimiento
Un patch muerto cobrara vida si hay exactamente 3 vecinas vivas (reproduccion).
2. Actualizar Todos los Patches
Agrega un bloque yield para dar suficiente tiempo a que todos los patches se actualicen. Ahora, verifica los traits personalizados y actualiza los colores de los patches de acuerdo a ellos.

Para restablecer los traits personalizados, establece su valor a False al inicio del ciclo.

Verifica tu Progreso!
Activa el boton run. Si comenzaste con la columna vertical, veras la siguiente progresion. Para otras configuraciones, verifica que el programa este funcionando correctamente comparandolo en conwaylife.com.
Fase 1

Fase 2

Fase 3

Fase 4

Fase 5

Fase 6

Fase 7

Fase 8

Sugerencias de Configuracion Inicial
El Game of Life ha atraido mucho interes a lo largo de los anos debido a la multitud de configuraciones iniciales interesantes que producen disenos aun mas interesantes. Hay algunos tipos que puedes probar en StarLogo Nova y ver como se desarrollan con el tiempo.
Vidas Estables
Formas que mantienen su estructura a lo largo del juego.
| Patron | Representacion | Coordenadas de Patch |
|---|---|---|
| Block | ![]() | (0, 0), (1, 0), (0, 1), (1, 1) |
| Beehive | ![]() | (0, 1), (0, -1), (1, 0), (-1, 1), (-1, -1), (-2, 0) |
| Cross | ![]() | (1, 0), (-1, 0), (0, 1), (0, -1) |
Osciladores
Disenos que eventualmente repiten la misma forma, en un ciclo.
| Patron | Representacion | Coordenadas de Patch |
|---|---|---|
| Blinker | ![]() | (0, 1), (0, 0), (0, -1) |
| Beacon | (-2, 2), (-1, 2), (-2, 1), (-1, 1), (0, 0), (1, 0), (0, -1), (1, -1) |
Naves Espaciales
Un patron que regresa a su forma inicial despues de un periodo, mientras se desliza por la cuadricula diagonalmente.
| Patron | Representacion | Coordenadas de Patch |
|---|---|---|
| Glider | ![]() | (0, -1), (-1, 0), (1, -1), (1, 0), (1, 1) |
Configuracion Inicial Aleatoria
Prueba inicializar con patrones aleatorios y observa como cambia el terreno con el tiempo.


Copyright 2024 MIT Scheller Teacher Education Program. Distribuido bajo la licencia Creative Commons CC BY-NC 4.0.










