SpaceChem – Más que un juego

Source originalhttp://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.


【東方】Tear of Girl (Cirno’s Theme Remix)

Bueno, he aquí una canción de touhou que yo mismo he subido en HD (no la encontraba en Youtube)

Umineko no Naku Koro ni OP

La BSO de esta serie es simplemente maravillosa. Si vais a ver la serie, primero ved Higurashi no Naku Koro ni antes de esta serie (estan relacionadas)

 

Edit: Os dejo también el Opening de la Novela Visual de Umineko no Naku Koro ni, que también es increíble

Festival of Life – True Tears

Jump

Adoro esta canción de Laura Shigihara, creadora de la banda sonora de Plants vs Zombies (así como música para otros 20 videojuegos publicados),  podeis seguirla en su blog o en su canal de youtube

 

Uno de los vídeos más epics que he visto

O al menos de los que más me motivan, la música y el vídeo osom

Skygunner – Towards a Far Away Sky

Precioso

A Wild Homework Appears!

Estudiante vs Deberes

Dream of the Shore Near Another World

Como últimamente estoy algo ocupado, os pondré alguna canción de las buenas:

 

Happy 東方 Valentine’s Day

Seguir

Get every new post delivered to your Inbox.

Únete a otros 228 seguidores