ELEC2645 (2018/19) / Mbed 2 deprecated el18jz_

Dependencies:   mbed

move/Move.cpp

Committer:
jiaxinZHOU
Date:
2019-05-08
Revision:
0:07c4fef6c0af
Child:
4:0f2006e9c8f8

File content as of revision 0:07c4fef6c0af:

#include "Move.h"


SnakeBody body;
Food food;

Move::Move() {
    
}

Move::~Move() {
    
}

void Move::initial() {
    _x = 42;
    _y = 24;
    _length = 5;
    body._dir = 1;// 1 for E, 2 for S, 3 for W, 4 for N
    for (int i =0; i < _length ; i++){
            body._xx[i]= _x - 8 + 2 * i;
            body._yy[i]= _y ;
        }
  
            food.a= 0;
            food.b= 0;
  
        
    }

void Move::getfood(){
    srand(time(NULL));
    food.a = rand() % 40 +1;
    food.b = rand() % 22 +1;
    }

void Move::updatebody() {
        
    //if (_d != CENTRE){
        for (int i =0; i < _length - 1; i++){
            body._xx[i] = body._xx[i + 1];
            body._yy[i] = body._yy[i + 1];
            }
        body._xx[_length - 1] = _x;
        body._yy[_length - 1] = _y;
    //}
}
void Move::onlcd(N5110 &lcd) {
        
       for (int i =0; i < _length; i++){
       lcd.drawRect(body._xx[i],body._yy[i],2,2,FILL_BLACK); 
            
       }
       lcd.drawRect(0,0,84,48,FILL_TRANSPARENT);
       lcd.drawRect(1,1,82,46,FILL_TRANSPARENT);  
       lcd.drawRect(2*food.a, 2*food.b,2,2,FILL_BLACK);
}


void Move::update(Gamepad &pad) {
    _d = pad.get_direction();
    
    if (_d == N && body._dir != 2) {
        body._dir = 4;
        //_y-= 2;
    } else if (_d == S && body._dir != 4) {
        body._dir = 2;
        //_y+= 2;
    } else if (_d == E && body._dir != 3) {
        body._dir = 1;
        //_x+= 2;
    } else if (_d == W && body._dir != 1) {
        body._dir = 3;
        //_x-= 2;
    }
    
    if (body._dir == 4){
        _y-= 2; 
    }else if (body._dir == 2) {
        _y+= 2;
    } else if (body._dir == 1) {
        _x+= 2;
    } else if (body._dir == 3) {
        _x-= 2;
    }
}

void Move::die(N5110 &lcd , Gamepad &pad) {
    if(body._xx[_length - 1] == 0 || body._xx[_length - 1] == 82 ||  body._yy[_length - 1] == 0 || body._yy[_length - 1] == 46) {
        lcd.init();
            lcd.printString("Game Over",0,1);
            char buffer1[14];
            sprintf(buffer1,"Your score:%2d",_length - 5);
            lcd.printString(buffer1,0,2); 
            lcd.printString("Press Start", 0 , 3);
            lcd.printString("to restart", 0 , 4);
        lcd.refresh();
        while ( pad.check_event(Gamepad::START_PRESSED) == false){
        pad.leds_on();
        wait(0.5);
        pad.leds_off();
        wait(0.5);
        }
        initial();
        getfood();
        }
        
        for (int i =0; i < _length - 2; i++) {
            if (body._xx[_length - 1] == body._xx[i] && body._yy[_length - 1] == body._yy[i])
            {
            lcd.init();
            lcd.printString("Game Over",0,1);
            char buffer1[14];
            sprintf(buffer1,"Your score:%2d",_length - 5);
            lcd.printString(buffer1,0,2); 
            lcd.printString("Press Start", 0 , 3);
            lcd.printString("to restart", 0 , 4);
            lcd.refresh();
                while ( pad.check_event(Gamepad::START_PRESSED) == false){
                pad.leds_on();
                wait(0.5);
                pad.leds_off();
                wait(0.5);
                }
            initial();
            getfood();
            }
        }
    }
    
void Move::eatfood() {
    
        if (body._xx[_length - 1] == 2 * food.a && body._yy[_length - 1] == 2 * food.b){
            _length = _length + 1;
            body._xx[_length - 1] = 2 * food.a;
            body._yy[_length - 1] = 2 * food.b;
            getfood();
            }
    }