Advertisement
Villalba2006

POST_36

Nov 25th, 2016
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.87 KB | None | 0 0
  1. /*  TITULO: Flappy Duino con LCD NOKIA 5110.
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a simular el famoso videojuego "Flappy Bird" que la mayoría conoceremos
  14.     de haber jugado alguna vez en nuestro Smartphone. El pajarillo subirá hacia arriba cada vez que
  15.     presionemos o mantengamos presionado el pulsador. Nuestra misión es la de pasar a través de los
  16.     agujeros de los muros que vamos encontrando por el camino y el juego finaliza cuando nos chocamos.
  17.     La puntuación final depende del tiempo que el pájaro vuele hacia arriba.  
  18.     Son necesarias las librerías propias "Bar.h", "Chym.h" y "Sprite.h" que contiene la carpeta del
  19.     programa para que el juego funcione correctamente.
  20.    
  21.    
  22.     ESQUEMA DE CONEXION
  23.    
  24.                                       +-----+
  25.          +----[PWR]-------------------| USB |--+
  26.          |                            +-----+  |
  27.          |         GND/RST2  [ ][ ]            |
  28.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |  
  29.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |  
  30.          |                             AREF[ ] |
  31.          |                              GND[ ] |
  32.          | [ ]N/C                    SCK/13[ ] |  
  33.          | [ ]IOREF                 MISO/12[ ] |   RST del LCD NOKIA 5110 a través de R=10K ohms
  34.          | [ ]RST                   MOSI/11[ ]~|   CE del LCD NOKIA 5110 a través de R=10K ohms
  35.          | [ ]3V3    +---+               10[ ]~|   DC del LCD NOKIA 5110 a través de R=10K ohms
  36.          | [ ]5v    -| A |-               9[ ]~|   Din del LCD NOKIA 5110 a través de R=10K ohms
  37.          | [ ]GND   -| R |-               8[ ] |   Clk del LCD NOKIA 5110 a través de R=10K ohms
  38.          | [ ]GND   -| D |-                    |
  39.          | [ ]Vin   -| U |-               7[ ] |  
  40.          |          -| I |-               6[ ]~|  
  41.          | [ ]A0    -| N |-               5[ ]~|  
  42.          | [ ]A1    -| O |-               4[ ] |    
  43.          | [ ]A2     +---+           INT1/3[ ]~|    
  44.          | [ ]A3                     INT0/2[ ] |   PA
  45.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  46.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  47.          |            [ ] [ ] [ ]              |
  48.          |  UNO_R3    GND MOSI 5V  ____________/
  49.           \_______________________/
  50.  
  51.  
  52.   NOTAS:
  53.  
  54.    - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  55.    - Conexión del pulsador (Utilizamos INPUT_PULLUP para evitar conectar una resistencia de 10K ohms)
  56.        - PB conectado a GND.
  57.        - PA conectado a +5V.      
  58.    - Conexión de la alimentación del LCD NOKIA 5110:
  59.        - VCC --> +3.3V
  60.        - GND --> GND
  61.        - BL (BackLight) --> +3.3V.
  62. */
  63.  
  64.   // Incluimos librerías
  65.   #include <SPI.h>
  66.   #include <Adafruit_GFX.h>
  67.   #include <Adafruit_PCD8544.h>
  68.  
  69.   // Hay que poner una resistencia de 10K ohms en los siguientes pines para limitar el voltaje a 3V
  70.   Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);
  71.  
  72.   #include "Sprite.h"
  73.   #include "Chym.h"
  74.   #include "Bar.h"
  75.  
  76.   Chym player;
  77.   Bar bar; Bar bar2;
  78.   int puntos = 0; // Variable para almacenar la puntuación  
  79.   int pulsador = 2;  // Pin digital para el pulsador
  80.   boolean subir_pajaro = false;
  81.   int estado_pulsador;
  82.  
  83.   // Función que resetea el juego
  84.   void resetGame()
  85.   {
  86.     player.respawn();
  87.     bar.setPos(0, 20);
  88.     bar2.setPos(50, 30);
  89.     puntos = 0;
  90.   }
  91.  
  92.   void setup()
  93.   {
  94.     // Comienza la comunicación con la pantalla
  95.     display.begin();
  96.     display.setContrast(50);
  97.     display.clearDisplay();
  98.     display.display();  
  99.  
  100.     pinMode(pulsador, INPUT_PULLUP); // Pin digital 2 como entrada con conexión PULL-UP interna.  
  101.    
  102.     resetGame(); // Resetea el juego
  103.   }
  104.  
  105.   void loop()
  106.   {
  107.     getInput(); // Lee el estado del pulsador
  108.     player.update(); // Actualiza la posición del pájaro
  109.     bar.update(); // Actualiza la posición de la barra de arriba
  110.     bar2.update(); // Actualiza la posición de la barra de abajo
  111.     drawLCD(); // Muestra resultados por pantalla  
  112.   }
  113.  
  114.   // Función que lee el estado del pulsador y actúa en consecuencia
  115.   void getInput()
  116.   {
  117.     int estado_pulsador = digitalRead(pulsador);
  118.     if (estado_pulsador == LOW)
  119.     {
  120.       subir_pajaro = true;
  121.       puntos++;
  122.     }
  123.     else
  124.     {
  125.       subir_pajaro = false;
  126.     }
  127.   }
  128.  
  129.   // Función que muestra los resultados por pantalla
  130.   void drawLCD()
  131.   {
  132.     display.clearDisplay();
  133.  
  134.     if (!player.isDead())
  135.     {
  136.       int ht1 = bar.hitTest(player.getX(), player.getY());
  137.       int ht2 = bar2.hitTest(player.getX(), player.getY());
  138.       int die = ht1 + ht2;
  139.       if (die == 1)
  140.       {        
  141.           player.die(); // Game over
  142.       }
  143.  
  144.       if (subir_pajaro)
  145.       {
  146.         player.flyUp();
  147.       }
  148.       else
  149.       {
  150.         player.cancelJump();
  151.       }
  152.       player.render(); 
  153.      
  154.       bar.render(); bar2.render();
  155.     }
  156.     else
  157.     {
  158.       display.setCursor(0, 0); // Columnas x filas
  159.       display.setTextSize(1);
  160.       display.println(" Game Over!!!");
  161.       display.setCursor(0, 15);
  162.       display.print("< Puntuacion >");
  163.       display.setCursor(0, 30);
  164.       display.setTextSize(2);
  165.       if(puntos < 10)
  166.       {
  167.         display.print("   ");
  168.       }
  169.       else if(puntos >= 10 && puntos < 1000)
  170.       {
  171.         display.print("  ");
  172.       }
  173.       else
  174.       {
  175.         display.print(" ");
  176.       }
  177.       display.print(puntos);
  178.      
  179.       if (subir_pajaro)
  180.       {
  181.         resetGame();
  182.       }
  183.     }
  184.  
  185.     display.display();
  186.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement