Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Wed Apr 29 18:48:43 2015 +0000
Revision:
20:874b009fea11
Parent:
19:e2659a0b91fa
Child:
21:f2bcb2c399ab
Soundtrack now working ;

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