ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

engine/main.cpp

Committer:
el16a2t
Date:
2018-05-07
Revision:
11:4907e6e7e855
Parent:
10:e81aacef805b
Child:
12:c36bc59d120e

File content as of revision 11:4907e6e7e855:

/*
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 = -50;


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


void startUp()
{
    //print start screen
    while ( pad.check_event(Gamepad::START_PRESSED) == false) {
        lcd.drawSprite (1,1,20,70,(int*) titlescreen);
        lcd.printString ("PRESS START", 3,5);
        lcd.printString ("SPEED", 3,3);
        pot_value = pad.read_pot();
        if(pot_value>9.9) {
            pot_value=9.9;
        }
        sprintf (speed, "%.1f", (pot_value*10)); //convert an integer to pointer
        lcd.printString(speed,55,3);
        lcd.refresh();
        wait(0.2);
    }
}



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);
    
    int Index2 = rand() % 3; 
    int arr2[3] = {4, 24, 44}; 
    int random_number2 = arr2[Index2]; 
    




    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


    int YIndex = rand() % 4;
    int array[5] = {50, 55, 60, 65, 70};
    int nextCar = array[YIndex];

    if (y_car == nextCar) {
        x_car = random_number;
        y_car = -24;


    }

    int YIndex2 = rand() % 4;
    int array2[5] = {50, 55, 60, 65, 70};
    int nextCar2 = array2[YIndex2];

    if (y_car2 == nextCar2) {
        x_car2 = random_number2;
        y_car2 = -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;
    }

    pot_value = pad.read_pot();
    printf("pot_value = %f\n", pot_value);
    float wait_time = pot_value/10;



    lcd.refresh();

    wait(0.1-wait_time);










}

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.printString(str,64,1);
            lcd.printString ("GAME OVER", 3,1);
            lcd.printString ("PRESS START", 3,3);
            lcd.refresh();
            wait(0.2);
        }
        init ();
    }
}