bird

Dependencies:   mbed

bird/bird.h

Committer:
1013373474
Date:
2019-05-05
Revision:
4:cd9a60a75717
Parent:
3:d9c2fc1d5984

File content as of revision 4:cd9a60a75717:

#include "mbed.h"
#include "N5110.h"
#include "Gamepad.h"

/**
*@brief Data struct includes the bird position.
*/    
    
    
struct Data{
    int y;
    };      


/** bird Class
*@brief Data used to make the bird
*@author Zhou Yongzhi
*@date May 2019

@code


#include "structure.h"
#include "structure_2.h"

void init();
void welcome();
void render();
void render1();
void check();
void check1();
void death();



//pin
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
bird bird;
structure structure;
structure_2 structure_2;



int main()
{    
while (1){
    init();//初始化
    lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    welcome();
    
    
while (pad.check_event(Gamepad::BACK_PRESSED) == false){     
    lcd.clear();
    lcd.printString(" A NORMAL ",1,1);  
    lcd.printString(" B HARD ",1,2);
    lcd.printString(" Y MESSAGE ",1,3);
    lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.refresh();
    
    wait(0.5);
    
    if (pad.check_event(Gamepad::A_PRESSED) == true) { 
      while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        render();
        wait(0.5);
        check();
    }//BACK
}//A  


   if (pad.check_event(Gamepad::B_PRESSED) == true) { 
      while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        render1();
        wait(0.5);
        check1();
    }//BACK
}//B

  if (pad.check_event(Gamepad::Y_PRESSED) == true) { 
      while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        lcd.clear();
        lcd.printString(" Programme by:",0,1);
        lcd.printString(" Zhou Yongzhi",0,2);
        lcd.printString("  201090418 ",0,3);
        lcd.printString("  2016110306 ",0,4);
        lcd.refresh();
    }//BACK
}//C


}
}
}


void init()
{
    lcd.init();
    pad.init();
    bird.init();
    structure.init();
    structure_2.init();
}


void render()//A nomal
{  // clear screen, re-draw and refresh
    lcd.clear();  
    Data1 data1 = structure.get_data1();
    lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    bird.draw(lcd);
    structure.draw(lcd);
    char buffer1[14];
    sprintf(buffer1,"%2d",data1.t);
    lcd.printString(buffer1,1,1);
    lcd.drawRect(1,1,15,15,FILL_TRANSPARENT);
    bird.check(pad,lcd);
    lcd.refresh();
}


void render1()//A nomal
{  // clear screen, re-draw and refresh
    lcd.clear();  
    Data2 data2 = structure_2.get_data2();
    lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    bird.draw(lcd);
    structure_2.draw(lcd);
    char buffer1[14];
    sprintf(buffer1,"%2d",data2.tt);
    lcd.printString(buffer1,1,1);
    lcd.drawRect(1,1,15,15,FILL_TRANSPARENT);
    bird.check(pad,lcd);
    lcd.refresh();
}


void welcome() {
    lcd.printString(" Flappy Bird ",1,1);  
    lcd.printString(" Press Start ",1,4);
    lcd.refresh();
    // wait flashing LEDs until start button is pressed LED灯闪到按Press
    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}


void check(){    
       Data data = bird.get_data();
       Data1 data1 = structure.get_data1();
       if ( data.y >= 48 ){
       death();
       }else if(data1.m >= 25  &&  data1.m <= 32 ){  if(data.y <= data1.n || data.y >= data1.n + 15){
          death(); }}
          else if(data1.p >= 25  &&  data1.p <= 32){  if(data.y <= data1.q || data.y >= data1.q + 15){
          death(); }}
          else if(data1.e >= 25  &&  data1.e <= 32){  if(data.y <= data1.o || data.y >= data1.o + 15){
          death(); }}
    
    }
    
    
    
void check1(){    
       Data data = bird.get_data();
       Data2 data2 = structure_2.get_data2();
       if ( data.y >= 48 ){
       death();
       }else if(data2.mm >= 25  &&  data2.mm <= 32 ){  if(data.y <= data2.nn || data.y >= data2.nn + 15){
          death(); }}
          else if(data2.pp >= 25  &&  data2.pp <= 32){  if(data.y <= data2.qq || data.y >= data2.qq + 15){
          death(); }}
          else if(data2.ee >= 25  &&  data2.ee <= 32){  if(data.y <= data2.oo || data.y >= data2.oo + 15){
          death(); }}
    
    }
    
void death(){
      int fps = 2; 
      init();
      while (pad.check_event(Gamepad::START_PRESSED) == false) {
    lcd.clear();     
    lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽,
    lcd.printString("     Dead ",1,1);
    lcd.printString(" Press start",1,3);
    lcd.printString("to play again",1,4);
    lcd.refresh();
    wait(0.3);
    
    }//while(1)

    }//death
    
@endcode
*/   
class bird
{

    
public:
        /**
   *@brief initialise the parameters
   *@param size,speed
   */
    void init(int size,int speed);
       /**
   *@brief initialise the parameters
   *@param lcd
   *@details The function in N5110 is used
   */
    void draw(N5110 &lcd);
       /**
   *@brief initialise the parameters
   *@param lcd,pad
   *@details The function in N5110 and Gamepad is used
   */
    void check(Gamepad &pad, N5110 &lcd);
       /**
   *@brief initialise the parameters
   */
    void init();
            /**
   *@brief The data which are sent to main.cpp
   */
    Data get_data();


private:
    int _y;   
    Data _data;
};