RUOFAN LI / Mbed 2 deprecated el17rl

Dependencies:   mbed

Committer:
DannyLee
Date:
Thu May 14 13:12:28 2020 +0000
Revision:
3:cf9fead9c3f4
Child:
4:1ebf8b8842e0
aaa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DannyLee 3:cf9fead9c3f4 1 /*
DannyLee 3:cf9fead9c3f4 2 ELEC2645 Embedded Systems Project
DannyLee 3:cf9fead9c3f4 3 School of Electronic & Electrical Engineering
DannyLee 3:cf9fead9c3f4 4 University of Leeds
DannyLee 3:cf9fead9c3f4 5 Name:Li Ruofan
DannyLee 3:cf9fead9c3f4 6 Username:el17rl
DannyLee 3:cf9fead9c3f4 7 Student ID Number:201199450
DannyLee 3:cf9fead9c3f4 8 Date:12 May 2020
DannyLee 3:cf9fead9c3f4 9 */
DannyLee 3:cf9fead9c3f4 10 #include "mbed.h"
DannyLee 3:cf9fead9c3f4 11 #include "N5110.h"
DannyLee 3:cf9fead9c3f4 12 #include "Gamepad.h"
DannyLee 3:cf9fead9c3f4 13 #include "shot.h"
DannyLee 3:cf9fead9c3f4 14 #include "Ufo.h"
DannyLee 3:cf9fead9c3f4 15 #include "Spaceship.h"
DannyLee 3:cf9fead9c3f4 16 #include "bgm.h"
DannyLee 3:cf9fead9c3f4 17
DannyLee 3:cf9fead9c3f4 18 #define SPACESHIP_WIDTH 5
DannyLee 3:cf9fead9c3f4 19 #define SPACESHIP_HEIGHT 6
DannyLee 3:cf9fead9c3f4 20 #define UFO_SIZE 4
DannyLee 3:cf9fead9c3f4 21 #define UFO_SPEED 1
DannyLee 3:cf9fead9c3f4 22 #define SPACESHIP_LIFE 2
DannyLee 3:cf9fead9c3f4 23
DannyLee 3:cf9fead9c3f4 24 /////////////// objects ///////////////
DannyLee 3:cf9fead9c3f4 25 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
DannyLee 3:cf9fead9c3f4 26 Joystick joystick(PTB10,PTB11,PTC16);
DannyLee 3:cf9fead9c3f4 27 InterruptIn start(PTC5);
DannyLee 3:cf9fead9c3f4 28 InterruptIn buttonX(PTC17);
DannyLee 3:cf9fead9c3f4 29 InterruptIn buttonY(PTC12);
DannyLee 3:cf9fead9c3f4 30 InterruptIn buttonA(PTB9);
DannyLee 3:cf9fead9c3f4 31 InterruptIn buttonB(PTD0);
DannyLee 3:cf9fead9c3f4 32 BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); //leds
DannyLee 3:cf9fead9c3f4 33 bgm bgm;
DannyLee 3:cf9fead9c3f4 34
DannyLee 3:cf9fead9c3f4 35 Ufo *Ufo = NULL;
DannyLee 3:cf9fead9c3f4 36 shot *shot[5] = {NULL,NULL,NULL,NULL,NULL};
DannyLee 3:cf9fead9c3f4 37 Spaceship *Spaceship = NULL;
DannyLee 3:cf9fead9c3f4 38 Homepage *Homepage = NULL;
DannyLee 3:cf9fead9c3f4 39
DannyLee 3:cf9fead9c3f4 40 int score[3] = {0,0,0};
DannyLee 3:cf9fead9c3f4 41 int curScore = 0;
DannyLee 3:cf9fead9c3f4 42 int fail = 0;
DannyLee 3:cf9fead9c3f4 43 int count = 0;
DannyLee 3:cf9fead9c3f4 44 int mode = 0;
DannyLee 3:cf9fead9c3f4 45
DannyLee 3:cf9fead9c3f4 46 ///////////// prototypes ///////////////
DannyLee 3:cf9fead9c3f4 47 void attack();
DannyLee 3:cf9fead9c3f4 48 void move(int signal);
DannyLee 3:cf9fead9c3f4 49 void shoot();
DannyLee 3:cf9fead9c3f4 50 void welcome();
DannyLee 3:cf9fead9c3f4 51 void over();
DannyLee 3:cf9fead9c3f4 52 void updateScore();
DannyLee 3:cf9fead9c3f4 53 void over();
DannyLee 3:cf9fead9c3f4 54 void init();
DannyLee 3:cf9fead9c3f4 55 void updateGame();
DannyLee 3:cf9fead9c3f4 56
DannyLee 3:cf9fead9c3f4 57 ///////////// functions ////////////////
DannyLee 3:cf9fead9c3f4 58 int main(){
DannyLee 3:cf9fead9c3f4 59
DannyLee 3:cf9fead9c3f4 60 init();
DannyLee 3:cf9fead9c3f4 61
DannyLee 3:cf9fead9c3f4 62 while (1) {
DannyLee 3:cf9fead9c3f4 63 //welcome to the star war
DannyLee 3:cf9fead9c3f4 64 Homepage->welcome(lcd,output,bgm);
DannyLee 3:cf9fead9c3f4 65 //choose different function
DannyLee 3:cf9fead9c3f4 66 Homepage->Homepage(lcd,buttonA,buttonY,buttonX,buttonB,start,score,3);
DannyLee 3:cf9fead9c3f4 67 Spaceship = new Spaceship();
DannyLee 3:cf9fead9c3f4 68 Spaceship->init(37,38,10,10);
DannyLee 3:cf9fead9c3f4 69 //choose the mode: easy, normal, defficult
DannyLee 3:cf9fead9c3f4 70 mode = Homepage->getMode();
DannyLee 3:cf9fead9c3f4 71 while(1){
DannyLee 3:cf9fead9c3f4 72 //playing...
DannyLee 3:cf9fead9c3f4 73 updateGame();
DannyLee 3:cf9fead9c3f4 74 //failing, check weather playing again
DannyLee 3:cf9fead9c3f4 75 if (fail == 1) {
DannyLee 3:cf9fead9c3f4 76 int tmp = Homepage->again(lcd,curScore,buttonX,buttonY);
DannyLee 3:cf9fead9c3f4 77 if(tmp == 0)
DannyLee 3:cf9fead9c3f4 78 //do not play again
DannyLee 3:cf9fead9c3f4 79 break;
DannyLee 3:cf9fead9c3f4 80 else{
DannyLee 3:cf9fead9c3f4 81 //play again
DannyLee 3:cf9fead9c3f4 82 curScore+=tmp;
DannyLee 3:cf9fead9c3f4 83 fail = 0;
DannyLee 3:cf9fead9c3f4 84 lcd.clear();
DannyLee 3:cf9fead9c3f4 85 Ufo = NULL;
DannyLee 3:cf9fead9c3f4 86 }
DannyLee 3:cf9fead9c3f4 87 }
DannyLee 3:cf9fead9c3f4 88 count++;
DannyLee 3:cf9fead9c3f4 89 //change Ufo's speed
DannyLee 3:cf9fead9c3f4 90 if(count %8 == 0)Ufo->setSpeed(Ufo->getSpeed()+1);
DannyLee 3:cf9fead9c3f4 91 wait(1.0f/3);
DannyLee 3:cf9fead9c3f4 92 }
DannyLee 3:cf9fead9c3f4 93 over();
DannyLee 3:cf9fead9c3f4 94 while (start == 0){
DannyLee 3:cf9fead9c3f4 95 }
DannyLee 3:cf9fead9c3f4 96 lcd.clear();
DannyLee 3:cf9fead9c3f4 97
DannyLee 3:cf9fead9c3f4 98 }
DannyLee 3:cf9fead9c3f4 99 }
DannyLee 3:cf9fead9c3f4 100 //this function is used to update a game, such as
DannyLee 3:cf9fead9c3f4 101 //display the current score, draw Spaceship, shot ect.
DannyLee 3:cf9fead9c3f4 102 void updateGame(){
DannyLee 3:cf9fead9c3f4 103 Homepage->displayCurScore(lcd,curScore);
DannyLee 3:cf9fead9c3f4 104 Direction d = joystick.get_direction();
DannyLee 3:cf9fead9c3f4 105 Spaceship->update(d);
DannyLee 3:cf9fead9c3f4 106 Spaceship->draw(lcd);
DannyLee 3:cf9fead9c3f4 107 shoot();
DannyLee 3:cf9fead9c3f4 108 attack();
DannyLee 3:cf9fead9c3f4 109 lcd.clear();
DannyLee 3:cf9fead9c3f4 110 }
DannyLee 3:cf9fead9c3f4 111
DannyLee 3:cf9fead9c3f4 112 // initialies buttons, lcd and joystick
DannyLee 3:cf9fead9c3f4 113 void init(){
DannyLee 3:cf9fead9c3f4 114 buttonX.mode(PullDown);
DannyLee 3:cf9fead9c3f4 115 start.mode(PullDown);
DannyLee 3:cf9fead9c3f4 116 buttonA.mode(PullDown);
DannyLee 3:cf9fead9c3f4 117 buttonY.mode(PullDown);
DannyLee 3:cf9fead9c3f4 118 buttonB.mode(PullDown);
DannyLee 3:cf9fead9c3f4 119 joystick.init();
DannyLee 3:cf9fead9c3f4 120 lcd.init();
DannyLee 3:cf9fead9c3f4 121 Homepage = new Homepage();
DannyLee 3:cf9fead9c3f4 122 }
DannyLee 3:cf9fead9c3f4 123
DannyLee 3:cf9fead9c3f4 124 //do something about game over,
DannyLee 3:cf9fead9c3f4 125 //clear data, Bgm, etc.
DannyLee 3:cf9fead9c3f4 126 void over(){
DannyLee 3:cf9fead9c3f4 127 bgm.tone(1500.0,0.5);
DannyLee 3:cf9fead9c3f4 128 Homepage->over(lcd,output);
DannyLee 3:cf9fead9c3f4 129 Ufo = NULL;
DannyLee 3:cf9fead9c3f4 130 for(int i = 0;i<5;i++)shot[i] = NULL;
DannyLee 3:cf9fead9c3f4 131 fail = 0;
DannyLee 3:cf9fead9c3f4 132 count = 0;
DannyLee 3:cf9fead9c3f4 133 updateScore();
DannyLee 3:cf9fead9c3f4 134 curScore = 0;
DannyLee 3:cf9fead9c3f4 135 }
DannyLee 3:cf9fead9c3f4 136
DannyLee 3:cf9fead9c3f4 137 //update top 3 history scores when game over
DannyLee 3:cf9fead9c3f4 138 void updateScore(){
DannyLee 3:cf9fead9c3f4 139 for(int i = 0;i<3;i++){
DannyLee 3:cf9fead9c3f4 140 if(score[i]<curScore){
DannyLee 3:cf9fead9c3f4 141 //score[i] = curScore;
DannyLee 3:cf9fead9c3f4 142 for(int j = 2;j>i;j--){
DannyLee 3:cf9fead9c3f4 143 score[j] = score[j-1];
DannyLee 3:cf9fead9c3f4 144 }
DannyLee 3:cf9fead9c3f4 145 score[i] = curScore;
DannyLee 3:cf9fead9c3f4 146 break;
DannyLee 3:cf9fead9c3f4 147 }
DannyLee 3:cf9fead9c3f4 148 }
DannyLee 3:cf9fead9c3f4 149 }
DannyLee 3:cf9fead9c3f4 150
DannyLee 3:cf9fead9c3f4 151 //display the movement of the shot
DannyLee 3:cf9fead9c3f4 152 //initialize the shot
DannyLee 3:cf9fead9c3f4 153 //shot moves upwards until the Ufo's blood ran out.
DannyLee 3:cf9fead9c3f4 154 void shoot() {
DannyLee 3:cf9fead9c3f4 155 if (buttonX == 1) {
DannyLee 3:cf9fead9c3f4 156 for(int i = 0;i<5;i++){
DannyLee 3:cf9fead9c3f4 157 if(shot[i] == NULL){
DannyLee 3:cf9fead9c3f4 158 shot[i] = new shot();
DannyLee 3:cf9fead9c3f4 159 shot[i]->init(Spaceship->getPos().x+3,35,5,3);
DannyLee 3:cf9fead9c3f4 160 break;
DannyLee 3:cf9fead9c3f4 161 }
DannyLee 3:cf9fead9c3f4 162 }
DannyLee 3:cf9fead9c3f4 163 }
DannyLee 3:cf9fead9c3f4 164 for(int i = 0;i<5;i++){
DannyLee 3:cf9fead9c3f4 165 if(shot[i]!=NULL){
DannyLee 3:cf9fead9c3f4 166 shot[i]->draw(lcd);
DannyLee 3:cf9fead9c3f4 167 lcd.refresh();
DannyLee 3:cf9fead9c3f4 168 if(shot[i]->getPos().x>=Ufo->getPos().x && shot[i]->getPos().x<=(Ufo->getPos().x+12) && shot[i]->getPos().y<=(Ufo->getPos().y+5)){ //being shot
DannyLee 3:cf9fead9c3f4 169 bgm.tone(750.0,0.1);
DannyLee 3:cf9fead9c3f4 170 shot[i] = NULL;
DannyLee 3:cf9fead9c3f4 171 Ufo->setBlood(1);
DannyLee 3:cf9fead9c3f4 172 if(Ufo->getBlood() <= 0){
DannyLee 3:cf9fead9c3f4 173 Ufo = NULL; //destroy
DannyLee 3:cf9fead9c3f4 174 curScore+=((mode+1)*2); //get points according to the mode
DannyLee 3:cf9fead9c3f4 175 }
DannyLee 3:cf9fead9c3f4 176 }else if(shot[i]->getPos().y<=0){
DannyLee 3:cf9fead9c3f4 177 shot[i] = NULL;
DannyLee 3:cf9fead9c3f4 178 }else {
DannyLee 3:cf9fead9c3f4 179 shot[i]->update();
DannyLee 3:cf9fead9c3f4 180 }
DannyLee 3:cf9fead9c3f4 181 }
DannyLee 3:cf9fead9c3f4 182 }
DannyLee 3:cf9fead9c3f4 183 }
DannyLee 3:cf9fead9c3f4 184
DannyLee 3:cf9fead9c3f4 185 //display the movement of the Ufo
DannyLee 3:cf9fead9c3f4 186 //initialize the Ufo
DannyLee 3:cf9fead9c3f4 187 //Ufo moves downwards until meets the Spaceship
DannyLee 3:cf9fead9c3f4 188 void attack() {
DannyLee 3:cf9fead9c3f4 189 if(Ufo == NULL){
DannyLee 3:cf9fead9c3f4 190 Ufo = new Ufo(mode);
DannyLee 3:cf9fead9c3f4 191 Ufo->init(12,5);
DannyLee 3:cf9fead9c3f4 192 Ufo->draw(lcd,mode);
DannyLee 3:cf9fead9c3f4 193 lcd.refresh();
DannyLee 3:cf9fead9c3f4 194 } else {
DannyLee 3:cf9fead9c3f4 195 Ufo->update();
DannyLee 3:cf9fead9c3f4 196 if(Ufo->getPos().y>=33){
DannyLee 3:cf9fead9c3f4 197 fail = 1;
DannyLee 3:cf9fead9c3f4 198 }else{
DannyLee 3:cf9fead9c3f4 199 Ufo->draw(lcd,mode);
DannyLee 3:cf9fead9c3f4 200 lcd.refresh();
DannyLee 3:cf9fead9c3f4 201 }
DannyLee 3:cf9fead9c3f4 202 }
DannyLee 3:cf9fead9c3f4 203 }
DannyLee 3:cf9fead9c3f4 204
DannyLee 3:cf9fead9c3f4 205
DannyLee 3:cf9fead9c3f4 206
DannyLee 3:cf9fead9c3f4 207
DannyLee 3:cf9fead9c3f4 208