ELEC2645 (2018/19) / Mbed 2 deprecated el17mtu_

Dependencies:   mbed

ModeA/ModeA.cpp

Committer:
el17mtu
Date:
2019-05-09
Revision:
19:5e3ee84d9233
Parent:
18:59befe1eaa56
Child:
20:d9987ed262c7

File content as of revision 19:5e3ee84d9233:

#include "ModeA.h"

ModeA::ModeA() //constructor
{

}

ModeA::~ModeA() //destructor
{

}

//initialise all values
void ModeA::initialise(N5110 &lcd)
{
    x_position = 12; //x coordinate of square
    y_position = 18; //y coordinate of square
    speed = 1; // speed of square
    gravity = 1; //gravitational force
    screen_width = 70; // pixel at which bar begins
    bar_width = 10; // width of the bar
    bar_speed = 2; // spped of the bar
    score = 0; // score
    srand(time(NULL));
    size_top = rand() % 15; //15 random lengths of the top bar
    srand(time(NULL));
    size_bottom = rand() % 15; //15 random length of the bottom bar
}

//game function
void ModeA::Game(N5110 &lcd)
{
    char buffer[14];
    sprintf(buffer,"%2d",score); //print score on the screen
    lcd.printString(buffer,70,0); // print the score at the right end of screen
    lcd.drawRect(x_position, y_position,6,6,FILL_BLACK); //draw the square
    lcd.refresh();

    // multiply gravity with 5 for a resonable speed
    if ( pad.check_event(Gamepad::Y_PRESSED) == true) {
        speed = speed - gravity*5;
    }

    //if the square drops to the bottom of screen- GAME OVER
    //redifine all parameters to 0, clear screen
    //press back to play again
    if (y_position > 44) {
        lcd.clear();
        lcd.printString("GAME OVER",6,2);
        lcd.printString("Press BACK",6,4);
        pad.tone(2000.0,0.3); //music
        lcd.refresh();
        bar_speed = 0;
        speed = 0;
        gravity = 0;
        y_position = 48;
        bar_width = 0;
        size_top = 0;
        size_bottom = 0;
        wait(0.5);
    }

    //if square goes to top part of screen, goes back down
    if (y_position < 0) {
        y_position = 0;
        speed = 0;
    }

    speed = speed + gravity; //increment the speed by the value of gravity
    y_position = y_position + speed; // y coordinate changes with speed
    wait(0.1);

    //draw the 2 bars
    //the top one starts at y coordinate 0 and it has a height of size_top (random)
    //the bottom one starts size_bottom pixels above the edge of the screen
    lcd.drawRect(screen_width,0,bar_width,size_top,FILL_BLACK);
    lcd.drawRect(screen_width,48-size_bottom,bar_width,size_bottom,FILL_BLACK);
    lcd.refresh();

    // if the bar and square have the same x coordinates and 
    // their y coordinates don't intersect, score increases by 1
    if ((screen_width == x_position) && (size_top < y_position)) {
        score = score + 1;
        lcd.clear();
        sprintf(buffer,"%2d",score); //update buffer
        lcd.printString("Reset",15,2);
        lcd.refresh();
        wait(1.0);
    }

    //if X is pressed random hights of the bars are genetrated 
    if ( pad.check_event(Gamepad::X_PRESSED) == true) {
        srand(time(NULL));
        size_top = rand() % 15;
        srand(time(NULL));
        size_bottom = rand() % 15;

    }

    //if the bar and ball collide, Game Over
    if ((screen_width ==  x_position)&& (size_top >  y_position))  {
        lcd.clear();
        lcd.printString("GAME OVER",6,2);
        lcd.printString("Press BACK",6,4);
        pad.tone(2000.0,0.3);
        lcd.refresh();
        bar_speed = 0;
        speed = 0;
        gravity = 0;
        y_position = 48;
        bar_width = 0;
        size_top = 0;
        size_bottom = 0;



        wait(0.5);

    }


    //  if (score == 2) {
    //    lcd.clear();
    //    lcd.printString("Press Reset",6,2);
    //   }


    screen_width = screen_width - bar_speed;
    wait(0.1);



}