Joshua O'hara 201291390

Dependencies:   mbed

main.cpp

Committer:
josh_ohara
Date:
2020-05-13
Revision:
22:3e978b1d7958
Parent:
21:970807533b10
Child:
23:aa86e32b6a74

File content as of revision 22:3e978b1d7958:

/* 
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
University of Leeds
2019/20

Name: Joshua O'hara
Username: el18jkeo
Student ID Number: 201291390
Date: 11.03.2020
*/

// includes
#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#include "SpaceInvaderEngine.h"

#define SHIP_WIDTH 9
#define SHIP_HEIGHT 2
#define ALIEN_SIZE 4
#define ROW_SIZE 3
#define COLUMN_SIZE 5
#define NUMBER_OF_ALIENS 10
#define COVER_Y 38
#define COVER1_X 9
#define COVER2_X 34
#define COVER3_X 59
#define ROCK_NUMBER 10

// objects
Gamepad pad;
N5110 lcd;
SpaceInvaderEngine SpaceInvader;

// structs
struct UserInput {
    Direction d;
    float mag;
};
    
//functions
void hardware_init();
void game_init();
void draw_game();
void start_menu();
void game_over(int level);
void next_level(int level);
void update_game(UserInput input);

int main()
{
    int fps = 6;
    int counter = 0;
    int level = 1;
    bool armada_life = true;
    bool ship_life = true;
    
    hardware_init();
    start_menu();
    draw_game();
    wait(1.0f/fps);
    
while(1){
    hardware_init();
    game_init();
    next_level(level);
    while(1) {
        SpaceInvader.read_input(pad);
        SpaceInvader.update(pad, lcd, counter);
        draw_game();
        wait(1.0f/fps);
        counter++;
        ship_life = SpaceInvader.get_ship_life();
        if(ship_life == false){
            game_over(level);
        }    
        armada_life = SpaceInvader.get_armada_life(); 
        if(armada_life == false){
            break;
            }
    }
    level++;
}
}

void start_menu() {
    lcd.printString("Space Invaders",0,1);  
    lcd.printString("  Press Start ",0,4);
    lcd.refresh();
    
    while ( pad.start_pressed() == false) {
        lcd.setContrast( pad.read_pot1());
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}

void draw_game()
{
    lcd.clear();
    SpaceInvader.render(lcd);
    lcd.refresh();
}

void hardware_init()
{ 
    lcd.init();
    pad.init();
}
void game_init()
{
    SpaceInvader.init(SHIP_HEIGHT,SHIP_WIDTH,ALIEN_SIZE,NUMBER_OF_ALIENS,COLUMN_SIZE,ROW_SIZE,COVER_Y,COVER1_X,COVER2_X,COVER3_X,ROCK_NUMBER);   
}

void game_over(int level){
    lcd.clear();
    while(1){
        lcd.printString("   Game Over",0,0);  
        char buffer[14];
        sprintf(buffer,"   Level %2d",level);
        lcd.printString(buffer,0,2);       
        lcd.printString("  Press reset ",0,4);
        lcd.refresh();
    }
}

void next_level(int level){
    lcd.clear();
    char buffer[14];
    sprintf(buffer,"   Level %2d",level);
    lcd.printString(buffer,0,2);
    lcd.refresh();
    wait(2);
    lcd.clear();
    }