ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

engine/main.cpp

Committer:
el16a2t
Date:
2018-05-06
Revision:
8:8d25574b14cd
Parent:
7:d1a1f7c5eb0d
Child:
9:514c6f98ca5a

File content as of revision 8:8d25574b14cd:

/*
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
University of Leeds
Name: Adam Thompson
Username: el16a2t
Student ID Number: 201047832
Date: 17/4/18
*/
#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#include "sprites.h"
#include "main.h"


N5110 lcd(PTC9, PTC0, PTC7, PTD2, PTD1, PTC11);
Gamepad pad;

void init();
void startUp();
void newGame();
void gameOver();


int main()
{

    init();
    startUp();
    while (1) {

        newGame();
        gameOver();
    }
}

void init()
{

// initialise the lcd and gamepad
    lcd.init();
    lcd.setContrast(0.3);
    pad.init ();
    //set initial number of lives to 1
    lives = 1;
    //set initial location conditions for the player and car(s) and score
    x_player = 24;
    y_player = 29;
    

    
    x_car = 4;
    y_car = 0;
    x_car2 = 24;
    y_car2 = -40;


//(re)set score to 0
    score = 0;
}


void startUp()
{
    //print start screen
    lcd.drawSprite (1,1,8,20,(int*) titlescreen);
    lcd.printString ("PRESS START", 3,3);
    lcd.refresh();
    while ( pad.check_event(Gamepad::START_PRESSED) == false) {

    }
}



void newGame()
{
        printf("newgamereached\n"); //checking if new game function reached

        int Index = rand() % 3; //picks a random number between 1 and 3
        printf ("Index = %d\n", Index);
        int arr[3] = {4, 24, 44}; //array corresponding to the x values of the 3 lanes of traffic
        int random_number = arr[Index]; //pick number at Index value from array, assign to random_number
        printf ("random_number = %d\n", random_number);

        lcd.clear();

        lcd.drawSprite(x_player,y_player,20,15,(int*) player); //print the player sprite
        
        //if X pressed, move player left, if B pressed, move player right
        if ( pad.check_event(Gamepad::X_PRESSED) == true) {

            x_player = x_player-20;
        }
        //car cannot go further left than the left lane etc
        if (x_player <4) {
            x_player = 4;
        }
        if ( pad.check_event(Gamepad::B_PRESSED) == true) {

            x_player = x_player+20;
        }
        if (x_player >44) {
            x_player = 44;
        }


        //print road lines
        lcd.drawLine(1,1,1,1500,2);

        lcd.drawLine(21,1,21,1500,2);

        lcd.drawLine(41,1,41,1500,2);

        lcd.drawLine(61,1,61,1500,2);




        //cars move down the road

        lcd.drawSprite(x_car,y_car,20,15,(int*) car);
        y_car++;
        lcd.drawSprite(x_car2,y_car2,20,15,(int*) car2);
        y_car2++;

        // re-generate cars continously

        if (y_car2 == 50) {
            x_car2 = random_number;
            y_car2 = -24;


        }
        if (y_car == 50) {
            x_car = random_number;
            y_car = -24;


        }



        
        score++;//increase score

//        difficulty = read_pot();
        sprintf (str, "%d", score); //convert an integer to pointer
        lcd.printString(str,64,1);


        //if there is a collision, display "game over" screen
        if (x_car == x_player && y_car > 12 && y_car < 50) {
            printf("collision1\n");// so i can tell which car sprite the collision was with
            y_car = y_car;
            y_car2 = y_car2;
            score=score;
            lives--;
            printf("lives=%d\n", lives);

        }
        if (x_car2 == x_player && y_car2 > 12 && y_car2 < 50) {
            printf("collision2\n");
            y_car2 = y_car2;
            y_car = y_car;
            score=score;
            lives--;
            printf("lives=%d\n", lives);

        }

        if ( pad.check_event(Gamepad::X_PRESSED) == true) {

            x_player = x_player-20;
        }
        //car cannot go further left than the left lane etc
        if (x_player <4) {
            x_player = 4;
        }
        if ( pad.check_event(Gamepad::B_PRESSED) == true) {

            x_player = x_player+20;
        }
        if (x_player >44) {
            x_player = 44;
        }






        lcd.refresh();
//control the wait time using the potentiometer value to control difficulty
//lower potentiometer = easier difficulty = longer wait time = cars and score move slower
//e.g - use wait(1-potentiometer value) where potentiometer value 0<x<1 is difficulty
        wait(0.1);







    


}

void gameOver()
{
    printf("reached gameover\n");
    if (lives ==0){

    

    while ( pad.check_event(Gamepad::START_PRESSED) == false) {
    
    printf("gameoverlives=%d\n", lives);
    lcd.clear();
    lcd.refresh();
    lcd.printString(str,64,1);
    lcd.printString ("GAME OVER", 3,1);
    lcd.printString ("PRESS START", 3,3);
    wait(0.2);   
    }
    init ();
}}