Overload es un lindo juego, cuyo objetivo es pintar totalmente el tablero del color propio, evitando que el oponente haga lo mismo. Para ello se van agregando gotas de pintura a las casillas sin color o que ya tengan nuestro color.
Las casillas pueden contener a lo sumo tres gotas. Si se agrega una gota más a una casilla llena, esta rebalsa y se vacía, vertiendo una gota de su color en las casillas vecinas, y pintándolas del color propio.
Lo divertido es que si alguna vecina ya estaba llena, rebalsa a su vez, produciendo reacciones en cadena que pueden cambiar totalmente el aspecto del tablero, haciendo casi incalculables las consecuencias de las movidas.
Como el juego me gustaba mucho y quería probar algunas variantes en la mecánica, programé mi propia versión.
Cuando tuve algo más o menos jugable, lo probé. Iba tirando las gotitas esperando que ocurriera el primer error (ningún programa funciona bien al principio, salvo aquel mítico primer programa de la historia, que calculaba números primos).
En las primeras reacciones en cadena, mi programa se comportó tan bien que estaba emocionado.
Sin embargo, cuando el tablero se empezó a llenar, de repente el programa se congeló. No me dejaba seguir jugando. Es más, la computadora se negaba a obedecer; tuve que reiniciarla.
Luego de mucho renegar, encontré la falla: había programado las reacciones en cadena de la manera más simple que se me había ocurrido: la función que agregaba una gota en una casilla llamaba, si era necesario, a la función que hacía rebalsar la casilla; y ésta a su vez llamaba a la primera para agregar las gotas en las casillas vecinas.
El problema es que lo que en teoría era el comportamiento adecuado, en la práctica producía, con ciertas configuraciones del tablero, una recursión infinita.
Para resolverlo tuve que afear un poco el código, haciéndolo iterativo en lugar de recursivo.
Me dolió un poco, pero funcionó.
Noviembre 23, 2007 a las 4:01 pm |
El jueguito ese me hizo acordar al “Hexagon”, juego de “estrategia” con fichas azules y rojas. Supongo que este debe ser más complicado.
Ah, te dejo el vínculo a un buen ejemplo de bucle:
http://www.cualquiera.com.ar/media/im7/20071121ABD292.jpg
Noviembre 23, 2007 a las 4:22 pm |
El hexxagon es muy bueno también, pero no es tan impredecible como el Overload. Es más jugable.
Gracias por la imagen!
Noviembre 24, 2007 a las 2:44 pm |
Si al rebalsar un cuadradito se llenaran dos de los de al lado, cual rebalsaria primero? Importa?
Noviembre 24, 2007 a las 3:51 pm |
Ese fue uno de los problemas. La versión recursiva evaluaba los rebalses en orden “depth first”; la versión iterativa en orden “breadth first”, lo cual resolvía el problema.
Quizá en un tablero infinito ambas versiones sean equivalentes; no lo he pensado mucho.
Noviembre 27, 2007 a las 11:04 am |
Este juego me hizo acordar (y no gratuitamente, sinó que claramente se “inspira” en él) en la “pila de arena” (o Sandpile), es el ejemplo más simple de la dinámica de un sistema SOC que se usa. Sus aplicaciones son mucho más “impredecibles” que la dinámica misma.
Yo también había programado una simulación donde se podía jugar con las variables, la cantidad de celdas, la cantidad de granitos de arena necesarios para que rebalse, etc. Inlcuso había empezado a desarrollar un modelo en 3D, pero todavía no había definido la interface. Realmente son sorprendetes las avalanchas que se va generando y de ahí se entendien las aplicaciones de los mismos.
Googleando se encuentra mucha info, incluso teoría y desarrollo de los modelos, como se estabilizan, etc.
Recién hace un ratito entré a este sitio y ya me gustó…
Saludos
Noviembre 27, 2007 a las 1:24 pm |
Gracias Pacha! Es muy interesante el modelo de granos de arena. Había algo interesante también con los incendios forestales. Buscaré más al respecto para comentarlo luego.
Enero 6, 2008 a las 12:22 am |
Qué complicado es el Overload, todavía no le he ganado ni una vez… es muy imprevisible, existen ciertas reglas (como no empeorarte las cosas llenando todo de casillas a rebosar..), pero aún así no lo he conseguido.
¿Algún consejillo?
Por cierto, todavía no he entendido la respuesta que le has dado a Mambru Angeleri.
Un saludo.