Code for 4180 mini project
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
Fork of Pacman by
main.cpp@0:0a900ff9a788, 2014-03-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |