Source original: http://blog.darkhogg.es/2011/07/spacechem-mas-que-un-juego/
Cualquiera que sepa algo de Zachtronics Industries sabe de qué hablo cuando digo que sus juegos no son exactamente para toda la familia. Zach tiene por costumbre hacer juegos de puzzle poco convencionales, más enfocados a la resolución de problemas en general que con encontrar una solución concreta a un nivel concreto. SpaceChem es todo eso y más.
(Que no te engañe la imagen, el juego tiene una curva de dificultad fácil de tomar)
En SpaceChem debemos transformar una serie de átomos y moléculas en otros, usando para ellos reactores. Estos reactores contienen dos elementos mecánicos que nos permiten mover, rotar, unir, separar, etc. los elementos de entrada para transformarlos. Nuestros ‘waldos’ se desplazan por el escenario siguiendo un camino concreto que nosotros mismos hacemos, ejecutando órdenes a su paso. En ciertos niveles podemos unir más de un reactor de este tipo para formar una cadena de producción.
Como una imagen vale más que mil palabras, digo yo que un vídeo valdrá bastante más:
Lo que hace a SpaceChem diferente de otros juegos de puzzle es la infinidad de soluciones válidas a las que se pueden llegar en un mismo nivel. Tanto que el calificativo de puzzle se le queda corto: En los puzzles típicamente existe una única solución correcta, o variaciones de dicha solución, que el diseñador oculta de alguna forma y nos deja la tarea de encontrarla. SpaceChem es más que eso, es un juego de resolución de problemas: Dadas unas herramientas (los reactores) y unos materiales (las entradas al reactor), hemos de apañárnoslas para conseguir unos productos (las salidas del reactor). No existe ninguna pista de cómo hemos de hacerlo, eso es justamente lo que hemos de conseguir nosotros. Nuestro objetivo no es descubrir la intrincada solución que pensó el diseñador, sino idear una nosotros mismos, que puede ser o no similar a la que dicho diseñador pensó en un principio (si es que pensó alguna). A su vez éste tipo de juegos nos da la posibilidad de medir de alguna manera cómo es nuestra solución de buena, según el número de ciclos que tarda o de símbolos usados, por ejemplo.
No es secreto que Zach diseña lo que él mismo llama juegos para ingenieros. Uno de sus juegos, KOHCTPYKTOP, nos introduce de lleno en la piel de un ingeniero electrónico. Por suerte para todos, los siguientes juegos que hizo no eran tanto para ingenieros, aunque conservaran ese ambiente ingenieril que define a Zach. Estoy hablando de The Codex of Alchemical Engineering y SpaceChem (y un poco en menor medida, de The Bureau of Steam Engineering). SpaceChem es, en realidad, la evolución lógica de The Codex, tintado de química en lugar de alquimia y cambiando la mecánica fundamental de brazos mecánicos fijos a brazos mecánicos completamente móviles.
The Codex trabaja con un modelo de bucles repetitivos, donde el escenario en sí no repercute de ninguna manera en cómo se comportan los brazos. SpaceChem va un paso más allá permitiendo puntos de sincronización, toma de decisiones basadas en datos externos, sensores e incluso una cierta memoria. A todo ello sumémosle la capacidad de procesamiento paralelo que introduce el tener varios reactores funcionando al mismo tiempo, capacidad que estaba presente en The Codex hasta cierto punto, pero no de forma tan marcada.
A estas alturas cualquiera con un mínimo de conocimientos de programación debería saber a dónde quiero llegar. Y quien no, probablemente esa última frase le haya abierto la mente. Resulta que hay decenas de conceptos de la programación que pueden aplicarse a SpaceChem, desde cuestiones muy básicas hasta conceptos de concurrencia bastante más complejos:
- Ejecución secuencial: Tanto en SpaceChem como en la programación, las instrucciones se ejecutan una a una, en un orden determinado y una detrás de otra.
- Bucles: En SpaceChem, el objetivo principal es producir un número concreto de moléculas o átomos. Generalmente las soluciones se construyen de forma que el sistema funciona correctamente de forma indefinida (no siempre es así, luego hablaré de ello). En programación igualmente existen bucles que nos permiten realizar un cierto proceso de forma indefinida. Los videojuegos y los sistemas operativos en realidad no son más que un bucle casi infinito (puesto que se puede terminar) que ejecuta las instrucciones adecuadas.
- Modularización de la solución: En muchísimas ocasiones nos encontramos niveles en los que se nos presenta una tarea muy complicada que podemos resolver usando tareas más sencillas. En programación esto es el día a día, y dudo que nadie sea capaz de programar bien sin realizar una buena división de tareas.
- Entrada y salida con bloqueo: Cuando en SpaceChem tratamos de ejecutar una instrucción INPUT y no hay nada disponible, o un OUTPUT y la tubería de salida está llena, automáticamente el waldo espera a poder realizar la acción. Las operaciones de entrada y salida en programación se comportan exactamente igual en la mayoría de situaciones:bloquean el proceso hasta que existan datos de entrada o sitio a la salida. Lo cual nos lleva al siguiente punto:
- Bloqueo mutuo: Conocido generalmente como deadlock, se trata de una situación en la que dos o más procesos quedan a la espera de recursos que están siendo utilizados por otro de los procesos que forman parte del bloqueo. El ejemplo en SpaceChem se puede encontrar fácilmente en el nivel No Thanks Necessary. Una de las entradas nos aporta N2 y O2 con probabilidades de 25% y 75% respectivamente, es decir, 3 átomos de O por cada átomo de N, con objetivo de conseguir NO3. La solución típica consiste en diseñar un reactor que tome como entrada O2/N2 y envíe átomos de O por la salida superior y de N por la inferior. Este reactor se conecta a un segundo que, a partir de átomos sencillos de O y N, forma el NO3. El problema es que la entrada, aunque a lo largo del tiempo tiende a la uniformidad, es aleatoria, y no podemos asumir que los elementos llegarán exactamente como pensamos (tres O por cada N). En ocasiones podemos llegar a tener 8 O y ningún N, o incluso 4 N y ningún O. Sin espaciar adecuadamente las tuberías, es muy normal que el primer reactor quede a la espera para enviar un O que ya no cabe a la vez que el segundo queda a la espera de un átomo de O que no hay. Ninguno de los dos reactores avanzará, por lo que ambos esperarán indefinidamente. En el mundo de la programación el problema es algo más complicado y generalmente ocurre porque dos procesos distintos tratan de acceder a varios recursos a la vez y en orden inverso, como dos ficheros. La Wikipedia lo explica muy bien, mejor que yo de hecho.
Estos son unos pocos ejemplos, pero hay más cosas que podemos relacionar. Por ejemplo, un reactor puede verse como un proceso con dos hilos (los waldos) que se conecta con el resto de procesos del sistema mediante colas (FIFOs, las tuberías).
Con todo esto, SpaceChem y muchos otros juegos del estilo, son algo más que juegos. Son juegos en cierta manera educativos. Te obligan a pensar de forma muy productiva, puesto que el reto que se te presenta es resolver un problema, con una serie de herramientas, sin ningún tipo de guía, algo a lo que se supone que nos enseñan a los ingenieros en general, y a los informáticos en particular.
Está muy feo eso de plagiar contenidos. Just saying.
Puse el source, como hago cuando copio cosas de otros sitios (no me apropio de nada vaya), pero obviamente, si estas molesto por ello no tengo reparo en borrar la entrada. Tu dirás
No te preocupes, que da igual.
Lo que sí que deberías dejar claro es cuándo se trata de un post «copia» desde el principio, y no un enlace tan escueto que casi ni se ve al final. Así, como recomendación, tanto para no confundir a tus lectores, como para no levantar molestias. O no tantas, en todo caso.
A mí particularmente me da bastante igual. Pero he visto algún otro contenido bastante elaborado que vaya… por si no lo sabes, algunos motores de búsqueda (Google entre ellos) penalizan contenidos duplicados. Y de nuevo, a mí me la pela, mi blog no lo lee ni su puta madre, pero hay a quien puede mosquear bastante más.
Y bueno, gracias por lo menos por tomarte la molestia de ir a Twitter a por mí. Que yo pensé que mi comentario caería instantáneamente en el olvido.
Entiendo, voy a cambiar entonces la localización del link (en breves una vez esté este reply veras los cambios). La mayoría del contenido de mi blog no es copiado así que no creo que haya problemas con google de momento, pero si, estaba al tanto.
Y no es molestia, tengo un ‘código moral’ y no me gusta copiar sin avisar, lo que pasa es que no me había dado cuenta en tu blog de la columna derecha (twitter), y como tiene pocas entradas pues pensaba que lo tenías algo abandonado (es decir, pocas posibilidades de contacto = demora indefinida para poder publicarlo, pero no era asi… así que me anoto un fail por mi parte)
En cualquier caso, no quería causar molestias, y menos a una persona con casi los mismos gustos que yo (según veo en tu blog-twitter, yo también estoy en ingeniería informática xD)
Ya por cambiar un poco de tema… has llegado a jugar al kohctpyktop no? Por donde te quedaste ? Seguramente lo acabaste viendo tu capacidad de resolver problemas desde tus videos de youtube (de spacechem, esa solución para el grafeno tiene tela xDD)
Feliz 5000 tweets según veo mientras escribo esto xD
El KOHC… KONC… el jodido CONSTRUCTOR-en-cirílico no lo llegué a terminar por pura pereza. De hecho hubo un par de soluciones (el oscilador y el generador de pulso) que tuve que mirar la primera vez. Si no recuerdo mal, lo último que hice fue el siguiente nivel al RS (que no me preguntes cual era), y bastante tuve. Es un nivel demasiado bajo como para dar para mucho, y me acabó cansando.
Me gustó infinitamente más el Alchemical Engineering, aunque soy absolutamente incapaz de hacer nada del Magnum Opus. Y lo que más me gusta de SpaceChem es precisamente ese olor que tiene al Alchemical Engineering.