Juego de Dados con micro:bit en Python

Proyecto PMB2

Micro:bit Nivel Medio

Material Necesario

Componente Cantidad Descripción Comprar
BBC micro:bit1 udPlaca BBC micro:bit
Protoboard1 udPlaca Prototipado
Breakout1 udBBC micro:bit Breakout
Led Rojo1 ud
Led Amarillo1 ud
Led Verde1 ud
Resistencia 220 Ω 3 uds
Cables Prototipado7 uds

En este Proyecto, vamos a realizar un Divertido Juego de Datos. Las normas del juego son:

  • Mediante el Pulsador «A» de la placa micro:bit, realizaremos las tiradas de los dados
  • La primera Tirada al pulsar «A» será la de micro:bit. Se mostrará en pantalla mediante scroll la «m» de microbit y a continuación la cara del dado de la tirada
  • La segunda tirada al pulsar «A» será la nuestra. Se mostrará en pantalla mediante scroll la «t» de tu y a continuación la cara del dado de la tirada
  • Si el valor de la tirada de micro:bit es mayor que el de nuestra tirada, gana micro:bit y se enciende el led rojo (hemos perdido)
  • Si el valor de la tirada de micro:bit es menor que el de nuestra tirada, ganamos nosotros y se enciende el led verde (hemos ganado)
  • Si el valor de la tirada de micro:bit es igual al de nuestra tirada, no gana nadie y se enciende el led amarillo (hemos quedado en empate)
  • Con el Pulsador «B» reiniciamos la partida, es decir, volvemos al punto inicial y al pulsar «A» tira los dados micro:bit, …

El montaje que vamos a realizar es el mismo que para el Proyecto PMB1.

Puedes encontrar información complementaria sobre los componentes que vamos a utilizar en este Proyecto de Nivel Básico en la Sección Formacion o haciendo click directamente en los siguientes enlaces.

Lo primero que debemos realizar es el montaje que se detalla en el siguiente esquema (recuerda que puedes pinchar sobre cualquier imagen para ampliarla).

Es un montaje sencillo, en el que solo cabe resaltar

  • Los Pulsadores que vamos a utilizar son los que tiene integrados la placa micro:bit etiquetados como «A» y «B»
  • Resistencias de los Led serán de 220 Ω
  • Las resistencias no tienen polaridad, luego da igual el sentido de su colocación pero en el caso de los Leds si es importante tener en cuenta la misma

Una vez realizado el montaje, vamos a poner a continuación el pseudocódigo para entender mejor el algoritmo que vamos a implementar posteriormente.

Programa juego_de_dados_con_microbit_en_python

Importar librerias necesarias;

Definir Imagenes Dados;
imagen_dado1
imagen_dado2
imagen_dado3
imagen_dado4
imagen_dado5
imagen_dado6

Procedimiento mover_dado
  numero_aleatorio (1 , 10);  // Generamos Números Aleatorios entre 1 y 10
Fin Procedimiento mover_dado;

// Realizamos la tirada del dado
// El valor aleatorio debe estar entre 1 y 6 y lo devolvemos como valor de la función
Procedimiento tirar_dado
  valor_dado = numero_aleatorio (1 , 6 );
  devolver (valor_dado);
Fin Procedimiento tirar_dado;

// Dependiendo del valor del dado mostramos la Imagen apropiada
Procedimiento mostrar_valor_dado(resultado)
  Si resultado == 1 entonces
    mostrar(imagen_dado1);
  Fin Si
  Si resultado == 2 entonces
    mostrar(imagen_dado2);
  Fin Si
  Si resultado == 3 entonces
    mostrar(imagen_dado3);
  Fin Si
  Si resultado == 4 entonces
    mostrar(imagen_dado4);
  Fin Si
  Si resultado == 5 entonces
    mostrar(imagen_dado5);
  Fin Si
  Si resultado == 6 entonces
    mostrar(imagen_dado6);
  Fin Si

