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.
Diff: move/Move.cpp
- Revision:
- 0:07c4fef6c0af
- Child:
- 4:0f2006e9c8f8
--- /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