frogger game revision

Dependencies:   4DGL-uLCD-SE MMA8452 SDFileSystem mbed wave_player

Dependents:   C_Assembly

Fork of ECE2035_FroggerGame_SUM2015 by ECE 2035

Files at this revision

API Documentation at this revision

Comitter:
ssong86
Date:
Mon Feb 01 06:43:06 2016 +0000
Parent:
8:1b6fc10c5cea
Commit message:
frogger

Changed in this revision

SDFileSystem.lib Show annotated file Show diff for this revision Revisions of this file
Speaker.h Show annotated file Show diff for this revision Revisions of this file
cars/cars.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
map/map.cpp Show annotated file Show diff for this revision Revisions of this file
map/map_public.h Show annotated file Show diff for this revision Revisions of this file
robot/robot.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/SDFileSystem.lib	Wed Jul 08 15:45:22 2015 +0000
+++ b/SDFileSystem.lib	Mon Feb 01 06:43:06 2016 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/neilt6/code/SDFileSystem/#c2c1f0b16380
+http://developer.mbed.org/users/neilt6/code/SDFileSystem/#a47f74caa04e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Speaker.h	Mon Feb 01 06:43:06 2016 +0000
@@ -0,0 +1,19 @@
+#include "mbed.h"
+// a new class to play a note on Speaker based on PwmOut class
+class Speaker
+{
+public:
+    Speaker(PinName pin) : _pin(pin) {
+// _pin(pin) means pass pin to the Speaker Constructor
+    }
+// class method to play a note based on PwmOut class
+    void PlayNote(float frequency, float duration, float volume) {
+        _pin.period(1.0/frequency);
+        _pin = volume/2.0;
+        wait(duration);
+        _pin = 0.0;
+    }
+
+private:
+    PwmOut _pin;
+};
\ No newline at end of file
--- a/cars/cars.cpp	Wed Jul 08 15:45:22 2015 +0000
+++ b/cars/cars.cpp	Mon Feb 01 06:43:06 2016 +0000
@@ -77,26 +77,42 @@
 
 void car_init(car_t * g) {
    if(g->lane == 1) 
-   {    g->car_blk_x = 3;
+   {    g->car_blk_x = 5;
         g->car_blk_y = 0;    
-        drawCar(g, 3, 0);
+        drawCar(g, 5, 0);
         return;
     }
     if (g->lane == 2)
     {
-        g->car_blk_x = 7;
+        g->car_blk_x = 8;
         g->car_blk_y = 0;
-        drawCar(g, 7, 0);
+        drawCar(g, 8, 0);
         return;
     }
         
     if (g->lane == 3)
     {
+        g->car_blk_x = 11;
+        g->car_blk_y = 0;
+        drawCar(g, 11, 0);
+        return;
+    }
+    
+    if (g->lane == 4)
+    {
+        g->car_blk_x = 6;
+        g->car_blk_y = 0;
+        drawCar(g, 6, 0);
+        return;
+    }
+    
+    if (g->lane == 5)
+    {
         g->car_blk_x = 10;
         g->car_blk_y = 0;
-        drawCar(g, 10, 0);
+        drawCar(g,10,0);
         return;
-       }
+    }
 
 return;
 }
--- a/main.cpp	Wed Jul 08 15:45:22 2015 +0000
+++ b/main.cpp	Mon Feb 01 06:43:06 2016 +0000
@@ -10,6 +10,11 @@
 #include "globals.h"
 #include "map_public.h"
 #include "robot.h"
+#include "cars.h"
+//#include "wave_player.h"
+
+void youwin();
+
 
 //Platform initialization
 DigitalIn right_pb(p24);  // push bottom
@@ -20,6 +25,8 @@
 Serial pc(USBTX,USBRX);     // used by Accelerometer
 MMA8452 acc(p28, p27, 100000); // Accelerometer
 DigitalOut myled(LED1);
