Li Ruofan 201199450

Dependencies:   mbed Gamepad Joystick

main.cpp

Committer:
DannyLee
Date:
2020-05-15
Revision:
7:e3844250b77d
Parent:
6:cbd9e1f26a10

File content as of revision 7:e3844250b77d:

/*
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
University of Leeds
Coded by Li Ruofan
Username:el17rl
StudentIDNumber:201199450
Date:5/10/2020
*/
#include <N5110.h>
#include <Joystick.h>
#include "shot.h"
#include "UFO.h"
#include "spaceship.h"
#include "homepage.h"
#include "bgm.h"

/////////////// objects ///////////////
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Joystick joystick(PTB10,PTB11,PTC16);
InterruptIn start(PTC5);
InterruptIn buttonX(PTC17);
InterruptIn buttonY(PTC12);
InterruptIn buttonA(PTB9);
InterruptIn buttonB(PTD0);
BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); //leds
Bgm bgm;

UFO *UFO = NULL;
Shot *shots[5] = {NULL,NULL,NULL,NULL,NULL};
Spaceship *spaceship = NULL;

int score[3] = {0,0,0};
int curScore = 0;
int fail = 0;
int count = 0;

///////////// prototypes ///////////////
void attack();
void move(int signal);
void shoot();
void welcome();
void over();
void updateScore();
void over();
void init();
void updateGame();

///////////// functions ////////////////
int main(){
        
        init();
        while (1) {
        //welcome to the star war
        homepage->welcome(lcd,output,bgm);
        //choose different function
        homepage->homepage(lcd,buttonA,start,score,3);          
        spaceship = new Spaceship();
        spaceship->init(37,38,10,10);   
        while (start == 0){
            } 
            lcd.clear();

        }         
}
     
//updating the game 
void updateGame(){
    homepage->displayCurScore(lcd,curScore);
    Direction d = joystick.get_direction();
    spaceship->update(d);
    spaceship->draw(lcd);
    shoot();
    attack();
    lcd.clear();
}

// initialies buttons, lcd and joystick
void init(){
    buttonX.mode(PullDown);
    start.mode(PullDown);
    buttonA.mode(PullDown);
    buttonY.mode(PullDown);
    buttonB.mode(PullDown);
    joystick.init();       
    lcd.init();
    homepage = new Homepage();
}

//game over,
//clear data, bgm, etc.
void over(){
    bgm->died(bgm);
    homepage->over(lcd,output); 
    UFO = NULL;
    for(int i = 0;i<5;i++)shots[i] = NULL;
    fail = 0;
    count = 0;
    updateScore();
    curScore = 0;
}

//show the movement of the shot
//initialize the shot
//shot moves upwards until the UFO has been slained.
void shoot() {
    if (buttonX == 1) {
        for(int i = 0;i<5;i++){
            if(shots[i] == NULL){
                shots[i] = new shot();
                shots[i]->init(spaceship->getPos().x+3,35,5,3);
                break;
            }
        }
    } 
    for(int i = 0;i<5;i++){
        if(shots[i]!=NULL){
            shots[i]->draw(lcd);
            lcd.refresh();
            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
                bgm.tone(750.0,0.1);
                shots[i] = NULL;
                UFO->setBlood(1);
                if(UFO->getBlood() <= 0){
                    UFO = NULL; //destroy 
                    curScore+=1;   //get score
                }             
            }else if(shots[i]->getPos().y<=0){
                shots[i] = NULL;
            }else {
                shots[i]->update();
            }
        }
    }
}

//display the movement of the UFO
//initialize the UFO
//UFO moves downwards until meets the spaceship
void attack() { 
    if(UFO == NULL){
        UFO = new UFO;
        UFO->init(12,5);
        UFO->draw(lcd);
        lcd.refresh();
    } else {
        UFO->update();
        if(UFO->getPos().y>=33){
            fail = 1;
        }else{
            UFO->draw(lcd);
            lcd.refresh();
        }
    }
}