![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
201199550 Li Boyuan PlaneWar Game on K64f
Dependencies: mbed Gamepad N5110
main.cpp@0:36c99c50e688, 2020-05-14 (annotated)
- Committer:
- LBY
- Date:
- Thu May 14 10:14:48 2020 +0000
- Revision:
- 0:36c99c50e688
From:201199550 Li Boyuan; Game name: PlaneWar
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LBY | 0:36c99c50e688 | 1 | #include "Bitmap.h" |
LBY | 0:36c99c50e688 | 2 | #include "N5110.h" |
LBY | 0:36c99c50e688 | 3 | #include "Gamepad.h" |
LBY | 0:36c99c50e688 | 4 | |
LBY | 0:36c99c50e688 | 5 | #include "plane.h" |
LBY | 0:36c99c50e688 | 6 | #include "life.h" |
LBY | 0:36c99c50e688 | 7 | #include "engine.h" |
LBY | 0:36c99c50e688 | 8 | #include "N5110.h" |
LBY | 0:36c99c50e688 | 9 | #include "Gamepad.h" |
LBY | 0:36c99c50e688 | 10 | #include<iostream> |
LBY | 0:36c99c50e688 | 11 | |
LBY | 0:36c99c50e688 | 12 | using namespace std; |
LBY | 0:36c99c50e688 | 13 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
LBY | 0:36c99c50e688 | 14 | Gamepad pad; |
LBY | 0:36c99c50e688 | 15 | plane p; |
LBY | 0:36c99c50e688 | 16 | life lf; |
LBY | 0:36c99c50e688 | 17 | engine eg; |
LBY | 0:36c99c50e688 | 18 | bool n = true; |
LBY | 0:36c99c50e688 | 19 | bomb bo[20]; |
LBY | 0:36c99c50e688 | 20 | bullet bu[20]; |
LBY | 0:36c99c50e688 | 21 | int bunum = 0; |
LBY | 0:36c99c50e688 | 22 | int bonum = 0; |
LBY | 0:36c99c50e688 | 23 | int score = 0; |
LBY | 0:36c99c50e688 | 24 | int m = 0; |
LBY | 0:36c99c50e688 | 25 | |
LBY | 0:36c99c50e688 | 26 | void init(); |
LBY | 0:36c99c50e688 | 27 | void welcome(); |
LBY | 0:36c99c50e688 | 28 | void screen(); |
LBY | 0:36c99c50e688 | 29 | void update(); |
LBY | 0:36c99c50e688 | 30 | void gameover(); |
LBY | 0:36c99c50e688 | 31 | void drawBitmap(int x, int y, int width, int height, int *data); |
LBY | 0:36c99c50e688 | 32 | |
LBY | 0:36c99c50e688 | 33 | int main() |
LBY | 0:36c99c50e688 | 34 | { |
LBY | 0:36c99c50e688 | 35 | while(1){ |
LBY | 0:36c99c50e688 | 36 | init(); |
LBY | 0:36c99c50e688 | 37 | welcome(); |
LBY | 0:36c99c50e688 | 38 | while(n){ |
LBY | 0:36c99c50e688 | 39 | if(m%8 ==0){ |
LBY | 0:36c99c50e688 | 40 | bo[bonum%20].y = eg.randombomb(); |
LBY | 0:36c99c50e688 | 41 | bo[bonum%20].x = 82; |
LBY | 0:36c99c50e688 | 42 | bonum = bonum + 1; |
LBY | 0:36c99c50e688 | 43 | } |
LBY | 0:36c99c50e688 | 44 | lcd.clear(); |
LBY | 0:36c99c50e688 | 45 | screen(); |
LBY | 0:36c99c50e688 | 46 | update(); |
LBY | 0:36c99c50e688 | 47 | lcd.refresh(); |
LBY | 0:36c99c50e688 | 48 | wait(0.2); |
LBY | 0:36c99c50e688 | 49 | m = m + 1; |
LBY | 0:36c99c50e688 | 50 | } |
LBY | 0:36c99c50e688 | 51 | wait(1); |
LBY | 0:36c99c50e688 | 52 | } |
LBY | 0:36c99c50e688 | 53 | } |
LBY | 0:36c99c50e688 | 54 | |
LBY | 0:36c99c50e688 | 55 | void init(){ |
LBY | 0:36c99c50e688 | 56 | lcd.init(); |
LBY | 0:36c99c50e688 | 57 | pad.init(); |
LBY | 0:36c99c50e688 | 58 | p.init(); |
LBY | 0:36c99c50e688 | 59 | lf.init(); |
LBY | 0:36c99c50e688 | 60 | eg.init(); |
LBY | 0:36c99c50e688 | 61 | lcd.setContrast(0.4); |
LBY | 0:36c99c50e688 | 62 | n = true; |
LBY | 0:36c99c50e688 | 63 | bunum = 0; |
LBY | 0:36c99c50e688 | 64 | bonum = 0; |
LBY | 0:36c99c50e688 | 65 | score = 0; |
LBY | 0:36c99c50e688 | 66 | m = 0; |
LBY | 0:36c99c50e688 | 67 | for(int i = 0; i < 20; i++){ |
LBY | 0:36c99c50e688 | 68 | bu[i].x = -1; |
LBY | 0:36c99c50e688 | 69 | bu[i].y = -1; |
LBY | 0:36c99c50e688 | 70 | bo[i].x = -1; |
LBY | 0:36c99c50e688 | 71 | bo[i].y = -1; |
LBY | 0:36c99c50e688 | 72 | bo[i].width = 8; |
LBY | 0:36c99c50e688 | 73 | bo[i].height = 8; |
LBY | 0:36c99c50e688 | 74 | int data[64]= { |
LBY | 0:36c99c50e688 | 75 | 0,0,0,1,1,0,0,0, |
LBY | 0:36c99c50e688 | 76 | 0,1,1,0,0,1,1,0, |
LBY | 0:36c99c50e688 | 77 | 0,1,1,1,1,1,1,0, |
LBY | 0:36c99c50e688 | 78 | 1,0,1,1,1,1,0,1, |
LBY | 0:36c99c50e688 | 79 | 1,0,1,1,1,1,0,1, |
LBY | 0:36c99c50e688 | 80 | 0,1,1,1,1,1,1,0, |
LBY | 0:36c99c50e688 | 81 | 0,1,1,0,0,1,1,0, |
LBY | 0:36c99c50e688 | 82 | 0,0,0,1,1,0,0,0 |
LBY | 0:36c99c50e688 | 83 | }; |
LBY | 0:36c99c50e688 | 84 | bo[i].data = data; |
LBY | 0:36c99c50e688 | 85 | } |
LBY | 0:36c99c50e688 | 86 | } |
LBY | 0:36c99c50e688 | 87 | |
LBY | 0:36c99c50e688 | 88 | void welcome(){ |
LBY | 0:36c99c50e688 | 89 | lcd.clear(); |
LBY | 0:36c99c50e688 | 90 | lcd.printString("The plane war!",0,1); |
LBY | 0:36c99c50e688 | 91 | lcd.printString(" Press Start ",0,4); |
LBY | 0:36c99c50e688 | 92 | lcd.refresh(); |
LBY | 0:36c99c50e688 | 93 | while( pad.check_event(Gamepad::START_PRESSED) == false){ |
LBY | 0:36c99c50e688 | 94 | pad.leds_on(); |
LBY | 0:36c99c50e688 | 95 | wait(0.1); |
LBY | 0:36c99c50e688 | 96 | pad.leds_off(); |
LBY | 0:36c99c50e688 | 97 | wait(0.1); |
LBY | 0:36c99c50e688 | 98 | } |
LBY | 0:36c99c50e688 | 99 | } |
LBY | 0:36c99c50e688 | 100 | |
LBY | 0:36c99c50e688 | 101 | void screen(){ |
LBY | 0:36c99c50e688 | 102 | lcd.clear(); |
LBY | 0:36c99c50e688 | 103 | p.display(lcd); |
LBY | 0:36c99c50e688 | 104 | lf.display(lcd); |
LBY | 0:36c99c50e688 | 105 | for(int i = 0; i <20; i++){ |
LBY | 0:36c99c50e688 | 106 | if(bo[i].x >=0){ |
LBY | 0:36c99c50e688 | 107 | drawBitmap(bo[i].x, bo[i].y, bo[i].width, bo[i].height, bo[i].data);} |
LBY | 0:36c99c50e688 | 108 | if(bu[i].x >=0){ |
LBY | 0:36c99c50e688 | 109 | lcd.drawRect(bu[i].x, bu[i].y, 2, 2, FILL_BLACK);} |
LBY | 0:36c99c50e688 | 110 | } |
LBY | 0:36c99c50e688 | 111 | lcd.refresh(); |
LBY | 0:36c99c50e688 | 112 | } |
LBY | 0:36c99c50e688 | 113 | |
LBY | 0:36c99c50e688 | 114 | void update(){ |
LBY | 0:36c99c50e688 | 115 | p.update(pad); |
LBY | 0:36c99c50e688 | 116 | for(int i = 0; i<20; i++){ |
LBY | 0:36c99c50e688 | 117 | for(int j = 0; j < 20; j++){ |
LBY | 0:36c99c50e688 | 118 | events e = eg.evet_check(p, bo[i],pad,bu[j]); |
LBY | 0:36c99c50e688 | 119 | if(e == DEAD){ |
LBY | 0:36c99c50e688 | 120 | lf.update(); |
LBY | 0:36c99c50e688 | 121 | bo[i].x = -1; |
LBY | 0:36c99c50e688 | 122 | pad.tone(1000,0.2); |
LBY | 0:36c99c50e688 | 123 | if(lf.liferest()==0){ |
LBY | 0:36c99c50e688 | 124 | gameover(); |
LBY | 0:36c99c50e688 | 125 | i = 20; |
LBY | 0:36c99c50e688 | 126 | j = 20; |
LBY | 0:36c99c50e688 | 127 | pad.tone(1000,0.5); |
LBY | 0:36c99c50e688 | 128 | break; |
LBY | 0:36c99c50e688 | 129 | } |
LBY | 0:36c99c50e688 | 130 | }else if(e == FIRE){ |
LBY | 0:36c99c50e688 | 131 | eg.fire(p.getxy().x+7, p.getxy().y+3, bu[bunum%20]); |
LBY | 0:36c99c50e688 | 132 | bunum = bunum + 1; |
LBY | 0:36c99c50e688 | 133 | }else if(e == ELMININATE){ |
LBY | 0:36c99c50e688 | 134 | bo[i].x = -1; |
LBY | 0:36c99c50e688 | 135 | bu[j].x = -1; |
LBY | 0:36c99c50e688 | 136 | score = score + 5; |
LBY | 0:36c99c50e688 | 137 | cout <<score<<endl; |
LBY | 0:36c99c50e688 | 138 | } |
LBY | 0:36c99c50e688 | 139 | } |
LBY | 0:36c99c50e688 | 140 | } |
LBY | 0:36c99c50e688 | 141 | for(int i = 0; i<20; i++){ |
LBY | 0:36c99c50e688 | 142 | if((bo[i].x >=0) && (bo[i].x<=84)){ |
LBY | 0:36c99c50e688 | 143 | bo[i].x = bo[i].x - 1; |
LBY | 0:36c99c50e688 | 144 | } |
LBY | 0:36c99c50e688 | 145 | if((bu[i].x >=0) && (bu[i].x<=84)){ |
LBY | 0:36c99c50e688 | 146 | bu[i].x = bu[i].x + 1; |
LBY | 0:36c99c50e688 | 147 | } |
LBY | 0:36c99c50e688 | 148 | } |
LBY | 0:36c99c50e688 | 149 | |
LBY | 0:36c99c50e688 | 150 | } |
LBY | 0:36c99c50e688 | 151 | |
LBY | 0:36c99c50e688 | 152 | void gameover(){ |
LBY | 0:36c99c50e688 | 153 | cout <<"game over"<< endl; |
LBY | 0:36c99c50e688 | 154 | lcd.clear(); |
LBY | 0:36c99c50e688 | 155 | lcd.printString("GAMEOVER ",0,1); |
LBY | 0:36c99c50e688 | 156 | lcd.printString("SCORE ",0,2); |
LBY | 0:36c99c50e688 | 157 | char buffer1[14]; |
LBY | 0:36c99c50e688 | 158 | sprintf(buffer1,"%2d",score); |
LBY | 0:36c99c50e688 | 159 | lcd.printString(buffer1,0,3); |
LBY | 0:36c99c50e688 | 160 | lcd.printString(" Press A ",0,4); |
LBY | 0:36c99c50e688 | 161 | lcd.refresh(); |
LBY | 0:36c99c50e688 | 162 | while ( pad.check_event(Gamepad::A_PRESSED) == false) { |
LBY | 0:36c99c50e688 | 163 | pad.leds_on(); |
LBY | 0:36c99c50e688 | 164 | wait(0.1); |
LBY | 0:36c99c50e688 | 165 | pad.leds_off(); |
LBY | 0:36c99c50e688 | 166 | wait(0.1); |
LBY | 0:36c99c50e688 | 167 | } |
LBY | 0:36c99c50e688 | 168 | n = false; |
LBY | 0:36c99c50e688 | 169 | } |
LBY | 0:36c99c50e688 | 170 | |
LBY | 0:36c99c50e688 | 171 | void drawBitmap(int x, int y, int width, int height, int *data){ |
LBY | 0:36c99c50e688 | 172 | Bitmap p(data, height, width); |
LBY | 0:36c99c50e688 | 173 | p.render(lcd, x, y); |
LBY | 0:36c99c50e688 | 174 | } |