Juegos en la Raspberry Pi Pico

juegos en raspberry pi pico

En este post, quiero hablar sobre los juegos en la Raspberry Pi Pico.

Recuerdo mi primer dumbphone, que entonces se llamaba "teléfono". Podía jugar a juegos sencillos como el Snake. Eso era lo más novedoso.

Antes de eso, había que llevar un dispositivo de mano separado que jugara al Tetris o un sistema de juego más dinámico como una Gameboy.

El Raspberry Pi Pico es un microcontrolador bastante potente comparado con los que funcionaban en los años 90. Naturalmente, nos ofrece la posibilidad de jugar a juegos de esa época.

¿Qué potencia tiene la Raspberry Pi Pico?

Comparada con una consola de los 80, la Raspberry Pi Pico es extremadamente potente. 

Si programas un juego que sea similar a los requisitos de recursos de un juego de los años 80, la Raspberry Pi Pico probablemente lo superará con creces.

Es en los años 90 cuando empieza a ser un poco más difícil afirmar una conclusión tan clara.

Por un lado, si piensas en él como un dispositivo capaz de reproducir juegos similares a los que encontrarías en una Gameboy o en un teléfono móvil, probablemente estarás satisfecho.

Sin embargo, los juegos de finales de los 90 se volvieron mucho más exigentes. Por ejemplo, no podrás jugar al Quake 3 (un juego de 1999) en el Pico.

De hecho, aunque la Raspberry Pi Pico puede jugar a Doom (1993), fue un esfuerzo de seis meses para la persona que lo codificó porque fue una tarea bastante difícil comprimir el juego en los 2MB de almacenamiento que tiene la Raspberry Pi Pico.

Así, aunque el Pico tiene dos procesadores de 133MHz, tiene una memoria RAM y un almacenamiento limitados, lo que dificulta su uso.

Veamos cómo se compara con una Gameboy:

EspecRaspberry Pi PicoGameboy (1989)Gameboy Color (1998)
MostrarLCD en color o tinta electrónica, depende de su imaginación4 tonos de escala de grises10, 32, 56 colores
ResoluciónDepende de tu pantalla, pero está limitado por los recursos de Pico.160x144px160×144 px
CPUDoble núcleo a 133 MHz4MHz4MHz/8MHz
RAM264KB8KB32KB DE RAM, 16KB DE VRAM
Almacenamiento2MB Cartucho del cartucho: 8 MB de ROM, 128 KB de RAMCartucho del cartucho: 8 MB de ROM, 128 KB de RAM

¿Por qué jugar en la Pico y no en la Zero/Pi 4?

Buena pregunta.

Como sabes, la Raspberry Pi Pico es un microcontrolador mientras que la Raspberry Pi Zero o la Pi 4 son microordenadores.

Ambos pueden jugar, pero el Raspberry Pi Pico está mucho más limitado.

Dicho esto, si quisieras construir un emulador o un sistema de juegos a partir de la Raspberry Pi Zero o la Pi 4s hoy en día (en 2022), será mejor que ya tengas una o de lo contrario tu mayor cuello de botella será el stock.

Es muy difícil conseguir una Pi Zero y bastante complicado conseguir una Pi 4.

Por otro lado, el Pico es abundante. Además, arranca casi inmediatamente, mientras que el microordenador Pis tiene que pasar por un largo proceso de arranque.

El Pico también dura mucho más. Si quieres una configuración móvil que funcione durante horas y sea portátil, te irá mucho mejor con el Pico.

Por último, además del stock, el Pico también es abundante en stock.

Para ser justos con la Pi Zero y la Pi 4, definitivamente puedes jugar mejores juegos y tener mejores resultados de emulación con esos microordenadores. Como verás en la siguiente sección, el Pico tiene dificultades para jugar a juegos que el Zero o el Pi 4 pasan sin problemas.

¿A qué juegos puede jugar la Raspberry Pi Pico?