+SDFileSystem sd(p5,p6,p7,p8,"sd");
+
 
 int main()
 {
@@ -32,50 +39,960 @@
     timer.start();
     tick = timer.read_ms();
     pre_tick = tick;
-
+    
+    double score=0;
+        
     // Initialize the buttons
     left_pb.mode(PullUp);  // The variable left_pb will be zero when the pushbutton for moving the player left is pressed
     right_pb.mode(PullUp); // The variable rightt_pb will be zero when the pushbutton for moving the player right is pressed
     up_pb.mode(PullUp);    //the variable fire_pb will be zero when the pushbutton for firing a missile is pressed
     down_pb.mode(PullUp);  //the variable fire_pb will be zero when the pushbutton for firing a missile is pressed
-
+    
+    
 
     /// [Example of the game control implementation]
     /// Here is the example to initialize the game <br><br>
     uLCD.cls();
-    map_init();
-    robot_init(0,8);
+    //map_init();
+    //robot_init(0,8);
+    
     double x_, y_, z_;
     double x=0;
     double y=8;
-
+    
+    int life = 3;
+  
+ 
+    int level=0;
+    
+    
+    //Start Screen
+    uLCD.locate(0,0);
+    uLCD.printf("RoboFrog");
+    uLCD.locate(0,2);
+    uLCD.printf("Press UP");
+    uLCD.locate(0,3);
+    uLCD.printf("->Level 1");
+    uLCD.locate(0,5);
+    uLCD.printf("Press LEFT");
+    uLCD.locate(0,6);
+    uLCD.printf("->Level 2");
+    uLCD.locate(0,8);
+    uLCD.printf("Press RIGHT");
+    uLCD.locate(0,9);
+    uLCD.printf("->Level 3");
+    
+   
+    while(1)
+    {
+        if(!up_pb)
+        {
+          level=1;
+          break;
+        }
+        if(!left_pb)
+        {
+          level=2;
+          break;
+        }
+        if(!right_pb)
+        {
+          level=3;
+          break;
+        }
+    }
+    uLCD.cls();
+    if(level==1)
+    {
     /// 1. Begin the game loop
-    while(1) {
+      
+      uLCD.printf("Level 1 Start!");
+      wait(0.5);
+      uLCD.cls();
+      map_init();
+      robot_draw(16,0);
+      robot_draw(15,0);
+      robot_draw(14,0);
+      robot_init(0,8);
+      //level 1 car objects
+      //redCar
+      car_t redCar;
+      redCar.lane=1;
+      redCar.car_color=0xFF0000;
+      car_init(&redCar);
+      //blueCar
+      car_t blueCar;
+      blueCar.lane=2;
+      blueCar.car_color=0x0000FF;
+      car_init(&blueCar);
+      //whiteCar
+      car_t whiteCar;
+      whiteCar.lane=3;
+      whiteCar.car_color=0xFFFFFF;
+      car_init(&whiteCar);
+      
+      
+      while(1) 
+      {
         tick = timer.read_ms(); // Read current time
-
         /// 2. Implement the code to get user input and update the roboFrogger
         /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
-
-        // [Some hints for user-input detection]
         acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+        //car objects movemetn
+        car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+        redCar.car_motion = CAR_UP;
+        drive(&redCar);
+        
+        car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+        blueCar.car_motion = CAR_UP;
+        drive(&blueCar);
+        
+        car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+        whiteCar.car_motion = CAR_UP;
+        drive(&whiteCar);
+        
+        //push button input and robot movement
+        if(!left_pb)
+        {
+            x=x-1;
+            robot_draw(x,y);
+            robot_clear(x+1,y);
+            map_draw_grid(x+1,y);
+        
+        }
+        if(!right_pb)
+        {
+            x=x+1;
+            robot_draw(x,y);
+            robot_clear(x-1,y);
+            map_draw_grid(x-1,y);            
+        }
+        if(!up_pb)
+        {
+            y=y-1;
+            if(y>15)
+            {
+              y = 0;
+              robot_clear(x,15);
+              map_draw_grid(x,15);
+            }
+              
+            if(y<0)
+            {
+              y= 15;
+              robot_clear(x,0);
+              map_draw_grid(x,0);
+            }
+            robot_draw(x,y);
+            robot_clear(x,y+1);
+            map_draw_grid(x,y+1);
+        }
+        if(!down_pb)
+        {
+            y=y+1;
+            if(y>15)
+            {
+              y = 0;
+              robot_clear(x,15);
+              map_draw_grid(x,15);
+            }
+              
+            if(y<0)
+            {
+              y=15;
+              robot_clear(x,0);
+              map_draw_grid(x,0);
+            }
+   
+           
+            robot_draw(x,y);
+            robot_clear(x,y-1);
+            map_draw_grid(x,y-1);
+        }
+       
+        
+         if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+         (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+         (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y))
+         {
+            life--;
+            robot_clear(x,y);
+            map_draw_grid(x,y);
+            x=0;
+            y=8;
+            robot_init(0,8);
+         }
+        
+        if(life==0)
+         collision();
+        
+        score = map_eat_candy(x,y)+score;//saving scores
         uLCD.locate(0,1);
+        uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+        uLCD.locate(10,1);
+        uLCD.printf(" Life: ");
+       
+        if((tick-pre_tick)>500) // Time step control
+            pre_tick = tick; // update the previous tick
+        if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level
+        {
+        //
+           //lv2
+           x=0;
+           y=8;
+           uLCD.cls();                  
+           uLCD.printf("Level 2 Start!");
+           wait(0.5);
+           uLCD.cls();
+           map_init();
+           robot_init(0,8);
+           //level 1 car objects
+            //redCar
+           car_t redCar;
+           redCar.lane=1;
+           redCar.car_color=0xFF0000;
+           car_init(&redCar);
+           //blueCar
+           car_t blueCar;
+           blueCar.lane=2;
+           blueCar.car_color=0x0000FF;
+           car_init(&blueCar);
+           //whiteCar
+           car_t whiteCar;
+           whiteCar.lane=3;
+           whiteCar.car_color=0xFFFFFF;
+           car_init(&whiteCar);
+           //yellowCar
+           car_t yellowCar;
+           yellowCar.lane=4;
+           yellowCar.car_color=0xFFFF00;
+           car_init(&yellowCar);
+                  
+                  
+           while(1) {
+             tick = timer.read_ms(); // Read current time
+           /// 2. Implement the code to get user input and update the roboFrogger
+           /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
+            acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+           //car objects movemetn
+            car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+            redCar.car_motion = CAR_UP;
+            drive(&redCar);
+           
+            car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+            blueCar.car_motion = CAR_UP;
+            drive(&blueCar);
+                  
+            car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+            whiteCar.car_motion = CAR_UP;
+            drive(&whiteCar);
+                    
+            car_move(&yellowCar,yellowCar.car_blk_x,yellowCar.car_blk_y);
+            yellowCar.car_motion = CAR_UP;
+            drive(&yellowCar);
+                                       
+            //push button input and robot movement
+            if(!left_pb)
+            {
+               x=x-1;
+               robot_draw(x,y);
+               robot_clear(x+1,y);
+               map_draw_grid(x+1,y);
+             }
+             if(!right_pb)
+             {
+                x=x+1;
+                robot_draw(x,y);
+                robot_clear(x-1,y);
+                map_draw_grid(x-1,y);            
+             }
+             if(!up_pb)
+             {
+                y=y-1;
+                if(y>15)
+                {
+                   y = 0;
+                   robot_clear(x,15);
+                   map_draw_grid(x,15);
+                }
+                if(y<0)
+                {
+                   y= 15;
+                   robot_clear(x,0);
+                   map_draw_grid(x,0);
+                }
+                   robot_draw(x,y);
+                   robot_clear(x,y+1);
+                   map_draw_grid(x,y+1);
+                }
+                if(!down_pb)
+                {
+                    y=y+1;
+                    if(y>15)
+                    {
+                      y = 0;
+                      robot_clear(x,15);
+                      map_draw_grid(x,15);
+                    }
+                         
+                    if(y<0)
+                    {
+                      y= 15;
+                      robot_clear(x,0);
+                      map_draw_grid(x,0);
+                    }
         
-        uLCD.printf("Score x%4.1f ",1); //You could remove this code if you already make the accelerometer work.
-        /// -[Hint] Here is a simple way to utilize the readings of accelerometer:
-        ///         If x is larger than certain value (ex:0.3), then make the roboFrogger move right.
-        ///         If x<-0.3, then make it move left. <br>
+                    robot_draw(x,y);
+                    robot_clear(x,y-1);
+                    map_draw_grid(x,y-1);
+                }
+                   
+                    
+                   if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+                   (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+                   (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y) ||
+                   (x==yellowCar.car_blk_x && y == yellowCar.car_blk_y))
+                   {
+                        life--;
+                        robot_clear(x,y);
+                        map_draw_grid(x,y);
+                        x=0;
+                        y=8;
+                        robot_init(0,8);
+                   }
+                    
+                    if(life==0)
+                     collision();
+                    
+                    score = map_eat_candy(x,y)+score;
+                    uLCD.locate(0,1);
+                    uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+                    uLCD.locate(10,1);
+                    uLCD.printf(" Life:%d",life);
+                    if((tick-pre_tick)>500) // Time step control
+                        pre_tick = tick; // update the previous tick
+                    if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level
+                    {
+                    ////// 
+                      //lv3
+                       x=0;
+                       y=8;
+                       uLCD.cls();                  
+                       uLCD.printf("Level 3 Start!");
+                       wait(0.5);
+                       uLCD.cls();
+                       map_init();
+                       robot_init(0,8);
+                       //level 1 car objects
+                        //redCar
+                       car_t redCar;
+                       redCar.lane=1;
+                       redCar.car_color=0xFF0000;
+                       car_init(&redCar);
+                       //blueCar
+                       car_t blueCar;
+                       blueCar.lane=2;
+                       blueCar.car_color=0x0000FF;
+                       car_init(&blueCar);
+                       //whiteCar
+                       car_t whiteCar;
+                       whiteCar.lane=3;
+                       whiteCar.car_color=0xFFFFFF;
+                       car_init(&whiteCar);
+                       //yellowCar
+                       car_t yellowCar;
+                       yellowCar.lane=4;
+                       yellowCar.car_color=0xFFFF00;
+                       car_init(&yellowCar);
+                       //orangeCar
+                       car_t orangeCar;
+                       orangeCar.lane=5;
+                       orangeCar.car_color=0xFFA500;
+                       car_init(&orangeCar);
+                              
+                              
+                       while(1) {
+                         tick = timer.read_ms(); // Read current time
+                       /// 2. Implement the code to get user input and update the roboFrogger
+                       /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
+                        acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+                       //car objects movemetn
+                        car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+                        redCar.car_motion = CAR_UP;
+                        drive(&redCar);
+                       
+                        car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+                        blueCar.car_motion = CAR_UP;
+                        drive(&blueCar);
+                              
+                        car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+                        whiteCar.car_motion = CAR_UP;
+                        drive(&whiteCar);
+                                
+                        car_move(&yellowCar,yellowCar.car_blk_x,yellowCar.car_blk_y);
+                        yellowCar.car_motion = CAR_UP;
+                        drive(&yellowCar);
+                        
+                        car_move(&orangeCar,orangeCar.car_blk_x,yellowCar.car_blk_y);
+                        orangeCar.car_motion = CAR_UP;
+                        drive(&orangeCar);
+                                                   
+                        //push button input and robot movement
+                        if(!left_pb)
+                        {
+                           x=x-1;
+                           robot_draw(x,y);
+                           robot_clear(x+1,y);
+                           map_draw_grid(x+1,y);
+                         }
+                         if(!right_pb)
+                         {
+                            x=x+1;
+                            robot_draw(x,y);
+                            robot_clear(x-1,y);
+                            map_draw_grid(x-1,y);            
+                         }
+                         if(!up_pb)
+                         {
+                            y=y-1;
+                            if(y>15)
+                            {
+                               y = 0;
+                               robot_clear(x,15);
+                               map_draw_grid(x,15);
+                            }
+                            if(y<0)
+                            {
+                               y= 15;
+                               robot_clear(x,0);
+                               map_draw_grid(x,0);
+                            }
+                               robot_draw(x,y);
+                               robot_clear(x,y+1);
+                               map_draw_grid(x,y+1);
+                            }
+                            if(!down_pb)
+                            {
+                                y=y+1;
+                                if(y>15)
+                                {
+                                  y = 0;
+                                  robot_clear(x,15);
+                                  map_draw_grid(x,15);
+                                }
+                                     
+                                if(y<0)
+                                {
+                                  y= 15;
+                                  robot_clear(x,0);
+                                  map_draw_grid(x,0);
+                                }
+                    
+                                robot_draw(x,y);
+                                robot_clear(x,y-1);
+                                map_draw_grid(x,y-1);
+                            }
+                               
+                                
+                               if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+                               (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+                               (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y) ||
+                               (x==yellowCar.car_blk_x && y == yellowCar.car_blk_y) ||
+                               (x==orangeCar.car_blk_x && y == orangeCar.car_blk_y))
+                               {
+                                    life--;
+                                    robot_clear(x,y);
+                                    map_draw_grid(x,y);
+                                    x=0;
+                                    y=8;
+                                    robot_init(0,8);
+                               }
+                                
+                                if(life==0)
+                                 collision();
+                                
+                                score = map_eat_candy(x,y)+score;
+                                uLCD.locate(0,1);
+                                uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+                                uLCD.locate(10,1);
+                                uLCD.printf(" Life:%d",life);
+                                if((tick-pre_tick)>500) // Time step control
+                                    pre_tick = tick; // update the previous tick
+                                if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level
+                                {
+                                     uLCD.cls();
+                                     uLCD.locate(6,8);
+                                     uLCD.printf("You Win");
+                                     uLCD.locate(3,10);
+                                     uLCD.printf("Score is:%4.1f",score);
+                                     while(1)
+                                     {}
+                                }
+                        }
+                                   
+                    /////    
+                    }
+          }   
+          
+        //    
+        }
+  }//end while
+ }//end level==1
+   if(level==2)
+   {
+    ////
+    //lv2
+           uLCD.cls();                  
+           uLCD.printf("Level 2 Start!");
+           wait(0.5);
+           uLCD.cls();
+           map_init();
+           robot_init(0,8);
+           //level 1 car objects
+            //redCar
+           car_t redCar;
+           redCar.lane=1;
+           redCar.car_color=0xFF0000;
+           car_init(&redCar);
+           //blueCar
+           car_t blueCar;
+           blueCar.lane=2;
+           blueCar.car_color=0x0000FF;
+           car_init(&blueCar);
+           //whiteCar
+           car_t whiteCar;
+           whiteCar.lane=3;
+           whiteCar.car_color=0xFFFFFF;
+           car_init(&whiteCar);
+           //yellowCar
+           car_t yellowCar;
+           yellowCar.lane=4;
+           yellowCar.car_color=0xFFFF00;
+           car_init(&yellowCar);
+                  
+                  
+           while(1) {
+             tick = timer.read_ms(); // Read current time
+           /// 2. Implement the code to get user input and update the roboFrogger
+           /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
+            acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+           //car objects movemetn
+            car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+            redCar.car_motion = CAR_UP;
+            drive(&redCar);
+           
+            car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+            blueCar.car_motion = CAR_UP;
+            drive(&blueCar);
+                  
+            car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+            whiteCar.car_motion = CAR_UP;
+            drive(&whiteCar);
+                    
+            car_move(&yellowCar,yellowCar.car_blk_x,yellowCar.car_blk_y);
+            yellowCar.car_motion = CAR_UP;
+            drive(&yellowCar);
+                                       
+            //push button input and robot movement
+            if(!left_pb)
+            {
+               x=x-1;
+               robot_draw(x,y);
+               robot_clear(x+1,y);
+               map_draw_grid(x+1,y);
+             }
+             if(!right_pb)
+             {
+                x=x+1;
+                robot_draw(x,y);
+                robot_clear(x-1,y);
+                map_draw_grid(x-1,y);            
+             }
+             if(!up_pb)
+             {
+                y=y-1;
+                if(y>15)
+                {
+                   y = 0;
+                   robot_clear(x,15);
+                   map_draw_grid(x,15);
+                }
+                if(y<0)
+                {
+                   y= 15;
+                   robot_clear(x,0);
+                   map_draw_grid(x,0);
+                }
+                   robot_draw(x,y);
+                   robot_clear(x,y+1);
+                   map_draw_grid(x,y+1);
+                }
+                if(!down_pb)
+                {
+                    y=y+1;
+                    if(y>15)
+                    {
+                      y = 0;
+                      robot_clear(x,15);
+                      map_draw_grid(x,15);
+                    }
+                         
+                    if(y<0)
+                    {
+                      y= 15;
+                      robot_clear(x,0);
+                      map_draw_grid(x,0);
+                    }
+        
+                    robot_draw(x,y);
+                    robot_clear(x,y-1);
+                    map_draw_grid(x,y-1);
+                }
+                   
+                    
+                   if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+                   (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+                   (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y) ||
+                   (x==yellowCar.car_blk_x && y == yellowCar.car_blk_y))
+                   {
+                        life--;
+                        robot_clear(x,y);
+                        map_draw_grid(x,y);
+                        x=0;
+                        y=8;
+                        robot_init(0,8);
+                   }
+                    
+                    if(life==0)
+                     collision();
+                    
+                    score = map_eat_candy(x,y)+score;
+                    uLCD.locate(0,1);
+                    uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+                    uLCD.locate(10,1);
+                    uLCD.printf(" Life:%d",life);
+                    if((tick-pre_tick)>500) // Time step control
+                        pre_tick = tick; // update the previous tick
+                    if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level    
+                    {
+                      //lv3
+                       x=0;
+                       y=8;
+                       uLCD.cls();                  
+                       uLCD.printf("Level 3 Start!");
+                       wait(0.5);
+                       uLCD.cls();
+                       map_init();
+                       robot_init(0,8);
+                       //level 1 car objects
+                        //redCar
+                       car_t redCar;
+                       redCar.lane=1;
+                       redCar.car_color=0xFF0000;
+                       car_init(&redCar);
+                       //blueCar
+                       car_t blueCar;
+                       blueCar.lane=2;
+                       blueCar.car_color=0x0000FF;
+                       car_init(&blueCar);
+                       //whiteCar
+                       car_t whiteCar;
+                       whiteCar.lane=3;
+                       whiteCar.car_color=0xFFFFFF;
+                       car_init(&whiteCar);
+                       //yellowCar
+                       car_t yellowCar;
+                       yellowCar.lane=4;
+                       yellowCar.car_color=0xFFFF00;
+                       car_init(&yellowCar);
+                       //orangeCar
+                       car_t orangeCar;
+                       orangeCar.lane=5;
+                       orangeCar.car_color=0xFFA500;
+                       car_init(&orangeCar);
+                              
+                              
+                       while(1) {
+                         tick = timer.read_ms(); // Read current time
+                       /// 2. Implement the code to get user input and update the roboFrogger
+                       /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
+                        acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+                       //car objects movemetn
+                        car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+                        redCar.car_motion = CAR_UP;
+                        drive(&redCar);
+                       
+                        car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+                        blueCar.car_motion = CAR_UP;
+                        drive(&blueCar);
+                              
+                        car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+                        whiteCar.car_motion = CAR_UP;
+                        drive(&whiteCar);
+                                
+                        car_move(&yellowCar,yellowCar.car_blk_x,yellowCar.car_blk_y);
+                        yellowCar.car_motion = CAR_UP;
+                        drive(&yellowCar);
+                        
+                        car_move(&orangeCar,orangeCar.car_blk_x,yellowCar.car_blk_y);
+                        orangeCar.car_motion = CAR_UP;
+                        drive(&orangeCar);
+                                                   
+                        //push button input and robot movement
+                        if(!left_pb)
+                        {
+                           x=x-1;
+                           robot_draw(x,y);
+                           robot_clear(x+1,y);
+                           map_draw_grid(x+1,y);
+                         }
+                         if(!right_pb)
+                         {
+                            x=x+1;
+                            robot_draw(x,y);
+                            robot_clear(x-1,y);
+                            map_draw_grid(x-1,y);            
+                         }
+                         if(!up_pb)
+                         {
+                            y=y-1;
+                            if(y>15)
+                            {
+                               y = 0;
+                               robot_clear(x,15);
+                               map_draw_grid(x,15);
+                            }
+                            if(y<0)
+                            {
+                               y= 15;
+                               robot_clear(x,0);
+                               map_draw_grid(x,0);
+                            }
+                               robot_draw(x,y);
+                               robot_clear(x,y+1);
+                               map_draw_grid(x,y+1);
+                            }
+                            if(!down_pb)
+                            {
+                                y=y+1;
+                                if(y>15)
+                                {
+                                  y = 0;
+                                  robot_clear(x,15);
+                                  map_draw_grid(x,15);
+                                }
+                                     
+                                if(y<0)
+                                {
+                                  y= 15;
+                                  robot_clear(x,0);
+                                  map_draw_grid(x,0);
+                                }
+                    
+                                robot_draw(x,y);
+                                robot_clear(x,y-1);
+                                map_draw_grid(x,y-1);
+                            }
+                               
+                                
+                               if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+                               (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+                               (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y) ||
+                               (x==yellowCar.car_blk_x && y == yellowCar.car_blk_y) ||
+                               (x==orangeCar.car_blk_x && y == orangeCar.car_blk_y))
+                               {
+                                    life--;
+                                    robot_clear(x,y);
+                                    map_draw_grid(x,y);
+                                    x=0;
+                                    y=8;
+                                    robot_init(0,8);
+                               }
+                                
+                                if(life==0)
+                                 collision();
+                                
+                                score = map_eat_candy(x,y)+score;
+                                uLCD.locate(0,1);
+                                uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+                                uLCD.locate(10,1);
+                                uLCD.printf(" Life:%d",life);
+                                if((tick-pre_tick)>500) // Time step control
+                                    pre_tick = tick; // update the previous tick
+                                if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level
+                                {
+                                     uLCD.cls();
+                                     uLCD.locate(6,8);
+                                     uLCD.printf("You Win");
+                                     uLCD.locate(3,10);
+                                     uLCD.printf("Score is:%4.1f",score);
+                                     while(1)
+                                     {}
+                                }
+                      }
+                    }
+    }
+ ////    
+ }
+ 
+   if(level==3)
+    {
+    
+                       uLCD.cls();                  
+                       uLCD.printf("Level 3 Start!");
+                       wait(0.5);
+                       uLCD.cls();
+                       map_init();
+                       robot_init(0,8);
+                       //level 1 car objects
+                        //redCar
+                       car_t redCar;
+                       redCar.lane=1;
+                       redCar.car_color=0xFF0000;
+                       car_init(&redCar);
+                       //blueCar
+                       car_t blueCar;
+                       blueCar.lane=2;
+                       blueCar.car_color=0x0000FF;
+                       car_init(&blueCar);
+                       //whiteCar
+                       car_t whiteCar;
+                       whiteCar.lane=3;
+                       whiteCar.car_color=0xFFFFFF;
+                       car_init(&whiteCar);
+                       //yellowCar
+                       car_t yellowCar;
+                       yellowCar.lane=4;
+                       yellowCar.car_color=0xFFFF00;
+                       car_init(&yellowCar);
+                       //orangeCar
+                       car_t orangeCar;
+                       orangeCar.lane=5;
+                       orangeCar.car_color=0xFFA500;
+                       car_init(&orangeCar);
+                              
+                              
+                       while(1) {
+                         tick = timer.read_ms(); // Read current time
+                       /// 2. Implement the code to get user input and update the roboFrogger
+                       /// -[Hint] Implement the code to move RoboFrogger. You could use either push-button or accelerometer. <br>
+                        acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
+                       //car objects movemetn
+                        car_move(&redCar,redCar.car_blk_x,redCar.car_blk_y);
+                        redCar.car_motion = CAR_UP;
+                        drive(&redCar);
+                       
+                        car_move(&blueCar,blueCar.car_blk_x,blueCar.car_blk_y);
+                        blueCar.car_motion = CAR_UP;
+                        drive(&blueCar);
+                              
+                        car_move(&whiteCar,whiteCar.car_blk_x,whiteCar.car_blk_y);
+                        whiteCar.car_motion = CAR_UP;
+                        drive(&whiteCar);
+                                
+                        car_move(&yellowCar,yellowCar.car_blk_x,yellowCar.car_blk_y);
+                        yellowCar.car_motion = CAR_UP;
+                        drive(&yellowCar);
+                        
+                        car_move(&orangeCar,orangeCar.car_blk_x,yellowCar.car_blk_y);
+                        orangeCar.car_motion = CAR_UP;
+                        drive(&orangeCar);
+                                                   
+                        //push button input and robot movement
+                        if(!left_pb)
+                        {
+                           x=x-1;
+                           robot_draw(x,y);
+                           robot_clear(x+1,y);
+                           map_draw_grid(x+1,y);
+                         }
+                         if(!right_pb)
+                         {
+                            x=x+1;
+                            robot_draw(x,y);
+                            robot_clear(x-1,y);
+                            map_draw_grid(x-1,y);            
+                         }
+                         if(!up_pb)
+                         {
+                            y=y-1;
+                            if(y>15)
+                            {
+                               y = 0;
+                               robot_clear(x,15);
+                               map_draw_grid(x,15);
+                            }
+                            if(y<0)
+                            {
+                               y= 15;
+                               robot_clear(x,0);
+                               map_draw_grid(x,0);
+                            }
+                               robot_draw(x,y);
+                               robot_clear(x,y+1);
+                               map_draw_grid(x,y+1);
+                            }
+                            if(!down_pb)
+                            {
+                                y=y+1;
+                                if(y>15)
+                                {
+                                  y = 0;
+                                  robot_clear(x,15);
+                                  map_draw_grid(x,15);
+                                }
+                                     
+                                if(y<0)
+                                {
+                                  y= 15;
+                                  robot_clear(x,0);
+                                  map_draw_grid(x,0);
+                                }
+                    
+                                robot_draw(x,y);
+                                robot_clear(x,y-1);
+                                map_draw_grid(x,y-1);
+                            }
+                               
+                                
+                               if((x==redCar.car_blk_x && y==redCar.car_blk_y) || 
+                               (x==blueCar.car_blk_x && y == blueCar.car_blk_y) ||
+                               (x==whiteCar.car_blk_x && y == whiteCar.car_blk_y) ||
+                               (x==yellowCar.car_blk_x && y == yellowCar.car_blk_y) ||
+                               (x==orangeCar.car_blk_x && y == orangeCar.car_blk_y))
+                               {
+                                    life--;
+                                    robot_clear(x,y);
+                                    map_draw_grid(x,y);
+                                    x=0;
+                                    y=8;
+                                    robot_init(0,8);
+                               }
+                                
+                                if(life==0)
+                                 collision();
+                                
+                                score = map_eat_candy(x,y)+score;
+                                uLCD.locate(0,1);
+                                uLCD.printf("Score:%4.1f ",score); //You could remove this code if you already make the accelerometer work.
+                                uLCD.locate(10,1);
+                                uLCD.printf(" Life:%d",life);
+                                if((tick-pre_tick)>500) // Time step control
+                                    pre_tick = tick; // update the previous tick
+                                if(x==16||(!left_pb&&!right_pb&&!up_pb&&!down_pb))//heat the safetyzone, go to next level
+                                {
+                                     uLCD.cls();
+                                     uLCD.locate(6,8);
+                                     uLCD.printf("You Win");
+                                     uLCD.locate(3,10);
+                                     uLCD.printf("Score is:%4.1f",score);
+                                     while(1)
+                                     {}
+                                }
+   
+       }
+   }
+   
+}//end main         
 
 
-        if((tick-pre_tick)>500) { // Time step control
-            pre_tick = tick; // update the previous tick
-
-            /// 3. Update the RoboFrogger on the screen
-            /// -[Hint] You could update the position of RoboFrogger (draw it on the screen) here based on the user-input at step 2. <br>
-            
-
-
-            /// 4. Implement the code to check the end of game.
-
-        }
-    }
-}
\ No newline at end of file
--- a/map/map.cpp	Wed Jul 08 15:45:22 2015 +0000
+++ b/map/map.cpp	Mon Feb 01 06:43:06 2016 +0000
@@ -105,13 +105,25 @@
     return map[XY2IDX(grid_x,grid_y)];
 }
 