// Bucle Principal
Mientras (True) Hacer
  # Inicializamos
  # El Turno inicialmente es de micro:bit
  turno := "microbit";
  limpiar_pantalla;
  pin0 := 0;
  pin1 := 0;
  pin2 := 0;

  Mientras (not presionar_boton(B)) Hacer
    mover_dado();   // Hacemos que los números aleatorios sean "mas aleatorios" 
   
    // Cuando pulsamos el boton A
    Si (presionar_boton(A)) entonces
      limpiar_pantalla;
      
      // Si el turno es de micro:bit la tirada es suya
      // Al finalizar cambiamos el turno a nosotros
      // Y viceversa
      Si turno == "microbit" entonces
        tirada_microbit := tirar_dado();
        mostrar_display ("m");
        mostrar_valor_dado (tirada_microbit);
        turno := "tu";
      Sino
        tirada_tu := tirar_dado();
        mostrar_display ("t");
        mostrar_valor_dado (tirada_tu);
        turno := "microbit";
      Fin Si
            
      // Verificamos quien ha ganado la tirada de dados
      // Y encendemos el led correspondiente
      // Rojo     --> Hemos perdido
      // Verde    --> Hemos ganado
      // Amarillo --> Hemos empatado
      Si turno == "microbit" entonces
        Si tirada_microbit > tirada_tu entonces
          pin0 := 1;
          pin1 := 0;
          pin2 := 0;     
        Fin Si
        Si tirada_microbit < tirada_tu entonces
          pin0 := 0;
          pin1 := 0;
          pin2 := 1;     
        Fin Si
        Si tirada_microbit == tirada_tu entonces
          pin0 := 0;
          pin1 := 1;
          pin2 := 0;     
        Fin Si
      Fin Si
    Fin Si
  Fin Mientras
Fin Mientras

Una vez visto el pseudocódigo que define nuestro algoritmo, vamos a ver la programación del mismo mediante Python.

from microbit import *
import random

# Definimos las imagenes para la pantalla de leds de microbit
# de los valores de los dados
dado1 = Image("00000:" "00000:" "00900:" "00000:" "00000:")
dado2 = Image("90000:" "00000:" "00000:" "00000:" "00009:")
dado3 = Image("90000:" "00000:" "00900:" "00000:" "00009:")
dado4 = Image("90009:" "00000:" "00000:" "00000:" "90009:")
dado5 = Image("90009:" "00000:" "00900:" "00000:" "90009:")
dado6 = Image("90009:" "00000:" "90009:" "00000:" "90009:")

# Generamos Numeros Aleatorios entre el 1 y el 10
def mover_dado():
    random.randint(1, 10)

# Realizamos la tirada del dado
# Numero Aleatorio entre 1 y 6 y devolvemos el valor de la funcion
def tirar_dado():
    valor_dado = random.randint(1, 6)
    return valor_dado

# Dependiendo del valor del dado mostramos la Imagen Correcta
def mostrar_valor_dado(resultado):
    if resultado == 1:
        display.show(dado1)
    if resultado == 2:
        display.show(dado2)
    if resultado == 3:
        display.show(dado3)
    if resultado == 4:
        display.show(dado4)
    if resultado == 5:
        display.show(dado5)
    if resultado == 6:
        display.show(dado6)


# Bucle Principal
while True:
    # Inicializamos
    # El Turno inicialmente es de micro:bit
    turno = "microbit"
    display.clear()
    pin0.write_digital(0)
    pin1.write_digital(0)
    pin2.write_digital(0)
    
    # Mientras no presionemos el Pulsador "B"
    while not button_b.is_pressed():
        # Hacemos que los numeros aleatorios se ejecuten
        # Es decir, aleatorizamos más los numeros aleatorios
        mover_dado()

        # Cuando pulsamos el Pulsador "A"
        if button_a.is_pressed():
            display.clear()

            # Si el turno es de micro:bit la tirada es suya
            # Al finalizar cambiamos el turno a nosotros
            # Y viceversa
            if turno == "microbit":
                tirada_microbit = tirar_dado()
                display.scroll("m")
                mostrar_valor_dado(tirada_microbit)
                turno = "tu"
            else:
                tirada_tu = tirar_dado()
                display.scroll("t")
                mostrar_valor_dado(tirada_tu)
                turno = "microbit"

            # Verificamos quien ha ganado la tirada de dados
            # Y encendemos el led correspondiente
            # Rojo     --> Hemos perdido
            # Verde    --> Hemos ganado
            # Amarillo --> Hemos empatado
            if turno == "microbit":
                if tirada_microbit > tirada_tu:
                    pin0.write_digital(1)
                    pin1.write_digital(0)
                    pin2.write_digital(0)
                if tirada_microbit < tirada_tu:
                    pin0.write_digital(0)
                    pin1.write_digital(0)
                    pin2.write_digital(1)
                if tirada_microbit == tirada_tu:
                    pin0.write_digital(0)
                    pin1.write_digital(1)
                    pin2.write_digital(0)

Como siempre, espero hayas aprendido y disfrutado con este Proyecto.

Si tienes dudas o quieres hacer cualquier aportación que consideres de interés, puedes realizar todos tus comentarios a continuación.

Compártelo en tus Redes Sociales

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies