ELEC2645 (2017/18) / Mbed 2 deprecated fy15raf

Dependencies:   mbed

GameEngine/GameEngine.cpp

Committer:
RehamFaqehi
Date:
2018-04-24
Revision:
8:13cef7cb872e
Parent:
7:06c86ec1f19d
Child:
9:e70179ff61c5

File content as of revision 8:13cef7cb872e:

#include "GameEngine.h"

GameEngine::GameEngine()
{

}

GameEngine::~GameEngine()
{

}

void GameEngine::init()
{
    _rocket.init();
    _asteroid1.init(2);
    _asteroid2.init(3);
    _asteroid3.init(4);
}

void GameEngine::read_input(Gamepad &pad)
{
    _d = pad.get_direction();
    _mag = pad.get_mag();
}

void GameEngine::draw(N5110 &lcd)
{
    // draw the game elements in the LCD
    _rocket.draw(lcd);
    _asteroid1.draw(lcd);
    _asteroid2.draw(lcd);
    _asteroid3.draw(lcd);
    //print_scores(lcd);
    print_scores1(lcd);
  
}

void GameEngine::update(Gamepad &pad, N5110 &lcd)
{
    
    check_goal(pad);
    _rocket.update(_d,_mag, lcd);
    _asteroid1.update();
    _asteroid2.update();
    _asteroid3.update();

}


void GameEngine::check_goal(Gamepad &pad)
{
    Vector2D _asteroid1_pos = _asteroid1.get_pos() ;
    Vector2D _asteroid2_pos = _asteroid2.get_pos() ;   
    Vector2D _asteroid3_pos = _asteroid3.get_pos() ;
    
    Vector2D _rocket_pos = _rocket.get_pos();

    if (_rocket_pos.x+11 >=_asteroid1_pos.x && _rocket_pos.x+9 <_asteroid1_pos.x ) {//size //sprint width //float/////////////speed
        if(  _asteroid1_pos.y >= _rocket_pos.y && _asteroid1_pos.y <= _rocket_pos.y+7 || _asteroid1_pos.y+7 >= _rocket_pos.y && _asteroid1_pos.y+7 <= _rocket_pos.y+7 ) {
            _rocket.add_score();
            pad.tone(1500.0,0.5);
            pad.leds_on();
            wait(0.5);
            pad.leds_off();
        }
    }
    
    if (_rocket_pos.x+11 >=_asteroid2_pos.x && _rocket_pos.x+9 <_asteroid2_pos.x ) {//size //sprint width //float/////////////speed
        if(  _asteroid2_pos.y >= _rocket_pos.y && _asteroid2_pos.y <= _rocket_pos.y+7 || _asteroid2_pos.y+7 >= _rocket_pos.y && _asteroid2_pos.y+7 <= _rocket_pos.y+7 ) {
            _rocket.add_score();
            pad.tone(1500.0,0.5);
            pad.leds_on();
            wait(0.5);
            pad.leds_off();
        }
    }
    
    if (_rocket_pos.x+11 >=_asteroid3_pos.x && _rocket_pos.x+7 <_asteroid3_pos.x ) {//size //sprint width //float/////////////speed
        if(  _asteroid3_pos.y >= _rocket_pos.y && _asteroid3_pos.y <= _rocket_pos.y+7 || _asteroid3_pos.y+7 >= _rocket_pos.y && _asteroid3_pos.y+7 <= _rocket_pos.y+7 ) {
            _rocket.add_score();
            pad.tone(1500.0,0.5);
            pad.leds_on();
            wait(0.5);
            pad.leds_off();
        }
    }
    
}


 //////////////////////////////////////////////////////////////////   
void GameEngine::print_scores(N5110 &lcd) //this function is not used now 
{
    // get the number of hits
    int _rocket_score = _rocket.get_score();

    // print to LCD i
    char buffer1[11];
    sprintf(buffer1,"hits:%2d",_rocket_score);
    lcd.printString(buffer1,WIDTH/2 - 20, 1);    
}

void GameEngine::print_scores1(N5110 &lcd)
{
    // get scores from Rocket
    int _rocket_score = _rocket.get_score();
    // get_score();
    if (_rocket_score ==1) {
        _rocket.drawTwoHearts(lcd);
    } else if (_rocket_score==0) {
        _rocket.drawFullHearts(lcd);
    } else if (_rocket_score == 2) {
        _rocket.drawOneHeart(lcd);
    } else {
        _rocket.drawOneHeart(lcd);
    }
}