ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Game/Game.cpp

Committer:
el17cd
Date:
2019-04-03
Revision:
22:236319885874
Parent:
21:6b5d2d75e083
Child:
25:3995271e411c

File content as of revision 22:236319885874:

#include "Game.h"

Game::Game(){
    noOfCubes = 25;
    homeSelection = 0;
    gamepad.init();
    renderer.init();
    for(int i = 0; i < noOfCubes; i++){
        cubeArray[i].translate(rand()%250-125,0,20+ i*10);
    }
}

void Game::run(){
    score = 0;
    selection = true;
    playing = true;

    while(1) {
        renderer.clear();
        coord = gamepad.get_coord();
        
        renderer.drawHorizon(coord.x/15);
        
        for (int c = 0; c< noOfCubes; c++){  
            if(playing){
                if(score < 2000)
                    cubeArray[c].translate(-coord.x*1.4f,0,-1-(float)score/1000);
                else{
                    cubeArray[c].translate(-coord.x*1.4f,0,-3);
                }
            }
            else{
                coord.x = 0;
            }
            for (int i = 0; i < 6; i++){
                faceArray[c*6 + i] = cubeArray[c].getFace(i);
            }
            if (cubeArray[c].despawn()){
                cubeArray[c].resetPos();
                cubeArray[c].translate(rand()%250-125,0,140);
            }
            if (cubeArray[c].tooClose()){
                playing = false;
                cubeArray[c].resetPos();
                cubeArray[c].translate(rand()%250-125,0,140);
            }
        }
        
        renderer.drawAllFaces(faceArray, noOfCubes, coord.x);
        
        if(!playing){
            deathScreen();
            if(deathButtonSelections()){
                break;
            }
        }
        else{
            addScore();
        }
        
                
        char buf[5];
        sprintf(buf, "%d", score/3);
        renderer.print(buf, 0, 0);
        memset(buf, 0, sizeof buf);
        renderer.refresh();
        wait_ms(1000/60);
    }
}

void Game::addScore(){
    score++;
}

void Game::resetScore(){
    score = 0;
}

bool Game::deathButtonSelections(){
        if(gamepad.check_event(Gamepad::Y_PRESSED) == true){
            selection = true;
        }
        else if(gamepad.check_event(Gamepad::A_PRESSED) == true){
            selection = false;
        }
        if (selection == true && gamepad.check_event(Gamepad::B_PRESSED) == true){
            playing = true;
            score = 0;
            resetScore();
        }
        else if(selection == false && gamepad.check_event(Gamepad::B_PRESSED) == true){
            resetScore();
            return true;
        }
        return false;
}

void Game::homeButtonSelections(){
        if(gamepad.check_event(Gamepad::Y_PRESSED) == true && homeSelection > 0){
            homeSelection--;
        }
        else if(gamepad.check_event(Gamepad::A_PRESSED) == true && homeSelection < 2){
            homeSelection++;
        }
        if (homeSelection == 0 && gamepad.check_event(Gamepad::B_PRESSED) == true){
            run();
        }
        else if(homeSelection == 2 && gamepad.check_event(Gamepad::B_PRESSED) == true){
            //return true;
        }
}
    
void Game::deathScreen(){
    renderer.drawDeathScreen(selection);
}

void Game::homeScreen(){
    while(1){
        renderer.clear();
        homeButtonSelections();
        renderer.drawHomeScreen(homeSelection);
        renderer.refresh();
        wait_ms(1000/60);
    }
}