renhao dai / Mbed 2 deprecated Joystick_snake_game

Dependencies:   N5110 mbed

Revision:
2:d7b17623ba26
Parent:
1:f682aeb462f1
Child:
3:04ff8cd27dd1
--- a/main.cpp	Tue Apr 28 12:27:00 2015 +0000
+++ b/main.cpp	Thu Apr 30 15:54:35 2015 +0000
@@ -10,9 +10,11 @@
 DigitalIn button(p19);
 AnalogIn xPot(p15);
 AnalogIn yPot(p16);
-
+//InterruptIn button(p19);
 int i;
 int j;
+int X;
+int Y;
 
 int snakeX[100];
 int snakeY[100];
@@ -47,7 +49,7 @@
 Joystick joystick;
 
 int printFlag = 0;
-
+//int buttonFlag = 0;
 // function prototypes
 //void setPixel(int x, int y);
 //void clearPixel(int x, int y);
@@ -73,70 +75,91 @@
 
 DirectionName snakeDirection;
 
-//void drawNut()
-//{
-//    int X = rand()%84;
-//    int Y = rand()%48;
-//    lcd.drawCircle(X,Y,1,1);
-//}
+void initNut()
+{
+    nut.X=40;
+    nut.Y=20;
+    nut.yes=0;
+    }
+void drawNut()
+{
+    int X = rand()%84;
+    int Y = rand()%48;
+    lcd.drawCircle(X,Y,1,1);
+}
 
 void moveSnake()
 {
-
+    snake.snakeX[0]+=1;
+    wait(0.2);
+    
+    /*
     if(joystick.direction != UNKNOWN&&joystick.direction != CENTRE) {
+
         if(joystick.direction == RIGHT&&snake.direction!=LEFT) {
-            snake.snakeX[0]-=1;
+            snake.direction= RIGHT;
+            snake.snakeX[0]+=1;
 
         } else if(joystick.direction == LEFT&&snake.direction!=RIGHT) {
-            snake.snakeX[0]+=1;
+            snake.direction=LEFT;
+            snake.snakeX[0]-=1;
         } else if(joystick.direction == UP&&snake.direction!=DOWN) {
+            snake.direction=DOWN;
             snake.snakeY[0]-=1;
         } else if(joystick.direction == DOWN&&snake.direction!=UP) {
+            snake.direction=UP;
             snake.snakeY[0]+=1;
         }
 
     }
+    */
+}
+
+void initSnake()
+{
+
+    snake.snakeX[0] = 10; //coordinate of head
+    snake.snakeY[0] = 10;
+    snake.snakeX[1] = 12;
+    snake.snakeY[1] = 10;
+    snake.snakeX[2] = 14;
+    snake.snakeY[2] = 10;
+    snake.snakeX[3] = 16;
+    snake.snakeY[3] = 10;
+    snake.node = 4; //node of snake
+
 }
 
 void drawSnake()
 {
 
-    snake.snakeX[0] = 10; //coordinate of head
-    snake.snakeY[0] = 10;
-    snake.snakeX[1] = 11;
-    snake.snakeY[1] = 10;
-    snake.snakeX[2] = 12;
-    snake.snakeY[2] = 10;
-    snake.snakeX[3] = 13;
-    snake.snakeY[3] = 10;
-    snake.node = 5; //node of snake
+    for(i=0; i<snake.node; i++) {
 
-    for(i=0; i<snake.node-1; i++) {
-
-        lcd.setPixel(snake.snakeX[i],snake.snakeY[i]);
+        lcd.drawRect(snake.snakeX[i],snake.snakeY[i],1,1,1);
+        //lcd.setPixel(snake.snakeX[i],snake.snakeY[i]);
     }
 }
 
 /*
-
 */
 
 void startGmae()
 {
-    nut.yes = 1;
+    //lcd.drawRect(snake.snakeX[0]+10,snake.snakeY[0]+10,10,10,1);
+    nut.yes = 0;
     snake.life = 0;
-    snake.direction=LEFT;
+    //snake.direction=LEFT;
 
     //if(joystick.direction == UNKNOWN)
     //{
 
-    if(nut.yes==1) { //set nut randomly
+    if(nut.yes==0) { //set nut randomly
         nut.X = rand()%83;
         nut.Y = rand()%47;
-        nut.yes = 0;
-        lcd.drawCircle(nut.X,nut.Y,1,1);
+        nut.yes = 1;
+        drawNut();
     }
-   
+
 
     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]) {
@@ -207,6 +230,7 @@
     joystick.y0 = yPot;
 }
 
+
 void updateJoystick()
 {
     // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
@@ -239,27 +263,27 @@
 {
     // get direction of joystick and update snake
     if (joystick.direction == UP) {
-        snake.snakeY[0]--;
+        snake.snakeX[0]--;
         if(snake.snakeY[0]<1) {
             snake.snakeY[0]=1;
         }//will stop at the top edge
 
     }
     if (joystick.direction == DOWN) {
-        snake.snakeY[0]++;
+        snake.snakeX[0]++;
         if(snake.snakeY[0]>43) {
             snake.snakeY[0]=43;
         }//will stop at the bottom edge
     }
     if (joystick.direction == LEFT) {
-        snake.snakeX[0]--;
+        snake.snakeY[0]--;
         if(snake.snakeX[0]<1) {
             snake.snakeX[0]=1;
         }//will stop at the left edge
 
     }
     if (joystick.direction == RIGHT) {
-        snake.snakeX[0]++;
+        snake.snakeY[0]++;
         if(snake.snakeX[0]>87) {
             snake.snakeX[0]=87;
         }//will stop at the right edge
@@ -269,16 +293,18 @@
 }
 
 
+
 //main code
 int main()
 {
     lcd.init();
     lcd.setBrightness(0.5); // put LED backlight on 50%
     lcd.printString("press to start",0,0);
-
     calibrateJoystick();  // get centred values of joystick
     pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
     lcd.refresh();
+    initNut();
+    initSnake();
 
     //for(i=20,i<83,i++){
     // i=i;
@@ -288,18 +314,41 @@
 
 //infinite while loop
     while(1) {
+
+        if (printFlag) {  // if flag set, clear flag and print joystick values to serial port
+            printFlag = 0;
+            serial.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
+
+            // check joystick direction
+            if (joystick.direction == UP)
+                serial.printf(" UP\n");
+            if (joystick.direction == DOWN)
+                serial.printf(" DOWN\n");
+            if (joystick.direction == LEFT)
+                serial.printf(" LEFT\n");
+            if (joystick.direction == RIGHT)
+                serial.printf(" RIGHT\n");
+            if (joystick.direction == CENTRE)
+                serial.printf(" CENTRE\n");
+            if (joystick.direction == UNKNOWN)
+                serial.printf(" Unsupported direction\n");
+        }
         lcd.clear();
         updateSnake();
         drawSnake();
-        // drawNut();
+        drawNut();
         moveSnake();
         startGmae();
         lcd.refresh();
-        //wait(0.5);
-        //if(snake.life==1) {
-        // lcd.printString("lost",24,42);
-        // break;
+        wait(0.5);
+
+        serial.printf(" hi");
     }
+    //wait(0.5);
+    //if(snake.life==1) {
+    // lcd.printString("lost",24,42);
+    // break;
+
 
 }