201199550 Li Boyuan PlaneWar Game on K64f

Dependencies:   mbed Gamepad N5110

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?

UserRevisionLine numberNew 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 }