ZIYI CHEN ml17z4c 201214999
Dependencies: mbed
Diff: Eng/Eng.cpp
- Revision:
- 13:08bdb4cffacd
diff -r 1106cd853157 -r 08bdb4cffacd Eng/Eng.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Eng/Eng.cpp Thu May 09 14:36:47 2019 +0000 @@ -0,0 +1,141 @@ +#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; +}