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.
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();
}
}