ELEC2645 (2017/18) / Mbed 2 deprecated el15ww

Dependencies:   mbed

snake_engine/snake_engine.cpp

Committer:
weiway
Date:
2018-05-08
Revision:
17:7c8cf5f7878c
Parent:
15:47ea86f1ed70
Child:
18:e58a1f8e72ad

File content as of revision 17:7c8cf5f7878c:

#include "snake_engine.h"

snake_engine::snake_engine()
{
  
}

snake_engine::~snake_engine()
{
}

void snake_engine::init()
{
    s.init();

}

void snake_engine::draw(N5110 &lcd)
{
        lcd.refresh();
        lcd.clear();
        lcd.drawRect(0,8,WIDTH ,HEIGHT -8,FILL_TRANSPARENT);    

    s.draw(lcd);
    f.draw(lcd);
    printpoint(lcd);
}


void snake_engine::update(Gamepad &pad, N5110 &lcd)
{
    s.update(_d,_mag); 
    collision(pad, lcd);
  

    if(getfruit(pad)) {
        f.reborn(); 
        s.point(); 
        
    }
}


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


bool snake_engine::getfruit(Gamepad &pad)
{
    Vector2D _f_pos = f.get_pos();
    Vector2D _s_pos = s.get_pos();

    if ((_f_pos.y >= _s_pos.y || _f_pos.y == _s_pos.y-1) &&
            (_f_pos.y <= _s_pos.y || _f_pos.y+1 == _s_pos.y-1) &&
            (_f_pos.x >= _s_pos.x || _f_pos.x+1 >= _s_pos.x || _f_pos.x+1 >= _s_pos.x ) &&
            (_f_pos.x <= _s_pos.x || _f_pos.x+1 <= _s_pos.x)) { 
        
        return true;
    } else {
        return false;
    }
}

 

void snake_engine::printpoint(N5110 &lcd)
{
    int snakepoint = s.get_point();
    char buffer[14];
    sprintf(buffer,"%2d",snakepoint);
    lcd.printString(buffer,WIDTH/2 - 40,0); 
}




void snake_engine::collision(Gamepad &pad,N5110 &lcd)
{
    Vector2D _s_poss = s.get_pos();
        if (((_s_poss.x >= WIDTH -2) || (_s_poss.x <= 1)) ||((_s_poss.y >= HEIGHT -1) || (_s_poss.y <= 8))  ) {
            lcd.clear();      
    }
   
}