Code for 4180 mini project

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

Fork of Pacman by Shawn Rigdon

Committer:
srigdon3
Date:
Tue Mar 25 04:36:32 2014 +0000
Revision:
0:0a900ff9a788
Child:
1:b86030cf57c4
Not fully functional, but graphically a nice starter attempt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
srigdon3 0:0a900ff9a788 1 #include "mbed.h"
srigdon3 0:0a900ff9a788 2 #include "rtos.h"
srigdon3 0:0a900ff9a788 3 #include "uLCD_4DGL.h"
srigdon3 0:0a900ff9a788 4
srigdon3 0:0a900ff9a788 5 #define PAC_SIZE 5
srigdon3 0:0a900ff9a788 6 #define STEP_SIZE 8
srigdon3 0:0a900ff9a788 7 #define CLEARANCE 12
srigdon3 0:0a900ff9a788 8
srigdon3 0:0a900ff9a788 9 AnalogIn jsx(p19); // The joysticks origin is about 1.6V in both directions
srigdon3 0:0a900ff9a788 10 AnalogIn jsy(p20); // For just three states in each direction use thresholds 1.1V and 2V
srigdon3 0:0a900ff9a788 11 uLCD_4DGL uLCD(p28, p27, p29);
srigdon3 0:0a900ff9a788 12 Mutex lcd_mutex;
srigdon3 0:0a900ff9a788 13
srigdon3 0:0a900ff9a788 14 void checkMOVE(void);
srigdon3 0:0a900ff9a788 15
srigdon3 0:0a900ff9a788 16 volatile bool win=false;
srigdon3 0:0a900ff9a788 17 volatile bool lose=false;
srigdon3 0:0a900ff9a788 18 volatile int x = 64;
srigdon3 0:0a900ff9a788 19 volatile int y = 88;
srigdon3 0:0a900ff9a788 20 //volatile int x = 0;
srigdon3 0:0a900ff9a788 21 //volatile int y = 0;
srigdon3 0:0a900ff9a788 22 volatile int gx1 = 64;
srigdon3 0:0a900ff9a788 23 volatile int gy1 = 40;
srigdon3 0:0a900ff9a788 24 volatile int pixel;
srigdon3 0:0a900ff9a788 25 int i;
srigdon3 0:0a900ff9a788 26 bool clearRIGHT,clearLEFT,clearUP,clearDOWN,bgcr,bgcl,bgcu,bgcd;
srigdon3 0:0a900ff9a788 27 int coins[81][2] = {
srigdon3 0:0a900ff9a788 28 {40,88},{48,88},{56,88},{72,88},{80,88},{88,88},
srigdon3 0:0a900ff9a788 29 {40,40},{48,40},{56,40},{64,40},{72,40},{80,40},{88,40},
srigdon3 0:0a900ff9a788 30 {40,48},{40,56},{40,64},{40,72},{40,80},
srigdon3 0:0a900ff9a788 31 {88,48},{88,56},{88,64},{88,72},{88,80},
srigdon3 0:0a900ff9a788 32 {56,96},{56,104},{56,112},
srigdon3 0:0a900ff9a788 33 {48,112},{40,112},{32,112},{24,112},{16,112},
srigdon3 0:0a900ff9a788 34 {16,104},{16,96},{16,88},{16,80},{16,72},
srigdon3 0:0a900ff9a788 35 {24,64},{32,64},
srigdon3 0:0a900ff9a788 36 {16,64},{16,56},{16,48},{16,40},{16,32},{16,24},{16,16},
srigdon3 0:0a900ff9a788 37 {24,16},{32,16},{40,16},{48,16},{56,16},
srigdon3 0:0a900ff9a788 38 {56,24},{56,32},
srigdon3 0:0a900ff9a788 39 {72,96},{72,104},{72,112},
srigdon3 0:0a900ff9a788 40 {80,112},{88,112},{96,112},{104,112},{112,112},
srigdon3 0:0a900ff9a788 41 {112,104},{112,96},{112,88},{112,80},{112,72},
srigdon3 0:0a900ff9a788 42 {104,64},{96,64},
srigdon3 0:0a900ff9a788 43 {112,64},{112,56},{112,48},{112,40},{112,32},{112,24},{112,16},
srigdon3 0:0a900ff9a788 44 {104,16},{96,16},{88,16},{80,16},{72,16},
srigdon3 0:0a900ff9a788 45 {72,24},{72,32}
srigdon3 0:0a900ff9a788 46 };
srigdon3 0:0a900ff9a788 47
srigdon3 0:0a900ff9a788 48 void replaceCOINS(void)
srigdon3 0:0a900ff9a788 49 {
srigdon3 0:0a900ff9a788 50 for(int n=0; n<81; n++)
srigdon3 0:0a900ff9a788 51 {
srigdon3 0:0a900ff9a788 52 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 53 if(gx1 == coins[n][0] && gy1 == coins[n][1])
srigdon3 0:0a900ff9a788 54 {
srigdon3 0:0a900ff9a788 55 uLCD.filled_circle(gx1,gy1,1,0xFFFF00);
srigdon3 0:0a900ff9a788 56 }
srigdon3 0:0a900ff9a788 57 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 58 }
srigdon3 0:0a900ff9a788 59 }
srigdon3 0:0a900ff9a788 60
srigdon3 0:0a900ff9a788 61 void BGclearRIGHT(void)
srigdon3 0:0a900ff9a788 62 {
srigdon3 0:0a900ff9a788 63 bgcr = true;
srigdon3 0:0a900ff9a788 64 for(int p=gx1; p <= gx1+CLEARANCE; p++)
srigdon3 0:0a900ff9a788 65 {
srigdon3 0:0a900ff9a788 66 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 67 if(uLCD.read_pixel(p,gy1)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 68 {
srigdon3 0:0a900ff9a788 69 bgcr = false;
srigdon3 0:0a900ff9a788 70 }
srigdon3 0:0a900ff9a788 71 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 72 }
srigdon3 0:0a900ff9a788 73 }
srigdon3 0:0a900ff9a788 74
srigdon3 0:0a900ff9a788 75 void BGclearLEFT(void)
srigdon3 0:0a900ff9a788 76 {
srigdon3 0:0a900ff9a788 77 bgcl = true;
srigdon3 0:0a900ff9a788 78 for(int p=gx1; p >= gx1-CLEARANCE; p--)
srigdon3 0:0a900ff9a788 79 {
srigdon3 0:0a900ff9a788 80 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 81 if(uLCD.read_pixel(p,gy1)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 82 {
srigdon3 0:0a900ff9a788 83 bgcl = false;
srigdon3 0:0a900ff9a788 84 }
srigdon3 0:0a900ff9a788 85 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 86 }
srigdon3 0:0a900ff9a788 87 }
srigdon3 0:0a900ff9a788 88
srigdon3 0:0a900ff9a788 89 void BGclearUP(void)
srigdon3 0:0a900ff9a788 90 {
srigdon3 0:0a900ff9a788 91 bgcu = true;
srigdon3 0:0a900ff9a788 92 for(int p=gy1; p >= gy1-CLEARANCE; p--)
srigdon3 0:0a900ff9a788 93 {
srigdon3 0:0a900ff9a788 94 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 95 if(uLCD.read_pixel(gx1,p)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 96 {
srigdon3 0:0a900ff9a788 97 bgcu = false;
srigdon3 0:0a900ff9a788 98 }
srigdon3 0:0a900ff9a788 99 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 100 }
srigdon3 0:0a900ff9a788 101 }
srigdon3 0:0a900ff9a788 102
srigdon3 0:0a900ff9a788 103 void BGclearDOWN(void)
srigdon3 0:0a900ff9a788 104 {
srigdon3 0:0a900ff9a788 105 bgcd = true;
srigdon3 0:0a900ff9a788 106 for(int p=gy1; p <= gy1+CLEARANCE; p++)
srigdon3 0:0a900ff9a788 107 {
srigdon3 0:0a900ff9a788 108 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 109 if(uLCD.read_pixel(gx1,p)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 110 {
srigdon3 0:0a900ff9a788 111 bgcd = false;
srigdon3 0:0a900ff9a788 112 }
srigdon3 0:0a900ff9a788 113 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 114 }
srigdon3 0:0a900ff9a788 115 }
srigdon3 0:0a900ff9a788 116
srigdon3 0:0a900ff9a788 117 void bgRIGHT(void)
srigdon3 0:0a900ff9a788 118 {
srigdon3 0:0a900ff9a788 119 Thread::wait(50);
srigdon3 0:0a900ff9a788 120 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 121 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1-PAC_SIZE,gx1+PAC_SIZE,gy1+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 122 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 123 replaceCOINS();
srigdon3 0:0a900ff9a788 124 if(gx1>124)
srigdon3 0:0a900ff9a788 125 {
srigdon3 0:0a900ff9a788 126 gx1 = 0;
srigdon3 0:0a900ff9a788 127 }
srigdon3 0:0a900ff9a788 128 gx1 = gx1+STEP_SIZE;
srigdon3 0:0a900ff9a788 129 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 130 uLCD.filled_circle(gx1,gy1,PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 131 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1,gx1+PAC_SIZE,gy1+PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 132 uLCD.filled_circle(gx1+2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 133 uLCD.filled_circle(gx1-2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 134 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 135 }
srigdon3 0:0a900ff9a788 136
srigdon3 0:0a900ff9a788 137 void bgLEFT(void)
srigdon3 0:0a900ff9a788 138 {
srigdon3 0:0a900ff9a788 139 Thread::wait(50);
srigdon3 0:0a900ff9a788 140 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 141 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1-PAC_SIZE,gx1+PAC_SIZE,gy1+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 142 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 143 replaceCOINS();
srigdon3 0:0a900ff9a788 144 if(gx1<4)
srigdon3 0:0a900ff9a788 145 {
srigdon3 0:0a900ff9a788 146 gx1 = 124;
srigdon3 0:0a900ff9a788 147 }
srigdon3 0:0a900ff9a788 148 gx1 = gx1-STEP_SIZE;
srigdon3 0:0a900ff9a788 149 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 150 uLCD.filled_circle(gx1,gy1,PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 151 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1,gx1+PAC_SIZE,gy1+PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 152 uLCD.filled_circle(gx1+2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 153 uLCD.filled_circle(gx1-2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 154 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 155 }
srigdon3 0:0a900ff9a788 156
srigdon3 0:0a900ff9a788 157 void bgUP(void)
srigdon3 0:0a900ff9a788 158 {
srigdon3 0:0a900ff9a788 159 Thread::wait(50);
srigdon3 0:0a900ff9a788 160 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 161 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1-PAC_SIZE,gx1+PAC_SIZE,gy1+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 162 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 163 replaceCOINS();
srigdon3 0:0a900ff9a788 164 if(gy1<4)
srigdon3 0:0a900ff9a788 165 {
srigdon3 0:0a900ff9a788 166 gy1 = 124;
srigdon3 0:0a900ff9a788 167 }
srigdon3 0:0a900ff9a788 168 gy1 = gy1-STEP_SIZE;
srigdon3 0:0a900ff9a788 169 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 170 uLCD.filled_circle(gx1,gy1,PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 171 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1,gx1+PAC_SIZE,gy1+PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 172 uLCD.filled_circle(gx1+2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 173 uLCD.filled_circle(gx1-2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 174 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 175 }
srigdon3 0:0a900ff9a788 176
srigdon3 0:0a900ff9a788 177 void bgDOWN(void)
srigdon3 0:0a900ff9a788 178 {
srigdon3 0:0a900ff9a788 179 Thread::wait(50);
srigdon3 0:0a900ff9a788 180 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 181 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1-PAC_SIZE,gx1+PAC_SIZE,gy1+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 182 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 183 replaceCOINS();
srigdon3 0:0a900ff9a788 184 if(gy1>124)
srigdon3 0:0a900ff9a788 185 {
srigdon3 0:0a900ff9a788 186 gy1 = 0;
srigdon3 0:0a900ff9a788 187 }
srigdon3 0:0a900ff9a788 188 gy1 = gy1+STEP_SIZE;
srigdon3 0:0a900ff9a788 189 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 190 uLCD.filled_circle(gx1,gy1,PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 191 uLCD.filled_rectangle(gx1-PAC_SIZE,gy1,gx1+PAC_SIZE,gy1+PAC_SIZE,BLUE);
srigdon3 0:0a900ff9a788 192 uLCD.filled_circle(gx1+2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 193 uLCD.filled_circle(gx1-2,gy1-2,1,BLACK);
srigdon3 0:0a900ff9a788 194 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 195 }
srigdon3 0:0a900ff9a788 196
srigdon3 0:0a900ff9a788 197 void follow(void)
srigdon3 0:0a900ff9a788 198 {
srigdon3 0:0a900ff9a788 199 if(x==gx1 && y==gy1)
srigdon3 0:0a900ff9a788 200 {
srigdon3 0:0a900ff9a788 201 win = true;
srigdon3 0:0a900ff9a788 202 lose = true;
srigdon3 0:0a900ff9a788 203 }
srigdon3 0:0a900ff9a788 204 while(x==gx1 && gy1<y && !win)
srigdon3 0:0a900ff9a788 205 {
srigdon3 0:0a900ff9a788 206 BGclearDOWN();
srigdon3 0:0a900ff9a788 207 bgDOWN();
srigdon3 0:0a900ff9a788 208 }
srigdon3 0:0a900ff9a788 209 while(x==gx1 && gy1>y && !win)
srigdon3 0:0a900ff9a788 210 {
srigdon3 0:0a900ff9a788 211 BGclearUP();
srigdon3 0:0a900ff9a788 212 bgUP();
srigdon3 0:0a900ff9a788 213 }
srigdon3 0:0a900ff9a788 214 while(y==gy1 && gx1<x && !win)
srigdon3 0:0a900ff9a788 215 {
srigdon3 0:0a900ff9a788 216 BGclearRIGHT();
srigdon3 0:0a900ff9a788 217 bgRIGHT();
srigdon3 0:0a900ff9a788 218 }
srigdon3 0:0a900ff9a788 219 while(y==gy1 && gx1>x && !win)
srigdon3 0:0a900ff9a788 220 {
srigdon3 0:0a900ff9a788 221 BGclearLEFT();
srigdon3 0:0a900ff9a788 222 bgLEFT();
srigdon3 0:0a900ff9a788 223 }
srigdon3 0:0a900ff9a788 224 }
srigdon3 0:0a900ff9a788 225
srigdon3 0:0a900ff9a788 226 void pickMOVE(void)
srigdon3 0:0a900ff9a788 227 {
srigdon3 0:0a900ff9a788 228 while((gx1==x || gy1==y) && abs(x-gx1)+abs(y-gy1)<=16 && !win)
srigdon3 0:0a900ff9a788 229 {
srigdon3 0:0a900ff9a788 230 follow();
srigdon3 0:0a900ff9a788 231 //Thread::wait(100);
srigdon3 0:0a900ff9a788 232 }
srigdon3 0:0a900ff9a788 233 int dec = rand()%4;
srigdon3 0:0a900ff9a788 234 //int dec = 0;
srigdon3 0:0a900ff9a788 235 if(dec == 0)
srigdon3 0:0a900ff9a788 236 {
srigdon3 0:0a900ff9a788 237 BGclearRIGHT();
srigdon3 0:0a900ff9a788 238 while(bgcr && !win)
srigdon3 0:0a900ff9a788 239 {
srigdon3 0:0a900ff9a788 240 bgRIGHT();
srigdon3 0:0a900ff9a788 241 BGclearRIGHT();
srigdon3 0:0a900ff9a788 242 }
srigdon3 0:0a900ff9a788 243 }
srigdon3 0:0a900ff9a788 244 else if(dec == 1)
srigdon3 0:0a900ff9a788 245 {
srigdon3 0:0a900ff9a788 246 BGclearLEFT();
srigdon3 0:0a900ff9a788 247 while(bgcl && !win)
srigdon3 0:0a900ff9a788 248 {
srigdon3 0:0a900ff9a788 249 bgLEFT();
srigdon3 0:0a900ff9a788 250 BGclearLEFT();
srigdon3 0:0a900ff9a788 251 }
srigdon3 0:0a900ff9a788 252 }
srigdon3 0:0a900ff9a788 253 else if(dec == 2)
srigdon3 0:0a900ff9a788 254 {
srigdon3 0:0a900ff9a788 255 BGclearUP();
srigdon3 0:0a900ff9a788 256 while(bgcu && !win)
srigdon3 0:0a900ff9a788 257 {
srigdon3 0:0a900ff9a788 258 bgUP();
srigdon3 0:0a900ff9a788 259 BGclearUP();
srigdon3 0:0a900ff9a788 260 }
srigdon3 0:0a900ff9a788 261 }
srigdon3 0:0a900ff9a788 262 else
srigdon3 0:0a900ff9a788 263 {
srigdon3 0:0a900ff9a788 264 BGclearDOWN();
srigdon3 0:0a900ff9a788 265 while(bgcd && !win)
srigdon3 0:0a900ff9a788 266 {
srigdon3 0:0a900ff9a788 267 bgDOWN();
srigdon3 0:0a900ff9a788 268 BGclearDOWN();
srigdon3 0:0a900ff9a788 269 }
srigdon3 0:0a900ff9a788 270 }
srigdon3 0:0a900ff9a788 271 }
srigdon3 0:0a900ff9a788 272
srigdon3 0:0a900ff9a788 273 void CHECKclearRIGHT(void)
srigdon3 0:0a900ff9a788 274 {
srigdon3 0:0a900ff9a788 275 clearRIGHT = true;
srigdon3 0:0a900ff9a788 276 for(i=x; i <= x+CLEARANCE; i++)
srigdon3 0:0a900ff9a788 277 {
srigdon3 0:0a900ff9a788 278 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 279 if(uLCD.read_pixel(i,y)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 280 {
srigdon3 0:0a900ff9a788 281 clearRIGHT = false;
srigdon3 0:0a900ff9a788 282 }
srigdon3 0:0a900ff9a788 283 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 284 }
srigdon3 0:0a900ff9a788 285 }
srigdon3 0:0a900ff9a788 286
srigdon3 0:0a900ff9a788 287 void CHECKclearLEFT(void)
srigdon3 0:0a900ff9a788 288 {
srigdon3 0:0a900ff9a788 289 clearLEFT = true;
srigdon3 0:0a900ff9a788 290 for(i=x; i >= x-CLEARANCE; i--)
srigdon3 0:0a900ff9a788 291 {
srigdon3 0:0a900ff9a788 292 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 293 if(uLCD.read_pixel(i,y)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 294 {
srigdon3 0:0a900ff9a788 295 clearLEFT = false;
srigdon3 0:0a900ff9a788 296 }
srigdon3 0:0a900ff9a788 297 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 298 }
srigdon3 0:0a900ff9a788 299 }
srigdon3 0:0a900ff9a788 300
srigdon3 0:0a900ff9a788 301 void CHECKclearUP(void)
srigdon3 0:0a900ff9a788 302 {
srigdon3 0:0a900ff9a788 303 clearUP = true;
srigdon3 0:0a900ff9a788 304 for(i=y; i >= y-CLEARANCE; i--)
srigdon3 0:0a900ff9a788 305 {
srigdon3 0:0a900ff9a788 306 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 307 if(uLCD.read_pixel(x,i)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 308 {
srigdon3 0:0a900ff9a788 309 clearUP = false;
srigdon3 0:0a900ff9a788 310 }
srigdon3 0:0a900ff9a788 311 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 312 }
srigdon3 0:0a900ff9a788 313 }
srigdon3 0:0a900ff9a788 314
srigdon3 0:0a900ff9a788 315 void CHECKclearDOWN(void)
srigdon3 0:0a900ff9a788 316 {
srigdon3 0:0a900ff9a788 317 clearDOWN = true;
srigdon3 0:0a900ff9a788 318 for(i=y; i <= y+CLEARANCE; i++)
srigdon3 0:0a900ff9a788 319 {
srigdon3 0:0a900ff9a788 320 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 321 if(uLCD.read_pixel(x,i)==uLCD.read_pixel(4,4))
srigdon3 0:0a900ff9a788 322 {
srigdon3 0:0a900ff9a788 323 clearDOWN = false;
srigdon3 0:0a900ff9a788 324 }
srigdon3 0:0a900ff9a788 325 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 326 }
srigdon3 0:0a900ff9a788 327 }
srigdon3 0:0a900ff9a788 328
srigdon3 0:0a900ff9a788 329 void changeCOINS(void)
srigdon3 0:0a900ff9a788 330 {
srigdon3 0:0a900ff9a788 331 for(int m=0; m<81; m++)
srigdon3 0:0a900ff9a788 332 {
srigdon3 0:0a900ff9a788 333 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 334 if(x == coins[m][0] && y == coins[m][1])
srigdon3 0:0a900ff9a788 335 {
srigdon3 0:0a900ff9a788 336 coins[m][0]=64;
srigdon3 0:0a900ff9a788 337 coins[m][1]=64;
srigdon3 0:0a900ff9a788 338 }
srigdon3 0:0a900ff9a788 339 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 340 }
srigdon3 0:0a900ff9a788 341 }
srigdon3 0:0a900ff9a788 342
srigdon3 0:0a900ff9a788 343 void PACmoveRIGHT(void)
srigdon3 0:0a900ff9a788 344 {
srigdon3 0:0a900ff9a788 345 while(clearRIGHT && !win)
srigdon3 0:0a900ff9a788 346 {
srigdon3 0:0a900ff9a788 347 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 348 uLCD.filled_circle(x,y,PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 349 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 350 if(x>124)
srigdon3 0:0a900ff9a788 351 {
srigdon3 0:0a900ff9a788 352 x = 0;
srigdon3 0:0a900ff9a788 353 }
srigdon3 0:0a900ff9a788 354 x = x+STEP_SIZE;
srigdon3 0:0a900ff9a788 355 changeCOINS();
srigdon3 0:0a900ff9a788 356
srigdon3 0:0a900ff9a788 357 if(x%(2*STEP_SIZE) == 0)
srigdon3 0:0a900ff9a788 358 {
srigdon3 0:0a900ff9a788 359 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 360 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 361 uLCD.filled_rectangle(x+2,y-2,x+PAC_SIZE,y+2,BLACK);
srigdon3 0:0a900ff9a788 362 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 363 }
srigdon3 0:0a900ff9a788 364 else
srigdon3 0:0a900ff9a788 365 {
srigdon3 0:0a900ff9a788 366 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 367 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 368 uLCD.filled_rectangle(x+2,y,x+PAC_SIZE,y+1,BLACK);
srigdon3 0:0a900ff9a788 369 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 370 }
srigdon3 0:0a900ff9a788 371 if(jsx <= .75)
srigdon3 0:0a900ff9a788 372 {
srigdon3 0:0a900ff9a788 373 checkMOVE();
srigdon3 0:0a900ff9a788 374 }
srigdon3 0:0a900ff9a788 375 CHECKclearRIGHT();
srigdon3 0:0a900ff9a788 376 Thread::wait(10);
srigdon3 0:0a900ff9a788 377 }
srigdon3 0:0a900ff9a788 378 }
srigdon3 0:0a900ff9a788 379
srigdon3 0:0a900ff9a788 380 void PACmoveLEFT(void)
srigdon3 0:0a900ff9a788 381 {
srigdon3 0:0a900ff9a788 382 while(clearLEFT && !win)
srigdon3 0:0a900ff9a788 383 {
srigdon3 0:0a900ff9a788 384 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 385 uLCD.filled_circle(x,y,PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 386 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 387 if(x<4)
srigdon3 0:0a900ff9a788 388 {
srigdon3 0:0a900ff9a788 389 x = 128;
srigdon3 0:0a900ff9a788 390 }
srigdon3 0:0a900ff9a788 391 x = x-STEP_SIZE;
srigdon3 0:0a900ff9a788 392 changeCOINS();
srigdon3 0:0a900ff9a788 393 if(x%(2*STEP_SIZE) == 0)
srigdon3 0:0a900ff9a788 394 {
srigdon3 0:0a900ff9a788 395 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 396 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 397 uLCD.filled_rectangle(x-2,y-2,x-PAC_SIZE,y+2,BLACK);
srigdon3 0:0a900ff9a788 398 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 399 }
srigdon3 0:0a900ff9a788 400 else
srigdon3 0:0a900ff9a788 401 {
srigdon3 0:0a900ff9a788 402 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 403 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 404 uLCD.filled_rectangle(x-2,y,x-PAC_SIZE,y+1,BLACK);
srigdon3 0:0a900ff9a788 405 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 406 }
srigdon3 0:0a900ff9a788 407 if(jsx >= .1)
srigdon3 0:0a900ff9a788 408 {
srigdon3 0:0a900ff9a788 409 checkMOVE();
srigdon3 0:0a900ff9a788 410 }
srigdon3 0:0a900ff9a788 411 CHECKclearLEFT();
srigdon3 0:0a900ff9a788 412 Thread::wait(10);
srigdon3 0:0a900ff9a788 413 }
srigdon3 0:0a900ff9a788 414 }
srigdon3 0:0a900ff9a788 415
srigdon3 0:0a900ff9a788 416 void PACmoveUP(void)
srigdon3 0:0a900ff9a788 417 {
srigdon3 0:0a900ff9a788 418 while(clearUP && !win)
srigdon3 0:0a900ff9a788 419 {
srigdon3 0:0a900ff9a788 420 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 421 uLCD.filled_circle(x,y,PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 422 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 423 if(y<4)
srigdon3 0:0a900ff9a788 424 {
srigdon3 0:0a900ff9a788 425 y = 128;
srigdon3 0:0a900ff9a788 426 }
srigdon3 0:0a900ff9a788 427 y = y-STEP_SIZE;
srigdon3 0:0a900ff9a788 428 changeCOINS();
srigdon3 0:0a900ff9a788 429 if(y%(2*STEP_SIZE) == 0)
srigdon3 0:0a900ff9a788 430 {
srigdon3 0:0a900ff9a788 431 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 432 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 433 uLCD.filled_rectangle(x-2,y-2,x+2,y-PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 434 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 435 }
srigdon3 0:0a900ff9a788 436 else
srigdon3 0:0a900ff9a788 437 {
srigdon3 0:0a900ff9a788 438 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 439 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 440 uLCD.filled_rectangle(x,y-2,x+1,y-PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 441 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 442 }
srigdon3 0:0a900ff9a788 443 if(jsy <= .9)
srigdon3 0:0a900ff9a788 444 {
srigdon3 0:0a900ff9a788 445 checkMOVE();
srigdon3 0:0a900ff9a788 446 }
srigdon3 0:0a900ff9a788 447 CHECKclearUP();
srigdon3 0:0a900ff9a788 448 Thread::wait(10);
srigdon3 0:0a900ff9a788 449 }
srigdon3 0:0a900ff9a788 450 }
srigdon3 0:0a900ff9a788 451
srigdon3 0:0a900ff9a788 452 void PACmoveDOWN(void)
srigdon3 0:0a900ff9a788 453 {
srigdon3 0:0a900ff9a788 454 while(clearDOWN && !win)
srigdon3 0:0a900ff9a788 455 {
srigdon3 0:0a900ff9a788 456 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 457 uLCD.filled_circle(x,y,PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 458 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 459 if(y>124)
srigdon3 0:0a900ff9a788 460 {
srigdon3 0:0a900ff9a788 461 y = 0;
srigdon3 0:0a900ff9a788 462 }
srigdon3 0:0a900ff9a788 463 y = y+STEP_SIZE;
srigdon3 0:0a900ff9a788 464 changeCOINS();
srigdon3 0:0a900ff9a788 465 if(y%(2*STEP_SIZE) == 0)
srigdon3 0:0a900ff9a788 466 {
srigdon3 0:0a900ff9a788 467 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 468 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 469 uLCD.filled_rectangle(x-2,y+2,x+2,y+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 470 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 471 }
srigdon3 0:0a900ff9a788 472 else
srigdon3 0:0a900ff9a788 473 {
srigdon3 0:0a900ff9a788 474 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 475 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 476 uLCD.filled_rectangle(x,y+2,x+1,y+PAC_SIZE,BLACK);
srigdon3 0:0a900ff9a788 477 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 478 }
srigdon3 0:0a900ff9a788 479 if(jsy >= .1)
srigdon3 0:0a900ff9a788 480 {
srigdon3 0:0a900ff9a788 481 checkMOVE();
srigdon3 0:0a900ff9a788 482 }
srigdon3 0:0a900ff9a788 483 CHECKclearDOWN();
srigdon3 0:0a900ff9a788 484 Thread::wait(10);
srigdon3 0:0a900ff9a788 485 }
srigdon3 0:0a900ff9a788 486 }
srigdon3 0:0a900ff9a788 487
srigdon3 0:0a900ff9a788 488 void checkMOVE(void)
srigdon3 0:0a900ff9a788 489 {
srigdon3 0:0a900ff9a788 490 if(jsx > .9)
srigdon3 0:0a900ff9a788 491 {
srigdon3 0:0a900ff9a788 492 CHECKclearRIGHT();
srigdon3 0:0a900ff9a788 493 PACmoveRIGHT();
srigdon3 0:0a900ff9a788 494 }
srigdon3 0:0a900ff9a788 495 else if(jsx < .1)
srigdon3 0:0a900ff9a788 496 {
srigdon3 0:0a900ff9a788 497 CHECKclearLEFT();
srigdon3 0:0a900ff9a788 498 PACmoveLEFT();
srigdon3 0:0a900ff9a788 499 }
srigdon3 0:0a900ff9a788 500 if(jsy > .9)
srigdon3 0:0a900ff9a788 501 {
srigdon3 0:0a900ff9a788 502 CHECKclearUP();
srigdon3 0:0a900ff9a788 503 PACmoveUP();
srigdon3 0:0a900ff9a788 504 }
srigdon3 0:0a900ff9a788 505 else if(jsy < .1)
srigdon3 0:0a900ff9a788 506 {
srigdon3 0:0a900ff9a788 507 CHECKclearDOWN();
srigdon3 0:0a900ff9a788 508 PACmoveDOWN();
srigdon3 0:0a900ff9a788 509 }
srigdon3 0:0a900ff9a788 510 }
srigdon3 0:0a900ff9a788 511
srigdon3 0:0a900ff9a788 512 void drawBORDERS(void)
srigdon3 0:0a900ff9a788 513 {
srigdon3 0:0a900ff9a788 514 //Outer Border
srigdon3 0:0a900ff9a788 515 uLCD.rectangle(4,4,124,124,RED);
srigdon3 0:0a900ff9a788 516 uLCD.line(8,8,8,120,RED);
srigdon3 0:0a900ff9a788 517 uLCD.line(8,8,62,8,RED);
srigdon3 0:0a900ff9a788 518 uLCD.line(62,8,62,32,RED);
srigdon3 0:0a900ff9a788 519 uLCD.line(62,32,66,32,RED);
srigdon3 0:0a900ff9a788 520 uLCD.line(66,32,66,8,RED);
srigdon3 0:0a900ff9a788 521 uLCD.line(66,8,120,8,RED);
srigdon3 0:0a900ff9a788 522 uLCD.line(120,8,120,120,RED);
srigdon3 0:0a900ff9a788 523 uLCD.line(120,120,66,120,RED);
srigdon3 0:0a900ff9a788 524 uLCD.line(66,120,66,96,RED);
srigdon3 0:0a900ff9a788 525 uLCD.line(66,96,62,96,RED);
srigdon3 0:0a900ff9a788 526 uLCD.line(62,96,62,120,RED);
srigdon3 0:0a900ff9a788 527 uLCD.line(62,120,8,120,RED);
srigdon3 0:0a900ff9a788 528 //Inner Rectangle
srigdon3 0:0a900ff9a788 529 uLCD.rectangle(52,52,76,76,RED);
srigdon3 0:0a900ff9a788 530 uLCD.rectangle(48,48,80,80,RED);
srigdon3 0:0a900ff9a788 531 //Upper Left Corner
srigdon3 0:0a900ff9a788 532 uLCD.line(48,24,24,24,RED);
srigdon3 0:0a900ff9a788 533 uLCD.line(24,24,24,56,RED);
srigdon3 0:0a900ff9a788 534 uLCD.line(24,56,32,56,RED);
srigdon3 0:0a900ff9a788 535 uLCD.line(32,56,32,32,RED);
srigdon3 0:0a900ff9a788 536 uLCD.line(32,32,48,32,RED);
srigdon3 0:0a900ff9a788 537 uLCD.line(48,32,48,24,RED);
srigdon3 0:0a900ff9a788 538 //Upper Right Corner
srigdon3 0:0a900ff9a788 539 uLCD.line(80,24,104,24,RED);
srigdon3 0:0a900ff9a788 540 uLCD.line(104,24,104,56,RED);
srigdon3 0:0a900ff9a788 541 uLCD.line(104,56,96,56,RED);
srigdon3 0:0a900ff9a788 542 uLCD.line(96,56,96,32,RED);
srigdon3 0:0a900ff9a788 543 uLCD.line(96,32,80,32,RED);
srigdon3 0:0a900ff9a788 544 uLCD.line(80,32,80,24,RED);
srigdon3 0:0a900ff9a788 545 //Lower Left Corner
srigdon3 0:0a900ff9a788 546 uLCD.line(48,104,24,104,RED);
srigdon3 0:0a900ff9a788 547 uLCD.line(24,104,24,72,RED);
srigdon3 0:0a900ff9a788 548 uLCD.line(24,72,32,72,RED);
srigdon3 0:0a900ff9a788 549 uLCD.line(32,72,32,96,RED);
srigdon3 0:0a900ff9a788 550 uLCD.line(32,96,48,96,RED);
srigdon3 0:0a900ff9a788 551 uLCD.line(48,96,48,104,RED);
srigdon3 0:0a900ff9a788 552 //Lower Right Corner
srigdon3 0:0a900ff9a788 553 uLCD.line(80,104,104,104,RED);
srigdon3 0:0a900ff9a788 554 uLCD.line(104,104,104,72,RED);
srigdon3 0:0a900ff9a788 555 uLCD.line(104,72,96,72,RED);
srigdon3 0:0a900ff9a788 556 uLCD.line(96,72,96,96,RED);
srigdon3 0:0a900ff9a788 557 uLCD.line(96,96,80,96,RED);
srigdon3 0:0a900ff9a788 558 uLCD.line(80,96,80,104,RED);
srigdon3 0:0a900ff9a788 559 }
srigdon3 0:0a900ff9a788 560
srigdon3 0:0a900ff9a788 561 void placeCOINS(void)
srigdon3 0:0a900ff9a788 562 {
srigdon3 0:0a900ff9a788 563 for(int j=0; j<81; j++)
srigdon3 0:0a900ff9a788 564 {
srigdon3 0:0a900ff9a788 565 uLCD.filled_circle(coins[j][0],coins[j][1],1,0xFFFF00);
srigdon3 0:0a900ff9a788 566 }
srigdon3 0:0a900ff9a788 567 }
srigdon3 0:0a900ff9a788 568
srigdon3 0:0a900ff9a788 569 void initialize(void)
srigdon3 0:0a900ff9a788 570 {
srigdon3 0:0a900ff9a788 571 drawBORDERS();
srigdon3 0:0a900ff9a788 572 placeCOINS();
srigdon3 0:0a900ff9a788 573 uLCD.filled_circle(x,y,PAC_SIZE,0xFFFF00);
srigdon3 0:0a900ff9a788 574 uLCD.filled_rectangle(x-2,y-2,x-PAC_SIZE,y+2,BLACK);
srigdon3 0:0a900ff9a788 575 }
srigdon3 0:0a900ff9a788 576
srigdon3 0:0a900ff9a788 577 void checkWIN(void)
srigdon3 0:0a900ff9a788 578 {
srigdon3 0:0a900ff9a788 579 win = true;
srigdon3 0:0a900ff9a788 580 for(int k=0; k<81; k++)
srigdon3 0:0a900ff9a788 581 {
srigdon3 0:0a900ff9a788 582 lcd_mutex.lock();
srigdon3 0:0a900ff9a788 583 if(coins[k][0]!=64 || coins[k][1]!=64)
srigdon3 0:0a900ff9a788 584 {
srigdon3 0:0a900ff9a788 585 win = false;
srigdon3 0:0a900ff9a788 586 }
srigdon3 0:0a900ff9a788 587 lcd_mutex.unlock();
srigdon3 0:0a900ff9a788 588 }
srigdon3 0:0a900ff9a788 589 }
srigdon3 0:0a900ff9a788 590
srigdon3 0:0a900ff9a788 591 void pacMOVE(void const *args)
srigdon3 0:0a900ff9a788 592 {
srigdon3 0:0a900ff9a788 593 while(!win)
srigdon3 0:0a900ff9a788 594 {
srigdon3 0:0a900ff9a788 595 checkMOVE();
srigdon3 0:0a900ff9a788 596 Thread::wait(10);
srigdon3 0:0a900ff9a788 597 }
srigdon3 0:0a900ff9a788 598 }
srigdon3 0:0a900ff9a788 599
srigdon3 0:0a900ff9a788 600 void blueGHOST(void const *args)
srigdon3 0:0a900ff9a788 601 {
srigdon3 0:0a900ff9a788 602 while(!win)
srigdon3 0:0a900ff9a788 603 {
srigdon3 0:0a900ff9a788 604 pickMOVE();
srigdon3 0:0a900ff9a788 605 }
srigdon3 0:0a900ff9a788 606 }
srigdon3 0:0a900ff9a788 607
srigdon3 0:0a900ff9a788 608 int main()
srigdon3 0:0a900ff9a788 609 {
srigdon3 0:0a900ff9a788 610 uLCD.cls();
srigdon3 0:0a900ff9a788 611 //uLCD.background_color(DGREY);
srigdon3 0:0a900ff9a788 612 uLCD.baudrate(BAUD_3000000);
srigdon3 0:0a900ff9a788 613 //int x=64,y=64,
srigdon3 0:0a900ff9a788 614 //int xy[2]={64,64};
srigdon3 0:0a900ff9a788 615 //Thread t1(thread1,&x1,&y1);
srigdon3 0:0a900ff9a788 616 initialize();
srigdon3 0:0a900ff9a788 617 Thread pm(pacMOVE);
srigdon3 0:0a900ff9a788 618 Thread bg(blueGHOST);
srigdon3 0:0a900ff9a788 619 //Thread clr(clear);
srigdon3 0:0a900ff9a788 620 //pixel = uLCD.read_pixel(128,128);
srigdon3 0:0a900ff9a788 621 //for(int k=0; k<10; k++){
srigdon3 0:0a900ff9a788 622 //i = rand();
srigdon3 0:0a900ff9a788 623 //uLCD.printf("rand = %d\n",rand());
srigdon3 0:0a900ff9a788 624 Thread::wait(5000);
srigdon3 0:0a900ff9a788 625
srigdon3 0:0a900ff9a788 626 while(!win)
srigdon3 0:0a900ff9a788 627 {
srigdon3 0:0a900ff9a788 628 checkWIN();
srigdon3 0:0a900ff9a788 629 Thread::wait(1000);
srigdon3 0:0a900ff9a788 630 }
srigdon3 0:0a900ff9a788 631 //uLCD.printf("WIN");
srigdon3 0:0a900ff9a788 632 Thread::wait(1000);
srigdon3 0:0a900ff9a788 633 if(lose)
srigdon3 0:0a900ff9a788 634 {
srigdon3 0:0a900ff9a788 635 uLCD.cls();
srigdon3 0:0a900ff9a788 636 uLCD.printf("Sorry\nGame Over");
srigdon3 0:0a900ff9a788 637 }
srigdon3 0:0a900ff9a788 638 else
srigdon3 0:0a900ff9a788 639 {
srigdon3 0:0a900ff9a788 640 uLCD.cls();
srigdon3 0:0a900ff9a788 641 //uLCD.locate(60,60);
srigdon3 0:0a900ff9a788 642 //uLCD.set_font_size(10,10);
srigdon3 0:0a900ff9a788 643 uLCD.printf("Congratulations!\nYou Won!");
srigdon3 0:0a900ff9a788 644 }
srigdon3 0:0a900ff9a788 645
srigdon3 0:0a900ff9a788 646 while(1){}
srigdon3 0:0a900ff9a788 647 }