Empezaremos por ver lo que la comunidad de juguetones ha sido capaz de reproducir en la Raspberry Pi Pico.

RP2040 Doom es la respuesta a "¿se hará Doom?"

Sí. La Raspberry Pi Pico puede jugar a Doom.

Un tipo llamado Graham Sanderson, de Austin, Texas, consiguió portar Doom a la Raspberry Pi Pico.

¿Su fórmula mágica?

while (!convice_myself_its_probably_impossible()) {
    do_some_more();
}

Él explicó en su documentación del proceso que se enfrentó a múltiples restricciones por las especificaciones de hardware que tenía la Raspberry Pi Pico. Al fin y al cabo, no es un dispositivo destinado a los juegos.

No obstante, Graham también decidió endurecer la portación de Doom. Quería la auténtica experiencia de Doom, lo que significaba tener una resolución de 320×200 (en color), sonido estéreo, música OPL2, guardar y cargar, multijugador en red y otras características que están disponibles en el nombre original.

El hecho de incluir tanto juego en la Raspberry Pi Pico supuso un reto para la memoria. Tanto la RAM como el almacenamiento eran cuestiones clave.

En primer lugar, la Raspberry Pi Pico sólo tiene 2 MB de almacenamiento, pero la versión shareware de Doom tiene el doble de ese tamaño. Mientras que otros desarrolladores podrían decidir recortar ciertas características como las pantallas de bienvenida y el downsampling de las texturas, Graham no quiso hacerlo.

La memoria RAM también era otro problema, ya que el código fuente de Chocolate Doom requiere alrededor de 1MB de RAM, mientras que el Pico sólo tiene unos 264KB. La memoria es escasa porque el renderizado de los gráficos ocupa una gran parte del espacio de la RAM, pero la RAM también es muy importante para el buen funcionamiento del juego. Para gestionar ambos aspectos, Graham tuvo que hacer lo que llamó "liposucción".

Puede obtener más información en la documentación, observando su lista de reproducción en YouTube o revisión del código.

Emulador de NES

La Raspberry Pi Pico se ha convertido con éxito en un emulador de NES.

En un hilo del foro de Emulator Zone, el usuario ropgar dijo que la Raspberry Pi Pico tiene el poder de emular una NES y puede hacer 60 cuadros por segundo y puede emular APU y PPP perfectamente.

Ropgar utiliza un teclado PS/2 como mando, pero también puedes utilizar el mando original de NES.

El sonido es bueno y no hay fallos en el vídeo ni en la música de fondo del juego.

El Pico tiene alrededor de 1,5 MB de espacio en la memoria flash para diferentes juegos, que se pueden elegir pulsando Caps Lock para cambiar de juego. 

Los juegos que ropgar logró cargar en su demo son Pacman, Arkanoids, DK, DK Jr, BubbleBobble, Galaga y muchos otros.

El único inconveniente es que no hay un código fuente público ni un tutorial sobre cómo hacerlo.

Emulador de Gameboy para la Raspberry Pi Pico

Puedes hacer tu propia carcasa de Gameboy y luego utilizar la Raspberry Pi Pico para emular la Gameboy.

La parte complicada aquí es que en realidad no es algo que haya tenido mucho éxito. En otras palabras, lo que se construye puede funcionar, pero no siempre.

Veamos las opciones que existen.

Emulador de Rust Gameboy (Puerto OxidGB Pico)

Imagen de u/j_selby (Reddit)

Al ver la imagen de Pokemon en la pantalla, me emocioné inmediatamente.

Sin embargo, James Selby escribió en realidad sobre los desafíos y deficiencias de su emulador de Gameboy, escrito en Rust, llamado OxidGB Pico Port.

"Ha sido un viaje, un viaje frustrante, pero un viaje que he disfrutado mucho desde el punto de vista educativo", dijo Selby.

Problemas y victorias

Este es el principal reto: El emulador de Rust Gameboy "no es exactamente jugable en su estado actual, por desgracia".

