pocket tanks
Dependencies: 4DGL-uLCD-SE pockettanks SDFileSystem mbed wave_player
Fork of ECE2035_FroggerGame_SUM1025 by
main.cpp@3:8f68c00dd75a, 2015-10-22 (annotated)
- Committer:
- ece2035ta
- Date:
- Thu Oct 22 03:47:32 2015 +0000
- Revision:
- 3:8f68c00dd75a
- Parent:
- 1:172fbc00199c
hi
Who changed what in which revision?
User | Revision | Line number | New 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 | } |