renhao dai / Mbed 2 deprecated Joystick_snake_game

Dependencies:   N5110 mbed

Revision:
7:69ae0585d11a
Parent:
6:290173d4a22d
Child:
8:b01f638d23b4
--- a/main.cpp	Sun May 03 19:06:32 2015 +0000
+++ b/main.cpp	Tue May 05 14:34:44 2015 +0000
@@ -54,12 +54,14 @@
 // create struct variable
 Joystick joystick;
 
-int buttonAFlag = 0;
+Ticker timer;
+int timerFlag=0;
+int buttonFlag = 0;
 int printFlag = 0;
 int nutFlag =1;
 int lifeFlag =0;
-float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440};
-float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2};
+//float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440};
+//float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2};
 //int buttonFlag = 0;
 // function prototypes
 //void setPixel(int x, int y);
@@ -70,7 +72,6 @@
 struct Nut {
     int X;
     int Y;
-    int yes;
 };
 Nut nut;
 
@@ -79,7 +80,6 @@
     int snakeX[100];
     int snakeY[100];
     int node;
-    int life;
     DirectionName direction;
 };
 Snake snake;
@@ -98,7 +98,7 @@
     //int X = rand()%84;
     //int Y = rand()%48;
     if(nutFlag==1){
-    lcd.drawCircle(nut.X,nut.Y,1,1);
+    lcd.drawCircle(nut.X,nut.Y,1,1);    
     }
 }
 
@@ -152,33 +152,31 @@
     snake.direction = RIGHT;
       
 }
-
-
+                    
+    
 void drawSnake()
 {   
-    
+            
      for(i=0; i<snake.node-1; i++) {
         lcd.drawCircle(snake.snakeX[i],snake.snakeY[i],1,1);
         //lcd.setPixel(snake.snakeX[i],snake.snakeY[i]);
+        
     } 
     
 }
 
 void startGmae()
 {
-    //lcd.drawRect(snake.snakeX[0]+10,snake.snakeY[0]+10,10,10,1);
-    //nutFlag = 1;
+        //nutFlag = 1;
     //lifeFlag = 0;
     //snake.direction=LEFT;
-    //if(joystick.direction == UNKNOWN)
-    
+        
     if((snake.snakeX[0]==nut.X)&&(snake.snakeY[0]==nut.Y)) { // if snake got nut ||(snake.snakeX[0]==nut.X-1)&&(snake.snakeY[0]==nut.Y-1)||(snake.snakeY[0]==nut.Y+1)&&(snake.snakeY[0]==nut.Y+1
-        snake.node++;
-        
-               //buzzer.period(1/659); // set PWM period
-               //buzzer=0.1; // set duty cycle
-               //wait(0.1);
-        nutFlag=0;   // new nut appear
+        snake.node+=10;
+        nutFlag=0; 
+        //if(timerFlag){
+               //timerFlag=0;    
+          // new nut appear        
     }
     
     if(nutFlag==0) { //set nut randomly
@@ -191,10 +189,10 @@
        for(i=3; i<snake.node; i++) { //if snake collide itself snake die
            if(snake.snakeX[i]==snake.snakeX[0] && snake.snakeY[i]==snake.snakeY[0]) {
                lifeFlag=1;
-               // break;
            }      
       }
-     
+      
+      
         for(i=snake.node-1; i>0; i--) { //move snake
            if(snake.snakeX[0]>1||snake.snakeX[0]<83||snake.snakeY[0]>1||snake.snakeY[0]<47){   
            snake.snakeX[i]=snake.snakeX[i-1];
@@ -204,21 +202,13 @@
                snake.snakeX[i]=snake.snakeX[i];
                snake.snakeY[i]=snake.snakeY[i];
            }
-          }
+        }
      
 
     if(snake.snakeX[0]<1||snake.snakeX[0]>83||snake.snakeY[0]<1||snake.snakeY[0]>47) {
         lifeFlag=1; // snake collide the corrider snake die
-        //break;
     }
-
-
-    //if(snake.life==1) {
-        //break;
-    //}
     
-    
-
 }
 
 void printScore(){
@@ -229,13 +219,135 @@
     lcd.printString("Press to start",0,4);
     }
   
