Tabla de contenido:

Flappy Bird en ATtiny85 y pantalla OLED SSD1306: 6 pasos (con imágenes)
Flappy Bird en ATtiny85 y pantalla OLED SSD1306: 6 pasos (con imágenes)

Video: Flappy Bird en ATtiny85 y pantalla OLED SSD1306: 6 pasos (con imágenes)

Video: Flappy Bird en ATtiny85 y pantalla OLED SSD1306: 6 pasos (con imágenes)
Video: How to make a Flappy Bird Game using #esp32? 2024, Septiembre
Anonim
Image
Image
El hardware
El hardware

Hola a todos, Hoy les mostraré un clon básico de flappy bird que creé, y cómo se puede hacer para hacer un juego similar. Básicamente, revisaré mi código contigo y explicaré cómo funciona en cada paso del camino. Este juego está diseñado para ejecutarse en un ATtiny85 con una frecuencia de reloj de 1MHz, con una pantalla OLED I2C. ¡Adelante!

Paso 1: el hardware

Si no estás interesado en construir un circuito para el juego pero entiendes la teoría detrás de él, puedes saltarte este paso.

Mi juego requiere dos botones, un ATtiny85, una pantalla I2C OLED de 128x64px y alguna fuente de energía. Mi tarjeta de visita / consola de juegos instructable: ATtiny85 y la pantalla OLED le muestran cómo construir una placa que tenga todo lo que necesita. Si no estás interesado en hacer mi placa, saca tu protoboard y te diré las especificaciones. Puede utilizar cualquier variante del ATtiny85. Recomiendo pantallas OLED como esta.

  1. Conecte un lado de dos botones a las clavijas 2 y 3 de su ATtiny85. En estos cables, agregue también una resistencia de 10 k ohmios conectada a tierra (resistencia de bajada).
  2. Conecte el otro lado de estos botones a voltaje. Cuando no se presiona el botón, el estado del pin será bajo. Cuando se presiona, el estado del pin será alto.
  3. Conecte el pin 7 al pin SCL en su pantalla y el pin 5 al pin SDA en su pantalla. Conecte los pines de alimentación (VCC y GND) en la pantalla en consecuencia.
  4. Por último, conecte el pin 4 del ATtiny a tierra y el pin 8 al voltaje.

Paso 2: ¡El software

¡El software!
¡El software!

Aquí se adjunta una carpeta con todos los archivos que necesitas para ejecutar el juego. Dos de los archivos, FlappyBird.ino y WallFunctions.h, están muy bien comentados para su placer de lectura. ¡Puedes subir el boceto de FlappyBird.ino a tu ATtiny85 (a 1MHz) y jugar! Si te interesa aprender la teoría detrás de este juego, o quieres crear tu propio juego, ¡sigue leyendo!

Todavía hay algunos problemas con mi juego. I2C no es la mejor manera de transmitir datos de ninguna manera. Según esta publicación, la pantalla solo puede aceptar datos a aproximadamente 100 KHz, por lo que incluso si aumentamos la velocidad del reloj ATtiny a 8 MHz, el canal I2C seguirá siendo el cuello de botella. La pantalla puede generar alrededor de 10 fps como máximo. Cuantas más imágenes separadas necesite dibujar la pantalla, más lento será todo el proceso. Por lo tanto, mi juego es bastante fácil, ¡ya que no puedes hacer que las paredes se muevan muy rápido por la pantalla! A continuación se presentan algunos desafíos para usted si cree que está a la altura de la tarea:

  • Para hacer el juego más difícil, mira si puedes conseguir que el espacio entre las paredes sea 2 en lugar de 4. No debería ser demasiado difícil una vez que entiendas cómo funciona mi programa:). ¡Publique en los comentarios si puede hacerlo funcionar!
  • Otra cosa que le falta a mi juego es un sistema de puntuación y una forma de mostrar la puntuación y guardarla. ¡Vea si puede implementar uno!
  • Por último, en lugar de hacer que las paredes se muevan una columna a la vez, intente hacer que cada pared se mueva un píxel a la vez para lograr un movimiento más suave.

Paso 3: Flappy Bird ATtiny85: Teoría

Flappy Bird ATtiny85: Teoría
Flappy Bird ATtiny85: Teoría

Aunque la pantalla que estamos usando tiene 64 píxeles de altura para usar en el juego, solo es posible colocar elementos en bloques de 8 píxeles. Por lo tanto, solo hay 8 posibles coordenadas y. Para facilitar las cosas, en el software dividí toda la pantalla de esta manera, haciendo una cuadrícula de 16 bloques por 8 bloques, donde cada bloque es de 8x8 píxeles. Para llenar cada bloque, cada sprite del juego es de 8x8 píxeles. Esto hace que todo sea MUCHO más fácil de administrar. Si miras la imagen de arriba, puedes ver cómo dividí la pantalla. Cada muro está compuesto por 6 bloques, con un agujero de 2 bloques de altura, lo que hace que la altura total de cada muro sea de 8 bloques.

En el programa, cada muro se representa como una estructura, denominada Muro. Cada estructura Wall tiene dos propiedades: holePosition y column. 'holePosition' es un número 0-6, ya que solo hay 7 posiciones posibles en una pared de 8 bloques para un hoyo de 2 bloques de altura. 'columna' es un número del 0 al 15, ya que hay 16 columnas de bloques posibles en la pantalla.

Recomendado: