Completed Snake Program

Dependencies:   N5110 PinDetect PowerControl mbed

Fork of DocTest by Craig Evans

Revision:
5:1bfc306466db
Parent:
4:551dea241d0a
Child:
6:1de103a19681
diff -r 551dea241d0a -r 1bfc306466db main.cpp
--- a/main.cpp	Tue Apr 14 15:34:37 2015 +0000
+++ b/main.cpp	Wed Apr 15 16:34:05 2015 +0000
@@ -25,9 +25,52 @@
 
 vector<int> snakeX (5);
 vector<int> snakeY (5,27);
+int food[2];//element 0 = x position element 1= y position 
 
+void randomiseFood(){
+    
+    srand(time(NULL));
+    
+    int randomX = rand() %84; // generate random number between 0 and 83 
+    int randomY = rand() %47;// generate random number betwwen 0 and 46 
+    
+    if (lcd.getPixel(randomX,randomY)==1){ // if that pixel is already filled
+        
+        randomX = rand() %83 ;  // generate new random numbers
+        randomY = rand() %47 ;// 
+        
+        
+        }
+        lcd.setPixel(randomX,randomY) ;// set the food
+        food[0]=randomX; // update food position
+        food[1]=randomY;// update food position 
+        lcd.refresh();
+    
+    }
 
-
+ // snakeX.insert(snakeX.begin() , 60);
+        // snakeY.insert(snakeY.begin() , 60 );
+       // snakeX.push_front(30);
+       // snakeY.push_front(30);
+       
+       
+void checkForFood(){
+    
+    if (snakeX.back()==food[0] && snakeY.back()==food[1]){ // if  x and y of head match food
+       
+      snakeX.push_back(food[0]+1);
+     snakeY.push_back(food[1]);
+       
+       
+      // snakeX.insert (snakeX.begin() + 0, );
+       //snakeY.insert (snakeY.begin() + 0, );
+        
+        randomiseFood();
+        
+        }
+    
+    
+    }
 
 //snakeX[4]=21;
 
@@ -175,32 +218,32 @@
                 
                  switch(joystick.direction){
                       
-                       case UP:snakeX[4]=snakeX[3];
-                    snakeY[4]=snakeY[3]-1;
+                       case UP:snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2];
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2]-1;
                     break;
                     
                       case DOWN:
-                    snakeX[4]=snakeX[3];
-                    snakeY[4]=snakeY[3]+1;
+                    snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2];
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2]+1;
                     break;
                     
                       case LEFT:
-                    snakeX[4]=snakeX[3]-1;
-                    snakeY[4]=snakeY[3];
+                    snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2]-1;
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2];
                     break;
                     
                       case RIGHT:
-                    snakeX[4]=snakeX[3]+1;
-                    snakeY[4]=snakeY[3];
+                    snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2]+1;
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2];
                     break;
                     
                     case CENTRE:
-                    snakeX[4]=snakeX[3]+1;
-                    snakeY[4]=snakeY[3];
+                    snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2]+1;
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2];
                     break;
                      case UNKNOWN:
-                    snakeX[4]=snakeX[3]+1;
-                    snakeY[4]=snakeY[3];
+                    snakeX[snakeX.size()-1]=snakeX[snakeX.size()-2]+1;
+                    snakeY[snakeY.size()-1]=snakeY[snakeY.size()-2];
                     break;
                         
                     
@@ -381,6 +424,15 @@
 void updateGameISR(){
     updateGameFlag=1;
     }
+    
+    void printVectorContent(){
+        
+        
+        for( int i=0; i<snakeX.size(); i++)
+    serial.printf( "%d \n \r"  ,snakeX[i]);
+    
+    
+    }
 
 int main()
 {
@@ -416,7 +468,9 @@
  pollJoystick.detach();
     startGame.attach(&updateGameISR,0.1);
      startingSnake();
+     randomiseFood();
          lcd.refresh();
+         
      //init game start time back food
      while (1){
        if(updateGameFlag==1){
@@ -432,7 +486,14 @@
               }
               lcd.refresh(); 
               previousDirection=joystick.direction;  
-              checkForCollision();      
+              
+              checkForCollision(); 
+              checkForFood();
+              
+              
+              //serial.printf("%d",snakeX.size()); 
+             // printVectorContent();
+               
     }
                   
          }