-bool map_eat_candy(int grid_x, int grid_y){
+double map_eat_candy(int grid_x, int grid_y){
     int idx=XY2IDX(grid_x,grid_y);
+    int smallCandy=0,bigCandy=0;
+    double score=0;
+    if(map[idx].status==GRID_CANDY)
+    {
+        map[idx].status = GRID_ROAD;
+        smallCandy++;
+        num_candy--;
+        score = 0.1*smallCandy+score;
+        return score;
+    }
     
-    if(map[idx].status==GRID_CANDY || map[idx].status==GRID_BIG_CANDY){
+    else if(map[idx].status==GRID_BIG_CANDY){
         map[idx].status = GRID_ROAD;
+        bigCandy++;
         num_candy--;
-        return 1;
+        score = score+bigCandy;
+        return score;
     }
     return 0;
 }
--- a/map/map_public.h	Wed Jul 08 15:45:22 2015 +0000
+++ b/map/map_public.h	Mon Feb 01 06:43:06 2016 +0000
@@ -53,7 +53,7 @@
     @param grid_y The vertical position in the grid.
     @return 1:There is a candy be eaten. 0:The is no candy at the grid.
 */
-bool map_eat_candy(int grid_x, int grid_y);
+double map_eat_candy(int grid_x, int grid_y);
 
 /** Get the information about the grid
     @param grid_x The horizontal position in the grid.
--- a/robot/robot.cpp	Wed Jul 08 15:45:22 2015 +0000
+++ b/robot/robot.cpp	Mon Feb 01 06:43:06 2016 +0000
@@ -23,8 +23,8 @@
     // MAKE
     uLCD.filled_circle(frog_x, frog_y, 2, 0xCC0066);
     uLCD.filled_rectangle(frog_x-2,frog_y+1,frog_x+2,frog_y+3,0x33FF66);
-    uLCD.line(frog_x-1, frog_y+4,frog_x-1, frog_y+5, 0xFF0000);//legs
-    uLCD.line(frog_x+2, frog_y+4,frog_x+2, frog_y+5, 0xFF0000);
+    //uLCD.line(frog_x-1, frog_y+4,frog_x-1, frog_y+5, 0xFF0000);//legs
+    //uLCD.line(frog_x+2, frog_y+4,frog_x+2, frog_y+5, 0xFF0000);
     uLCD.line(frog_x+2, frog_y+1,frog_x+4, frog_y+1, 0xFF0000);//hands
     uLCD.line(frog_x-2, frog_y+1,frog_x-4, frog_y+1, 0xFF0000); 
 }