Lulas (simulación celular)
Un simulador de células cazándose entre ellas, sobre un mapa que se repite por todos los bordes.
Hay tres tipos de cosas. Las plantas son círculos verde oscuro que solo crecen — son lo único que mete energía en el mundo. Los herbívoros son círculos verde claro con un palito: el palito apunta a dónde va la célula, y su longitud es la velocidad, así que la lees del dibujo en vez de un número. Los cazadores son iguales, en rojo, y persiguen herbívoros.
Dos cosas deciden si una célula se come a otra: qué es, y cómo de grande es. Los herbívoros comen plantas, los cazadores comen herbívoros, y solo puedes comerte algo estrictamente más pequeño que tú — si son iguales se tocan y siguen su camino. El miedo funciona con esa misma regla, así que un herbívoro enorme no da miedo a nadie: no puede comerse a nadie. Comer tampoco es instantáneo: el área se transfiere durante varios ticks, y puedes ver a una célula posada sobre su comida.
Moverse cuesta energía, e ir rápido cuesta más. Las células encogen un poco en cada tick que se desplazan, así que un herbívoro sin plantas alrededor se consume lentamente hasta desaparecer, y un cazador que no acierta, también.
Cuando una célula se hace bastante grande se parte en dos, y las mitades salen en direcciones opuestas. Cada hija recibe la mitad del radio del padre, que es solo una cuarta parte de su área — o sea que la mitad de la masa se pierde en el proceso. Esa pérdida es todo el equilibrio del asunto: las plantas meten energía, la mitosis la quema, y que la población explote o se muera sale de esos dos números.
La segunda versión de este proyecto se reescribió desde cero para simplificar la implementación del comportamiento de flocado, y acabó siendo un proyecto aparte: Flocking.
Hay dos funcionando
Lo que se ve aquí arriba es la original, la de 2014 — JavaScript a pelo,
módulos AMD cargados con RequireJS y fondo blanco. La recuperé de una rama en
2026 y corre tal cual en
lulas.amatiasq.com/2014. Tal cual casi del
todo: al commit del que la saqué le falta un fichero, ticker.js, que se me
quedó sin commitear y entró después en un commit llamado "Missed file". Sin él
no arranca nada. Se le vuelve a poner al desplegar la página, y el commit
archivado se queda exactamente como estaba.
La actual es una reescritura, a partir de esas mismas reglas. Tiene lo que ninguna versión vieja tenía: moverse cuesta energía, así que se puede morir de hambre; los herbívoros huyen antes de comer y no después; los cuerpos son sólidos; y hay manadas, prestadas del proyecto de flocado. La misma simulación, con doce años de mis propias manías en medio.