Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Juego de asteroides con pantalla de matriz LED MAX72XX

Componentes y suministros

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99 # MAX7219 Display Driver Shield
× 1
Interruptor de botón SparkFun de 12 mm
× 2
Buzzer
× 1
Breadboard (genérico)
× 1

Acerca de este proyecto

Este es un juego simple que usa la matriz LED MAX72XX como pantalla, dos microinterruptores como botones y un zumbador activo para un efecto de sonido.

Eres una nave estelar y debes evitar el contacto con los asteroides que caen. El juego se vuelve más rápido con el tiempo. Al final, se muestra una puntuación que muestra cuánto tiempo ha sobrevivido.

Código

  • código del juego de asteroides
código del juego de asteroides Arduino
 / ******************************************** ********** * Este es un juego simple que usa la matriz LED MAX72XX. * Eres una nave estelar y tienes que evitar el contacto con * los asteroides que caen. * * (c) 2018 por Joshua Weßner * * * ************************************ ***************** /// LedControl de Eberhard Fahle // ver:http://wayoda.github.io/LedControl/#include "LedControl.h" / * Ahora necesitamos un LedControl para trabajar. ***** Estos números de pin probablemente no funcionarán con su hardware ***** El pin 12 está conectado al DataIn El pin 11 está conectado al CLK El pin 10 está conectado a LOAD Solo tenemos un MAX72XX. * / LedControl lc =LedControl (12,11,10,1); / ******************************* ***************************** * Variables globales * / / * retraso entre actualizaciones de la pantalla * / tiempo de retraso largo sin firmar =1000; / * para mostrar la puntuación * / String scoreString; int score; int cientos; String scoreStr; String scoreArr [] ={"", "", ""}; / * microinterruptores para control * / int pinLeft =2; int pinRight =3; botón largo sin firmar volátil presionado; int buttonDelay =150; // manejar contacto bouncevolatile bool gameOver =false; / * "rythm" del juego, im milisegundos * / int tick; int tickCounter =1; / * timestamp * / unsigned long now; / * display * / int ship; / * Posición inicial de envío * / int columnas [] ={0,0,0,0,0,0,0,0}; // 8 columnas, cada int es la fila 1-8.int randomInt; / ******************************* ***************************** * configuración * / void setup () {/ * Inicializando * / gameOver =false; centenas =0; scoreArr [0] =""; scoreArr [1] =""; scoreArr [2] =""; puntuación =0; tic =300; tickCounter =1; barco =3; ahora =millis (); buttonPressed =milis (); randomSeed (analogRead (15)); // mejores números aleatorios para (int i =0; i <8; i ++) columnas [i] =0; // Depuración // Serial.begin (9600); // Serial.print (columnas [0]); / * El MAX72XX está en modo de ahorro de energía al inicio, tenemos que hacer una llamada de activación * / lc.shutdown (0, false); / * Establece el brillo en valores medios * / lc.setIntensity (0,1); / * y borrar la pantalla * / lc.clearDisplay (0); pinMode (pinLeft, INPUT_PULLUP); pinMode (pinRight, INPUT_PULLUP); / * pulsar el botón adjuntar para interrumpir * / attachInterrupt (digitalPinToInterrupt (pinLeft), left, FALLING); attachInterrupt (digitalPinToInterrupt (pinRight), derecha, FALLING); } / ********************************************** ************** * manejar el botón izquierdo presionar * / void left () {if (millis () - buttonPressed> buttonDelay) // manejar el contacto del interruptor rebotar {if (enviar! =0) Embarcacion--; si no enviar =7; lc.clearDisplay (0); buttonPressed =milis (); } // después de que termine el juego, al presionar el botón se reiniciará el juego if (gameOver ==true) {gameOver =false; configuración(); }} / ******************************************** *************** * manejar el botón derecho presionar * / void right () {if (millis () - buttonPressed> buttonDelay) // manejar el contacto del interruptor rebotar {if (enviar! =7 ) barco ++; si no enviar =0; lc.clearDisplay (0); buttonPressed =milis (); } // después de que termine el juego, al presionar el botón se reiniciará el juego if (gameOver ==true) {gameOver =false; configuración(); }} / ******************************************** *************** * loop * / void loop () {if (millis () - ahora> tick) {// haz cada tick // la puntuación es:cuántos ticks sobreviviste puntuación ++; ahora =millis (); if (tickCounter ==1) {// cada cuarto tick // hace que el juego sea más rápido con el tiempo tick =tick / 1.02; // elegir al azar la columna randomInt =random (0, 8); // si no existe un asteroide en la columna, cree uno en la fila 1. if (columnas [randomInt] ==​​0) {columnas [randomInt] =1; }} if (tickCounter! =4) tickCounter ++; else tickCounter =1; // hacer para cada columna para (int i =0; i <8; i ++) {if (columnas [i] ==10) // eliminar asteroides cuando están fuera de la pantalla columnas [i] =0; if (columnas [i]! =0) // hacer que los asteroides caigan columnas [i] ++; } lc.clearDisplay (0); } / * escribir para mostrar * / // enviar lc.setLed (0, 7, enviar, verdadero); // asteroides para (int i =0; i <8; i ++) {if (columnas [i]> 0) lc.setLed (0, columnas [i] -2, i, verdadero); lc.setLed (0, columnas [i] -3, i, verdadero); } // detecta la colisión del barco con el asteroide if (columnas [barco] ==10 o columnas [barco] ==9) {lc.clearDisplay (0); // Explosión animada para (int i =0; i <4; i ++) {lc.setLed (0,7, ship + i, true); lc.setLed (0,7, barco-i, verdadero); lc.setLed (0,7-i, barco + i, verdadero); lc.setLed (0,7-i, barco-i, verdadero); lc.setLed (0,7-1,5 * i, barco, verdadero); // sonido de explosión unsigned long time =millis (); int randomSound =1000; while (millis () - tiempo <=250) {sonido aleatorio--; tono (9, aleatorio (sonido aleatorio, 1000)); // cambia los parámetros de random () para un sonido diferente} lc.clearDisplay (0); noTone (9); } retraso (500); / * mostrar puntuación * / scoreStr =String (puntuación); // obtener un solo dígito de la puntuación int scoreArr [0] =scoreStr.charAt (0); scoreArr [1] =scoreStr.charAt (1); scoreArr [2] =scoreStr.charAt (2); // la matriz solo puede mostrar hasta 2 dígitos (hasta 99) if (score <100) {for (int i =0; i <2; i ++) {if (scoreArr [i] =="0") draw0 ( 1 + i * 4); if (scoreArr [i] =="1") dibujar1 (1 + i * 4); if (scoreArr [i] =="2") draw2 (1 + i * 4); if (scoreArr [i] =="3") dibujar3 (1 + i * 4); if (scoreArr [i] =="4") draw4 (1 + i * 4); if (scoreArr [i] =="5") draw5 (1 + i * 4); if (scoreArr [i] =="6") draw6 (1 + i * 4); if (scoreArr [i] =="7") draw7 (1 + i * 4); if (scoreArr [i] =="8") draw8 (1 + i * 4); if (scoreArr [i] =="9") draw9 (1 + i * 4); }} // si la puntuación es> 100, mostrar solo los dos últimos dígitos de la puntuación else {for (int i =1; i <3; i ++) {if (scoreArr [i] =="0") draw0 (1+ ( i-1) * 4); if (scoreArr [i] =="1") dibujar1 (1+ (i-1) * 4); if (scoreArr [i] =="2") draw2 (1+ (i-1) * 4); if (scoreArr [i] =="3") draw3 (1+ (i-1) * 4); if (scoreArr [i] =="4") draw4 (1+ (i-1) * 4); if (scoreArr [i] =="5") draw5 (1+ (i-1) * 4); if (scoreArr [i] =="6") draw6 (1+ (i-1) * 4); if (scoreArr [i] =="7") draw7 (1+ (i-1) * 4); if (scoreArr [i] =="8") draw8 (1+ (i-1) * 4); if (scoreArr [i] =="9") draw9 (1+ (i-1) * 4); } // El primer dígito de la puntuación ("centenas") se muestra como puntos:Un punto por cada cien. for (int i =1; i <10; i ++) {if (scoreArr [0] ==String (i)) centenas =i; } for (int i =1; i <=cientos; i ++) {lc.setLed (0,0, i-1, true); lc.setLed (0,1, i-1, verdadero); retraso (200); }} gameOver =true; while (gameOver ==true) {// no haga nada más que esperar a que presione el botón}}} /////////////////////////////// Dibujar puntuación dígitos ///////////////////////////////////////////// void draw1 (posición int) { lc.setColumn (0,0 + posición, B00001000); lc.setColumn (0,1 + posición, B00011111); } vacío dibujar2 (posición int) {lc.setColumn (0,0 + posición, B00010111); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00011101); } vacío dibujar3 (posición int) {lc.setColumn (0,0 + posición, B00010001); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00011111); } vacío dibujar4 (posición int) {lc.setColumn (0,0 + posición, B00011100); lc.setColumn (0,1 + posición, B00000100); lc.setColumn (0,2 + posición, B00011111); } vacío dibujar5 (posición int) {lc.setColumn (0,0 + posición, B00011101); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00010111); } void draw6 (int posición) {lc.setColumn (0,0 + posición, B00011111); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00010111); } vacío dibujar7 (posición int) {lc.setColumn (0,0 + posición, B00010000); lc.setColumn (0,1 + posición, B00010011); lc.setColumn (0,2 + posición, B00011100); } vacío dibujar8 (posición int) {lc.setColumn (0,0 + posición, B00011111); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00011111); } vacío dibujar9 (posición int) {lc.setColumn (0,0 + posición, B00011101); lc.setColumn (0,1 + posición, B00010101); lc.setColumn (0,2 + posición, B00011111); } vacío dibujar0 (posición int) {lc.setColumn (0,0 + posición, B00011111); lc.setColumn (0,1 + posición, B00010001); lc.setColumn (0,2 + posición, B00011111); } 

Esquemas


Proceso de manufactura

  1. Ajedrez
  2. Pinball
  3. Fútbol
  4. Juego Arduino Pong - Pantalla OLED
  5. Juego de ruleta DIY 37 LED
  6. Juego Arduino Pong en Matrix 24x16 con MAX7219
  7. Arduino Nano Tetris Game en una matriz casera de 16x8
  8. Juego de joystick
  9. Matriz LED + Pantalla de puerta con sensor de movimiento [Arduino Holiday]
  10. Iluminación LED de 8x por sonido
  11. Arduino Cuadrúpedo