Selby dijo que los juegos sólo consiguen unos 10 FPS porque el código del emulador es un cuello de botella, así como la lenta interfaz SPI de la pantalla.

Es posible acelerar las cosas, pero eso requeriría tiempo para planificar y aplicar.

La entrada no ha sido configurada, ya que los juegos no eran jugables. 

Prueba del puerto Pico OxidGB

Si quieres probarlo, puedes seguir las instrucciones de Selby en su Repo de Github para el puerto Pico de OxidGB.

Emulador RP2040_GB

Hardware y configuración del emulador RP2040_GB, foto de Mahyar Koshkouei.

Otro emulador que puedes probar es el RP2040_GBque se basa en el Cacahuete-GB emulador.

El rendimiento del RP2040_GB es decente, y Koshkouei afirma que su configuración "funciona a más de 70 fps sin emulación de audio. Con salto de fotogramas y entrelazado, puede funcionar hasta a 120 fps".

Como puedes ver, el RP2040_GB está jugando a Pokemon. Los pasos para poner una ROM en el RP2040 son los siguientes:

  • Debe tener el SDK de Pico
  • Convertir .gb o .gbc ROM a un archivo de cabecera de C utilizando el xxd programa
  • Modificar el archivo convertido añadiendo dos líneas de código (en el readme de Github)
  • Copiar la ROM en el src y compilar.

Este emulador tiene algunas limitaciones:

  • "Este emulador es impreciso y es un trabajo en progreso... algunos juegos pueden ejecutarse incorrectamente o no ejecutarse en absoluto". 
  • Los juegos de Gameboy Color arrojarán un error
  • No está optimizado para el microcontrolador: Koshkouei sugirió que "utilizar una APU optimizada para el espacio y la velocidad" puede ayudar.

Consulte el repositorio Github del RP2040_GB aquí.

Compilación de Mega Juegos con Raspberry Pi Pico

Lo mejor de este proyecto es que es sencillo y las instrucciones son adecuadas para que puedas empezar con una consola de juegos Raspberry Pi Pico rápidamente.

Roger Bühler tiene piezas, instrucciones y demostraciones incluidas en su Github.

La compilación de Mega Games viene con los siguientes juegos:

  1. Tiny Gilbert
  2. Pequeño truco
  3. Tiny Invaders v3.1
  4. Tiny Pinball v2
  5. Tiny Pacman v1.2
  6. Tiny Bomber v1.3
  7. Tiny Bike v1.2
  8. Tiny Bert 1.1
  9. Tiny Arkanoid v2
  10. Tiny Tris v2.1e
  11. Pequeña placa
  12. Tiny DDug
  13. Tiny Missile v1.1
  14. Tiny Lander v1.0 ( por Roger Buehler )
  15. Tiny Morpion
  16. Tiny Pipe

Las piezas que necesitarás son las siguientes:

  1. Raspberry Pi Pico
  2. SSD1309 Pantalla OLED SPI de 128x64px (pantalla de 2,42" con relación 2:1)
  3. Zumbador piezoeléctrico
  4. Cinco botones
  5. Tablero de pruebas
  6. Cables de arranque
  7. Opcional: resistencias de 10 ohmios, condensador electrolítico de al menos 10V y 220uF

También necesitarás Biblioteca SSD1306 de Adafruit.

A continuación te explicamos cómo conectar la pantalla:

  • GND -> Pantalla GND 
  • 3V3(OUT) -> Pantalla VCC 
  • GP16 -> Visualizar DC (Comando de Datos) 
  • GP17 -> Mostrar CS (Selección de canal) 
  • GP18 -> Pantalla SCL (Reloj) 
  • GP19 -> Pantalla SDA (MOSI) 
  • GP20 -> Pantalla RES (Reset)

Y para conectar los botones:

  • GP15 -> botón ARRIBA 
  • GP14 -> botón DOWN 
  • GP13 -> botón IZQUIERDA 
  • GP12 -> botón DERECHO 
  • GP11 -> botón FIRE (todos los botones a GND)

Y para conectar el zumbador piezoeléctrico:

  • GP10 -> Zumbador(+) 
  • GND -> Buzzer(-)

Instalación del software:

Para instalar el software, es necesario utilizar el IDE de Arduino.

Juego tipo Tamagotchi en la Raspberry Pi Pico (Pico-Tamachibi)

¿Por qué se llama Pico-Tamachibi?

Según Kevin McAleer, creador de este dispositivo, "tama" significa "huevo" y "chibi" se refiere a los gráficos en los que el personaje tiene una gran cabeza. 

Crear el Tamachibi es fácil porque Kevin explica cada paso en su tutorial de 90 minutos.

Construya su propia máquina de juego

Si quieres hacer tu propia máquina de juegos Raspberry Pi Pico, hay dos formas generales de hacerlo: comprar un kit ya hecho o construir uno tú mismo.

Kit listo para usar frente a hardware de juegos Raspberry Pi Pico de bricolaje

Aunque es posible empezar desde cero, tal vez quieras evitar la molestia de crear tu propio sistema y comprar un paquete ya preparado.

Hay algunos kits basados en el RP2040 que te permiten saltar directamente a jugar o desarrollar tus propios juegos.

Veamos el Pimoroni Picosystem y comparémoslo con el proceso de construcción de algo similar utilizando piezas individuales.

Pimoroni Picosystem

Echemos un vistazo al Pimoroni Picosystem.

Como puedes ver, es mucho más grande que la Raspberry Pi Pico W, pero eso también se debe a que tiene un D-pad de cuatro direcciones, cuatro botones, pantalla LCD, una batería de iones de litio, un altavoz piezoeléctrico y un puerto USB-C, entre otros añadidos.

Tiene el mismo procesador y memoria RAM, ya que tanto el Picosystem como el Pico utilizan el chip RP2040. Aquí están las especificaciones completas:

  • Impulsado por el RP2040 (Dual Arm Cortex M0+ con 264kB de SRAM)
  • 16 MB de flash QSPI compatible con XiP
  • Pantalla LCD SPI IPS en color de 1,54″ (modos 240×240 y 120×120)
  • D-pad y botones
  • Batería LiPo de 525mAh (6hrs+)
  • Zumbador/altavoz piezoeléctrico
  • Botón de encendido/apagado
  • LED RGB
  • Programable y recargable mediante USB-C (cable no incluido)

Modos gráficos

PicoSystem admite dos modos de gráficos.

  • 240×240: la resolución nativa del LCD
  • 120×120: modo de duplicación de píxeles (ahorra RAM)

¿Cómo es el juego en el Picosistema?

Jugar en el Picosistema es fácil. Sólo tienes que pulsar el botón de encendido y te encontrarás con el juego precargado llamado Super Square Bros.

El juego es un simple juego de plataformas muy parecido a Mario.

Pimoroni también ha incluido otros juegos:

  • Super Square Bros. de Scorpion Games - Un juego de plataformas cuadrilátero y saltarín (juego precargado)
  • Puntos - Rompecabezas de puntos. Crea cadenas de dos o más y compite para conseguir la mayor puntuación.
  • Rocas y diamantes - El clásico juego de esquivar rocas y coger diamantes.
  • Geometría - Rompe las rocas espaciales con los láseres para hacer rocas espaciales más pequeñas.
  • Ascenso del arco iris - El Dark Souls de los puzles de saltos verticales generados procedimentalmente. Buena suerte.
  • Super Blit Kart por Daft_Freak - Un juego de carreras basado en "Mode7".

Para instalar estos juegos, haz lo siguiente:

  • Descargue el archivo.
  • Conecta tu Picosistema al PC
  • Mantenga pulsado el botón X y pulse el botón de encendido.
  • El Picosistema debe ser montado como una unidad llamada RPI-RP2
  • Copie el archivo .uf2 descargado en la unidad. Se cargará automáticamente.

Por alguna razón, mi cable USB-C a USB-C no funcionó, pero el cable USB-A a USB-C funcionó con el Picosystem. Si no ves que se enciende el LED rojo, prueba con otro cable.

Programe sus propios juegos

Lo mejor del Picosistema es que ofrece un sistema para que puedas crear tus propios juegos.

En lugar de codificar desde cero, PicoSystem viene con una API especial que puede ayudarte a crear tus juegos.

También elimina gran parte del tedioso trabajo necesario para comprar piezas individuales, como una pantalla LCD, botones, cables de puente, una placa de circuito impreso y luego averiguar las bibliotecas y los paquetes necesarios para que todo esto funcione.

La API de PicoSystem tiene funciones para dibujar cosas en la pantalla, para emitir audio, funciones de hardware y otras funciones de utilidad. Esto hace que sea más fácil para usted para construir su juego.

Al igual que la Raspberry Pi Pico, el PicoSystem puede codificarse en C++ o MicroPython. 

¿Es fácil programar un juego con el Picosistema?

Te recomiendo que tengas algo de tiempo y paciencia para construir tu propio juego con el Picosistema.

La documentación ofrece lo básico para que puedas empezar, pero lo mejor será que tengas algún conocimiento previo de programación de juegos.

El mayor reto para los principiantes es que no hay muchos recursos que te enseñen a codificar proyectos de ejemplo. Sin embargo, aquí hay una lista de referencias que te ayudarán:

Guía de Picosystem MicroPython (en el readme)

Ejemplos de Picosystem MicroPython

Picosistema C++ Github

Ejemplos de Picosystem C++

Hoja de trucos de la API de Picosystem, además de un convertidor de imágenes y fuentes (en la barra lateral)

Sistema de bricolaje: Creación del hardware

Guía de YouMakeTech guía al lector a través de cómo hacer una consola de juegos completa con una carcasa, un sistema de sonido y una soldadura permanente.

Para nuestra comparación, veamos cuánto costaría construir una unidad de bricolaje frente al Picosystem, que es un kit completo.

El sistema de juego de YMTPimoroni Picosystem
CasoOpcional, impreso en 3D ($4,47 para los planos STL, más el filamento y los costes de alquiler/operación de la impresora 3D)Incluye
Raspberry Pi Pico$5 para Pico H porque necesitará los cabezales.Incluye
Pantalla OLED$15 (pantalla de 0,96 pulgadas)Incluye
BotonesInsignificanteIncluye
Tablero de pruebas$15 (kit de placa)Incluye
Cables de puenteIncluido en el kit de la protoboardIncluye
TornillosHasta $1Incluye
PiezoInsignificante Incluye
Coste total$40,47, sin incluir los costes de impresión 3D$70

Veamos, pues, los costes finales de los distintos niveles de las configuraciones de bricolaje:

ConfigurarCostes
Sin batería$40,47 sin incluir los costes de impresión 3D
Batería Lipo$8
Pimoroni Pico Lipo$16,39 - $4 (como estamos utilizando el sustituto de Pimoroni Pico, podemos deducir el coste de la Raspberry Pi Pico)
Total para un kit de baterías$60,86 sin incluir los costes de impresión 3D

Sólo una advertencia - YouMakeTech dice que se puede construir esto por menos de $20. Sin embargo, según mi investigación, los costes de una instalación de bricolaje que coincida con el Picosystem no difieren mucho, especialmente si se tiene en cuenta el software y la comodidad.

El prototipo de YouMakeTech que tiene dos botones, una pantalla y puede jugar al Pong

Dicho esto, la ruta del bricolaje es una gran oportunidad de aprendizaje. Una cosa que me desafió fue la pantalla. Mientras que el ejemplo de YouMakeTech utiliza una conexión I2C, la pantalla que yo tenía utilizaba una interfaz SPI de 4 pines. Eso requiere un cambio en la codificación o una modificación del hardware para poder proceder. Si te gustan los retos, la ruta DIY es para ti.

Entonces, ¿cuáles son las ventajas de hacerlo tú mismo frente al Picosistema?

Ventajas e inconvenientesBRICOLAJEPicosistema
Montaje del hardwareLo haces todo tú mismoUsted no hace nada de bricolaje
SoftwareAquí no hay mucha ayuda. Usted mismo hace el bricolaje de todo y aprende a manejar cada componente.Tienes que aprender la API del Picosistema
Oportunidad de aprendizajeMayor oportunidad de aprendizaje, ya que se están juntando partes disparesMás pequeño. Ya está hecho y el software será la mayor oportunidad de aprendizaje aquí
AmpliaciónYa que lo has construido, puedes cambiar la pantalla LCD, añadir más botones, añadir LEDs, etc.No mucho, a menos que quieras desmontar un sistema completo.

Creación del juego Pong en el sistema Picosystem vs DIY

Un curioso experimento mío consiste en saber cuánto esfuerzo me costará desarrollar un juego utilizando el Picosistema frente a hacerlo desde cero.

Para comparar los dos sistemas, voy a construir un juego tipo Pong para un jugador tanto en el sistema DIY de YouMakeTech como en el Picosystem.

La premisa del juego es sencilla. Es un juego tipo Pong para un jugador que te da 10 puntos cada vez que tu bola rebota en la pala. Si cae al fondo de la pantalla, recibes un mensaje de "Game Over".

La creación del juego en ambos sistemas sigue un sencillo flujo de trabajo que todo lo lleva a Thonny.

Tendrías que flashear MicroPython en el Pico y luego usarás Thonny para codificar tu programa. 

El MicroPython que se flashea en el Picosystem es diferente del archivo oficial de MicroPython UF2, así que asegúrate de que estás flasheando el correcto porque el Picosystem funcionará con la versión oficial de MicroPython. Sólo que no funcionará como se pretende.

Veamos ahora algunas diferencias fundamentales entre ambos. Aquí excluyo la lógica del juego y sólo comparo las diferencias en la interacción hardware-software y los patrones de programación.

Puedes ver el código de YouMakeTech aquí.

Primera diferencia: código de hardware

Las cosas son muy "crudas" con la ruta DIY. Aquí hay algo de código para inicializar la pantalla, GPIO y botones que no necesitarás hacer con el Picosistema:

from machine import Pin, PWM, I2C,
from ssd1306 import SSD1306_I2C

# Buttons
up = Pin(2, Pin.IN, Pin.PULL_UP)
down = Pin(3, Pin.IN, Pin.PULL_UP)
left = Pin(4, Pin.IN, Pin.PULL_UP)
right = Pin(5, Pin.IN, Pin.PULL_UP)
button1 = Pin(6, Pin.IN, Pin.PULL_UP)
button2 = Pin(7, Pin.IN, Pin.PULL_UP)

# Buzzer connected to GP18
buzzer = PWM(Pin(18))

# OLED Screen connected to GP14 (SDA) and GP15 (SCL)
i2c = machine.I2C(1, sda = Pin(14), scl = Pin(15), freq = 400000)
oled = SSD1306_I2C(SCREEN_WIDTH, SCREEN_HEIGHT, i2c)

Segunda diferencia: La API de Picosystem

Si estás escribiendo código en el Picosistema, tendrías que escribir dentro de su sistema.

En el ejemplo de YouMakeTech, toda la lógica del juego está encapsulada en un mientras sea cierto bucle. Esto incluye la interacción con los botones, la detección de colisiones y el dibujo en la pantalla.

En el Picosistema, se requiere escribir dentro de tres funciones - init(), update() y dibujar().

En mi código, toda la lógica del juego está escrita en actualizar() incluyendo el manejo de colisiones y la interacción con el D-pad.

En un simple juego de Pong, hay algunas funciones de la API que utilicé que facilitaron un poco las cosas:

intersecta(x1, y1, w1, h1, x2, y2, w2, h2)  es probablemente la mayor ayuda aquí. Pasarías las coordenadas y tamaños de los dos cuadrados y devolvería true si hay una intersección. En este caso, los dos rectángulos son la pelota y la barra (también conocida como paleta). El defecto de la función intersects() es que no detecta en qué lado se ha producido la colisión, así que he tenido que escribir código adicional para tratar las colisiones en el lado de la barra.

La API de Picosystem brillará realmente cuando desarrolles juegos más complicados, dado que ya tiene un método para los framebuffers, la salida de audio, la mezcla, etc. 

Código del juego Pimoroni Picosystem Pong-like

#bar_pos_x = pixels from left, e.g. 0 from left
bar_pos_x = 50
#bar_pos_y = pixels from top, e.g. 100px from top
bar_pos_y = 100
BAR_WIDTH = 30

LENGTH_CONSTANT = 5

ball_speed = 1
ball_pos_x = 10
ball_pos_y = 10
ball_dx = 2
ball_dy = 2

score = 0
game_over = False

def update(tick):
    
    global bar_pos_x
    global bar_pos_y
    global ball_pos_x
    global ball_pos_y
    global ball_dx
    global ball_dy
    global ball_speed
    global score
    global game_over
    
    def reverse_ball_dx():
        global ball_dx
        ball_dx = ball_dx * -1
        
    def reverse_ball_dy():
        global ball_dy
        ball_dy = ball_dy * -1
    
    ball_pos_x += ball_dx
    ball_pos_y += ball_dy
    
    if button(LEFT) and bar_pos_x > 0:
        bar_pos_x -= 1
    
    if button(RIGHT) and bar_pos_x < 120 - BAR_WIDTH :
        bar_pos_x += 1
        
    if ball_pos_x <= 0 :
        ball_pos_x = 0
        reverse_ball_dx()
        
    if ball_pos_x >= 120 - LENGTH_CONSTANT :
        ball_pos_x = 120 - LENGTH_CONSTANT
        reverse_ball_dx()
        
    if ball_pos_y >= 120 - LENGTH_CONSTANT :
        game_over = True
        
    if ball_pos_y <= 0:
        ball_pos_y = 0
        reverse_ball_dy()
        
    if intersects(bar_pos_x,bar_pos_y,BAR_WIDTH,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
        
        reverse_ball_dy()
        score += 10
        
        #main intersection of ball and bar. if they intersect, check if they are intersecting on the sides.
        #if not on sides (i.e. on top) reverse Y direction. Or else, reverse X direction.
        if intersects(bar_pos_x,bar_pos_y,1,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
            
            #intersecting on left
            
            reverse_ball_dx()
            ball_pos_x -= 2
            
        if intersects(bar_pos_x + BAR_WIDTH,bar_pos_y,1,LENGTH_CONSTANT, ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT):
            
            #intersecting on right
            
            reverse_ball_dx()
            ball_pos_x += 2

        
def draw(tick):
    
    if game_over:
        pen(0,0,0)
        clear()
        pen(15,15,15)
        text("Game Over", 35, 60)
        
        
    else:
        pen(0, 0, 0)
        clear()
        pen(15,15,15)
    
        #draw bar (paddle)
        frect(bar_pos_x,bar_pos_y,BAR_WIDTH,LENGTH_CONSTANT)
    
        #draw the ball
        frect(ball_pos_x, ball_pos_y, LENGTH_CONSTANT,LENGTH_CONSTANT)
        text(str(score), 80, 20)
    
start()

¿Tiene algún juego que recomendar?

Si tienes un juego para la Raspberry Pi Pico, deja un comentario abajo con una URL.

Y si desea consultar nuestra serie Paragon Projects, vaya a aquí.

Deja un comentario