ELEC2645 (2015/16) / Mbed 2 deprecated SnakeProjectRev1

Dependencies:   Joystick N5110 SDFileSystem beep fsmMenu mbed

Fork of SnakeProjectRev1 by Meurig Phillips

Revision:
17:4e6f0f7f22fb
Parent:
16:68b9460d4c76
Child:
18:67d5ae64fbd1
--- a/main.cpp	Wed May 04 15:16:12 2016 +0000
+++ b/main.cpp	Wed May 04 17:31:25 2016 +0000
@@ -115,41 +115,35 @@
            
     }
  
-    while(gamePlaying == true) {
-        
-        lcd.setBrightness(1-pot); // turn pot right for brightness
-        
-        if (buttonFlag ==1) {
-            buttonFlag = 0;  
-            if (pauseCount < 3) {
-                gamePaused();
-            }
-        }
-        
-        if(game_timer_flag) {
-            game_timer_flag = 0;
-            gameLogic();
-        }
-        if (printFlag) {  // if flag set, clear flag and print joystick values to serial port
-            printFlag = 0;
-            moveSnake();
-            } 
-            sleep(); // put the MCU to sleep until an interrupt wakes it up
-    }
+    mainGame();
 }
  
 
 void generateFood()
 {
-    while (randomXoddEven ==1 || randomYoddEven ==1 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on
-        
-        randomX =  rand() % 83 + 1;     // randomX in the range 1 to 83
-        randomY =  rand() % 47 + 1;     // randomY in the range 1 to 47     
-        randomXoddEven = randomX%2; // find out whether odd or even
-        randomYoddEven = randomY%2;  
-        }
-        
-        lcd.drawRect(randomX,randomY,1,1,1);
+    if (gameType == classicMode || gameType == hardMode) {
+        while (randomXoddEven ==0 || randomYoddEven ==0 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on
+            
+            randomX =  rand() % 83 + 1;     // randomX in the range 1 to 83
+            randomY =  rand() % 47 + 1;     // randomY in the range 1 to 47     
+            randomXoddEven = randomX%2; // find out whether odd or even
+            randomYoddEven = randomY%2;  
+            }
+            
+            lcd.drawRect(randomX,randomY,1,1,1);
+    }
+    
+    else {
+        while (randomXoddEven ==1 || randomYoddEven ==1 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on
+            
+            randomX =  rand() % 83 + 1;     // randomX in the range 1 to 83
+            randomY =  rand() % 47 + 1;     // randomY in the range 1 to 47     
+            randomXoddEven = randomX%2; // find out whether odd or even
+            randomYoddEven = randomY%2;  
+            }
+            
+            lcd.drawRect(randomX,randomY,1,1,1);
+    }
 
 }
 
@@ -226,8 +220,15 @@
             lcd.refresh();
 
             lcd.drawRect(randomX,randomY,1,1,1); // food
-            //hardWall();
-            wrapAround();
+            if (gameType == classicMode) {
+                hardWall();
+            }
+            else if (gameType == infiniteMode) {
+                wrapAround();
+            }
+            else {
+                specialMap();
+            }
             
             if (i == randomX && j == randomY) { // if fruit is eaten
                 greenLed = 0;
@@ -330,14 +331,14 @@
 
 void specialMap() {
 
-    for (int i=41; i<43; i++) { // vertical cross line
-       for (int j=14; j<34; j++) {
+    for (int x=41; x<43; x++) { // vertical cross line
+       for (int y=14; y<34; y++) {
            lcd.setPixel(i,j);
            lcd.refresh();
            }
         }
-    for (int i=32; i<52; i++) { // horizontal cross line
-       for (int j=23; j<25; j++) {
+    for (int x=32; x<52; x++) { // horizontal cross line
+       for (int y=23; y<25; y++) {
            lcd.setPixel(i,j);
            lcd.refresh();
            }
@@ -376,12 +377,27 @@
 
 void initSnakeTail() {
     
+    if (gameType == classicMode) {
     prev_i = 39;
     prev_j = 23;
+    prev2_i = 37;
+    prev2_j = 23;
+    }
+    else if (gameType == infiniteMode) {
+    prev_i = 38;
+    prev_j = 22;
+    prev2_i = 36;
+    prev2_j = 22;
+    }
+    else {
+    prev_i = 11;
+    prev_j = 5;
+    prev2_i = 9;
+    prev2_j = 5;
+    }
+    
     snakeTailX[1] = prev_i;
     snakeTailY[1] = prev_j;
-    prev2_i = 37;
-    prev2_j = 23;
     snakeTailX[2] = prev2_i;
     snakeTailY[2] = prev2_j;
      
@@ -446,6 +462,52 @@
               
 }
 
+void mainGame() {
+    
+    if(gameType == classicMode) {
+        hardWall();
+        i = 41;
+        j = 23;
+    }
+    else if(gameType == infiniteMode) {
+        wrapAround();
+        i = 40;
+        j = 22;
+    }
+    else {
+        specialMap();
+        i = 13;
+        j = 5;
+    }
+    generateFood();
+    initSnakeTail();
+    score = 0;
+    fruitValue = 10;    // init everything
+    
+   while(gamePlaying == true) {
+        
+        lcd.setBrightness(1-pot); // turn pot right for brightness
+        
+        if (buttonFlag ==1) {
+            buttonFlag = 0;  
+            if (pauseCount < 3) {
+                gamePaused();
+            }
+        }
+        
+        if(game_timer_flag) {
+            game_timer_flag = 0;
+            gameLogic();
+        }
+        if (printFlag) {  // if flag set, clear flag and print joystick values to serial port
+            printFlag = 0;
+            moveSnake();
+            } 
+            sleep(); // put the MCU to sleep until an interrupt wakes it up
+    }
+}  
+
+
 void timer_isr()
 {
 game_timer_flag = 1;