Final Commit

Dependencies:   mbed

SnakeEngine/SnakeEngine.cpp

Committer:
JRM1986
Date:
2018-04-25
Revision:
17:94dd8a691d4a
Parent:
16:85ca9feccf3f
Child:
18:406fc298a7c4

File content as of revision 17:94dd8a691d4a:

#include "SnakeEngine.h"


SnakeEngine::SnakeEngine()
{

}

SnakeEngine::~SnakeEngine()
{

}



void SnakeEngine::set_even_array(Gamepad &pad)
{
    
    int i;
    int length = g_tl;
    
    extern int g_odd_array_x[100];
    extern int g_odd_array_y[100];
    
    Vector2D pos = _snake.get_snake_position();
       
    g_odd_array_x[0] = pos.x;
    g_odd_array_y[0] = pos.y;
    
    for(i = length; i >= 0; i--) {
        
        if(i > 0) {
            
        g_even_array_x[i] = g_odd_array_x[i-1];
        g_even_array_y[i] = g_odd_array_y[i-1];
        
        }

        else if(i == 0) {
            
            g_even_array_x[0] = pos.x;
            g_even_array_y[0] = pos.y;
            
            }
     

    }
    
}

void SnakeEngine::set_odd_array(Gamepad &pad)
{
    
    int i;
    int length = g_tl;
    
    extern int g_even_array_x[100];
    extern int g_even_array_y[100];
    
    Vector2D pos = _snake.get_snake_position();
    
    g_even_array_x[0] = pos.x;
    g_even_array_y[0] = pos.y;
    
    for(i = length; i >= 0; i--) {
        
        if(i > 0) {
            
        g_odd_array_x[i] = g_even_array_x[i-1];
        g_odd_array_y[i] = g_even_array_y[i-1];
        
        }

        else if(i == 0) {
            
            g_odd_array_x[0] = pos.x;
            g_odd_array_y[0] = pos.y;
            
            }
        
    }
    
}


void SnakeEngine::set_tail_array(Gamepad &pad)
{
    
    int c = g_engine_fc % 2;
    
    if(c == 1) {
        
        set_odd_array(pad);
        
        }
        
        else if (c == 0) {
            
            set_even_array(pad);
            
            }
            
}

void SnakeEngine::draw_tail(N5110 &lcd)
{
    int length = g_tl;
    int c;
    c = g_engine_fc % 2;
    int i;
    int x;
    int y;
    
    printf("Odd/Even %i \n", c);
    
    for(i=0; i<=length; i++) {
            
    if(c == 1) {
        
        x = g_odd_array_x[i];
        y = g_odd_array_y[i];
        
        lcd.setPixel(x,y,true);
                
        }
        
        else if (c == 0) {
        
            x = g_even_array_x[i];
            y = g_even_array_y[i];
            
            lcd.setPixel(x,y,true);
                        
            }
            
        }
}

int g_tail_length()
{
    
    extern int g_tl;
    
    return g_tl;
    
}


void SnakeEngine::init(int snake_position_x, int snake_position_y)
{
    _snake_position_x = snake_position_x;
    _snake_position_y = snake_position_y;
        
    _snake.init(_snake_position_x, _snake_position_y);
    
}

void SnakeEngine::get_input(Gamepad &pad)
{
    
    _in = pad.get_direction();
    
}

void SnakeEngine::update(Gamepad &pad)
{
    int length;
    bool food_col;
    ++g_engine_fc;
    
    
    _snake.update(_in, _cur);
    food_col = detect_food_collision(pad);
    set_tail_length(food_col);
    length = get_tail_length();
    printf("Tail Length = %i \n", length);
    set_tail_array(pad);

}


void SnakeEngine::draw(N5110 &lcd)
{
    
    lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
    lcd.setContrast(0.5);
    _food.update();
    _food.draw(lcd);
    _snake.update(_in, _cur);
    _snake.draw(lcd);
    draw_tail(lcd);
    
}

bool SnakeEngine::detect_food_collision(Gamepad &pad)
{
    Vector2D snake_pos = _snake.get_snake_position();
    Vector2D food_pos = _food.get_food_position();
    
    bool success_flag = false;
    
    if((snake_pos.x == food_pos.x) && (snake_pos.y == food_pos.y)) {
        
        success_flag = true;
        
        }
        
        else {
            
            success_flag = false;
            
            }
        
    return success_flag;
    
}

void SnakeEngine::set_tail_length(bool collision_detected)
{
    
    if(collision_detected) {
        
        ++g_tl;
        
        }
        
        else {
            
            g_tl = g_tl;
            
            }
            
}

int SnakeEngine::get_tail_length()
{
    
    int length = g_tl;
    
    return length;
    
}