My take on the classic Pac man game. Using mbed LPC 1768 and Nokia 5110 LCD Analog joystick used to control direction

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Mon May 11 13:57:06 2015 +0000
Revision:
28:c0e3de1fd2a6
Parent:
27:c1e337f1b99f
Forked N5110 library;

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