
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
main.cpp@0:19998fa94cbc, 2017-03-13 (annotated)
- Committer:
- hfu36
- Date:
- Mon Mar 13 05:17:26 2017 +0000
- Revision:
- 0:19998fa94cbc
Snakes & Ladder Games
Who changed what in which revision?
User | Revision | Line number | New 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 |