勇帜 周
/
2645_Final_project_1
bird
bird/bird.h
- Committer:
- 1013373474
- Date:
- 2019-05-05
- Revision:
- 3:d9c2fc1d5984
- Parent:
- 2:fb9c05867677
- Child:
- 4:cd9a60a75717
File content as of revision 3:d9c2fc1d5984:
#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 *@anthor Zhou Yongzhi *@data 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; };