jueves, 12 de julio de 2012

Simulación, movimiento e impacto en Excel


Atendiendo a un par de comentarios en la entrada de Máquinas recreativas de los 80 en tu Excel que parece haber suscitado bastante interés, escribo esta nueva entrada. Comenté que tenía previsto hacer un tetris y hay curiosidad sobre cómo. Son cuatro ideas sobre cómo hacerlo que hay que depurar y mejorar. Cuando finalmente lo construya puede que haya encontrado algo mejor, pero son mi primera impresión sobre por dónde pueden ir los tiros. De hecho, si a alguno de vosotros se le ocurre alguna mejor está invitado a compartirla con nosotros.

Ante todo tengo que decir que hace falta utilizar VBA, sin entrar en detalles de código propongo mi reflexión como ejercicio teórico. En primer lugar, una de las cosas que me llamó la atención era cómo conseguían los caracteres necesarios para representar las naves y personajes, (ya que estos no están presentes en Excel…). Observando uno de los juegos que me he descargado “Space Invaders”, es más sencillo de lo que parece. Basta con hacer cuadrados las celdas y minimizar cuanto sea necesario el zoom utilizando el conjunto de celdas preciso para representar el gráfico deseado.

Como una imagen vale más que mil palabra, tenemos el resultado:


Compuesto por:


En el caso del tetris, es bastante más evidente, aunque cuando me ponga a hacerlo, lo más probable es que utilice un UserForm como pantalla, por lo que utilizaré otro sistema.


Ni que decir tiene que todas esas celdas que representan cada elemento actúan a partir de ese momento como una unidad. De este modo, la cuestión de cómo simular el entorno de la máquina queda resuelto (y es bastante más sencillo de lo que se podría imaginar…).

Hablaré de dos cuestiones mas que a primera vista intuyo que son de lo más importante para la construcción del juego: el movimiento y la determinación de un impacto. Ambas están relacionadas.

Empezaremos por el movimiento. Bastaría con cambiar el formato de las celdas a cómo sería desplazando una celda a la derecha, izquierda,… todo el bloque. Algunas quedarán como estaban y otras cambiarán: Por ejemplo, en el caso de nuestro marciano verde avanzando hacia la derecha, desplazaríamos todo el conjunto de celdas una celda a la derecha así la celda BE73 pasaría a tener fondo negro la celda BF73 seguiría con fondo verde y la celda BG73 pasaría de fondo negro a fondo verde. Haciendo este ejercicio en todas las celdas de forma sucesiva tendríamos el movimiento del marciano.

Para determinar el impacto es similar. Cada celda donde hay marciano debería tener un valor, y donde no lo hay estar en blanco. Para determinar si hay impacto bastaría con comprobar que tras el movimiento todas las celdas ocupan lugares sin datos en ellas. Si no es así, es que algo se ha interpuesto en su camino, por lo general un proyectil… En el caso de la bajada de esta pieza del tetris, habría que comprobar si las celdas J22 y K20 tienen algún valor con lo que se detendrá el movimiento o están vacías, en cuyo caso puede seguir bajando.


Como he dicho antes, esto se programa con VBA, no hay posibilidad de hacerlo con los comandos de Excel propiamente dicho aunque a bote pronto se me ocurre que alguno podría ayudar como el formato condicional,… si automáticamente cada vez que una celda cambia de valor se actualiza el formato, tendremos menos que programar. Bastaría con desplazar conjuntos de números.

Como idea superficial esto es lo que propongo para hacer de Excel un videojuego, cosa que por descontado no es la finalidad del programa.

En la próxima entrada haré un pequeño ejercicio construyendo en Excel una marquesina en la que se muestre un título en movimiento. Lo haré utilizando un procedimiento distinto del que planteo para estos juegos pero que creo que puede por su simplicidad despertar la creatividad de muchos sin ser necesarios conocimientos profundos de VBA.

No hay comentarios: