Esta semana te voy a contar cómo he resuelto el problema de crear el juego del buscaminas.
Espero que tras ver la entrada de la semana pasada, le hayas dado al rosco, y hayas llegado a una solución.
Ni que decir tiene, que lo que aquí te voy a contar, es solamente una solución, no LA solución.
A buen seguro habrá programadores que hayan alcanzado otras soluciones, algunas mejores y otras peores. Pero todas válidas si funciona el programa correctamente (bajo mi punto de vista).
Una nueva partida del buscaminas con un S7-1200
Básicamente al crear una nueva partida, lo que debemos realizar es rellenar el tablero de 16×16 casillas con las 40 bombas que deben ir alojadas.
Para ello, vamos a hacer lo siguiente:
- Borrar cualquier vestigio de la partida anterior
- Crear un DB con un array de 16×16 posiciones de enteros.
- Crear una rutina que coloque las 40 bombas de forma aleatoria. Para ello, usaremos la biblioteca de Siemens que genera números aleatorios. Deberemos comprobar que las posiciones, no estén ocupadas. Si no está ocupada, la ocuparemos, y si lo está, elegiremos una nueva posición aleatoria hasta completar las 40. Como crear un bucle cerrado puede alargarse mucho al tener que buscar las 40 posiciones aleatorias, solo generaremos una posición aleatoria por ciclo de scan y evaluaremos si es válida o no. De esa forma, evitamos que el watchdog del PLC se vaya de madre.
- Recorrer todas las casillas (16×16) rellenando cada posición con las bombas que hay alrededor. Esto nos servirá para luego, cuando el jugador mine una posición, el resultado esté ya calculado.
Desarrollo del juego del buscaminas en TIA Portal
Tendremos dos botones, uno de minar y otro de bandera.
Con ello seleccionaremos el tipo de acción que queremos hacer.
La forma de trabajar entre el HMI y el PLC es mediante los valores de cada posición. Así, crearemos una lista de textos en el PLC con el que mostraremos una B para indicar la bandera de una bomba, de 1 a 5 para indicar la información de bombas contiguas o que no hay nada, o una X cuando se haya terminado la partida porque se ha explotado una bomba.
Al pulsar sobre uno de los 16×16 botones, evaluaremos la posición en función de la acción seleccionada:
- Si es marcar con una bandera, se sumará una cantidad conocida a la cantidad de la posición (en mi caso 100)
- Si es minar la posición, se evalúa si hay una bomba o no. Si es una bomba, explota todo, y se acaba la partida mostrando las posiciones donde estaban las bombas mediante una x. Para ello, recorremos todas las posiciones sumando si hay una bomba (299)
- En caso de que sea una posición con bombas alrededor, le sumará 10 unidades.
- En cao de que sea una posición vacía (que no haya bombas alrededor), la marcaremos con un 66, y ejecutaremos una rutina de limpieza de la zona buscando los límites donde ya hay una bomba.
La parte del HMI
El HMI es sencillo.
Tan solo hay que colocar los 16×16 botones cuya apariencia dependa de la posición que ocupe (fila, columna).
Esto, que se resume en una línea, tiene su trabajo, ya que lo tienes que hacer, uno a uno.
Además, como ves, tenemos un contador de tiempo, los botones, ¡y poco más!
El vídeo de explicación
¿Qué te ha parecido?
Espero que, en primer lugar, lo hayas resuelto.
Si no lo has resuelto, al menos tienes unas directrices de cómo podrías hacerlo.
Descarga del proyecto
No tienes acceso a la descarga del proyecto.
Si eres un Guorker, puedes identificarte en este enlace para acceder al contenido o suscribirte a los cursos si aún no lo eres.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.