ZIYI CHEN ml17z4c 201214999

Dependencies:   mbed

Eng/Eng.cpp

Committer:
ziyi11
Date:
2019-05-09
Revision:
13:08bdb4cffacd

File content as of revision 13:08bdb4cffacd:

#include "Eng.h"

Eng::Eng()
{

}

Eng::~Eng()
{

}

void Eng::init()
{
    dSnake.init(5,10);    //she de chu shi zuo biao
    _noodles.init(20,7);
    _gameOver = false;

}



void Eng::userinput(Gamepad &pad)
{
    _d = pad.get_direction();
}

void Eng::draw(N5110 &lcd)
{
    lcd.drawRect(0,0,84,48,FILL_TRANSPARENT);
//
    for (int i = 0; i < 84; i++) {
        for (int j = 0; j < 48; j++) {
            if (snake1[j][i] != 0) {
                lcd.drawRect((2 * j) + 2,(2 * i) + 2,2,2,FILL_BLACK);
            }
        }
    }
}

void Eng::score(N5110 &lcd)
{

    lcd.clear();
    lcd.printString("Score ",0,0);
    char buffer[14];
    int _score = (dSnake.getLength() - 5);

    sprintf(buffer,"%3d",_score);
    lcd.printString(buffer,0,1);



    lcd.refresh();

    wait(5.0);
}

void Eng::update(Gamepad &pad)
{

    memset(snake1, 0, sizeof(snake1));
    dSnake.update(_d);

    dead();

    snake1[_noodles.xcoordinate()][_noodles.ycoordinate()] = 2;

    if (checkFood()) {
        
        pad.tone(1000.0,0.1);
   
        growSnake();

        bool empty = false;

        while (!empty) {

            _noodles.random();

            if ( snake1[_noodles.xcoordinate()][_noodles.ycoordinate()] == 0) {

                empty = true;
            }
        }
    }
}

void Eng::dead()
{

    int _l =dSnake.getLength();

    for (int i = 0; i < _l; i++) {

        if (dSnake.xcoordinate(i) > 40) {
            _gameOver = true;
        } else if( dSnake.xcoordinate(i) < 0) {
            _gameOver = true;
        } else if (dSnake.ycoordinate(i) > 22 ) {
            _gameOver = true;
        } else if(dSnake.ycoordinate(i) < 0) {
            _gameOver = true;
        }

        if (snake1[dSnake.xcoordinate(i)][dSnake.ycoordinate(i)] != 1) {
            snake1[dSnake.xcoordinate(i)][dSnake.ycoordinate(i)] = 1;
        } else {
            _gameOver = true;
        }
    }
}

bool Eng::checkFood()
{
    if (snake1[dSnake.xcoordinate(0)][dSnake.ycoordinate(0)] == 2) {
        return true;
    } else {
        return false;
    }
}

void Eng::growSnake()
{
    if (dSnake.getLength()<4032) {

        dSnake.grow();

    }
}

float Eng::getScore()
{
    return _score;
}


bool Eng::getGameOver()
{
    return _gameOver;
}