RUOFAN LI / Mbed 2 deprecated el17rl

Dependencies:   mbed

Committer:
DannyLee
Date:
Fri May 15 19:57:40 2020 +0000
Revision:
5:e3a9f0548922
Parent:
4:1ebf8b8842e0
Child:
6:cbd9e1f26a10
need to debug

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 5:e3a9f0548922 5 Coded by Li Ruofan
DannyLee 3:cf9fead9c3f4 6 Username:el17rl
DannyLee 5:e3a9f0548922 7 StudentIDNumber:201199450
DannyLee 5:e3a9f0548922 8 Date:5/10/2020
DannyLee 3:cf9fead9c3f4 9 */
DannyLee 5:e3a9f0548922 10 #include <N5110.h>
DannyLee 5:e3a9f0548922 11 #include <Joystick.h>
DannyLee 3:cf9fead9c3f4 12 #include "shot.h"
DannyLee 5:e3a9f0548922 13 #include "UFO.h"
DannyLee 3:cf9fead9c3f4 14 #include "Spaceship.h"
DannyLee 5:e3a9f0548922 15 #include "Menu.h"
DannyLee 5:e3a9f0548922 16 #include "Bgm.h"
DannyLee 3:cf9fead9c3f4 17
DannyLee 5:e3a9f0548922 18 /////////////// objects ///////////////
DannyLee 3:cf9fead9c3f4 19 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
DannyLee 5:e3a9f0548922 20 Joystick joystick(PTB10,PTB11,PTC16);
DannyLee 3:cf9fead9c3f4 21 InterruptIn start(PTC5);
DannyLee 3:cf9fead9c3f4 22 InterruptIn buttonX(PTC17);
DannyLee 3:cf9fead9c3f4 23 InterruptIn buttonY(PTC12);
DannyLee 3:cf9fead9c3f4 24 InterruptIn buttonA(PTB9);
DannyLee 3:cf9fead9c3f4 25 InterruptIn buttonB(PTD0);
DannyLee 3:cf9fead9c3f4 26 BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); //leds
DannyLee 5:e3a9f0548922 27 Bgm bgm;
DannyLee 3:cf9fead9c3f4 28
DannyLee 5:e3a9f0548922 29 UFO *UFO = NULL;
DannyLee 5:e3a9f0548922 30 Shot *shots[5] = {NULL,NULL,NULL,NULL,NULL};
DannyLee 5:e3a9f0548922 31 Spaceship *spaceship = NULL;
DannyLee 3:cf9fead9c3f4 32
DannyLee 3:cf9fead9c3f4 33 int score[3] = {0,0,0};
DannyLee 3:cf9fead9c3f4 34 int curScore = 0;
DannyLee 3:cf9fead9c3f4 35 int fail = 0;
DannyLee 3:cf9fead9c3f4 36 int count = 0;
DannyLee 3:cf9fead9c3f4 37 int mode = 0;
DannyLee 3:cf9fead9c3f4 38
DannyLee 3:cf9fead9c3f4 39 ///////////// prototypes ///////////////
DannyLee 3:cf9fead9c3f4 40 void attack();
DannyLee 3:cf9fead9c3f4 41 void move(int signal);
DannyLee 3:cf9fead9c3f4 42 void shoot();
DannyLee 3:cf9fead9c3f4 43 void welcome();
DannyLee 3:cf9fead9c3f4 44 void over();
DannyLee 3:cf9fead9c3f4 45 void updateScore();
DannyLee 3:cf9fead9c3f4 46 void over();
DannyLee 3:cf9fead9c3f4 47 void init();
DannyLee 3:cf9fead9c3f4 48 void updateGame();
DannyLee 3:cf9fead9c3f4 49
DannyLee 3:cf9fead9c3f4 50 ///////////// functions ////////////////
DannyLee 3:cf9fead9c3f4 51 int main(){
DannyLee 3:cf9fead9c3f4 52
DannyLee 3:cf9fead9c3f4 53 init();
DannyLee 3:cf9fead9c3f4 54 while (1) {
DannyLee 5:e3a9f0548922 55 //welcome to the star war
DannyLee 5:e3a9f0548922 56 homepage->welcome(lcd,output,bgm);
DannyLee 5:e3a9f0548922 57 //choose different function
DannyLee 5:e3a9f0548922 58 homepage->homepage(lcd,buttonA,start,score,3);
DannyLee 5:e3a9f0548922 59 spaceship = new Spaceship();
DannyLee 5:e3a9f0548922 60 spaceship->init(37,38,10,10);
DannyLee 5:e3a9f0548922 61 while (start == 0){
DannyLee 3:cf9fead9c3f4 62 }
DannyLee 3:cf9fead9c3f4 63 lcd.clear();
DannyLee 3:cf9fead9c3f4 64
DannyLee 3:cf9fead9c3f4 65 }
DannyLee 3:cf9fead9c3f4 66 }
DannyLee 5:e3a9f0548922 67
DannyLee 5:e3a9f0548922 68 //updating the game
DannyLee 3:cf9fead9c3f4 69 void updateGame(){
DannyLee 5:e3a9f0548922 70 homepage->displayCurScore(lcd,curScore);
DannyLee 3:cf9fead9c3f4 71 Direction d = joystick.get_direction();
DannyLee 5:e3a9f0548922 72 spaceship->update(d);
DannyLee 5:e3a9f0548922 73 spaceship->draw(lcd);
DannyLee 3:cf9fead9c3f4 74 shoot();
DannyLee 3:cf9fead9c3f4 75 attack();
DannyLee 3:cf9fead9c3f4 76 lcd.clear();
DannyLee 3:cf9fead9c3f4 77 }
DannyLee 3:cf9fead9c3f4 78
DannyLee 3:cf9fead9c3f4 79 // initialies buttons, lcd and joystick
DannyLee 3:cf9fead9c3f4 80 void init(){
DannyLee 3:cf9fead9c3f4 81 buttonX.mode(PullDown);
DannyLee 3:cf9fead9c3f4 82 start.mode(PullDown);
DannyLee 3:cf9fead9c3f4 83 buttonA.mode(PullDown);
DannyLee 3:cf9fead9c3f4 84 buttonY.mode(PullDown);
DannyLee 3:cf9fead9c3f4 85 buttonB.mode(PullDown);
DannyLee 3:cf9fead9c3f4 86 joystick.init();
DannyLee 3:cf9fead9c3f4 87 lcd.init();
DannyLee 5:e3a9f0548922 88 homepage = new Homepage();
DannyLee 3:cf9fead9c3f4 89 }
DannyLee 3:cf9fead9c3f4 90
DannyLee 5:e3a9f0548922 91 //game over,
DannyLee 5:e3a9f0548922 92 //clear data, bgm, etc.
DannyLee 3:cf9fead9c3f4 93 void over(){
DannyLee 5:e3a9f0548922 94 bgm->died(bgm);
DannyLee 5:e3a9f0548922 95 homepage->over(lcd,output);
DannyLee 5:e3a9f0548922 96 UFO = NULL;
DannyLee 5:e3a9f0548922 97 for(int i = 0;i<5;i++)shots[i] = NULL;
DannyLee 3:cf9fead9c3f4 98 fail = 0;
DannyLee 3:cf9fead9c3f4 99 count = 0;
DannyLee 3:cf9fead9c3f4 100 updateScore();
DannyLee 3:cf9fead9c3f4 101 curScore = 0;
DannyLee 3:cf9fead9c3f4 102 }
DannyLee 3:cf9fead9c3f4 103
DannyLee 5:e3a9f0548922 104 //show the movement of the shot
DannyLee 3:cf9fead9c3f4 105 //initialize the shot
DannyLee 5:e3a9f0548922 106 //shot moves upwards until the UFO has been slained.
DannyLee 3:cf9fead9c3f4 107 void shoot() {
DannyLee 3:cf9fead9c3f4 108 if (buttonX == 1) {
DannyLee 3:cf9fead9c3f4 109 for(int i = 0;i<5;i++){
DannyLee 5:e3a9f0548922 110 if(shots[i] == NULL){
DannyLee 5:e3a9f0548922 111 shots[i] = new shot();
DannyLee 5:e3a9f0548922 112 shots[i]->init(spaceship->getPos().x+3,35,5,3);
DannyLee 3:cf9fead9c3f4 113 break;
DannyLee 3:cf9fead9c3f4 114 }
DannyLee 3:cf9fead9c3f4 115 }
DannyLee 3:cf9fead9c3f4 116 }
DannyLee 3:cf9fead9c3f4 117 for(int i = 0;i<5;i++){
DannyLee 5:e3a9f0548922 118 if(shots[i]!=NULL){
DannyLee 5:e3a9f0548922 119 shots[i]->draw(lcd);
DannyLee 3:cf9fead9c3f4 120 lcd.refresh();
DannyLee 5:e3a9f0548922 121 if(shots[i]->getPos().x>=UFO->getPos().x && shots[i]->getPos().x<=(UFO->getPos().x+12) && shots[i]->getPos().y<=(UFO->getPos().y+5)){ //being shot
DannyLee 3:cf9fead9c3f4 122 bgm.tone(750.0,0.1);
DannyLee 5:e3a9f0548922 123 shots[i] = NULL;
DannyLee 5:e3a9f0548922 124 UFO->setBlood(1);
DannyLee 5:e3a9f0548922 125 if(UFO->getBlood() <= 0){
DannyLee 5:e3a9f0548922 126 UFO = NULL; //destroy
DannyLee 5:e3a9f0548922 127 curScore+=1; //get score
DannyLee 3:cf9fead9c3f4 128 }
DannyLee 5:e3a9f0548922 129 }else if(shots[i]->getPos().y<=0){
DannyLee 5:e3a9f0548922 130 shots[i] = NULL;
DannyLee 3:cf9fead9c3f4 131 }else {
DannyLee 5:e3a9f0548922 132 shots[i]->update();
DannyLee 3:cf9fead9c3f4 133 }
DannyLee 3:cf9fead9c3f4 134 }
DannyLee 3:cf9fead9c3f4 135 }
DannyLee 3:cf9fead9c3f4 136 }
DannyLee 3:cf9fead9c3f4 137
DannyLee 5:e3a9f0548922 138 //display the movement of the UFO
DannyLee 5:e3a9f0548922 139 //initialize the UFO
DannyLee 5:e3a9f0548922 140 //UFO moves downwards until meets the spaceship
DannyLee 3:cf9fead9c3f4 141 void attack() {
DannyLee 5:e3a9f0548922 142 if(UFO == NULL){
DannyLee 5:e3a9f0548922 143 UFO = new UFO(mode);
DannyLee 5:e3a9f0548922 144 UFO->init(12,5);
DannyLee 5:e3a9f0548922 145 UFO->draw(lcd,mode);
DannyLee 3:cf9fead9c3f4 146 lcd.refresh();
DannyLee 3:cf9fead9c3f4 147 } else {
DannyLee 5:e3a9f0548922 148 UFO->update();
DannyLee 5:e3a9f0548922 149 if(UFO->getPos().y>=33){
DannyLee 3:cf9fead9c3f4 150 fail = 1;
DannyLee 3:cf9fead9c3f4 151 }else{
DannyLee 5:e3a9f0548922 152 UFO->draw(lcd,mode);
DannyLee 3:cf9fead9c3f4 153 lcd.refresh();
DannyLee 3:cf9fead9c3f4 154 }
DannyLee 3:cf9fead9c3f4 155 }
DannyLee 3:cf9fead9c3f4 156 }
DannyLee 3:cf9fead9c3f4 157
DannyLee 3:cf9fead9c3f4 158
DannyLee 3:cf9fead9c3f4 159
DannyLee 3:cf9fead9c3f4 160
DannyLee 3:cf9fead9c3f4 161