ELEC2645 (2018/19) / Mbed 2 deprecated el18jz_

Dependencies:   mbed

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