Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Tue Apr 28 16:07:28 2015 +0000
Revision:
19:e2659a0b91fa
Parent:
18:d0900678656a
Child:
20:874b009fea11
V4.0 Direction swap now implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13ks 16:237375c3fc62 1 /**
el13ks 16:237375c3fc62 2 @file main.cpp
el13ks 17:9a8a6516d63d 3
el13ks 16:237375c3fc62 4 @brief Program implementation
el13ks 16:237375c3fc62 5
el13ks 17:9a8a6516d63d 6 */
el13ks 17:9a8a6516d63d 7 #include "main.h"
el13ks 18:d0900678656a 8
el13ks 0:1c3f3fe862f2 9 void calibrateJoystick() // read default positions of the joystick to calibrate later readings
el13ks 0:1c3f3fe862f2 10 {
el13ks 0:1c3f3fe862f2 11 button.mode(PullDown);
el13ks 0:1c3f3fe862f2 12 // must not move during calibration
el13ks 0:1c3f3fe862f2 13 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13ks 0:1c3f3fe862f2 14 joystick.y0 = yPot;
el13ks 0:1c3f3fe862f2 15 }
el13ks 0:1c3f3fe862f2 16
el13ks 0:1c3f3fe862f2 17 void updateJoystick()
el13ks 0:1c3f3fe862f2 18 {
el13ks 0:1c3f3fe862f2 19
el13ks 0:1c3f3fe862f2 20 joystick.x = xPot - joystick.x0; // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
el13ks 0:1c3f3fe862f2 21 joystick.y = yPot - joystick.y0;
el13ks 0:1c3f3fe862f2 22 joystick.button = button; // read button state
el13ks 0:1c3f3fe862f2 23
el13ks 0:1c3f3fe862f2 24 // calculate direction depending on x,y values
el13ks 0:1c3f3fe862f2 25 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13ks 0:1c3f3fe862f2 26 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 27 joystick.direction = CENTRE;
el13ks 0:1c3f3fe862f2 28 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 29 joystick.direction = UP;
el13ks 0:1c3f3fe862f2 30 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 31 joystick.direction = DOWN;
el13ks 0:1c3f3fe862f2 32 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 33 joystick.direction = LEFT;
el13ks 0:1c3f3fe862f2 34 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 35 joystick.direction = RIGHT;
el13ks 0:1c3f3fe862f2 36 } else {
el13ks 0:1c3f3fe862f2 37 joystick.direction = UNKNOWN;
el13ks 0:1c3f3fe862f2 38 }
el13ks 0:1c3f3fe862f2 39
el13ks 0:1c3f3fe862f2 40 }
el13ks 0:1c3f3fe862f2 41
el13ks 15:6d258c667a00 42 void timerExpired() // ISR for timeout function
el13ks 12:3f4d9cb7dd8a 43 {
el13ks 15:6d258c667a00 44 timerflag=1;
el13ks 13:098319060433 45
el13ks 12:3f4d9cb7dd8a 46 }
el13ks 12:3f4d9cb7dd8a 47
el13ks 13:098319060433 48
el13ks 13:098319060433 49 void pressPause()// Interrupt Service Routine (ISR) for pause button
el13ks 13:098319060433 50 {
el13ks 13:098319060433 51 buttonflag=!buttonflag;// set button flag
el13ks 13:098319060433 52 }
el13ks 13:098319060433 53
el13ks 13:098319060433 54
el13ks 12:3f4d9cb7dd8a 55 void pause()
el13ks 12:3f4d9cb7dd8a 56 {
el13ks 15:6d258c667a00 57 timer.attach(&timerExpired,15.0);// Call timeout after 15 seconds
el13ks 19:e2659a0b91fa 58 Jbutton.rise(&pressPause); // event generated on rising edge
el13ks 13:098319060433 59 while (buttonflag) {
el13ks 15:6d258c667a00 60 lcd.clear();
el13ks 15:6d258c667a00 61 lcd.printString("Pause", 25,21);
el13ks 17:9a8a6516d63d 62 while (timerflag) {// Device goes into sleep and lcd is powered down after 15 seconds in pause menu
el13ks 13:098319060433 63 timer.detach();
el13ks 13:098319060433 64 lcd.turnOff();
el13ks 13:098319060433 65 Sleep();
el13ks 17:9a8a6516d63d 66 if (!buttonflag) { // Press button again to wake the device up
el13ks 15:6d258c667a00 67 timerflag=0;
el13ks 13:098319060433 68 lcd.init();
el13ks 15:6d258c667a00 69 buttonflag=0;
el13ks 13:098319060433 70 }
el13ks 15:6d258c667a00 71 }
el13ks 15:6d258c667a00 72 }
el13ks 13:098319060433 73
el13ks 15:6d258c667a00 74 }
el13ks 19:e2659a0b91fa 75 void drawPacman2()
el13ks 19:e2659a0b91fa 76 {
el13ks 19:e2659a0b91fa 77 if(joystick.direction == RIGHT) {
el13ks 19:e2659a0b91fa 78 lcd.setPixel(i,j);
el13ks 19:e2659a0b91fa 79 lcd.setPixel(i+1,j);
el13ks 19:e2659a0b91fa 80 lcd.setPixel(i+2,j);
el13ks 19:e2659a0b91fa 81 lcd.setPixel(i+3,j);
el13ks 19:e2659a0b91fa 82 lcd.setPixel(i-1,j);
el13ks 19:e2659a0b91fa 83 lcd.setPixel(i-2,j);
el13ks 19:e2659a0b91fa 84 lcd.setPixel(i-3,j);
el13ks 19:e2659a0b91fa 85 lcd.setPixel(i,j+1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 86 lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 87 lcd.setPixel(i+2,j+1);
el13ks 19:e2659a0b91fa 88 lcd.setPixel(i+3,j+1);
el13ks 19:e2659a0b91fa 89 lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 90 lcd.setPixel(i-2,j+1);
el13ks 19:e2659a0b91fa 91 lcd.setPixel(i-3,j+1);
el13ks 19:e2659a0b91fa 92 lcd.setPixel(i,j+2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 93 lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 94 lcd.setPixel(i+2,j+2);
el13ks 19:e2659a0b91fa 95 lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 96 lcd.setPixel(i-2,j+2);
el13ks 19:e2659a0b91fa 97 lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 98 lcd.setPixel(i,j+3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 99 lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 100 lcd.setPixel(i-2,j-1);
el13ks 19:e2659a0b91fa 101 lcd.setPixel(i-3,j-1);
el13ks 19:e2659a0b91fa 102 lcd.setPixel(i+3,j-1);
el13ks 19:e2659a0b91fa 103 lcd.setPixel(i+2,j-1);
el13ks 19:e2659a0b91fa 104 lcd.setPixel(i+2,j-2);
el13ks 19:e2659a0b91fa 105 lcd.setPixel(i-2,j-2);
el13ks 12:3f4d9cb7dd8a 106
el13ks 19:e2659a0b91fa 107
el13ks 19:e2659a0b91fa 108
el13ks 19:e2659a0b91fa 109
el13ks 19:e2659a0b91fa 110
el13ks 19:e2659a0b91fa 111
el13ks 19:e2659a0b91fa 112
el13ks 19:e2659a0b91fa 113
el13ks 10:cc0621fbe99b 114
el13ks 19:e2659a0b91fa 115
el13ks 19:e2659a0b91fa 116
el13ks 19:e2659a0b91fa 117
el13ks 19:e2659a0b91fa 118
el13ks 11:2fd81f59d7a7 119
el13ks 19:e2659a0b91fa 120 } else if(joystick.direction == LEFT) {
el13ks 19:e2659a0b91fa 121 lcd.setPixel(i,j);
el13ks 19:e2659a0b91fa 122 lcd.setPixel(i+1,j);
el13ks 19:e2659a0b91fa 123 lcd.setPixel(i+2,j);
el13ks 19:e2659a0b91fa 124 lcd.setPixel(i+3,j);
el13ks 19:e2659a0b91fa 125 lcd.setPixel(i-1,j);
el13ks 19:e2659a0b91fa 126 lcd.setPixel(i-2,j);
el13ks 19:e2659a0b91fa 127 lcd.setPixel(i-3,j);
el13ks 19:e2659a0b91fa 128 lcd.setPixel(i,j-1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 129 lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 130 lcd.setPixel(i+2,j+1);
el13ks 19:e2659a0b91fa 131 lcd.setPixel(i+3,j+1);
el13ks 19:e2659a0b91fa 132 lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 133 lcd.setPixel(i-2,j+1);
el13ks 19:e2659a0b91fa 134 lcd.setPixel(i-3,j+1);
el13ks 19:e2659a0b91fa 135 lcd.setPixel(i,j-2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 136 lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 137 lcd.setPixel(i+2,j+2);
el13ks 19:e2659a0b91fa 138 lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 139 lcd.setPixel(i-2,j+2);
el13ks 19:e2659a0b91fa 140 lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 141 lcd.setPixel(i,j-3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 142 lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down)
el13ks 19:e2659a0b91fa 143 lcd.setPixel(i-2,j-1);
el13ks 19:e2659a0b91fa 144 lcd.setPixel(i-3,j-1);
el13ks 19:e2659a0b91fa 145 lcd.setPixel(i+3,j-1);
el13ks 19:e2659a0b91fa 146 lcd.setPixel(i+2,j-1);
el13ks 19:e2659a0b91fa 147 lcd.setPixel(i+2,j-2);
el13ks 19:e2659a0b91fa 148 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 149
el13ks 19:e2659a0b91fa 150
el13ks 19:e2659a0b91fa 151
el13ks 19:e2659a0b91fa 152
el13ks 19:e2659a0b91fa 153
el13ks 19:e2659a0b91fa 154
el13ks 1:98cc4f4a20dc 155
el13ks 3:83c1d9cd97f1 156
el13ks 19:e2659a0b91fa 157 } else if(joystick.direction == UP) {
el13ks 19:e2659a0b91fa 158 lcd.setPixel(i,j);
el13ks 19:e2659a0b91fa 159 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 160 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 161 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 162 lcd.setPixel(i,j+1);
el13ks 19:e2659a0b91fa 163 lcd.setPixel(i,j+2);
el13ks 19:e2659a0b91fa 164 lcd.setPixel(i,j+3);
el13ks 19:e2659a0b91fa 165 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 166 lcd.setPixel(i,j-2);
el13ks 19:e2659a0b91fa 167 lcd.setPixel(i,j-3);
el13ks 19:e2659a0b91fa 168 lcd.setPixel(i-1,j+3);
el13ks 19:e2659a0b91fa 169 lcd.setPixel(i+1,j+3);
el13ks 19:e2659a0b91fa 170 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 171 lcd.setPixel(i-2,j+2);
el13ks 19:e2659a0b91fa 172 lcd.setPixel(i-1,j+2);
el13ks 19:e2659a0b91fa 173 lcd.setPixel(i+2,j+2);
el13ks 19:e2659a0b91fa 174 lcd.setPixel(i+1,j+2);
el13ks 19:e2659a0b91fa 175 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 176 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 177 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 178 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 179 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 180 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 181 lcd.setPixel(i-1,j-2);
el13ks 19:e2659a0b91fa 182 lcd.setPixel(i-2,j-2);
el13ks 19:e2659a0b91fa 183 lcd.setPixel(i+1,j-2);
el13ks 19:e2659a0b91fa 184 lcd.setPixel(i+2,j-2);
el13ks 19:e2659a0b91fa 185 lcd.setPixel(i+1,j-3);
el13ks 19:e2659a0b91fa 186 lcd.setPixel(i-1,j-3);
el13ks 1:98cc4f4a20dc 187
el13ks 19:e2659a0b91fa 188
el13ks 19:e2659a0b91fa 189
el13ks 19:e2659a0b91fa 190
el13ks 19:e2659a0b91fa 191
el13ks 19:e2659a0b91fa 192
el13ks 3:83c1d9cd97f1 193
el13ks 3:83c1d9cd97f1 194
el13ks 19:e2659a0b91fa 195 } else if (joystick.direction == DOWN) {
el13ks 19:e2659a0b91fa 196 lcd.setPixel(i,j);
el13ks 19:e2659a0b91fa 197 lcd.setPixel(i,j+1);
el13ks 19:e2659a0b91fa 198 lcd.setPixel(i,j+2);
el13ks 19:e2659a0b91fa 199 lcd.setPixel(i,j+3);
el13ks 19:e2659a0b91fa 200 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 201 lcd.setPixel(i,j-2);
el13ks 19:e2659a0b91fa 202 lcd.setPixel(i,j-3);
el13ks 19:e2659a0b91fa 203 lcd.setPixel(i-1,j+3);
el13ks 19:e2659a0b91fa 204 lcd.setPixel(i+1,j+3);
el13ks 19:e2659a0b91fa 205 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 206 lcd.setPixel(i-2,j+2);
el13ks 19:e2659a0b91fa 207 lcd.setPixel(i-1,j+2);
el13ks 19:e2659a0b91fa 208 lcd.setPixel(i+2,j+2);
el13ks 19:e2659a0b91fa 209 lcd.setPixel(i+1,j+2);
el13ks 19:e2659a0b91fa 210 lcd.setPixel(i-1,j-2);
el13ks 19:e2659a0b91fa 211 lcd.setPixel(i-2,j-2);
el13ks 19:e2659a0b91fa 212 lcd.setPixel(i+1,j-2);
el13ks 19:e2659a0b91fa 213 lcd.setPixel(i+2,j-2);
el13ks 19:e2659a0b91fa 214 lcd.setPixel(i+1,j-3);
el13ks 19:e2659a0b91fa 215 lcd.setPixel(i-1,j-3);
el13ks 19:e2659a0b91fa 216 lcd.setPixel(i+1,j);//Direction dependent(left and right)
el13ks 19:e2659a0b91fa 217 lcd.setPixel(i+2,j);//Direction dependent(left and right)
el13ks 19:e2659a0b91fa 218 lcd.setPixel(i+3,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 219 lcd.setPixel(i+1,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 220 lcd.setPixel(i+2,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 221 lcd.setPixel(i+3,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 222 lcd.setPixel(i+1,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 223 lcd.setPixel(i+2,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 224 lcd.setPixel(i+3,j-1);//Direction dependent (left and right)
el13ks 5:61c3bbef19f0 225
el13ks 19:e2659a0b91fa 226
el13ks 11:2fd81f59d7a7 227
el13ks 11:2fd81f59d7a7 228
el13ks 19:e2659a0b91fa 229
el13ks 19:e2659a0b91fa 230
el13ks 19:e2659a0b91fa 231
el13ks 19:e2659a0b91fa 232
el13ks 19:e2659a0b91fa 233 } else {
el13ks 19:e2659a0b91fa 234 lcd.setPixel(i,j);
el13ks 19:e2659a0b91fa 235 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 236 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 237 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 238 lcd.setPixel(i,j+1);
el13ks 19:e2659a0b91fa 239 lcd.setPixel(i,j+2);
el13ks 19:e2659a0b91fa 240 lcd.setPixel(i,j+3);
el13ks 19:e2659a0b91fa 241 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 242 lcd.setPixel(i,j-2);
el13ks 19:e2659a0b91fa 243 lcd.setPixel(i,j-3);
el13ks 19:e2659a0b91fa 244 lcd.setPixel(i-1,j+3);
el13ks 19:e2659a0b91fa 245 lcd.setPixel(i+1,j+3);
el13ks 19:e2659a0b91fa 246 lcd.setPixel(i,j-1);
el13ks 19:e2659a0b91fa 247 lcd.setPixel(i-2,j+2);
el13ks 19:e2659a0b91fa 248 lcd.setPixel(i-1,j+2);
el13ks 19:e2659a0b91fa 249 lcd.setPixel(i+2,j+2);
el13ks 19:e2659a0b91fa 250 lcd.setPixel(i+1,j+2);
el13ks 19:e2659a0b91fa 251 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 252 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 253 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 254 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 255 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 256 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 19:e2659a0b91fa 257 lcd.setPixel(i-1,j-2);
el13ks 19:e2659a0b91fa 258 lcd.setPixel(i-2,j-2);
el13ks 19:e2659a0b91fa 259 lcd.setPixel(i+1,j-2);
el13ks 19:e2659a0b91fa 260 lcd.setPixel(i+2,j-2);
el13ks 19:e2659a0b91fa 261 lcd.setPixel(i+1,j-3);
el13ks 19:e2659a0b91fa 262 lcd.setPixel(i-1,j-3);
el13ks 13:098319060433 263 }
el13ks 6:af4d3c5a9d43 264 }
el13ks 11:2fd81f59d7a7 265
el13ks 17:9a8a6516d63d 266
el13ks 17:9a8a6516d63d 267
el13ks 19:e2659a0b91fa 268 void drawGhost()
el13ks 6:af4d3c5a9d43 269 {
el13ks 19:e2659a0b91fa 270 lcd.setPixel(x,y);
el13ks 19:e2659a0b91fa 271 lcd.setPixel(x+2,y);
el13ks 19:e2659a0b91fa 272 lcd.setPixel(x-2,y);
el13ks 19:e2659a0b91fa 273 lcd.setPixel(x,y+1);
el13ks 19:e2659a0b91fa 274 lcd.setPixel(x,y-1);
el13ks 19:e2659a0b91fa 275 lcd.setPixel(x-1,y-1);
el13ks 19:e2659a0b91fa 276 lcd.setPixel(x-2,y-1);
el13ks 19:e2659a0b91fa 277 lcd.setPixel(x+1,y-1);
el13ks 19:e2659a0b91fa 278 lcd.setPixel(x+2,y-1);
el13ks 19:e2659a0b91fa 279 lcd.setPixel(x+2,y+1);
el13ks 19:e2659a0b91fa 280 lcd.setPixel(x+1,y+1);
el13ks 19:e2659a0b91fa 281 lcd.setPixel(x-1,y+1);
el13ks 19:e2659a0b91fa 282 lcd.setPixel(x-2,y+1);
el13ks 19:e2659a0b91fa 283 lcd.setPixel(x+2,y+2);
el13ks 19:e2659a0b91fa 284 lcd.setPixel(x+2,y+2);
el13ks 19:e2659a0b91fa 285 lcd.setPixel(x-1,y+2);
el13ks 19:e2659a0b91fa 286 lcd.setPixel(x+1,y+2);
el13ks 19:e2659a0b91fa 287 lcd.setPixel(x,y-2);
el13ks 19:e2659a0b91fa 288 lcd.setPixel(x+2,y-2);
el13ks 19:e2659a0b91fa 289 lcd.setPixel(x-1,y-2);
el13ks 19:e2659a0b91fa 290 lcd.setPixel(x+1,y-2);
el13ks 19:e2659a0b91fa 291 lcd.setPixel(x-2,y-2);
el13ks 19:e2659a0b91fa 292 lcd.setPixel(x-2,y+2);
el13ks 5:61c3bbef19f0 293 }
el13ks 5:61c3bbef19f0 294
el13ks 17:9a8a6516d63d 295
el13ks 17:9a8a6516d63d 296
el13ks 19:e2659a0b91fa 297
el13ks 19:e2659a0b91fa 298
el13ks 4:75c7277a1b88 299
el13ks 19:e2659a0b91fa 300
el13ks 19:e2659a0b91fa 301
el13ks 6:af4d3c5a9d43 302 void drawPacman()
el13ks 6:af4d3c5a9d43 303 {
el13ks 6:af4d3c5a9d43 304 if(joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 305 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 306 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 307 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 308 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 309 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 310 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 311 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 312 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 313 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 314 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 315 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 316 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 317 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 318 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 319 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 320 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 321 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 322 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 323 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 324 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 325 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 326 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 327 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 328 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 329 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 330 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 331 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 332 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 333 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 334
el13ks 4:75c7277a1b88 335
el13ks 6:af4d3c5a9d43 336 } else if(joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 337 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 338 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 339 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 340 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 341 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 342 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 343 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 344 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 345 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 346 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 347 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 348 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 349 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 350 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 351 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 352 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 353 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 354 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 355 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 356 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 357 lcd.setPixel(i+1,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 358 lcd.setPixel(i+2,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 359 lcd.setPixel(i+3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 360 lcd.setPixel(i+1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 361 lcd.setPixel(i+2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 362 lcd.setPixel(i+3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 363 lcd.setPixel(i+1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 364 lcd.setPixel(i+2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 365 lcd.setPixel(i+3,j-1);//Direction dependent (left and right)
el13ks 4:75c7277a1b88 366
el13ks 6:af4d3c5a9d43 367 } else if(joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 368 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 369 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 370 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 371 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 372 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 373 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 374 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 375 lcd.setPixel(i,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 376 lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 377 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 378 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 379 lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 380 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 381 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 382 lcd.setPixel(i,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 383 lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 384 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 385 lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 386 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 387 lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 388 lcd.setPixel(i,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 389 lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 390 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 391 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 392 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 393 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 394 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 395 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 396
el13ks 3:83c1d9cd97f1 397
el13ks 6:af4d3c5a9d43 398 } else if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 399 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 400 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 401 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 402 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 403 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 404 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 405 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 406 lcd.setPixel(i,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 407 lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 408 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 409 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 410 lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 411 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 412 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 413 lcd.setPixel(i,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 414 lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 415 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 416 lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 417 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 418 lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 419 lcd.setPixel(i,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 420 lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 421 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 422 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 423 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 424 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 425 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 426 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 427
el13ks 6:af4d3c5a9d43 428 } else {
el13ks 6:af4d3c5a9d43 429 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 430 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 431 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 432 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 433 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 434 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 435 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 436 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 437 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 438 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 439 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 440 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 441 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 442 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 443 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 444 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 445 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 446 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 447 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 448 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 449 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 450 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 451 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 452 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 453 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 454 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 455 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 456 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 457 lcd.setPixel(i-1,j-3);
el13ks 0:1c3f3fe862f2 458 }
el13ks 6:af4d3c5a9d43 459 }
el13ks 6:af4d3c5a9d43 460
el13ks 6:af4d3c5a9d43 461
el13ks 16:237375c3fc62 462
el13ks 19:e2659a0b91fa 463
el13ks 19:e2659a0b91fa 464
el13ks 19:e2659a0b91fa 465
el13ks 19:e2659a0b91fa 466
el13ks 19:e2659a0b91fa 467
el13ks 19:e2659a0b91fa 468
el13ks 19:e2659a0b91fa 469
el13ks 19:e2659a0b91fa 470
el13ks 19:e2659a0b91fa 471
el13ks 19:e2659a0b91fa 472
el13ks 19:e2659a0b91fa 473
el13ks 19:e2659a0b91fa 474
el13ks 19:e2659a0b91fa 475
el13ks 19:e2659a0b91fa 476
el13ks 19:e2659a0b91fa 477
el13ks 19:e2659a0b91fa 478
el13ks 19:e2659a0b91fa 479
el13ks 19:e2659a0b91fa 480
el13ks 19:e2659a0b91fa 481
el13ks 19:e2659a0b91fa 482
el13ks 19:e2659a0b91fa 483
el13ks 19:e2659a0b91fa 484
el13ks 19:e2659a0b91fa 485
el13ks 19:e2659a0b91fa 486 void pressSwap() // ISR to swap direction of joystick
el13ks 19:e2659a0b91fa 487 {
el13ks 19:e2659a0b91fa 488
el13ks 19:e2659a0b91fa 489
el13ks 19:e2659a0b91fa 490 buttonflag1=!buttonflag1;
el13ks 19:e2659a0b91fa 491 }
el13ks 19:e2659a0b91fa 492
el13ks 19:e2659a0b91fa 493
el13ks 19:e2659a0b91fa 494
el13ks 19:e2659a0b91fa 495
el13ks 19:e2659a0b91fa 496 void directionSwap()
el13ks 19:e2659a0b91fa 497 {
el13ks 19:e2659a0b91fa 498
el13ks 19:e2659a0b91fa 499 if (joystick.direction == UP) {
el13ks 19:e2659a0b91fa 500 i++;
el13ks 19:e2659a0b91fa 501 }
el13ks 19:e2659a0b91fa 502 if (joystick.direction == DOWN) {
el13ks 19:e2659a0b91fa 503 i--;
el13ks 19:e2659a0b91fa 504 }
el13ks 19:e2659a0b91fa 505 if (joystick.direction == LEFT) {
el13ks 19:e2659a0b91fa 506 j++;
el13ks 19:e2659a0b91fa 507 }
el13ks 19:e2659a0b91fa 508 if (joystick.direction == RIGHT) {
el13ks 19:e2659a0b91fa 509 j--;
el13ks 19:e2659a0b91fa 510 }
el13ks 19:e2659a0b91fa 511 }
el13ks 19:e2659a0b91fa 512
el13ks 19:e2659a0b91fa 513 void swapCheck()
el13ks 19:e2659a0b91fa 514 {
el13ks 19:e2659a0b91fa 515 button.rise(&pressSwap); // event generated on rising edge
el13ks 19:e2659a0b91fa 516 if(buttonflag1) {
el13ks 19:e2659a0b91fa 517 directionSwap();
el13ks 19:e2659a0b91fa 518 drawPacman2();
el13ks 19:e2659a0b91fa 519 } else {
el13ks 19:e2659a0b91fa 520 Joystickcheck();
el13ks 19:e2659a0b91fa 521 drawPacman();
el13ks 19:e2659a0b91fa 522 }
el13ks 19:e2659a0b91fa 523
el13ks 19:e2659a0b91fa 524
el13ks 19:e2659a0b91fa 525
el13ks 19:e2659a0b91fa 526 }
el13ks 19:e2659a0b91fa 527
el13ks 19:e2659a0b91fa 528
el13ks 19:e2659a0b91fa 529 void drawMap()
el13ks 19:e2659a0b91fa 530 {
el13ks 19:e2659a0b91fa 531
el13ks 19:e2659a0b91fa 532 lcd.drawRect(39,0,3,10,1);//x-coordinate (top-left),y-coordinate(top-left), width, height, fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline)
el13ks 19:e2659a0b91fa 533 lcd.drawRect(40,40,2,7,1);// T-shaped obstacle Vertical
el13ks 19:e2659a0b91fa 534 lcd.drawRect(7,8,23,2,1);// Left hand "Hook" shaped obstacle horizontal
el13ks 19:e2659a0b91fa 535 lcd.drawRect(51,8,24,2,1);//Right hand "Hook" shaped obstacle horizontal
el13ks 19:e2659a0b91fa 536 lcd.drawRect(0,18,3,29,1);// left hand border
el13ks 19:e2659a0b91fa 537 lcd.drawRect(78,18,5,29,1);// Right hand border
el13ks 19:e2659a0b91fa 538 lcd.drawRect(11,18,3,21,1);//Left hand C shape obstacle vertical
el13ks 19:e2659a0b91fa 539 lcd.drawRect(27,11,3,18,1);// Left hand "Hook" shaped obstacle vertical
el13ks 19:e2659a0b91fa 540 lcd.drawRect(35,37,12,2,1);//T-shaped obstacle Horizontal
el13ks 19:e2659a0b91fa 541 lcd.drawRect(67,18,3,21,1);// Right hand C shaped obstacle vertical
el13ks 19:e2659a0b91fa 542 lcd.drawRect(51,11,3,18,1);//Right hand "Hook" shaped obstacle vertical
el13ks 19:e2659a0b91fa 543 lcd.drawRect(38,18,5,11,1);// Central block
el13ks 19:e2659a0b91fa 544 lcd.drawRect(15,18,4,2,1);//Left hand C shape obstacle horizontal
el13ks 19:e2659a0b91fa 545 lcd.drawRect(22,27,5,2,1);//Left hand "Hook" shaped obstacle
el13ks 19:e2659a0b91fa 546 lcd.drawRect(15,37,4,2,1);//Left hand C shape obstacle
el13ks 19:e2659a0b91fa 547 lcd.drawRect(55,27,3,2,1);// Right hand "Hook" shaped obstacle
el13ks 19:e2659a0b91fa 548 lcd.drawRect(63,18,4,2,1);//Right hand C shape obstacle horizontal
el13ks 19:e2659a0b91fa 549 lcd.drawRect(63,37,4,2,1);//Right hand C shape obstacle
el13ks 19:e2659a0b91fa 550
el13ks 19:e2659a0b91fa 551 }
el13ks 19:e2659a0b91fa 552
el13ks 19:e2659a0b91fa 553 void checkRight()
el13ks 16:237375c3fc62 554 {
el13ks 19:e2659a0b91fa 555
el13ks 19:e2659a0b91fa 556
el13ks 19:e2659a0b91fa 557 int r = 0;//Variable for right movement check
el13ks 19:e2659a0b91fa 558 if(lcd.getPixel (i+3,j))//Check 4 pixels to the right
el13ks 19:e2659a0b91fa 559 r++;
el13ks 19:e2659a0b91fa 560 if(lcd.getPixel (i+4,j))//Check 5 pixels to the right
el13ks 19:e2659a0b91fa 561 r++;
el13ks 19:e2659a0b91fa 562 if (r==2) { // Condition for solid obstacles
el13ks 19:e2659a0b91fa 563 i--;
el13ks 19:e2659a0b91fa 564
el13ks 19:e2659a0b91fa 565 }
el13ks 19:e2659a0b91fa 566 }
el13ks 19:e2659a0b91fa 567 void checkLeft()
el13ks 19:e2659a0b91fa 568 {
el13ks 19:e2659a0b91fa 569 int l = 0 ; // Variable for left movement check
el13ks 19:e2659a0b91fa 570 if(lcd.getPixel (i-3,j))//Check 4 pixels to the left
el13ks 19:e2659a0b91fa 571 l++;
el13ks 19:e2659a0b91fa 572 if(lcd.getPixel (i-4,j))//Check 5 pixels to the left
el13ks 19:e2659a0b91fa 573 l++;
el13ks 19:e2659a0b91fa 574 if (l==2) { // Condition for solid obstacles
el13ks 19:e2659a0b91fa 575 i++;
el13ks 19:e2659a0b91fa 576
el13ks 19:e2659a0b91fa 577
el13ks 19:e2659a0b91fa 578 }
el13ks 19:e2659a0b91fa 579 }
el13ks 19:e2659a0b91fa 580 void checkUp()
el13ks 19:e2659a0b91fa 581 {
el13ks 19:e2659a0b91fa 582 int u=0;
el13ks 19:e2659a0b91fa 583 if(lcd.getPixel (i,j-3))//Check 4 pixels above
el13ks 19:e2659a0b91fa 584 u++;
el13ks 19:e2659a0b91fa 585 if(lcd.getPixel (i,j-4))//Check 5 pixels above
el13ks 19:e2659a0b91fa 586 u++;
el13ks 19:e2659a0b91fa 587 if(lcd.getPixel (i+1,j-4))
el13ks 19:e2659a0b91fa 588 u++;
el13ks 19:e2659a0b91fa 589 if(lcd.getPixel (i-1,j-4))
el13ks 19:e2659a0b91fa 590 u++;
el13ks 19:e2659a0b91fa 591 if(lcd.getPixel (i-2,j-4))
el13ks 19:e2659a0b91fa 592 u++;
el13ks 19:e2659a0b91fa 593 if (u>=4) { // Condition for solid obstacles
el13ks 19:e2659a0b91fa 594 j++;
el13ks 19:e2659a0b91fa 595 }
el13ks 16:237375c3fc62 596 }
el13ks 19:e2659a0b91fa 597
el13ks 19:e2659a0b91fa 598 void checkDown()
el13ks 19:e2659a0b91fa 599 {
el13ks 19:e2659a0b91fa 600 int d=0;
el13ks 19:e2659a0b91fa 601 if(lcd.getPixel (i,j+3))//Check 4 pixels below
el13ks 19:e2659a0b91fa 602 d++;
el13ks 19:e2659a0b91fa 603 if(lcd.getPixel (i,j+4))//Check 5 pixels below
el13ks 19:e2659a0b91fa 604 d++;
el13ks 19:e2659a0b91fa 605 if(lcd.getPixel (i+1,j+4))
el13ks 19:e2659a0b91fa 606 d++;
el13ks 19:e2659a0b91fa 607 if(lcd.getPixel (i-1,j+4))
el13ks 19:e2659a0b91fa 608 d++;
el13ks 19:e2659a0b91fa 609 if(lcd.getPixel (i-2,j+4))
el13ks 19:e2659a0b91fa 610 d++;
el13ks 19:e2659a0b91fa 611 if (d>=4) { // Condition for solid obstacles
el13ks 19:e2659a0b91fa 612 j--;
el13ks 19:e2659a0b91fa 613 }
el13ks 19:e2659a0b91fa 614 }
el13ks 19:e2659a0b91fa 615
el13ks 19:e2659a0b91fa 616
el13ks 19:e2659a0b91fa 617 void drawCoin(void)
el13ks 19:e2659a0b91fa 618 {
el13ks 19:e2659a0b91fa 619 for (int k=0; k<28; k++) {
el13ks 19:e2659a0b91fa 620 lcd.drawCircle(coins[k][0], coins[k][1],2,0);
el13ks 19:e2659a0b91fa 621 }
el13ks 19:e2659a0b91fa 622 }
el13ks 19:e2659a0b91fa 623
el13ks 19:e2659a0b91fa 624
el13ks 19:e2659a0b91fa 625
el13ks 19:e2659a0b91fa 626 void checkCoin()
el13ks 19:e2659a0b91fa 627 {
el13ks 19:e2659a0b91fa 628 for (int c=0; c<28; c++) {
el13ks 19:e2659a0b91fa 629 if(i==coins[c][0]&& j==coins[c][1]) {
el13ks 19:e2659a0b91fa 630 coins[c][0]=90;
el13ks 19:e2659a0b91fa 631 coins[c][1]=50;
el13ks 19:e2659a0b91fa 632 w--;
el13ks 19:e2659a0b91fa 633 }
el13ks 19:e2659a0b91fa 634 }
el13ks 19:e2659a0b91fa 635 }
el13ks 19:e2659a0b91fa 636
el13ks 19:e2659a0b91fa 637
el13ks 19:e2659a0b91fa 638
el13ks 19:e2659a0b91fa 639 void Joystickcheck()
el13ks 19:e2659a0b91fa 640 {
el13ks 19:e2659a0b91fa 641 if (joystick.direction == UP) {
el13ks 19:e2659a0b91fa 642 j--;
el13ks 19:e2659a0b91fa 643 }
el13ks 19:e2659a0b91fa 644 if (joystick.direction == DOWN) {
el13ks 19:e2659a0b91fa 645 j++;
el13ks 19:e2659a0b91fa 646 }
el13ks 19:e2659a0b91fa 647 if (joystick.direction == LEFT) {
el13ks 19:e2659a0b91fa 648 i--;
el13ks 19:e2659a0b91fa 649 }
el13ks 19:e2659a0b91fa 650 if (joystick.direction == RIGHT) {
el13ks 19:e2659a0b91fa 651 i++;
el13ks 19:e2659a0b91fa 652 }
el13ks 19:e2659a0b91fa 653
el13ks 19:e2659a0b91fa 654 }
el13ks 19:e2659a0b91fa 655
el13ks 16:237375c3fc62 656 void Boundarycheck()// Set boundary conditions so that ghost and pacman cannot move off screen
el13ks 6:af4d3c5a9d43 657 {
el13ks 6:af4d3c5a9d43 658 if (i<3) {
el13ks 6:af4d3c5a9d43 659 i=3;
el13ks 6:af4d3c5a9d43 660 }
el13ks 6:af4d3c5a9d43 661 if (j<3) {
el13ks 6:af4d3c5a9d43 662 j=3;
el13ks 6:af4d3c5a9d43 663 }
el13ks 6:af4d3c5a9d43 664 if (j>44) {
el13ks 6:af4d3c5a9d43 665 j=44;
el13ks 6:af4d3c5a9d43 666 }
el13ks 6:af4d3c5a9d43 667 if (i>80) {
el13ks 6:af4d3c5a9d43 668 i=80;
el13ks 6:af4d3c5a9d43 669 }
el13ks 6:af4d3c5a9d43 670 }
el13ks 6:af4d3c5a9d43 671
el13ks 15:6d258c667a00 672
el13ks 17:9a8a6516d63d 673 void winningcondition()// Player wins if all coins are eaten
el13ks 16:237375c3fc62 674 {
el13ks 17:9a8a6516d63d 675 if(w==0) {
el13ks 16:237375c3fc62 676 win=true;
el13ks 15:6d258c667a00 677 }
el13ks 16:237375c3fc62 678 }
el13ks 16:237375c3fc62 679
el13ks 17:9a8a6516d63d 680 void losingcondition()//Player loses if pacman is eaten by ghost
el13ks 16:237375c3fc62 681 {
el13ks 16:237375c3fc62 682 if (i==x && j==y) {
el13ks 16:237375c3fc62 683 win = false;
el13ks 16:237375c3fc62 684 lose = true;
el13ks 16:237375c3fc62 685 }
el13ks 16:237375c3fc62 686 }
el13ks 16:237375c3fc62 687
el13ks 16:237375c3fc62 688
el13ks 6:af4d3c5a9d43 689 int main()
el13ks 6:af4d3c5a9d43 690 {
el13ks 6:af4d3c5a9d43 691
el13ks 6:af4d3c5a9d43 692 lcd.init();
el13ks 6:af4d3c5a9d43 693 calibrateJoystick(); // get centred values of joystick
el13ks 6:af4d3c5a9d43 694 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
el13ks 13:098319060433 695 PHY_PowerDown();
el13ks 13:098319060433 696
el13ks 16:237375c3fc62 697 while(win==false&& lose==false) {
el13ks 12:3f4d9cb7dd8a 698 lcd.setBrightness(bright);
el13ks 6:af4d3c5a9d43 699 lcd.clear();
el13ks 12:3f4d9cb7dd8a 700 pause();
el13ks 15:6d258c667a00 701 winningcondition();
el13ks 16:237375c3fc62 702 losingcondition();
el13ks 19:e2659a0b91fa 703
el13ks 6:af4d3c5a9d43 704 drawMap();
el13ks 6:af4d3c5a9d43 705 drawCoin();
el13ks 16:237375c3fc62 706 drawGhost();
el13ks 6:af4d3c5a9d43 707 checkRight();
el13ks 6:af4d3c5a9d43 708 checkLeft();
el13ks 6:af4d3c5a9d43 709 checkDown();
el13ks 6:af4d3c5a9d43 710 checkUp();
el13ks 19:e2659a0b91fa 711
el13ks 6:af4d3c5a9d43 712 Boundarycheck();
el13ks 19:e2659a0b91fa 713 swapCheck();
el13ks 6:af4d3c5a9d43 714 checkCoin();
el13ks 9:d36fed674428 715 lcd.refresh();
el13ks 10:cc0621fbe99b 716 wait_ms(35);
el13ks 11:2fd81f59d7a7 717
el13ks 6:af4d3c5a9d43 718 }
el13ks 16:237375c3fc62 719 if (win==true) {
el13ks 15:6d258c667a00 720 lcd.clear();
el13ks 17:9a8a6516d63d 721 lcd.printString("Yay!", 25,21);
el13ks 16:237375c3fc62 722 }
el13ks 16:237375c3fc62 723 if (lose==true) {
el13ks 16:237375c3fc62 724 lcd.clear();
el13ks 16:237375c3fc62 725 lcd.printString("Game Over", 15,10);
el13ks 16:237375c3fc62 726
el13ks 16:237375c3fc62 727 }
el13ks 15:6d258c667a00 728 }
el13ks 15:6d258c667a00 729