pocket tanks

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

Fork of ECE2035_FroggerGame_SUM1025 by Le Tran

Committer:
ece2035ta
Date:
Thu Oct 22 03:47:32 2015 +0000
Revision:
3:8f68c00dd75a
Parent:
1:172fbc00199c
hi

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leuyentran 0:7fe3c940e4b5 1 // Include header files for platform
leuyentran 0:7fe3c940e4b5 2 #include "mbed.h"
leuyentran 0:7fe3c940e4b5 3 #include "wave_player.h"
leuyentran 0:7fe3c940e4b5 4 #include "SDFileSystem.h"
leuyentran 0:7fe3c940e4b5 5 #include "Shiftbrite.h"
leuyentran 0:7fe3c940e4b5 6 #include <vector>
ece2035ta 1:172fbc00199c 7 #include "MMA8452.h" // for accelerometer
leuyentran 0:7fe3c940e4b5 8
ece2035ta 1:172fbc00199c 9 // Include header files for robot project
leuyentran 0:7fe3c940e4b5 10 #include "globals.h"
leuyentran 0:7fe3c940e4b5 11 #include "map_public.h"
leuyentran 0:7fe3c940e4b5 12 #include "robot.h"
ece2035ta 1:172fbc00199c 13 #include "cars.h"
leuyentran 0:7fe3c940e4b5 14
leuyentran 0:7fe3c940e4b5 15 //Platform initialization
leuyentran 0:7fe3c940e4b5 16 DigitalIn left_pb(p24); // push bottom
leuyentran 0:7fe3c940e4b5 17 DigitalIn right_pb(p21); // push bottom
leuyentran 0:7fe3c940e4b5 18 DigitalIn up_pb(p22); // push bottom
leuyentran 0:7fe3c940e4b5 19 DigitalIn down_pb(p23); // push bottom
leuyentran 0:7fe3c940e4b5 20 uLCD_4DGL uLCD(p9,p10,p11); // LCD (serial tx, serial rx, reset pin;)
ece2035ta 1:172fbc00199c 21 AnalogOut DACout(p18); // speaker
ece2035ta 1:172fbc00199c 22 wave_player waver(&DACout); // wav player
ece2035ta 1:172fbc00199c 23 SDFileSystem sd(p5, p6, p7, p8, "sd"); // SD card and filesystem (mosi, miso, sck, cs)
ece2035ta 1:172fbc00199c 24 Serial pc(USBTX,USBRX); // used by Accelerometer
ece2035ta 1:172fbc00199c 25 MMA8452 acc(p28, p27, 100000); // Accelerometer
ece2035ta 1:172fbc00199c 26 DigitalOut myled(LED1);
ece2035ta 1:172fbc00199c 27 void gameMenu();
ece2035ta 1:172fbc00199c 28 void playSound(char * wav)
ece2035ta 1:172fbc00199c 29 {
ece2035ta 1:172fbc00199c 30 // open wav file
ece2035ta 1:172fbc00199c 31 FILE *wave_file;
ece2035ta 1:172fbc00199c 32 wave_file=fopen(wav,"r");
leuyentran 0:7fe3c940e4b5 33
ece2035ta 1:172fbc00199c 34 if(wave_file == NULL) {
ece2035ta 1:172fbc00199c 35 uLCD.locate(9,0);
ece2035ta 1:172fbc00199c 36 uLCD.printf("ERROR_SD");
ece2035ta 1:172fbc00199c 37 uLCD.cls();
ece2035ta 1:172fbc00199c 38 return;
ece2035ta 1:172fbc00199c 39 }
ece2035ta 1:172fbc00199c 40
ece2035ta 1:172fbc00199c 41 // play wav file
ece2035ta 1:172fbc00199c 42 waver.play(wave_file);
ece2035ta 1:172fbc00199c 43
ece2035ta 1:172fbc00199c 44 // close wav file
ece2035ta 1:172fbc00199c 45 fclose(wave_file);
ece2035ta 1:172fbc00199c 46 }
leuyentran 0:7fe3c940e4b5 47
leuyentran 0:7fe3c940e4b5 48 int main()
leuyentran 0:7fe3c940e4b5 49 {
ece2035ta 1:172fbc00199c 50 // Initialize the buttons
ece2035ta 1:172fbc00199c 51 left_pb.mode(PullUp); // The variable left_pb will be zero when the pushbutton for moving the player left is pressed
ece2035ta 1:172fbc00199c 52 right_pb.mode(PullUp); // The variable rightt_pb will be zero when the pushbutton for moving the player right is pressed
ece2035ta 1:172fbc00199c 53 up_pb.mode(PullUp); //the variable fire_pb will be zero when the pushbutton for firing a missile is pressed
ece2035ta 1:172fbc00199c 54 down_pb.mode(PullUp); //the variable fire_pb will be zero when the pushbutton for firing a missile is pressed
ece2035ta 1:172fbc00199c 55 gameMenu();
ece2035ta 1:172fbc00199c 56 uLCD.background_color(BLACK);
ece2035ta 3:8f68c00dd75a 57 uLCD.cls();
ece2035ta 3:8f68c00dd75a 58
ece2035ta 3:8f68c00dd75a 59 ///////////////////////////////////////////////////////////////
leuyentran 0:7fe3c940e4b5 60 // Initialize the timer
leuyentran 0:7fe3c940e4b5 61 /// [Example of time control implementation]
leuyentran 0:7fe3c940e4b5 62 /// Here is a rough example to implement the timer control <br><br>
leuyentran 0:7fe3c940e4b5 63 int tick, pre_tick;
leuyentran 0:7fe3c940e4b5 64 srand (time(NULL));
leuyentran 0:7fe3c940e4b5 65 Timer timer;
leuyentran 0:7fe3c940e4b5 66 timer.start();
leuyentran 0:7fe3c940e4b5 67 tick = timer.read_ms();
leuyentran 0:7fe3c940e4b5 68 pre_tick = tick;
leuyentran 0:7fe3c940e4b5 69
leuyentran 0:7fe3c940e4b5 70 /// [Example of the game control implementation]
leuyentran 0:7fe3c940e4b5 71 /// Here is the example to initialize the game <br><br>
leuyentran 0:7fe3c940e4b5 72 uLCD.cls();
leuyentran 0:7fe3c940e4b5 73 map_init();
ece2035ta 1:172fbc00199c 74 double x_, y_, z_;
ece2035ta 3:8f68c00dd75a 75 double x=3;
ece2035ta 3:8f68c00dd75a 76 double y=0;
ece2035ta 3:8f68c00dd75a 77 double a=3;
ece2035ta 3:8f68c00dd75a 78 double b=11;
ece2035ta 1:172fbc00199c 79 double score=0;
ece2035ta 1:172fbc00199c 80 bool end=0;
ece2035ta 3:8f68c00dd75a 81 int p =4;
ece2035ta 1:172fbc00199c 82 /* uLCD.filled_rectangle(20, 20, 30, 30, RED);
ece2035ta 1:172fbc00199c 83 uLCD.filled_circle(20, 23, 1, BLACK);
ece2035ta 1:172fbc00199c 84 uLCD.filled_circle(20, 27, 1, BLACK);
ece2035ta 1:172fbc00199c 85 uLCD.line(30,25,35,25, BLACK);*/
ece2035ta 1:172fbc00199c 86 //robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 87 // Init car 1
ece2035ta 1:172fbc00199c 88 /* car_t car1;
ece2035ta 1:172fbc00199c 89 car_t * redcar = &car1;
ece2035ta 1:172fbc00199c 90 redcar -> car_color = RED;
ece2035ta 1:172fbc00199c 91 redcar -> lane = 1;
ece2035ta 1:172fbc00199c 92 redcar -> car_motion = (CAR_MOTION) 0;
ece2035ta 1:172fbc00199c 93
ece2035ta 1:172fbc00199c 94 car_init(redcar);
ece2035ta 1:172fbc00199c 95 drive(redcar);
ece2035ta 1:172fbc00199c 96 //Init Car 2
ece2035ta 1:172fbc00199c 97 car_t car2;
ece2035ta 1:172fbc00199c 98 car_t * bluecar = &car2;
ece2035ta 1:172fbc00199c 99 bluecar -> car_color = BLUE;
ece2035ta 1:172fbc00199c 100 bluecar -> lane = 2;
ece2035ta 1:172fbc00199c 101 bluecar -> car_motion = (CAR_MOTION) 0;
ece2035ta 1:172fbc00199c 102
ece2035ta 1:172fbc00199c 103 car_init(bluecar);
ece2035ta 1:172fbc00199c 104 drive(bluecar);
ece2035ta 1:172fbc00199c 105
ece2035ta 1:172fbc00199c 106 //Init Car 3
ece2035ta 1:172fbc00199c 107
ece2035ta 1:172fbc00199c 108 car_t car3;
ece2035ta 1:172fbc00199c 109 car_t * whitecar = &car3;
ece2035ta 1:172fbc00199c 110 whitecar -> car_color = WHITE;
ece2035ta 1:172fbc00199c 111 whitecar -> lane = 3;
ece2035ta 1:172fbc00199c 112 whitecar -> car_motion = (CAR_MOTION) 0;
ece2035ta 1:172fbc00199c 113
ece2035ta 1:172fbc00199c 114 car_init(whitecar);
ece2035ta 1:172fbc00199c 115 drive(whitecar);
ece2035ta 1:172fbc00199c 116
ece2035ta 1:172fbc00199c 117 //begin sound
ece2035ta 1:172fbc00199c 118 playSound("/sd/wavfiles/BUZZER.wav");
leuyentran 0:7fe3c940e4b5 119
leuyentran 0:7fe3c940e4b5 120 /// 1. Begin the game loop
leuyentran 0:7fe3c940e4b5 121 while(1) {
ece2035ta 1:172fbc00199c 122 if((whitecar -> car_blk_x == x && whitecar -> car_blk_y == y)
ece2035ta 1:172fbc00199c 123 || (redcar -> car_blk_x == x && redcar -> car_blk_y == y)
ece2035ta 1:172fbc00199c 124 || (bluecar -> car_blk_x == x && bluecar -> car_blk_y == y) ) {
ece2035ta 1:172fbc00199c 125 collision();
ece2035ta 1:172fbc00199c 126 }
ece2035ta 1:172fbc00199c 127 acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
ece2035ta 1:172fbc00199c 128 uLCD.locate(0,0);
ece2035ta 1:172fbc00199c 129 uLCD.printf("sensor x%4.1f y%4.1f\n",x_,y_); //You could remove this code if you already make the accelerometer work.
ece2035ta 1:172fbc00199c 130 if(x_>=0.3){ //READING INPUTS FROM ACCELEROMETER
ece2035ta 1:172fbc00199c 131 robot_clear(x,y);
ece2035ta 1:172fbc00199c 132 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 133 if (x!=0) {
ece2035ta 1:172fbc00199c 134 x+=1;
ece2035ta 1:172fbc00199c 135 }
ece2035ta 1:172fbc00199c 136 wait(0.1);
ece2035ta 1:172fbc00199c 137 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 138 }
ece2035ta 1:172fbc00199c 139 else if(x_<=-0.3) {
ece2035ta 1:172fbc00199c 140 robot_clear(x,y);
ece2035ta 1:172fbc00199c 141 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 142 if (x!=0) {
ece2035ta 1:172fbc00199c 143 x-=1;
ece2035ta 1:172fbc00199c 144 }
ece2035ta 1:172fbc00199c 145 wait(0.1);
ece2035ta 1:172fbc00199c 146 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 147 }
ece2035ta 1:172fbc00199c 148 else if(y_>0.3) {
ece2035ta 1:172fbc00199c 149 robot_clear(x,y);
ece2035ta 1:172fbc00199c 150 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 151 if (x!=16) {
ece2035ta 1:172fbc00199c 152 x+=1;
ece2035ta 1:172fbc00199c 153 }
ece2035ta 1:172fbc00199c 154 wait(0.1);
ece2035ta 1:172fbc00199c 155 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 156 }
ece2035ta 1:172fbc00199c 157 else if(y_< -0.3) {
ece2035ta 1:172fbc00199c 158 robot_clear(x,y);
ece2035ta 1:172fbc00199c 159 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 160 if(y!=15) {
ece2035ta 1:172fbc00199c 161 y=y+1;
ece2035ta 1:172fbc00199c 162 } else {
ece2035ta 1:172fbc00199c 163 y=0;
ece2035ta 1:172fbc00199c 164 }
ece2035ta 1:172fbc00199c 165 wait(0.1);
ece2035ta 1:172fbc00199c 166 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 167 }
ece2035ta 1:172fbc00199c 168
leuyentran 0:7fe3c940e4b5 169 tick = timer.read_ms(); // Read current time
ece2035ta 1:172fbc00199c 170 if (!end){
ece2035ta 1:172fbc00199c 171 uLCD.locate(0,1);
ece2035ta 1:172fbc00199c 172 // uLCD.printf("Score x%4.1f ",score);
ece2035ta 1:172fbc00199c 173 } else {
ece2035ta 1:172fbc00199c 174 uLCD.locate(0,1);
ece2035ta 1:172fbc00199c 175 uLCD.printf("YOU WIN!!!!!");
ece2035ta 1:172fbc00199c 176 }
leuyentran 0:7fe3c940e4b5 177 //acc.readXYZGravity(&x,&y,&z); //read accelerometer
ece2035ta 1:172fbc00199c 178 //You could remove this code if you already make the accelerometer work.
leuyentran 0:7fe3c940e4b5 179 /// -[Hint] Here is a simple way to utilize the readings of accelerometer:
leuyentran 0:7fe3c940e4b5 180 /// If x is larger than certain value (ex:0.3), then make the Pacman move right.
leuyentran 0:7fe3c940e4b5 181 /// If x<-0.3, then make it move left. <br>
leuyentran 0:7fe3c940e4b5 182
leuyentran 0:7fe3c940e4b5 183
leuyentran 0:7fe3c940e4b5 184 if((tick-pre_tick)>500) { // Time step control
leuyentran 0:7fe3c940e4b5 185 pre_tick = tick; // update the previous tick
ece2035ta 1:172fbc00199c 186
ece2035ta 1:172fbc00199c 187
ece2035ta 1:172fbc00199c 188 //Move car?
ece2035ta 1:172fbc00199c 189
ece2035ta 1:172fbc00199c 190 drive(redcar);
ece2035ta 1:172fbc00199c 191 drive(bluecar);
ece2035ta 1:172fbc00199c 192 drive(whitecar);
leuyentran 0:7fe3c940e4b5 193 /// 3. Update the Pacman on the screen
leuyentran 0:7fe3c940e4b5 194 /// -[Hint] You could update the position of Pacman (draw it on the screen) here based on the user-input at step 2. <br>
leuyentran 0:7fe3c940e4b5 195 if (!up_pb) { //MOVE UP
leuyentran 0:7fe3c940e4b5 196 robot_clear(x,y);
leuyentran 0:7fe3c940e4b5 197 map_draw_grid(x,y);
leuyentran 0:7fe3c940e4b5 198 if (y!=0) {
leuyentran 0:7fe3c940e4b5 199 y=y-1;
leuyentran 0:7fe3c940e4b5 200 } else {
leuyentran 0:7fe3c940e4b5 201 y=15;
leuyentran 0:7fe3c940e4b5 202 }
leuyentran 0:7fe3c940e4b5 203 wait(0.1);
ece2035ta 1:172fbc00199c 204 robot_init(x,y,score,end);
leuyentran 0:7fe3c940e4b5 205 } else if(!down_pb) { //MOVE DOWN
leuyentran 0:7fe3c940e4b5 206 robot_clear(x,y);
leuyentran 0:7fe3c940e4b5 207 map_draw_grid(x,y);
leuyentran 0:7fe3c940e4b5 208 if(y!=15) {
leuyentran 0:7fe3c940e4b5 209 y=y+1;
leuyentran 0:7fe3c940e4b5 210 } else {
leuyentran 0:7fe3c940e4b5 211 y=0;
leuyentran 0:7fe3c940e4b5 212 }
leuyentran 0:7fe3c940e4b5 213 wait(0.1);
ece2035ta 1:172fbc00199c 214 robot_init(x,y,score,end);
leuyentran 0:7fe3c940e4b5 215 } else if (!left_pb) { //MOVE LEFT
leuyentran 0:7fe3c940e4b5 216 robot_clear(x,y);
leuyentran 0:7fe3c940e4b5 217 map_draw_grid(x,y);
leuyentran 0:7fe3c940e4b5 218 if (x!=0) {
leuyentran 0:7fe3c940e4b5 219 x-=1;
leuyentran 0:7fe3c940e4b5 220 }
leuyentran 0:7fe3c940e4b5 221 wait(0.1);
ece2035ta 1:172fbc00199c 222 robot_init(x,y,score,end);
leuyentran 0:7fe3c940e4b5 223
leuyentran 0:7fe3c940e4b5 224 } else if(!right_pb) { //MOVE RIGHT
leuyentran 0:7fe3c940e4b5 225 robot_clear(x,y);
leuyentran 0:7fe3c940e4b5 226 map_draw_grid(x,y);
leuyentran 0:7fe3c940e4b5 227 if (x!=16) {
leuyentran 0:7fe3c940e4b5 228 x+=1;
leuyentran 0:7fe3c940e4b5 229 }
leuyentran 0:7fe3c940e4b5 230 wait(0.1);
ece2035ta 1:172fbc00199c 231 robot_init(x,y,score,end);
leuyentran 0:7fe3c940e4b5 232 }
ece2035ta 1:172fbc00199c 233
ece2035ta 1:172fbc00199c 234 }
ece2035ta 1:172fbc00199c 235 }*/
ece2035ta 1:172fbc00199c 236
ece2035ta 1:172fbc00199c 237
ece2035ta 1:172fbc00199c 238 //////////////////////////////////////////newcode///////////////////////////////////////
ece2035ta 3:8f68c00dd75a 239 robot_init(x,y, score, end);
ece2035ta 3:8f68c00dd75a 240 robot_init1(a,b, score, end);
ece2035ta 1:172fbc00199c 241 while (1)
ece2035ta 3:8f68c00dd75a 242 { // move = right_pb;
ece2035ta 3:8f68c00dd75a 243
ece2035ta 1:172fbc00199c 244 acc.readXYZGravity(&x_,&y_,&z_); //read accelerometer
ece2035ta 1:172fbc00199c 245 uLCD.locate(0,0);
ece2035ta 3:8f68c00dd75a 246 uLCD.printf("sensor x%4.1f y%4.1f\n",x_,y_); //You could remove this code if you already make the accelerometer work.
ece2035ta 1:172fbc00199c 247 /* if(x_>=0.3){ //READING INPUTS FROM ACCELEROMETER
ece2035ta 1:172fbc00199c 248 robot_clear(x,y);
ece2035ta 1:172fbc00199c 249 robot_clear(x+1, y);
ece2035ta 1:172fbc00199c 250 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 251 if (x!=0) {
ece2035ta 1:172fbc00199c 252 x+=1;
ece2035ta 1:172fbc00199c 253 }
ece2035ta 1:172fbc00199c 254 wait(0.1);
ece2035ta 1:172fbc00199c 255 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 256 }
ece2035ta 1:172fbc00199c 257 else if(x_<=-0.3) {
ece2035ta 1:172fbc00199c 258 robot_clear(x,y);
ece2035ta 1:172fbc00199c 259 robot_clear(x+1, y);
ece2035ta 1:172fbc00199c 260 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 261 if (x!=0) {
ece2035ta 1:172fbc00199c 262 x-=1;
ece2035ta 1:172fbc00199c 263 }
ece2035ta 1:172fbc00199c 264 wait(0.1);
ece2035ta 1:172fbc00199c 265 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 266 }*/
leuyentran 0:7fe3c940e4b5 267
leuyentran 0:7fe3c940e4b5 268
ece2035ta 3:8f68c00dd75a 269 if(y_>0.8) {
ece2035ta 1:172fbc00199c 270 robot_clear(x,y);
ece2035ta 1:172fbc00199c 271 robot_clear(x+1, y);
ece2035ta 1:172fbc00199c 272 robot_clear(x+2, y);
ece2035ta 1:172fbc00199c 273 robot_clear(x, y+1);
ece2035ta 1:172fbc00199c 274 robot_clear(x+1, y+1);
ece2035ta 1:172fbc00199c 275 robot_clear(x+2, y+1);
ece2035ta 1:172fbc00199c 276 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 277 if (y!=0) {
ece2035ta 1:172fbc00199c 278 y=y-1;
ece2035ta 1:172fbc00199c 279 } else {
ece2035ta 3:8f68c00dd75a 280 y=4;
ece2035ta 1:172fbc00199c 281 }
ece2035ta 1:172fbc00199c 282 wait(0.1);
ece2035ta 3:8f68c00dd75a 283 robot_init(x,y,score,end);
ece2035ta 3:8f68c00dd75a 284 }
ece2035ta 3:8f68c00dd75a 285 else if(y_< -0.8) {
ece2035ta 1:172fbc00199c 286 robot_clear(x,y);
ece2035ta 3:8f68c00dd75a 287 robot_clear(x+1, y);
ece2035ta 3:8f68c00dd75a 288 robot_clear(x+2, y);
ece2035ta 3:8f68c00dd75a 289 robot_clear(x, y+1);
ece2035ta 3:8f68c00dd75a 290 robot_clear(x+1, y+1);
ece2035ta 3:8f68c00dd75a 291 robot_clear(x+2, y+1);
ece2035ta 1:172fbc00199c 292 map_draw_grid(x,y);
ece2035ta 3:8f68c00dd75a 293 if(y!=4) {
ece2035ta 1:172fbc00199c 294 y=y+1;
ece2035ta 1:172fbc00199c 295 } else {
ece2035ta 1:172fbc00199c 296 y=0;
ece2035ta 1:172fbc00199c 297 }
ece2035ta 1:172fbc00199c 298 wait(0.1);
ece2035ta 1:172fbc00199c 299 robot_init(x,y,score,end);
ece2035ta 3:8f68c00dd75a 300 }
ece2035ta 3:8f68c00dd75a 301
ece2035ta 3:8f68c00dd75a 302 /////////////////////////////////////////////tank 2
ece2035ta 3:8f68c00dd75a 303
ece2035ta 3:8f68c00dd75a 304 if(!up_pb) {
ece2035ta 3:8f68c00dd75a 305 robot_clear1(a,b);
ece2035ta 3:8f68c00dd75a 306 robot_clear1(a+1, b);
ece2035ta 3:8f68c00dd75a 307 //robot_clear1(a+2, b);
ece2035ta 3:8f68c00dd75a 308 robot_clear1(a, b+1);
ece2035ta 3:8f68c00dd75a 309 robot_clear1(a+1,b+1);
ece2035ta 3:8f68c00dd75a 310 //robot_clear1(a+2,b+1);
ece2035ta 3:8f68c00dd75a 311 map_draw_grid(x,y);
ece2035ta 3:8f68c00dd75a 312 if (b!=8) {
ece2035ta 3:8f68c00dd75a 313 b=b-1;
ece2035ta 3:8f68c00dd75a 314 } else {
ece2035ta 3:8f68c00dd75a 315 b=12;
ece2035ta 3:8f68c00dd75a 316 }
ece2035ta 3:8f68c00dd75a 317 wait(0.1);
ece2035ta 3:8f68c00dd75a 318 robot_init1(a,b,score,end);
ece2035ta 3:8f68c00dd75a 319 }
ece2035ta 3:8f68c00dd75a 320 else if(!down_pb) {
ece2035ta 3:8f68c00dd75a 321 robot_clear1(a,b);
ece2035ta 3:8f68c00dd75a 322 robot_clear1(a+1, b);
ece2035ta 3:8f68c00dd75a 323 //robot_clear1(a+2, b);
ece2035ta 3:8f68c00dd75a 324 robot_clear1(a, b+1);
ece2035ta 3:8f68c00dd75a 325 robot_clear1(a+1,b+1);
ece2035ta 3:8f68c00dd75a 326 //robot_clear1(a+2,b+1);
ece2035ta 3:8f68c00dd75a 327 map_draw_grid(x,y);
ece2035ta 3:8f68c00dd75a 328 if(b!=12) {
ece2035ta 3:8f68c00dd75a 329 b=b+1;
ece2035ta 3:8f68c00dd75a 330 } else {
ece2035ta 3:8f68c00dd75a 331 b=8;
ece2035ta 3:8f68c00dd75a 332 }
ece2035ta 3:8f68c00dd75a 333 wait(0.1);
ece2035ta 3:8f68c00dd75a 334 robot_init1(a,b,score,end);
ece2035ta 3:8f68c00dd75a 335 }
ece2035ta 3:8f68c00dd75a 336
ece2035ta 3:8f68c00dd75a 337 /*else if (!left_pb) { //MOVE LEFT
ece2035ta 1:172fbc00199c 338 robot_clear(x,y);
ece2035ta 1:172fbc00199c 339 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 340 if (x!=0) {
ece2035ta 1:172fbc00199c 341 x-=1;
ece2035ta 1:172fbc00199c 342 }
ece2035ta 1:172fbc00199c 343 wait(0.1);
ece2035ta 1:172fbc00199c 344 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 345
ece2035ta 1:172fbc00199c 346 } else if(!right_pb) { //MOVE RIGHT
ece2035ta 1:172fbc00199c 347 robot_clear(x,y);
ece2035ta 1:172fbc00199c 348 map_draw_grid(x,y);
ece2035ta 1:172fbc00199c 349 if (x!=16) {
ece2035ta 3:8f68c00dd75a 350 //x+=1;
ece2035ta 3:8f68c00dd75a 351 uLCD.line(tank_x+10,tank_y + 5,tank_x + 15, tank_y+8 , BLACK);
ece2035ta 1:172fbc00199c 352 }
ece2035ta 1:172fbc00199c 353 wait(0.1);
ece2035ta 1:172fbc00199c 354 robot_init(x,y,score,end);
ece2035ta 1:172fbc00199c 355 }*/
ece2035ta 3:8f68c00dd75a 356
ece2035ta 3:8f68c00dd75a 357 if (!right_pb && p <20){
ece2035ta 3:8f68c00dd75a 358 robot_shoot(x,y,p);
ece2035ta 3:8f68c00dd75a 359 p++;
ece2035ta 3:8f68c00dd75a 360 }
leuyentran 0:7fe3c940e4b5 361 }
ece2035ta 1:172fbc00199c 362
ece2035ta 1:172fbc00199c 363
ece2035ta 1:172fbc00199c 364 tick = timer.read_ms(); // Read current time
ece2035ta 1:172fbc00199c 365 if (!end){
ece2035ta 1:172fbc00199c 366 uLCD.locate(0,1);
ece2035ta 1:172fbc00199c 367 // uLCD.printf("Score x%4.1f ",score);
ece2035ta 1:172fbc00199c 368 } else {
ece2035ta 1:172fbc00199c 369 uLCD.locate(0,1);
ece2035ta 1:172fbc00199c 370 uLCD.printf("YOU WIN!!!!!");
ece2035ta 1:172fbc00199c 371 }
ece2035ta 1:172fbc00199c 372 //acc.readXYZGravity(&x,&y,&z); //read accelerometer
ece2035ta 1:172fbc00199c 373 //You could remove this code if you already make the accelerometer work.
ece2035ta 1:172fbc00199c 374 /// -[Hint] Here is a simple way to utilize the readings of accelerometer:
ece2035ta 1:172fbc00199c 375 /// If x is larger than certain value (ex:0.3), then make the Pacman move right.
ece2035ta 1:172fbc00199c 376 /// If x<-0.3, then make it move left. <br>
ece2035ta 1:172fbc00199c 377
ece2035ta 1:172fbc00199c 378
ece2035ta 1:172fbc00199c 379
ece2035ta 1:172fbc00199c 380 }
ece2035ta 1:172fbc00199c 381
ece2035ta 1:172fbc00199c 382
ece2035ta 1:172fbc00199c 383 void gameMenu(){
ece2035ta 1:172fbc00199c 384
ece2035ta 1:172fbc00199c 385 uLCD.background_color(RED);
ece2035ta 1:172fbc00199c 386 uLCD.cls();
ece2035ta 1:172fbc00199c 387
ece2035ta 1:172fbc00199c 388 // pacman_draw(x, 0);
ece2035ta 1:172fbc00199c 389
ece2035ta 3:8f68c00dd75a 390 uLCD.locate(2,0); //locate "Pocket Tanks"
ece2035ta 1:172fbc00199c 391 uLCD.text_height(1);
ece2035ta 1:172fbc00199c 392 uLCD.text_width(1);
ece2035ta 1:172fbc00199c 393 // uLCD.text_underline(ON);
ece2035ta 1:172fbc00199c 394 uLCD.printf(" Pocket Tanks ");
ece2035ta 1:172fbc00199c 395 // uLCD.text_underline(OFF);
ece2035ta 1:172fbc00199c 396
ece2035ta 1:172fbc00199c 397 uLCD.color(BLACK);
ece2035ta 1:172fbc00199c 398 uLCD.textbackground_color(RED);
ece2035ta 1:172fbc00199c 399
ece2035ta 1:172fbc00199c 400
ece2035ta 1:172fbc00199c 401
ece2035ta 1:172fbc00199c 402
ece2035ta 1:172fbc00199c 403
ece2035ta 3:8f68c00dd75a 404 uLCD.locate(4,2);
ece2035ta 1:172fbc00199c 405 uLCD.printf("MENU");
ece2035ta 1:172fbc00199c 406
ece2035ta 1:172fbc00199c 407 uLCD.text_height(1);
ece2035ta 1:172fbc00199c 408 uLCD.text_width(1);
ece2035ta 1:172fbc00199c 409
ece2035ta 3:8f68c00dd75a 410 uLCD.locate(2,7);
ece2035ta 3:8f68c00dd75a 411 uLCD.printf("1. DUMMY MODE");
ece2035ta 1:172fbc00199c 412
ece2035ta 3:8f68c00dd75a 413 uLCD.locate(2,9);
ece2035ta 3:8f68c00dd75a 414 uLCD.printf("2. TWO PLAYER");
ece2035ta 1:172fbc00199c 415
ece2035ta 3:8f68c00dd75a 416 // uLCD.locate(5,11);
ece2035ta 3:8f68c00dd75a 417 // uLCD.printf("3. HARD");
ece2035ta 1:172fbc00199c 418
ece2035ta 1:172fbc00199c 419
ece2035ta 1:172fbc00199c 420 uLCD.textbackground_color(BLACK);
ece2035ta 1:172fbc00199c 421
ece2035ta 3:8f68c00dd75a 422 uLCD.locate(3,14);
ece2035ta 1:172fbc00199c 423 uLCD.color(WHITE);
ece2035ta 1:172fbc00199c 424 uLCD.printf(" ECE 2035 ");
ece2035ta 1:172fbc00199c 425
ece2035ta 3:8f68c00dd75a 426 /* uLCD.filled_circle(10, 120, 2, 0xFF0000); //draw cherry
ece2035ta 1:172fbc00199c 427 uLCD.filled_circle(13, 121, 2, BLACK);
ece2035ta 1:172fbc00199c 428 uLCD.filled_circle(14, 121, 2, 0xFF0000);
ece2035ta 1:172fbc00199c 429
ece2035ta 1:172fbc00199c 430 uLCD.pixel(10,117, 0xCCFF66);
ece2035ta 1:172fbc00199c 431 uLCD.pixel(11,116,0xCCFF66);
ece2035ta 1:172fbc00199c 432 uLCD.pixel(12,115,0xCCFF66);
ece2035ta 1:172fbc00199c 433 uLCD.pixel(13,114,0xCCFF66);
ece2035ta 1:172fbc00199c 434 uLCD.pixel(14,113,0xCCFF66);
ece2035ta 1:172fbc00199c 435
ece2035ta 1:172fbc00199c 436 uLCD.filled_circle(14, 113, 1, 0xCCFF66);
ece2035ta 1:172fbc00199c 437
ece2035ta 3:8f68c00dd75a 438 uLCD.line(14,120, 14,111,0xCCFF66); */ //end cherry
ece2035ta 1:172fbc00199c 439 while(1) {
ece2035ta 1:172fbc00199c 440 if(!up_pb|| !down_pb || !right_pb || !left_pb) {
ece2035ta 1:172fbc00199c 441 break;
ece2035ta 1:172fbc00199c 442 }
ece2035ta 1:172fbc00199c 443
ece2035ta 1:172fbc00199c 444 }
ece2035ta 1:172fbc00199c 445 }