frogger game revision

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

Dependents:   C_Assembly

Fork of ECE2035_FroggerGame_SUM2015 by ECE 2035

Revision:
9:47f07aa85f1a
Parent:
5:52a01054e275
--- 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