-void buttonAPressed(){
-    buttonAFlag=1;
-    }
+//void buttonAPressed(){
+    //buttonAFlag=1;
+    //}
+
+void pauseGame(){
+        if(button==1){
+            buttonFlag = 1;
+            }
+      }
+         
+void timerExpired(){
+    timerFlag = 1;
+}
+
+void promptVoice(){
 
-//while(joystick.direction == UNKNOWN) {
-
-
+        buzzer.period(0.0020); // set PWM period
+         buzzer.pulsewidth(0.001); // set duty cycle
+        wait(0.5);
+        lcd.printString("Your Score is",0,0);
+      
+        }
+        
+void snakeModel(){
+        lcd.drawRect(24,21,1,1,1);
+        lcd.drawRect(26,21,1,1,1);
+        lcd.drawRect(28,21,1,1,1);
+        
+        lcd.drawRect(22,23,1,1,1);
+        lcd.drawRect(24,23,1,1,1);
+        lcd.drawRect(26,23,1,1,1);
+        lcd.drawRect(28,23,1,1,1);
+        
+        lcd.drawRect(20,25,1,1,1);  
+        lcd.drawRect(22,25,1,1,1);
+        lcd.drawRect(24,25,1,1,1);
+        lcd.drawRect(26,25,1,1,1);
+        lcd.drawRect(28,25,1,1,1);
+        lcd.drawRect(30,25,1,1,1);
+        
+        lcd.drawRect(20,27,1,1,1);  
+        lcd.drawRect(22,27,1,1,1);
+        lcd.drawRect(24,27,1,1,1);
+        lcd.drawRect(26,27,1,1,1);
+        lcd.drawRect(28,27,1,1,1);
+        lcd.drawRect(30,27,1,1,1);//head
+        
+        lcd.drawRect(18,29,1,1,0); //tougue
+        lcd.drawRect(20,31,1,1,0);  
+        
+        lcd.drawRect(26,29,1,1,1);
+        lcd.drawRect(28,29,1,1,1);
+        lcd.drawRect(30,29,1,1,1);
+        
+        lcd.drawRect(26,31,1,1,1);
+        lcd.drawRect(28,31,1,1,1);
+        lcd.drawRect(30,31,1,1,1);
+        
+        lcd.drawRect(24,33,1,1,1);
+        lcd.drawRect(26,33,1,1,1);
+        lcd.drawRect(28,33,1,1,1);
+        
+        lcd.drawRect(24,35,1,1,1);
+        lcd.drawRect(26,35,1,1,1);
+        lcd.drawRect(28,35,1,1,1);
+        
+        lcd.drawRect(22,37,1,1,1);
+        lcd.drawRect(24,37,1,1,1);
+        lcd.drawRect(26,37,1,1,1);
+        
+        lcd.drawRect(22,39,1,1,1);
+        lcd.drawRect(24,39,1,1,1);
+        lcd.drawRect(26,39,1,1,1);
+        
+        lcd.drawRect(24,41,1,1,1);
+        lcd.drawRect(26,41,1,1,1);
+        lcd.drawRect(28,41,1,1,1);
+        lcd.drawRect(30,41,1,1,1);//neck
+        
+        lcd.drawRect(60,41,1,1,1);//tail
+        lcd.drawRect(62,41,1,1,1);
+        lcd.drawRect(64,41,1,1,1);
+        
+        lcd.drawRect(62,39,1,1,1);
+        lcd.drawRect(64,39,1,1,1);
+        
+        lcd.drawRect(62,37,1,1,1);
+        
+        lcd.drawRect(60,35,1,1,1);//tail
+        
+        lcd.drawRect(26,43,1,1,1);
+        lcd.drawRect(28,43,1,1,1);
+        lcd.drawRect(30,43,1,1,1);
+        lcd.drawRect(32,43,1,1,1);
+        lcd.drawRect(34,43,1,1,1);
+        lcd.drawRect(36,43,1,1,1);
+        lcd.drawRect(38,43,1,1,1);
+        lcd.drawRect(40,43,1,1,1);
+        lcd.drawRect(42,43,1,1,1);
+        lcd.drawRect(44,43,1,1,1);
+        lcd.drawRect(46,43,1,1,1);
+        lcd.drawRect(48,43,1,1,1);
+        lcd.drawRect(50,43,1,1,1);
+        lcd.drawRect(52,43,1,1,1);
+        lcd.drawRect(54,43,1,1,1);
+        lcd.drawRect(56,43,1,1,1);
+        lcd.drawRect(58,43,1,1,1);
+        lcd.drawRect(60,43,1,1,1);
+        lcd.drawRect(62,43,1,1,1);
+        
+        lcd.drawRect(28,45,1,1,1);
+        lcd.drawRect(30,45,1,1,1);
+        lcd.drawRect(32,45,1,1,1);
+        lcd.drawRect(34,45,1,1,1);
+        lcd.drawRect(36,45,1,1,1);
+        lcd.drawRect(38,45,1,1,1);
+        lcd.drawRect(40,45,1,1,1);
+        lcd.drawRect(42,45,1,1,1);
+        lcd.drawRect(44,45,1,1,1);
+        lcd.drawRect(46,45,1,1,1);
+        lcd.drawRect(48,45,1,1,1);
+        lcd.drawRect(50,45,1,1,1);
+        lcd.drawRect(52,45,1,1,1);
+        lcd.drawRect(54,45,1,1,1);
+        lcd.drawRect(56,45,1,1,1);
+        lcd.drawRect(58,45,1,1,1);
+        lcd.drawRect(60,45,1,1,1);
+        
+    }
 //switch(snake.direction)
 //{
 // case RIGHT:snake.X[0]+=1;
