Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Tue May 05 17:39:08 2015 +0000
Revision:
25:55331fbafc67
Parent:
24:410cba08be6b
Child:
26:4cfeb2c29326
Final Final version, ready to rock and roll !!!

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