Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: move/Move.cpp
- Revision:
- 0:07c4fef6c0af
- Child:
- 4:0f2006e9c8f8
diff -r 000000000000 -r 07c4fef6c0af move/Move.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/move/Move.cpp Wed May 08 21:44:02 2019 +0000 @@ -0,0 +1,139 @@ +#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(); + } + } \ No newline at end of file