@@ -251,18 +363,6 @@
 //end of while(joystick.direction = UNKNOWN)
 
 
-// if(joystick.direction == UP&&snake.direction!=DOWN) {
-//    snake.direction=UP;
-// } else if(joystick.direction == RIGHT&&snake.direction!=LEFT) {
-//     snake.direction= RIGHT;
-// } else if(joystick.direction == LEFT&&snake.direction!=RIGHT) {
-//     snake.direction=LEFT;
-//  } else(joystick.direction == DOWN&&snake.direction!=UP) {
-//     snake.direction=DOWN;
-//  }
-
-
-
 // read default positions of the joystick to calibrate later readings
 void calibrateJoystick()
 {
@@ -309,7 +409,7 @@
 {
     // get direction of joystick and update snake
     if (snake.direction == LEFT) {
-        snake.snakeX[0]--;
+        snake.snakeX[0]-=1;
         //LED1
         if(snake.snakeX[0]<1) {
             snake.snakeX[0]=1;
@@ -318,21 +418,21 @@
 
     }
     if (snake.direction == RIGHT) {
-        snake.snakeX[0]++;
+        snake.snakeX[0]+=1;
         //LED2
         if(snake.snakeX[0]>83) {
             snake.snakeX[0]=83;
         }//will stop at the bottom edge
     }
     if (snake.direction == UP) {
-        snake.snakeY[0]--;
+        snake.snakeY[0]-=1;
         if(snake.snakeY[0]>47) {
             snake.snakeY[0]=47;
         }//will stop at the left edge
 
     }
     if (snake.direction == DOWN) {
-        snake.snakeY[0]++;
+        snake.snakeY[0]+=1;
         if(snake.snakeY[0]<1) {
             snake.snakeY[0]=1;
         }//will stop at the right edge
@@ -353,12 +453,12 @@
 {
     lcd.init();
     lcd.setBrightness(0.5); // put LED backlight on 50%
-    //button.rise(&buttonPressed);
     calibrateJoystick();  // get centred values of joystick
     pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
     lcd.refresh();
     initNut();
     initSnake();
+    timer.attach(&timerExpired,0.05);
     //buzzer.period(0.020);   // a 20ms period
     //buttonA.rise(&buttonAPressed);      
 
@@ -367,39 +467,48 @@
 //infinite while loop
     while(1) {
        
-     if(buttonAFlag==1){
-        buttonAFlag=0;
+       if(buttonFlag==1){
         lcd.clear();
+        buttonFlag=0;
         lifeFlag=0;
         updateSnake();
         drawSnake();
         drawNut();
         moveSnake();
         startGmae();
+        pauseGame();
+                if (buttonFlag==1){
+               while(1){
+                buttonFlag =0;
+               if(buttonFlag ==1)
+               break;
+               }
+               }
           if(lifeFlag==1){
              lcd.clear();
              lcd.refresh();
              printScore();
-             for(int i=0; i<=11; i++){ 
-             buzzer.period(1/(frequency[i])); // set PWM period
-             buzzer=0.1; // set duty cycle
-             wait(0.5*beat[i]);
-             }
+             //for(int i=0; i<=11; i++){ 
+              // buzzer.period(1/(frequency[i])); // set PWM period
+              // buzzer=0.1; // set duty cycle
+             // wait(0.5*beat[i]);
+               //}
              lifeFlag=0;
+             wait(1);
            }
-          lcd.refresh();
-          wait(0.02);      
-        }
-       
+//        if (buttonFlag==1){
+//              while(1){
+//               buttonFlag =0;
+//               if(buttonFlag ==1)
+//               break;
+//               }
+//               }
+               lcd.refresh();
+               wait(0.02);      
+            }             
        else 
        lcd.printString("Press to start",1,1);
+       snakeModel();
        }
-    //wait(0.5);
-    //if(snake.life==1) {
-    // lcd.printString("lost",24,42);
-    // break;
-   
-   
-
 }