勇帜 周
/
2645_Final_project_1
bird
main.cpp@2:fb9c05867677, 2019-05-05 (annotated)
- Committer:
- 1013373474
- Date:
- Sun May 05 18:46:58 2019 +0000
- Revision:
- 2:fb9c05867677
- Parent:
- 1:8672e52115e3
- Child:
- 6:9bf0273ee25f
FLY BIRD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
1013373474 | 0:3887ebee1b37 | 1 | |
1013373474 | 0:3887ebee1b37 | 2 | #include "structure.h" |
1013373474 | 0:3887ebee1b37 | 3 | #include "structure_2.h" |
1013373474 | 1:8672e52115e3 | 4 | |
1013373474 | 0:3887ebee1b37 | 5 | void init(); |
1013373474 | 0:3887ebee1b37 | 6 | void welcome(); |
1013373474 | 0:3887ebee1b37 | 7 | void render(); |
1013373474 | 0:3887ebee1b37 | 8 | void render1(); |
1013373474 | 0:3887ebee1b37 | 9 | void check(); |
1013373474 | 0:3887ebee1b37 | 10 | void check1(); |
1013373474 | 0:3887ebee1b37 | 11 | void death(); |
1013373474 | 0:3887ebee1b37 | 12 | |
1013373474 | 0:3887ebee1b37 | 13 | |
1013373474 | 0:3887ebee1b37 | 14 | |
1013373474 | 0:3887ebee1b37 | 15 | //pin |
1013373474 | 0:3887ebee1b37 | 16 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
1013373474 | 0:3887ebee1b37 | 17 | Gamepad pad; |
1013373474 | 0:3887ebee1b37 | 18 | bird bird; |
1013373474 | 0:3887ebee1b37 | 19 | structure structure; |
1013373474 | 0:3887ebee1b37 | 20 | structure_2 structure_2; |
1013373474 | 0:3887ebee1b37 | 21 | |
1013373474 | 0:3887ebee1b37 | 22 | |
1013373474 | 0:3887ebee1b37 | 23 | |
1013373474 | 0:3887ebee1b37 | 24 | int main() |
1013373474 | 1:8672e52115e3 | 25 | { |
1013373474 | 1:8672e52115e3 | 26 | while (1){ |
1013373474 | 0:3887ebee1b37 | 27 | init();//初始化 |
1013373474 | 0:3887ebee1b37 | 28 | lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 29 | lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 30 | lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 31 | lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 32 | welcome(); |
1013373474 | 1:8672e52115e3 | 33 | |
1013373474 | 1:8672e52115e3 | 34 | |
1013373474 | 1:8672e52115e3 | 35 | while (pad.check_event(Gamepad::BACK_PRESSED) == false){ |
1013373474 | 0:3887ebee1b37 | 36 | lcd.clear(); |
1013373474 | 0:3887ebee1b37 | 37 | lcd.printString(" A NORMAL ",1,1); |
1013373474 | 1:8672e52115e3 | 38 | lcd.printString(" B HARD ",1,2); |
1013373474 | 1:8672e52115e3 | 39 | lcd.printString(" Y MESSAGE ",1,3); |
1013373474 | 0:3887ebee1b37 | 40 | lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 41 | lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 42 | lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 43 | lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 44 | lcd.refresh(); |
1013373474 | 1:8672e52115e3 | 45 | |
1013373474 | 1:8672e52115e3 | 46 | wait(0.5); |
1013373474 | 1:8672e52115e3 | 47 | |
1013373474 | 1:8672e52115e3 | 48 | if (pad.check_event(Gamepad::A_PRESSED) == true) { |
1013373474 | 1:8672e52115e3 | 49 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
1013373474 | 0:3887ebee1b37 | 50 | render(); |
1013373474 | 1:8672e52115e3 | 51 | wait(0.5); |
1013373474 | 0:3887ebee1b37 | 52 | check(); |
1013373474 | 1:8672e52115e3 | 53 | }//BACK |
1013373474 | 1:8672e52115e3 | 54 | }//A |
1013373474 | 1:8672e52115e3 | 55 | |
1013373474 | 1:8672e52115e3 | 56 | |
1013373474 | 1:8672e52115e3 | 57 | if (pad.check_event(Gamepad::B_PRESSED) == true) { |
1013373474 | 1:8672e52115e3 | 58 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
1013373474 | 0:3887ebee1b37 | 59 | render1(); |
1013373474 | 1:8672e52115e3 | 60 | wait(0.5); |
1013373474 | 1:8672e52115e3 | 61 | check1(); |
1013373474 | 1:8672e52115e3 | 62 | }//BACK |
1013373474 | 1:8672e52115e3 | 63 | }//B |
1013373474 | 1:8672e52115e3 | 64 | |
1013373474 | 1:8672e52115e3 | 65 | if (pad.check_event(Gamepad::Y_PRESSED) == true) { |
1013373474 | 1:8672e52115e3 | 66 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
1013373474 | 1:8672e52115e3 | 67 | lcd.clear(); |
1013373474 | 1:8672e52115e3 | 68 | lcd.printString(" Programme by:",0,1); |
1013373474 | 1:8672e52115e3 | 69 | lcd.printString(" Zhou Yongzhi",0,2); |
1013373474 | 1:8672e52115e3 | 70 | lcd.printString(" 201090418 ",0,3); |
1013373474 | 1:8672e52115e3 | 71 | lcd.printString(" 2016110306 ",0,4); |
1013373474 | 1:8672e52115e3 | 72 | lcd.refresh(); |
1013373474 | 1:8672e52115e3 | 73 | }//BACK |
1013373474 | 1:8672e52115e3 | 74 | }//C |
1013373474 | 1:8672e52115e3 | 75 | |
1013373474 | 1:8672e52115e3 | 76 | |
1013373474 | 0:3887ebee1b37 | 77 | } |
1013373474 | 0:3887ebee1b37 | 78 | } |
1013373474 | 1:8672e52115e3 | 79 | } |
1013373474 | 0:3887ebee1b37 | 80 | |
1013373474 | 0:3887ebee1b37 | 81 | |
1013373474 | 0:3887ebee1b37 | 82 | void init() |
1013373474 | 0:3887ebee1b37 | 83 | { |
1013373474 | 0:3887ebee1b37 | 84 | lcd.init(); |
1013373474 | 0:3887ebee1b37 | 85 | pad.init(); |
1013373474 | 0:3887ebee1b37 | 86 | bird.init(); |
1013373474 | 0:3887ebee1b37 | 87 | structure.init(); |
1013373474 | 0:3887ebee1b37 | 88 | structure_2.init(); |
1013373474 | 0:3887ebee1b37 | 89 | } |
1013373474 | 0:3887ebee1b37 | 90 | |
1013373474 | 0:3887ebee1b37 | 91 | |
1013373474 | 0:3887ebee1b37 | 92 | void render()//A nomal |
1013373474 | 0:3887ebee1b37 | 93 | { // clear screen, re-draw and refresh |
1013373474 | 0:3887ebee1b37 | 94 | lcd.clear(); |
1013373474 | 0:3887ebee1b37 | 95 | Data1 data1 = structure.get_data1(); |
1013373474 | 0:3887ebee1b37 | 96 | lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 97 | lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 98 | lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 99 | lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 100 | bird.draw(lcd); |
1013373474 | 0:3887ebee1b37 | 101 | structure.draw(lcd); |
1013373474 | 0:3887ebee1b37 | 102 | char buffer1[14]; |
1013373474 | 0:3887ebee1b37 | 103 | sprintf(buffer1,"%2d",data1.t); |
1013373474 | 0:3887ebee1b37 | 104 | lcd.printString(buffer1,1,1); |
1013373474 | 2:fb9c05867677 | 105 | lcd.drawRect(1,1,15,15,FILL_TRANSPARENT); |
1013373474 | 1:8672e52115e3 | 106 | bird.check(pad,lcd); |
1013373474 | 0:3887ebee1b37 | 107 | lcd.refresh(); |
1013373474 | 0:3887ebee1b37 | 108 | } |
1013373474 | 0:3887ebee1b37 | 109 | |
1013373474 | 0:3887ebee1b37 | 110 | |
1013373474 | 0:3887ebee1b37 | 111 | void render1()//A nomal |
1013373474 | 0:3887ebee1b37 | 112 | { // clear screen, re-draw and refresh |
1013373474 | 0:3887ebee1b37 | 113 | lcd.clear(); |
1013373474 | 0:3887ebee1b37 | 114 | Data2 data2 = structure_2.get_data2(); |
1013373474 | 0:3887ebee1b37 | 115 | lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 116 | lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 117 | lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 118 | lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 119 | bird.draw(lcd); |
1013373474 | 0:3887ebee1b37 | 120 | structure_2.draw(lcd); |
1013373474 | 0:3887ebee1b37 | 121 | char buffer1[14]; |
1013373474 | 0:3887ebee1b37 | 122 | sprintf(buffer1,"%2d",data2.tt); |
1013373474 | 0:3887ebee1b37 | 123 | lcd.printString(buffer1,1,1); |
1013373474 | 2:fb9c05867677 | 124 | lcd.drawRect(1,1,15,15,FILL_TRANSPARENT); |
1013373474 | 1:8672e52115e3 | 125 | bird.check(pad,lcd); |
1013373474 | 0:3887ebee1b37 | 126 | lcd.refresh(); |
1013373474 | 0:3887ebee1b37 | 127 | } |
1013373474 | 0:3887ebee1b37 | 128 | |
1013373474 | 0:3887ebee1b37 | 129 | |
1013373474 | 0:3887ebee1b37 | 130 | void welcome() { |
1013373474 | 1:8672e52115e3 | 131 | lcd.printString(" Flappy Bird ",1,1); |
1013373474 | 0:3887ebee1b37 | 132 | lcd.printString(" Press Start ",1,4); |
1013373474 | 0:3887ebee1b37 | 133 | lcd.refresh(); |
1013373474 | 0:3887ebee1b37 | 134 | // wait flashing LEDs until start button is pressed LED灯闪到按Press |
1013373474 | 0:3887ebee1b37 | 135 | while (pad.check_event(Gamepad::START_PRESSED) == false) { |
1013373474 | 0:3887ebee1b37 | 136 | pad.leds_on(); |
1013373474 | 0:3887ebee1b37 | 137 | wait(0.1); |
1013373474 | 0:3887ebee1b37 | 138 | pad.leds_off(); |
1013373474 | 0:3887ebee1b37 | 139 | wait(0.1); |
1013373474 | 0:3887ebee1b37 | 140 | } |
1013373474 | 0:3887ebee1b37 | 141 | } |
1013373474 | 0:3887ebee1b37 | 142 | |
1013373474 | 0:3887ebee1b37 | 143 | |
1013373474 | 0:3887ebee1b37 | 144 | void check(){ |
1013373474 | 0:3887ebee1b37 | 145 | Data data = bird.get_data(); |
1013373474 | 0:3887ebee1b37 | 146 | Data1 data1 = structure.get_data1(); |
1013373474 | 0:3887ebee1b37 | 147 | if ( data.y >= 48 ){ |
1013373474 | 0:3887ebee1b37 | 148 | death(); |
1013373474 | 0:3887ebee1b37 | 149 | }else if(data1.m >= 25 && data1.m <= 32 ){ if(data.y <= data1.n || data.y >= data1.n + 15){ |
1013373474 | 0:3887ebee1b37 | 150 | death(); }} |
1013373474 | 0:3887ebee1b37 | 151 | else if(data1.p >= 25 && data1.p <= 32){ if(data.y <= data1.q || data.y >= data1.q + 15){ |
1013373474 | 0:3887ebee1b37 | 152 | death(); }} |
1013373474 | 0:3887ebee1b37 | 153 | else if(data1.e >= 25 && data1.e <= 32){ if(data.y <= data1.o || data.y >= data1.o + 15){ |
1013373474 | 0:3887ebee1b37 | 154 | death(); }} |
1013373474 | 0:3887ebee1b37 | 155 | |
1013373474 | 0:3887ebee1b37 | 156 | } |
1013373474 | 0:3887ebee1b37 | 157 | |
1013373474 | 0:3887ebee1b37 | 158 | |
1013373474 | 0:3887ebee1b37 | 159 | |
1013373474 | 0:3887ebee1b37 | 160 | void check1(){ |
1013373474 | 0:3887ebee1b37 | 161 | Data data = bird.get_data(); |
1013373474 | 0:3887ebee1b37 | 162 | Data2 data2 = structure_2.get_data2(); |
1013373474 | 0:3887ebee1b37 | 163 | if ( data.y >= 48 ){ |
1013373474 | 0:3887ebee1b37 | 164 | death(); |
1013373474 | 0:3887ebee1b37 | 165 | }else if(data2.mm >= 25 && data2.mm <= 32 ){ if(data.y <= data2.nn || data.y >= data2.nn + 15){ |
1013373474 | 0:3887ebee1b37 | 166 | death(); }} |
1013373474 | 0:3887ebee1b37 | 167 | else if(data2.pp >= 25 && data2.pp <= 32){ if(data.y <= data2.qq || data.y >= data2.qq + 15){ |
1013373474 | 0:3887ebee1b37 | 168 | death(); }} |
1013373474 | 0:3887ebee1b37 | 169 | else if(data2.ee >= 25 && data2.ee <= 32){ if(data.y <= data2.oo || data.y >= data2.oo + 15){ |
1013373474 | 0:3887ebee1b37 | 170 | death(); }} |
1013373474 | 0:3887ebee1b37 | 171 | |
1013373474 | 0:3887ebee1b37 | 172 | } |
1013373474 | 0:3887ebee1b37 | 173 | |
1013373474 | 0:3887ebee1b37 | 174 | void death(){ |
1013373474 | 0:3887ebee1b37 | 175 | int fps = 2; |
1013373474 | 0:3887ebee1b37 | 176 | init(); |
1013373474 | 0:3887ebee1b37 | 177 | while (pad.check_event(Gamepad::START_PRESSED) == false) { |
1013373474 | 0:3887ebee1b37 | 178 | lcd.clear(); |
1013373474 | 0:3887ebee1b37 | 179 | lcd.drawRect(0,0,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 180 | lcd.drawRect(0,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 181 | lcd.drawRect(0,47,84,1,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 182 | lcd.drawRect(83,1,1,48,FILL_BLACK);//该公式前两个点是坐标,后两个点是涂抹区域的长宽,先长后宽, |
1013373474 | 0:3887ebee1b37 | 183 | lcd.printString(" Dead ",1,1); |
1013373474 | 0:3887ebee1b37 | 184 | lcd.printString(" Press start",1,3); |
1013373474 | 0:3887ebee1b37 | 185 | lcd.printString("to play again",1,4); |
1013373474 | 0:3887ebee1b37 | 186 | lcd.refresh(); |
1013373474 | 0:3887ebee1b37 | 187 | wait(0.3); |
1013373474 | 0:3887ebee1b37 | 188 | |
1013373474 | 0:3887ebee1b37 | 189 | }//while(1) |
1013373474 | 0:3887ebee1b37 | 190 | |
1013373474 | 0:3887ebee1b37 | 191 | }//death |