ELEC2645 (2017/18) / Mbed 2 deprecated el17yw

Dependencies:   mbed

engine/engine.cpp

Committer:
RickYu
Date:
2018-04-23
Revision:
14:a4176da69b49
Parent:
13:7ad2072d63ac
Child:
15:0a55e0ac8421

File content as of revision 14:a4176da69b49:

#include "engine.h"

engine::engine()
{

}

engine::~engine()
{

}

void engine::init(int speed)
{
    // initialise the game parameters
    //_speed = speed;

}
void engine::draw(N5110 &lcd)
{
  
    //draw and re-draw rectangle, boom and money on the screen
    _rect.draw(lcd); 
    _boom.draw(lcd);
    _money.draw(lcd);
    
    
}

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


void engine::update(Gamepad &pad,N5110 &lcd)
{
     
    _rect.update(_d,_mag); //get the position of rect when jopystick moves
    
    //boom and money will keep moving with initial settings
    _boom.update();      
    _money.update();
    
    check_boom_pos(pad);
    check_money_pos(pad);
    check_rect_pos(pad);
    check_boom_collision(pad,lcd);
    check_money_collision(pad,lcd);
   
}

void engine::check_money_pos(Gamepad &pad)
{
    Vector2D money_pos = _money.get_pos();
    
    if (money_pos.y > 48) {
        money_pos.y = 0;
        money_pos.x = rand()%84;  //the money will back to top with random x position
    }

    //avoid money out of the screen
    if (money_pos.x+4 >= 84) {
        money_pos.x = 80;
    }
    
    if (money_pos.x <2){
        money_pos.x = 3;
    }  
    _money.set_pos(money_pos); 
    
    
}

void engine::check_boom_pos(Gamepad &pad)
{
    Vector2D boom_pos = _boom.get_pos();
    if (boom_pos.y > 48) {  
        boom_pos.y = 0;
        boom_pos.x = rand()%84;    //boom will back to top with random x position 
    }
    
    //avoid boom go outside of the screen
    if (boom_pos.x >= 82) {
        boom_pos.x = 81;
    }
    
    if (boom_pos.x <2){
        boom_pos.x = 3;
    }
   _boom.set_pos(boom_pos); 
}

void engine::check_rect_pos(Gamepad &pad)
{
    Vector2D rect_pos = _rect.get_pos();
    
    //keep the rect moving inside the screen
    if (rect_pos.x < 1) {
        rect_pos.x = 1;
    }
    if (rect_pos.x > 74) {
        rect_pos.x = 74;
    }
    _rect.set_pos(rect_pos);  


}
void engine::check_boom_collision(Gamepad &pad,N5110 &lcd)
{
    Vector2D boom_pos = _boom.get_pos();
    Vector2D rect_pos = _rect.get_pos();
    
    if (
        (boom_pos.x-3 >= rect_pos.x)and
        (boom_pos.x+3 <= rect_pos.x+10)and
        (boom_pos.y == 40))
        
             {
             boom_pos.y = 0;  
             boom_pos.x = rand()%84; 
             pad.tone(750.0,0.1);
             engine::print_scores(lcd);
            }

 
    _boom.set_pos(boom_pos); 
    _rect.set_pos(rect_pos);      
}

void engine::check_money_collision(Gamepad &pad,N5110 &lcd)
{
    Vector2D rect_pos = _rect.get_pos();
    Vector2D money_pos = _money.get_pos();
    if (
        (money_pos.x >= rect_pos.x+3)and
        (money_pos.x+4 <= rect_pos.x+7)and
        (money_pos.y+2 == 40))
        
             {
             money_pos.y = 0;  
             money_pos.x = rand()%84; 
             pad.tone(750.0,0.1);
             //engine::print_scores(lcd);
            }

    _money.set_pos(money_pos); 
    _rect.set_pos(rect_pos);      
}



void engine::print_scores(N5110 &lcd)
{

    lcd.clear();
    lcd.printString("  Game Over",0,1);  
    lcd.refresh();
    wait(2);
}