Using mbed LPC1768, navigation swith (Joystick), uLCD-144-G2, microSD Transflash Breakout, Class D high-efficiency audio amp and a small speaker.

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed wave_player

Committer:
hfu36
Date:
Mon Mar 13 05:17:26 2017 +0000
Revision:
0:19998fa94cbc
Snakes & Ladder Games

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hfu36 0:19998fa94cbc 1 #include "mbed.h"
hfu36 0:19998fa94cbc 2 #include "uLCD_4DGL.h"
hfu36 0:19998fa94cbc 3 #include "SDFileSystem.h"
hfu36 0:19998fa94cbc 4 #include "wave_player.h"
hfu36 0:19998fa94cbc 5
hfu36 0:19998fa94cbc 6 DigitalOut led1(LED1);
hfu36 0:19998fa94cbc 7 DigitalOut led2(LED2);
hfu36 0:19998fa94cbc 8 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
hfu36 0:19998fa94cbc 9 uLCD_4DGL uLCD(p13,p14,p11); // serial tx, serial rx, reset pin;
hfu36 0:19998fa94cbc 10 AnalogOut DACout(p18);
hfu36 0:19998fa94cbc 11 wave_player waver(&DACout);
hfu36 0:19998fa94cbc 12 Serial pc(USBTX, USBRX);
hfu36 0:19998fa94cbc 13
hfu36 0:19998fa94cbc 14 void sanke_ladder(){
hfu36 0:19998fa94cbc 15 //ladder
hfu36 0:19998fa94cbc 16 uLCD.line(84, 20, 84, 44, WHITE);
hfu36 0:19998fa94cbc 17 uLCD.line(92, 20, 92, 44, WHITE);
hfu36 0:19998fa94cbc 18 uLCD.line(84, 24, 92, 24, WHITE);
hfu36 0:19998fa94cbc 19 uLCD.line(84, 40, 92, 40, WHITE);
hfu36 0:19998fa94cbc 20
hfu36 0:19998fa94cbc 21 //sanke
hfu36 0:19998fa94cbc 22 uLCD.line(72, 24, 72, 56, WHITE);
hfu36 0:19998fa94cbc 23 uLCD.line(64, 32, 72, 24, WHITE);
hfu36 0:19998fa94cbc 24 uLCD.line(72, 24, 80, 32, WHITE);
hfu36 0:19998fa94cbc 25 }
hfu36 0:19998fa94cbc 26
hfu36 0:19998fa94cbc 27 void playdice(){
hfu36 0:19998fa94cbc 28 FILE *wave_file;
hfu36 0:19998fa94cbc 29 wave_file=fopen("/sd/Dice.wav","r");
hfu36 0:19998fa94cbc 30 waver.play(wave_file);
hfu36 0:19998fa94cbc 31 fclose(wave_file);
hfu36 0:19998fa94cbc 32 wait(0.01);
hfu36 0:19998fa94cbc 33 }
hfu36 0:19998fa94cbc 34
hfu36 0:19998fa94cbc 35 void playTaDa(){
hfu36 0:19998fa94cbc 36 FILE *wave_file;
hfu36 0:19998fa94cbc 37 wave_file=fopen("/sd/TaDa.wav","r");
hfu36 0:19998fa94cbc 38 waver.play(wave_file);
hfu36 0:19998fa94cbc 39 fclose(wave_file);
hfu36 0:19998fa94cbc 40 wait(0.01);
hfu36 0:19998fa94cbc 41 }
hfu36 0:19998fa94cbc 42
hfu36 0:19998fa94cbc 43 void playSad(){
hfu36 0:19998fa94cbc 44 FILE *wave_file;
hfu36 0:19998fa94cbc 45 wave_file=fopen("/sd/Sad.wav","r");
hfu36 0:19998fa94cbc 46 waver.play(wave_file);
hfu36 0:19998fa94cbc 47 fclose(wave_file);
hfu36 0:19998fa94cbc 48 wait(0.01);
hfu36 0:19998fa94cbc 49 }
hfu36 0:19998fa94cbc 50
hfu36 0:19998fa94cbc 51 void rollingdice1(){
hfu36 0:19998fa94cbc 52 playdice();
hfu36 0:19998fa94cbc 53 uLCD.filled_rectangle(17, 91, 47, 121, 0xFF0000);
hfu36 0:19998fa94cbc 54 uLCD.filled_rectangle(17, 91, 47, 121, 0x000000);
hfu36 0:19998fa94cbc 55 uLCD.filled_rectangle(17, 91, 47, 121, 0xFF0000);
hfu36 0:19998fa94cbc 56 uLCD.filled_rectangle(17, 91, 47, 121, 0x000000);
hfu36 0:19998fa94cbc 57 wait(1);
hfu36 0:19998fa94cbc 58 }
hfu36 0:19998fa94cbc 59
hfu36 0:19998fa94cbc 60 void rollingdice2(){
hfu36 0:19998fa94cbc 61 playdice();
hfu36 0:19998fa94cbc 62 uLCD.filled_rectangle(81, 91, 111, 121, 0x0080FF);
hfu36 0:19998fa94cbc 63 uLCD.filled_rectangle(81, 91, 111, 121, 0x000000);
hfu36 0:19998fa94cbc 64 uLCD.filled_rectangle(81, 91, 111, 121, 0x0080FF);
hfu36 0:19998fa94cbc 65 uLCD.filled_rectangle(81, 91, 111, 121, 0x000000);
hfu36 0:19998fa94cbc 66 wait(1);
hfu36 0:19998fa94cbc 67 }
hfu36 0:19998fa94cbc 68
hfu36 0:19998fa94cbc 69
hfu36 0:19998fa94cbc 70
hfu36 0:19998fa94cbc 71 class Nav_Switch
hfu36 0:19998fa94cbc 72 {
hfu36 0:19998fa94cbc 73 public:
hfu36 0:19998fa94cbc 74 Nav_Switch(PinName up,PinName down);
hfu36 0:19998fa94cbc 75 //int read();
hfu36 0:19998fa94cbc 76 //boolean functions to test each switch
hfu36 0:19998fa94cbc 77 bool up();
hfu36 0:19998fa94cbc 78 bool down();
hfu36 0:19998fa94cbc 79
hfu36 0:19998fa94cbc 80 private:
hfu36 0:19998fa94cbc 81 BusIn _pins;
hfu36 0:19998fa94cbc 82 };
hfu36 0:19998fa94cbc 83 Nav_Switch::Nav_Switch (PinName up,PinName down):
hfu36 0:19998fa94cbc 84 _pins(up, down)
hfu36 0:19998fa94cbc 85 {
hfu36 0:19998fa94cbc 86 _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
hfu36 0:19998fa94cbc 87 wait(0.1); //delays just a bit for pullups to pull inputs high
hfu36 0:19998fa94cbc 88 }
hfu36 0:19998fa94cbc 89 inline bool Nav_Switch::up()
hfu36 0:19998fa94cbc 90 {
hfu36 0:19998fa94cbc 91 return !(_pins[0]);
hfu36 0:19998fa94cbc 92 }
hfu36 0:19998fa94cbc 93 inline bool Nav_Switch::down()
hfu36 0:19998fa94cbc 94 {
hfu36 0:19998fa94cbc 95 return !(_pins[1]);
hfu36 0:19998fa94cbc 96 }
hfu36 0:19998fa94cbc 97
hfu36 0:19998fa94cbc 98 Nav_Switch myNav( p25, p22); //pin order on Sparkfun breakout
hfu36 0:19998fa94cbc 99
hfu36 0:19998fa94cbc 100 int main()
hfu36 0:19998fa94cbc 101 {
hfu36 0:19998fa94cbc 102 pc.printf("GAME START\r\n");
hfu36 0:19998fa94cbc 103
hfu36 0:19998fa94cbc 104 //draw the board
hfu36 0:19998fa94cbc 105 //horizongtal line
hfu36 0:19998fa94cbc 106 uLCD.line(32, 16, 96, 16, WHITE);
hfu36 0:19998fa94cbc 107 uLCD.line(32, 32, 96, 32, WHITE);
hfu36 0:19998fa94cbc 108 uLCD.line(32, 48, 96, 48, WHITE);
hfu36 0:19998fa94cbc 109 uLCD.line(32, 64, 96, 64, WHITE);
hfu36 0:19998fa94cbc 110 uLCD.line(32, 80, 96, 80, WHITE);
hfu36 0:19998fa94cbc 111
hfu36 0:19998fa94cbc 112 //veritical line
hfu36 0:19998fa94cbc 113 uLCD.line(32, 16, 32, 80, WHITE);
hfu36 0:19998fa94cbc 114 uLCD.line(48, 16, 48, 80, WHITE);
hfu36 0:19998fa94cbc 115 uLCD.line(64, 16, 64, 80, WHITE);
hfu36 0:19998fa94cbc 116 uLCD.line(80, 16, 80, 80, WHITE);
hfu36 0:19998fa94cbc 117 uLCD.line(96, 16, 96, 80, WHITE);
hfu36 0:19998fa94cbc 118
hfu36 0:19998fa94cbc 119 //sanke%ladder
hfu36 0:19998fa94cbc 120 sanke_ladder();
hfu36 0:19998fa94cbc 121
hfu36 0:19998fa94cbc 122 //draw the dice1
hfu36 0:19998fa94cbc 123 //horizontal
hfu36 0:19998fa94cbc 124 uLCD.line(16, 90, 48, 90, WHITE);
hfu36 0:19998fa94cbc 125 uLCD.line(16, 122, 48, 122, WHITE);
hfu36 0:19998fa94cbc 126 //vertical
hfu36 0:19998fa94cbc 127 uLCD.line(16, 90, 16, 122, WHITE);
hfu36 0:19998fa94cbc 128 uLCD.line(48, 90, 48, 122, WHITE);
hfu36 0:19998fa94cbc 129
hfu36 0:19998fa94cbc 130 //draw the dice2
hfu36 0:19998fa94cbc 131 //horizontal
hfu36 0:19998fa94cbc 132 uLCD.line(80, 90, 112, 90, WHITE);
hfu36 0:19998fa94cbc 133 uLCD.line(80, 122, 112, 122, WHITE);
hfu36 0:19998fa94cbc 134 //vertical
hfu36 0:19998fa94cbc 135 uLCD.line(80, 90, 80, 122, WHITE);
hfu36 0:19998fa94cbc 136 uLCD.line(112, 90, 112, 122, WHITE);
hfu36 0:19998fa94cbc 137 //initialize the positions of dot1 and dot 2
hfu36 0:19998fa94cbc 138 int p1=0;
hfu36 0:19998fa94cbc 139 int p2=0;
hfu36 0:19998fa94cbc 140 while(1) {
hfu36 0:19998fa94cbc 141
hfu36 0:19998fa94cbc 142 //Push to roll the dice1
hfu36 0:19998fa94cbc 143 if(myNav.up()) {
hfu36 0:19998fa94cbc 144 led1=1;led2=0;
hfu36 0:19998fa94cbc 145 pc.printf("rolling Dice 1\r\n");
hfu36 0:19998fa94cbc 146 wait(0.5);
hfu36 0:19998fa94cbc 147 int move1=rand()%6+1;
hfu36 0:19998fa94cbc 148 pc.printf(" Move1:%d\r\n",move1);
hfu36 0:19998fa94cbc 149
hfu36 0:19998fa94cbc 150 switch (move1){
hfu36 0:19998fa94cbc 151 case 1:
hfu36 0:19998fa94cbc 152 rollingdice1();
hfu36 0:19998fa94cbc 153 uLCD.filled_circle(32, 106, 3, 0xFF0000);
hfu36 0:19998fa94cbc 154 break;
hfu36 0:19998fa94cbc 155
hfu36 0:19998fa94cbc 156 case 2:
hfu36 0:19998fa94cbc 157 rollingdice1();
hfu36 0:19998fa94cbc 158 uLCD.filled_circle(40, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 159 uLCD.filled_circle(24, 114, 3, 0xFF0000);
hfu36 0:19998fa94cbc 160 break;
hfu36 0:19998fa94cbc 161
hfu36 0:19998fa94cbc 162 case 3:
hfu36 0:19998fa94cbc 163 rollingdice1();
hfu36 0:19998fa94cbc 164 uLCD.filled_circle(40, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 165 uLCD.filled_circle(32, 106, 3, 0xFF0000);
hfu36 0:19998fa94cbc 166 uLCD.filled_circle(24, 114, 3, 0xFF0000);
hfu36 0:19998fa94cbc 167 break;
hfu36 0:19998fa94cbc 168
hfu36 0:19998fa94cbc 169 case 4:
hfu36 0:19998fa94cbc 170 rollingdice1();
hfu36 0:19998fa94cbc 171 uLCD.filled_circle(24, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 172 uLCD.filled_circle(40, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 173 uLCD.filled_circle(24, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 174 uLCD.filled_circle(40, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 175 break;
hfu36 0:19998fa94cbc 176
hfu36 0:19998fa94cbc 177 case 5:
hfu36 0:19998fa94cbc 178 rollingdice1();
hfu36 0:19998fa94cbc 179 uLCD.filled_circle(24, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 180 uLCD.filled_circle(40, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 181 uLCD.filled_circle(24, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 182 uLCD.filled_circle(40, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 183 uLCD.filled_circle(32, 105, 3, 0xFF0000);
hfu36 0:19998fa94cbc 184 break;
hfu36 0:19998fa94cbc 185
hfu36 0:19998fa94cbc 186 case 6:
hfu36 0:19998fa94cbc 187 rollingdice1();
hfu36 0:19998fa94cbc 188 uLCD.filled_circle(24, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 189 uLCD.filled_circle(40, 98, 3, 0xFF0000);
hfu36 0:19998fa94cbc 190 uLCD.filled_circle(24, 105.5, 3, 0xFF0000);
hfu36 0:19998fa94cbc 191 uLCD.filled_circle(40, 105.5, 3, 0xFF0000);
hfu36 0:19998fa94cbc 192 uLCD.filled_circle(24, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 193 uLCD.filled_circle(40, 113, 3, 0xFF0000);
hfu36 0:19998fa94cbc 194 break; }//end of switch move1
hfu36 0:19998fa94cbc 195
hfu36 0:19998fa94cbc 196 //draw dot 1
hfu36 0:19998fa94cbc 197 if (p1 + move1>16){
hfu36 0:19998fa94cbc 198 //clear screen
hfu36 0:19998fa94cbc 199 int x1; int y1;
hfu36 0:19998fa94cbc 200 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 201 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 202 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 203 //new P1
hfu36 0:19998fa94cbc 204 p1 =16-(p1+move1 -16);
hfu36 0:19998fa94cbc 205 pc.printf("New P1: %d\r\n",p1);
hfu36 0:19998fa94cbc 206 //draw P1 dot
hfu36 0:19998fa94cbc 207 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 208 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 209 pc.printf("x1:%d\r\n",x1);
hfu36 0:19998fa94cbc 210 pc.printf("y1:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 211
hfu36 0:19998fa94cbc 212 //draw P1 dot
hfu36 0:19998fa94cbc 213 sanke_ladder();
hfu36 0:19998fa94cbc 214 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 215 wait(1);
hfu36 0:19998fa94cbc 216
hfu36 0:19998fa94cbc 217 //snake and ladder
hfu36 0:19998fa94cbc 218 if(p1==4){
hfu36 0:19998fa94cbc 219 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 220 sanke_ladder();
hfu36 0:19998fa94cbc 221 playTaDa();
hfu36 0:19998fa94cbc 222 p1=8;
hfu36 0:19998fa94cbc 223 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 224 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 225 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 226 pc.printf("x1 jump to:%d\r\n",x1);
hfu36 0:19998fa94cbc 227 pc.printf("y1 jump to:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 228 }//end of if(p1==4)
hfu36 0:19998fa94cbc 229
hfu36 0:19998fa94cbc 230 else if (p1==11) {
hfu36 0:19998fa94cbc 231 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 232 sanke_ladder();
hfu36 0:19998fa94cbc 233 playSad();
hfu36 0:19998fa94cbc 234 p1=3;
hfu36 0:19998fa94cbc 235 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 236 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 237 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 238 pc.printf("x1 drop to:%d\r\n",x1);
hfu36 0:19998fa94cbc 239 pc.printf("y1 drop to:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 240 }//end of else if (p1==1)
hfu36 0:19998fa94cbc 241
hfu36 0:19998fa94cbc 242 }//end of if(p1 + move1>16)
hfu36 0:19998fa94cbc 243 else {
hfu36 0:19998fa94cbc 244 //clear screen
hfu36 0:19998fa94cbc 245 int x1; int y1;
hfu36 0:19998fa94cbc 246 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 247 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 248 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 249 //new P1
hfu36 0:19998fa94cbc 250 p1 =p1 + move1;
hfu36 0:19998fa94cbc 251 pc.printf("New P1:%d\r\n",p1);
hfu36 0:19998fa94cbc 252
hfu36 0:19998fa94cbc 253 //calculate P1 (x,y)
hfu36 0:19998fa94cbc 254 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 255 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 256 pc.printf("x1:%d\r\n",x1);
hfu36 0:19998fa94cbc 257 pc.printf("y1:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 258 sanke_ladder();
hfu36 0:19998fa94cbc 259 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 260 wait(0.1);
hfu36 0:19998fa94cbc 261
hfu36 0:19998fa94cbc 262 //snake and ladder
hfu36 0:19998fa94cbc 263 if(p1==4){
hfu36 0:19998fa94cbc 264 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 265 sanke_ladder();
hfu36 0:19998fa94cbc 266 playTaDa();
hfu36 0:19998fa94cbc 267 p1=8;
hfu36 0:19998fa94cbc 268 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 269 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 270 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 271 pc.printf("x1 jump to:%d\r\n",x1);
hfu36 0:19998fa94cbc 272 pc.printf("y1 jump to:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 273 }//end of if(p1==4)
hfu36 0:19998fa94cbc 274
hfu36 0:19998fa94cbc 275 else if (p1==11) {
hfu36 0:19998fa94cbc 276 uLCD.filled_circle(x1, y1, 3, 0x000000);
hfu36 0:19998fa94cbc 277 sanke_ladder();
hfu36 0:19998fa94cbc 278 playSad();
hfu36 0:19998fa94cbc 279 p1=3;
hfu36 0:19998fa94cbc 280 x1=(((p1%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 281 y1=((p1-((((p1%4)+3)%4)+1))/4)*16+20;
hfu36 0:19998fa94cbc 282 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 283 pc.printf("x1 drop to:%d\r\n",x1);
hfu36 0:19998fa94cbc 284 pc.printf("y1 drop to:%d\r\n\n",y1);
hfu36 0:19998fa94cbc 285 } //end of elseif(p1==11)
hfu36 0:19998fa94cbc 286
hfu36 0:19998fa94cbc 287 //draw P1 dot
hfu36 0:19998fa94cbc 288 uLCD.filled_circle(x1, y1, 3, 0xFF0000);
hfu36 0:19998fa94cbc 289 wait(1);
hfu36 0:19998fa94cbc 290 }//end of else_p1<16
hfu36 0:19998fa94cbc 291
hfu36 0:19998fa94cbc 292 if (p1 ==16){
hfu36 0:19998fa94cbc 293 //SD card needed with image and video files for last two demos
hfu36 0:19998fa94cbc 294 uLCD.cls();
hfu36 0:19998fa94cbc 295 uLCD.media_init();
hfu36 0:19998fa94cbc 296 uLCD.set_sector_address(0x0000, 0x0000);
hfu36 0:19998fa94cbc 297 uLCD.display_image(0,0);
hfu36 0:19998fa94cbc 298
hfu36 0:19998fa94cbc 299 //Play the wave file
hfu36 0:19998fa94cbc 300 FILE *wave_file;
hfu36 0:19998fa94cbc 301 //printf("\n\n\nHello, wave world!\n");
hfu36 0:19998fa94cbc 302 wave_file=fopen("/sd/Cheering.wav","r");
hfu36 0:19998fa94cbc 303 waver.play(wave_file);
hfu36 0:19998fa94cbc 304 fclose(wave_file);
hfu36 0:19998fa94cbc 305 wait(0.01);
hfu36 0:19998fa94cbc 306
hfu36 0:19998fa94cbc 307 pc.printf("P1 WIN!");
hfu36 0:19998fa94cbc 308 uLCD.cls();
hfu36 0:19998fa94cbc 309 uLCD.color(RED);
hfu36 0:19998fa94cbc 310 uLCD.locate(2,6);
hfu36 0:19998fa94cbc 311 uLCD.text_width(2);
hfu36 0:19998fa94cbc 312 uLCD.text_height(2);
hfu36 0:19998fa94cbc 313 uLCD.printf("P1 WON!");
hfu36 0:19998fa94cbc 314 break;
hfu36 0:19998fa94cbc 315 }//end of if(p1==16)
hfu36 0:19998fa94cbc 316
hfu36 0:19998fa94cbc 317 wait(0.5);
hfu36 0:19998fa94cbc 318 }//end of if(myNav.up())
hfu36 0:19998fa94cbc 319
hfu36 0:19998fa94cbc 320 //push to roll the dice2
hfu36 0:19998fa94cbc 321 else if(myNav.down()){
hfu36 0:19998fa94cbc 322 led1=0;
hfu36 0:19998fa94cbc 323 led2=1;
hfu36 0:19998fa94cbc 324 pc.printf("rolling Dice 2\r\n");
hfu36 0:19998fa94cbc 325 int move2 = rand()%6+1;
hfu36 0:19998fa94cbc 326 pc.printf("DICE2: %d\r\n\n",move2);
hfu36 0:19998fa94cbc 327
hfu36 0:19998fa94cbc 328 switch (move2){
hfu36 0:19998fa94cbc 329 case 1:
hfu36 0:19998fa94cbc 330 rollingdice2();
hfu36 0:19998fa94cbc 331 uLCD.filled_circle(96, 106, 3, 0x0080FF);
hfu36 0:19998fa94cbc 332 break;
hfu36 0:19998fa94cbc 333
hfu36 0:19998fa94cbc 334 case 2:
hfu36 0:19998fa94cbc 335 rollingdice2();
hfu36 0:19998fa94cbc 336 uLCD.filled_circle(104, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 337 uLCD.filled_circle(88, 114, 3, 0x0080FF);
hfu36 0:19998fa94cbc 338 break;
hfu36 0:19998fa94cbc 339
hfu36 0:19998fa94cbc 340 case 3:
hfu36 0:19998fa94cbc 341 rollingdice2();
hfu36 0:19998fa94cbc 342 uLCD.filled_circle(104, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 343 uLCD.filled_circle(96, 106, 3, 0x0080FF);
hfu36 0:19998fa94cbc 344 uLCD.filled_circle(88, 114, 3, 0x0080FF);
hfu36 0:19998fa94cbc 345 break;
hfu36 0:19998fa94cbc 346
hfu36 0:19998fa94cbc 347 case 4:
hfu36 0:19998fa94cbc 348 rollingdice2();
hfu36 0:19998fa94cbc 349 uLCD.filled_rectangle(81, 91, 111, 121, 0x000000);
hfu36 0:19998fa94cbc 350 uLCD.filled_circle(88, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 351 uLCD.filled_circle(104, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 352 uLCD.filled_circle(88, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 353 uLCD.filled_circle(104, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 354 break;
hfu36 0:19998fa94cbc 355
hfu36 0:19998fa94cbc 356 case 5:
hfu36 0:19998fa94cbc 357 rollingdice2();
hfu36 0:19998fa94cbc 358 uLCD.filled_rectangle(81, 91, 111, 121, 0x000000);
hfu36 0:19998fa94cbc 359 uLCD.filled_circle(88, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 360 uLCD.filled_circle(104, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 361 uLCD.filled_circle(88, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 362 uLCD.filled_circle(104, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 363 uLCD.filled_circle(96, 105, 3, 0x0080FF);
hfu36 0:19998fa94cbc 364 break;
hfu36 0:19998fa94cbc 365
hfu36 0:19998fa94cbc 366 case 6:
hfu36 0:19998fa94cbc 367 rollingdice2();
hfu36 0:19998fa94cbc 368 uLCD.filled_circle(88, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 369 uLCD.filled_circle(104, 98, 3, 0x0080FF);
hfu36 0:19998fa94cbc 370 uLCD.filled_circle(88, 105.5, 3, 0x0080FF);
hfu36 0:19998fa94cbc 371 uLCD.filled_circle(104, 105.5, 3, 0x0080FF);
hfu36 0:19998fa94cbc 372 uLCD.filled_circle(88, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 373 uLCD.filled_circle(104, 113, 3, 0x0080FF);
hfu36 0:19998fa94cbc 374 break;
hfu36 0:19998fa94cbc 375 }//end of switch move2
hfu36 0:19998fa94cbc 376
hfu36 0:19998fa94cbc 377 //draw dot 2
hfu36 0:19998fa94cbc 378 if (p2 + move2>16){
hfu36 0:19998fa94cbc 379 //clear screen
hfu36 0:19998fa94cbc 380 int x2; int y2;
hfu36 0:19998fa94cbc 381 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 382 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 383 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 384 //new P2
hfu36 0:19998fa94cbc 385 p2 =16-(p2+move2 -16);
hfu36 0:19998fa94cbc 386 pc.printf("New P2: %d\r\n",p2);
hfu36 0:19998fa94cbc 387 //draw P1 dot
hfu36 0:19998fa94cbc 388 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 389 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 390 pc.printf("x2:%d\r\n",x2);
hfu36 0:19998fa94cbc 391 pc.printf("y2:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 392
hfu36 0:19998fa94cbc 393 //draw P1 dot
hfu36 0:19998fa94cbc 394 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 395 wait(1);
hfu36 0:19998fa94cbc 396
hfu36 0:19998fa94cbc 397 //snake and ladder
hfu36 0:19998fa94cbc 398 if(p2==4){
hfu36 0:19998fa94cbc 399 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 400 sanke_ladder();
hfu36 0:19998fa94cbc 401 playTaDa();
hfu36 0:19998fa94cbc 402 p2=8;
hfu36 0:19998fa94cbc 403 pc.printf("P2 jump to:%d\r\n",p2);
hfu36 0:19998fa94cbc 404
hfu36 0:19998fa94cbc 405 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 406 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 407 pc.printf("x2 jump to:%d\r\n",x2);
hfu36 0:19998fa94cbc 408 pc.printf("y2 jump to:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 409
hfu36 0:19998fa94cbc 410 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 411 }//end of if(p2==4)
hfu36 0:19998fa94cbc 412
hfu36 0:19998fa94cbc 413 else if (p2==11) {
hfu36 0:19998fa94cbc 414 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 415 sanke_ladder();
hfu36 0:19998fa94cbc 416 playSad();
hfu36 0:19998fa94cbc 417 p2=3;
hfu36 0:19998fa94cbc 418 pc.printf("P2 drop to:%d\r\n",p2);
hfu36 0:19998fa94cbc 419
hfu36 0:19998fa94cbc 420 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 421 y2=((p2-((((p1%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 422 pc.printf("x2 drop to:%d\r\n",x2);
hfu36 0:19998fa94cbc 423 pc.printf("y2 drop to:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 424 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 425 }//end of elseif(p2==1)
hfu36 0:19998fa94cbc 426 }//end of if(p2 + move2>16)
hfu36 0:19998fa94cbc 427
hfu36 0:19998fa94cbc 428 else {
hfu36 0:19998fa94cbc 429 //clear screen
hfu36 0:19998fa94cbc 430 int x2; int y2;
hfu36 0:19998fa94cbc 431 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 432 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 433 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 434 //new P2
hfu36 0:19998fa94cbc 435 p2 =p2 + move2;
hfu36 0:19998fa94cbc 436 pc.printf("New P2:%d\r\n",p2);
hfu36 0:19998fa94cbc 437 //calculate P2(x,y)
hfu36 0:19998fa94cbc 438 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 439 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 440 pc.printf("x2:%d\r\n",x2);
hfu36 0:19998fa94cbc 441 pc.printf("y2:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 442
hfu36 0:19998fa94cbc 443 //draw P2 dot
hfu36 0:19998fa94cbc 444 sanke_ladder();
hfu36 0:19998fa94cbc 445 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 446 wait(0.5);
hfu36 0:19998fa94cbc 447
hfu36 0:19998fa94cbc 448 //snake and ladder
hfu36 0:19998fa94cbc 449 if(p2==4){
hfu36 0:19998fa94cbc 450 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 451 sanke_ladder();
hfu36 0:19998fa94cbc 452 playTaDa();
hfu36 0:19998fa94cbc 453 p2=8;
hfu36 0:19998fa94cbc 454 pc.printf("P2 jump to:%d\r\n",p2);
hfu36 0:19998fa94cbc 455
hfu36 0:19998fa94cbc 456 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 457 y2=((p2-((((p2%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 458 pc.printf("x2 jump to:%d\r\n",x2);
hfu36 0:19998fa94cbc 459 pc.printf("y2 jump to:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 460
hfu36 0:19998fa94cbc 461 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 462 }//end of if
hfu36 0:19998fa94cbc 463
hfu36 0:19998fa94cbc 464 else if (p2==11) {
hfu36 0:19998fa94cbc 465 uLCD.filled_circle(x2, y2, 3, 0x000000);
hfu36 0:19998fa94cbc 466 sanke_ladder();
hfu36 0:19998fa94cbc 467 playSad();
hfu36 0:19998fa94cbc 468 p2=3;
hfu36 0:19998fa94cbc 469 pc.printf("P2 drop to:%d\r\n",p2);
hfu36 0:19998fa94cbc 470
hfu36 0:19998fa94cbc 471 x2=(((p2%4)+3)%4)*16+36;
hfu36 0:19998fa94cbc 472 y2=((p2-((((p1%4)+3)%4)+1))/4)*16+28;
hfu36 0:19998fa94cbc 473 pc.printf("x2 drop to:%d\r\n",x2);
hfu36 0:19998fa94cbc 474 pc.printf("y2 drop to:%d\r\n\n",y2);
hfu36 0:19998fa94cbc 475 uLCD.filled_circle(x2, y2, 3, 0x0080FF);
hfu36 0:19998fa94cbc 476 } //end of elseif
hfu36 0:19998fa94cbc 477
hfu36 0:19998fa94cbc 478 wait(1);
hfu36 0:19998fa94cbc 479 }//end of else
hfu36 0:19998fa94cbc 480
hfu36 0:19998fa94cbc 481 if (p2 ==16){
hfu36 0:19998fa94cbc 482 //SD card needed with image and video files for last two demos
hfu36 0:19998fa94cbc 483 uLCD.cls();
hfu36 0:19998fa94cbc 484 uLCD.media_init();
hfu36 0:19998fa94cbc 485 uLCD.set_sector_address(0x0000, 0x0000);
hfu36 0:19998fa94cbc 486 uLCD.display_image(0,0);
hfu36 0:19998fa94cbc 487
hfu36 0:19998fa94cbc 488 //Play the wave file
hfu36 0:19998fa94cbc 489 FILE *wave_file;
hfu36 0:19998fa94cbc 490 //printf("\n\n\nHello, wave world!\n");
hfu36 0:19998fa94cbc 491 wave_file=fopen("/sd/Cheering.wav","r");
hfu36 0:19998fa94cbc 492 waver.play(wave_file);
hfu36 0:19998fa94cbc 493 fclose(wave_file);
hfu36 0:19998fa94cbc 494 wait(0.01);
hfu36 0:19998fa94cbc 495
hfu36 0:19998fa94cbc 496 pc.printf("P2 WIN!");
hfu36 0:19998fa94cbc 497
hfu36 0:19998fa94cbc 498 uLCD.cls();
hfu36 0:19998fa94cbc 499 uLCD.color(BLUE);
hfu36 0:19998fa94cbc 500 uLCD.locate(2,6);
hfu36 0:19998fa94cbc 501 uLCD.text_width(2);
hfu36 0:19998fa94cbc 502 uLCD.text_height(2);
hfu36 0:19998fa94cbc 503 uLCD.printf("P2 WON!");
hfu36 0:19998fa94cbc 504 break;
hfu36 0:19998fa94cbc 505 }//end of if(p2 ==16)
hfu36 0:19998fa94cbc 506
hfu36 0:19998fa94cbc 507 wait(0.5);
hfu36 0:19998fa94cbc 508 }//end of else if(myNav.down())
hfu36 0:19998fa94cbc 509 wait(0.02);
hfu36 0:19998fa94cbc 510 }//end of while(1)
hfu36 0:19998fa94cbc 511 }//end of main
hfu36 0:19998fa94cbc 512