Combinamos el microcontrolador "infantil" y los juegos de mesa

Me dieron recientemente Micro: Bit. Lo que para enseñar a los escolares, de la BBC y ahora tiene una popularidad cada vez mayor (especialmente después de que los chinos prometieron hacer que su clon fuera dos veces más barato). Yo mismo conozco a Arduino, fue uno de los pioneros en nuestro país que mostró cómo cruzar Arduino con Scratch y esta bufanda ... al principio no me interesaba. Pero un poco más tarde nació la idea: ¿pero no cruzarla con juegos de mesa?

Yo mismo soy el autor del "escritorio", su fan. Y la presencia de un entorno de programación bastante amigable (inicialmente la placa está programada en Python y Java, pero hay un entorno de bloque con un simulador) me hizo intentar implementar esta idea.

Debo advertirte de inmediato: ¡no soy un programador! Y esto es bueno, ya que incluso mi estudiante de primaria y cualquiera de ustedes pueden repetir mi investigación. Y conviértase en un dispositivo "personalizado" que ayude y simplifique la vida con los juegos de mesa.



Al primero se le ocurrió la idea de implementar dados D6 ordinarios (que son del 1 al 6). Apenas dicho que hecho. Al ejecutar el entorno makecode.microbit.org, esbocé un programa simple que, cuando presiona el botón A, genera un número aleatorio del 1 al 6 y lo muestra en la matriz de LED del dispositivo.

Para "decorar" el código, agregué un par de imágenes de la "generación" del cubo y listo. Prepara un simple cubo electrónico.



¿Y si necesitas un cubo D12? Generamos un número aleatorio hasta 12. ¿Y D20? Hasta las 20 por supuesto. Pero el problema es que solo se coloca un dígito en la "pantalla" y se desplazan dos dígitos, pero solo una vez por el comando para enviarlos a la matriz. Que hacer Tuve que agregar una variable para almacenar el resultado, mostrar ciclos y repetir el valor del último lanzamiento de hueso presionando el botón B.



Reemplazar el evento de presionar un botón con una lectura de "sacudir" (Micro: Bit tiene un acelerómetro) puede hacer que el proceso de "lanzar" sea más realista.

¿Y si necesitas tirar dos dados? La tarea se ha vuelto más interesante. Además, quería hacer dados como debería con puntos. Afortunadamente, la matriz (tamaño 5x5) consta de LED que están lo suficientemente lejos y si los enciende incluso cerca, puede distinguir fácilmente dónde "unidad" y dónde "seis".

Ahora estaba haciendo "dados" para juegos como Monopoly and Colonializers (donde se lanzan 2 dados) o Machi Koro (donde se deben lanzar uno o dos dados D6 durante el juego). Pero el problema surgió al mostrar estos lanzamientos.

Como escribí anteriormente, la matriz está en Micro: Bit 5x5. Para mostrar un cubo hexadecimal normal, necesitamos 3x3 LED.



También se pueden mostrar dos cubos en el centro, uno tras otro, pero visualmente es malo leerlos. Por lo tanto, decidí mostrar un cubo con un desplazamiento en la esquina superior izquierda y el segundo en la esquina inferior derecha en un bucle infinito hasta que se realice alguna otra acción.

Después de descubrir que el comando while no funciona bien con la lectura de eventos al presionar un botón y al escribir un sistema de muletas a partir de variables y verificarlas, obtuve el resultado que necesito. Al presionar el botón A, se generó un cubo, en B - dos dados, A + B apagó la pantalla y llevó el sistema a su estado inicial.

También decidí "colocar" el generador de números aleatorios usando la fórmula simple dado = ronda (aleatorio (de 50 a 649) / 100). Los "cubos" comenzaron a caer un poco más realistas.

El "código de monstruo" final resultó así (el código para generar directamente los gráficos de los cubos no encajaba, ya que es muy inferior).



Y el resultado del trabajo se puede ver en el video:


Ya algo interesante. Además, debido a un cambio en las esquinas, se pueden mostrar secuencialmente hasta 5 cubos y pueden ser lo suficientemente secuenciales.

¿Puedo hacer otra cosa? En mi nuevo juego de mesa "Parobot Card League", los dados se usarán para dos cosas: determinar la bonificación para los jugadores en la ronda actual y determinar el equipo para robots robot en el campo de juego. Por lo tanto, se decidió implementar lo siguiente:

  1. Contador redondo (hay 8 en total)
  2. Determinación de la Bonificación en la ronda actual (botón A)
  3. Definición del comando bot (botón B)
  4. Avanzar a la siguiente ronda (presionar repetidamente el botón A)

Implementé cubos "personalizados", mostrando inmediatamente en la pantalla el símbolo de la tarjeta de bonificación que se cayó (o N, si no es así) y la infografía de los equipos de Bot: la flecha de movimiento (hacia adelante, hacia atrás, gira a izquierda y derecha, golpe y defensa).



El funcionamiento del programa es visible en el video:


Dado que la descarga a Micro: Bit es simple (solo conéctelo a través de un micro-USB a una computadora y transfiera el archivo hexadecimal del programa a la raíz del disco que aparece), hice una página en mi sitio web donde quiero colocar "presets" listos para varios juegos de mesa: www.simplerobot.org/elektronika

Allí puede encontrar archivos hexadecimales ya preparados y un enlace a los códigos fuente. Uso en salud. Puedes comprar un tablero en el mismo Amperka o "de los chinos" en Ali.

¿Qué más quieres hacer? Primero, "desate" la placa de la alimentación externa atornillando el protector de las baterías.



En segundo lugar, intente implementar sobre la base del tablero "automático" para jugar solo con un oponente de la computadora y use la brújula y el acelerómetro integrados.

Si crea su propio programa personalizado para un juego de mesa y me lo envía, con gusto lo publicaré en el sitio. O puedo hacerlo a petición suya (lo mejor que pueda y las limitaciones de mi tablero).

Source: https://habr.com/ru/post/479794/


All Articles