Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Tue Apr 28 13:55:09 2015 +0000
Revision:
17:9a8a6516d63d
Parent:
16:237375c3fc62
Child:
18:d0900678656a
Doxygen template included. Coins system redone ;

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 0:1c3f3fe862f2 8 #include "mbed.h"
el13ks 0:1c3f3fe862f2 9 #include "N5110.h"
el13ks 16:237375c3fc62 10 #define DIRECTION_TOLERANCE 0.2// Tolerance of Joystick
el13ks 13:098319060433 11 #include "tone.h"
el13ks 13:098319060433 12 #define PI 3.14159265359
el13ks 13:098319060433 13 #include "PowerControl/PowerControl.h"
el13ks 13:098319060433 14 #include "PowerControl/EthernetPowerControl.h"
el13ks 0:1c3f3fe862f2 15 BusOut myleds(p24,p23,p22); //External LEDS
el13ks 17:9a8a6516d63d 16 volatile bool win= false;
el13ks 16:237375c3fc62 17 volatile bool lose= false;
el13ks 0:1c3f3fe862f2 18 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //PWR, SCE, RST, DC, MOSI, SCLK, LED
el13ks 12:3f4d9cb7dd8a 19 AnalogIn bright(p20);//Pot to adjust brightness
el13ks 16:237375c3fc62 20 Timeout timer; //Create timeout object
el13ks 12:3f4d9cb7dd8a 21 DigitalIn Jbutton(p17);// Joystick Button
el13ks 0:1c3f3fe862f2 22 AnalogIn xPot(p15);// Joystick x-direction
el13ks 0:1c3f3fe862f2 23 AnalogIn yPot(p16);// Joystick y-direction
el13ks 16:237375c3fc62 24 InterruptIn button(p18);//Pause button
el13ks 16:237375c3fc62 25 Ticker pollJoystick; // timer to regularly read the joystick
el13ks 3:83c1d9cd97f1 26 int i=3; // Pacman's starting position
el13ks 5:61c3bbef19f0 27 int j = 3;
el13ks 13:098319060433 28 int buttonflag=0; // flag for pause button
el13ks 16:237375c3fc62 29 int x=67; // Ghost starting position
el13ks 16:237375c3fc62 30 int y = 44;
el13ks 17:9a8a6516d63d 31 int timerflag=0;// flag for timeout function
el13ks 17:9a8a6516d63d 32 int w=30;// winning condition variable
el13ks 17:9a8a6516d63d 33
el13ks 17:9a8a6516d63d 34
el13ks 17:9a8a6516d63d 35
el13ks 17:9a8a6516d63d 36 int coins[30][2] = { // array for location of coins
el13ks 17:9a8a6516d63d 37 {10,3},{22,3},{35,3},{47,3},{65,3},{80,3},
el13ks 17:9a8a6516d63d 38 {41,14},
el13ks 17:9a8a6516d63d 39 {3,15},{15,15},{65,15},{80,15},
el13ks 17:9a8a6516d63d 40 {7,24},{19,24},{34,24},{47,24},{62,24},{74,24},
el13ks 17:9a8a6516d63d 41 {7,33},{23,33},{41,33},{61,33,{74,33}
el13ks 17:9a8a6516d63d 42 {7,44},{21,44},{35,44},{47,44},{61,44},{74,44}
el13ks 17:9a8a6516d63d 43 };
el13ks 17:9a8a6516d63d 44
el13ks 17:9a8a6516d63d 45
el13ks 17:9a8a6516d63d 46
el13ks 17:9a8a6516d63d 47
el13ks 6:af4d3c5a9d43 48
el13ks 1:98cc4f4a20dc 49
el13ks 0:1c3f3fe862f2 50 enum DirectionName { // create enumerated type (0,1,2,3 etc. for direction)
el13ks 0:1c3f3fe862f2 51 UP, // could be extended for diagonals etc.
el13ks 0:1c3f3fe862f2 52 DOWN,
el13ks 0:1c3f3fe862f2 53 LEFT,
el13ks 0:1c3f3fe862f2 54 RIGHT,
el13ks 0:1c3f3fe862f2 55 CENTRE,
el13ks 0:1c3f3fe862f2 56 UNKNOWN
el13ks 0:1c3f3fe862f2 57 };
el13ks 0:1c3f3fe862f2 58
el13ks 0:1c3f3fe862f2 59 typedef struct JoyStick Joystick; // struct for Joystick
el13ks 0:1c3f3fe862f2 60 struct JoyStick {
el13ks 0:1c3f3fe862f2 61 float x; // current x value
el13ks 0:1c3f3fe862f2 62 float x0; // 'centred' x value
el13ks 0:1c3f3fe862f2 63 float y; // current y value
el13ks 0:1c3f3fe862f2 64 float y0; // 'centred' y value
el13ks 0:1c3f3fe862f2 65 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13ks 0:1c3f3fe862f2 66 DirectionName direction; // current direction
el13ks 0:1c3f3fe862f2 67 };
el13ks 0:1c3f3fe862f2 68
el13ks 0:1c3f3fe862f2 69 Joystick joystick; // create struct variable
el13ks 0:1c3f3fe862f2 70
el13ks 0:1c3f3fe862f2 71
el13ks 0:1c3f3fe862f2 72 void calibrateJoystick() // read default positions of the joystick to calibrate later readings
el13ks 0:1c3f3fe862f2 73 {
el13ks 0:1c3f3fe862f2 74 button.mode(PullDown);
el13ks 0:1c3f3fe862f2 75 // must not move during calibration
el13ks 0:1c3f3fe862f2 76 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13ks 0:1c3f3fe862f2 77 joystick.y0 = yPot;
el13ks 0:1c3f3fe862f2 78 }
el13ks 0:1c3f3fe862f2 79
el13ks 0:1c3f3fe862f2 80 void updateJoystick()
el13ks 0:1c3f3fe862f2 81 {
el13ks 0:1c3f3fe862f2 82
el13ks 0:1c3f3fe862f2 83 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 84 joystick.y = yPot - joystick.y0;
el13ks 0:1c3f3fe862f2 85 joystick.button = button; // read button state
el13ks 0:1c3f3fe862f2 86
el13ks 0:1c3f3fe862f2 87 // calculate direction depending on x,y values
el13ks 0:1c3f3fe862f2 88 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13ks 0:1c3f3fe862f2 89 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 90 joystick.direction = CENTRE;
el13ks 0:1c3f3fe862f2 91 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 92 joystick.direction = UP;
el13ks 0:1c3f3fe862f2 93 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 94 joystick.direction = DOWN;
el13ks 0:1c3f3fe862f2 95 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 96 joystick.direction = LEFT;
el13ks 0:1c3f3fe862f2 97 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 98 joystick.direction = RIGHT;
el13ks 0:1c3f3fe862f2 99 } else {
el13ks 0:1c3f3fe862f2 100 joystick.direction = UNKNOWN;
el13ks 0:1c3f3fe862f2 101 }
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 13:098319060433 108
el13ks 12:3f4d9cb7dd8a 109 }
el13ks 12:3f4d9cb7dd8a 110
el13ks 13:098319060433 111
el13ks 13:098319060433 112 void pressPause()// Interrupt Service Routine (ISR) for pause button
el13ks 13:098319060433 113 {
el13ks 13:098319060433 114 buttonflag=!buttonflag;// set button flag
el13ks 13:098319060433 115 }
el13ks 13:098319060433 116
el13ks 13:098319060433 117
el13ks 12:3f4d9cb7dd8a 118 void pause()
el13ks 12:3f4d9cb7dd8a 119 {
el13ks 15:6d258c667a00 120 timer.attach(&timerExpired,15.0);// Call timeout after 15 seconds
el13ks 13:098319060433 121 button.rise(&pressPause); // event generated on rising edge
el13ks 13:098319060433 122 while (buttonflag) {
el13ks 15:6d258c667a00 123 lcd.clear();
el13ks 15:6d258c667a00 124 lcd.printString("Pause", 25,21);
el13ks 17:9a8a6516d63d 125 while (timerflag) {// Device goes into sleep and lcd is powered down after 15 seconds in pause menu
el13ks 13:098319060433 126 timer.detach();
el13ks 13:098319060433 127 lcd.turnOff();
el13ks 13:098319060433 128 Sleep();
el13ks 17:9a8a6516d63d 129 if (!buttonflag) { // Press button again to wake the device up
el13ks 15:6d258c667a00 130 timerflag=0;
el13ks 13:098319060433 131 lcd.init();
el13ks 15:6d258c667a00 132 buttonflag=0;
el13ks 13:098319060433 133 }
el13ks 15:6d258c667a00 134 }
el13ks 15:6d258c667a00 135 }
el13ks 13:098319060433 136
el13ks 15:6d258c667a00 137 }
el13ks 12:3f4d9cb7dd8a 138
el13ks 4:75c7277a1b88 139 void drawMap()
el13ks 4:75c7277a1b88 140 {
el13ks 10:cc0621fbe99b 141
el13ks 10:cc0621fbe99b 142 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 11:2fd81f59d7a7 143 lcd.drawRect(40,40,2,7,1);// T-shaped obstacle Vertical
el13ks 10:cc0621fbe99b 144 lcd.drawRect(7,8,23,2,1);// Left hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 145 lcd.drawRect(51,8,24,2,1);//Right hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 146 lcd.drawRect(0,18,3,29,1);// left hand border
el13ks 11:2fd81f59d7a7 147 lcd.drawRect(78,18,5,29,1);// Right hand border
el13ks 10:cc0621fbe99b 148 lcd.drawRect(11,18,3,21,1);//Left hand C shape obstacle vertical
el13ks 10:cc0621fbe99b 149 lcd.drawRect(27,11,3,18,1);// Left hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 150 lcd.drawRect(35,37,12,2,1);//T-shaped obstacle Horizontal
el13ks 10:cc0621fbe99b 151 lcd.drawRect(67,18,3,21,1);// Right hand C shaped obstacle vertical
el13ks 10:cc0621fbe99b 152 lcd.drawRect(51,11,3,18,1);//Right hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 153 lcd.drawRect(38,18,5,11,1);// Central block
el13ks 11:2fd81f59d7a7 154 lcd.drawRect(15,18,4,2,1);//Left hand C shape obstacle horizontal
el13ks 10:cc0621fbe99b 155 lcd.drawRect(22,27,5,2,1);//Left hand "Hook" shaped obstacle
el13ks 11:2fd81f59d7a7 156 lcd.drawRect(15,37,4,2,1);//Left hand C shape obstacle
el13ks 11:2fd81f59d7a7 157 lcd.drawRect(55,27,3,2,1);// Right hand "Hook" shaped obstacle
el13ks 10:cc0621fbe99b 158 lcd.drawRect(63,18,4,2,1);//Right hand C shape obstacle horizontal
el13ks 11:2fd81f59d7a7 159 lcd.drawRect(63,37,4,2,1);//Right hand C shape obstacle
el13ks 11:2fd81f59d7a7 160
el13ks 0:1c3f3fe862f2 161 }
el13ks 0:1c3f3fe862f2 162
el13ks 4:75c7277a1b88 163 void checkRight()
el13ks 0:1c3f3fe862f2 164 {
el13ks 1:98cc4f4a20dc 165
el13ks 3:83c1d9cd97f1 166
el13ks 4:75c7277a1b88 167 int r = 0;//Variable for right movement check
el13ks 7:9ecf9df1e95e 168 if(lcd.getPixel (i+3,j))//Check 4 pixels to the right
el13ks 4:75c7277a1b88 169 r++;
el13ks 7:9ecf9df1e95e 170 if(lcd.getPixel (i+4,j))//Check 5 pixels to the right
el13ks 4:75c7277a1b88 171 r++;
el13ks 4:75c7277a1b88 172 if (r==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 173 i--;
el13ks 1:98cc4f4a20dc 174
el13ks 4:75c7277a1b88 175 }
el13ks 4:75c7277a1b88 176 }
el13ks 4:75c7277a1b88 177 void checkLeft()
el13ks 4:75c7277a1b88 178 {
el13ks 4:75c7277a1b88 179 int l = 0 ; // Variable for left movement check
el13ks 7:9ecf9df1e95e 180 if(lcd.getPixel (i-3,j))//Check 4 pixels to the left
el13ks 4:75c7277a1b88 181 l++;
el13ks 7:9ecf9df1e95e 182 if(lcd.getPixel (i-4,j))//Check 5 pixels to the left
el13ks 4:75c7277a1b88 183 l++;
el13ks 4:75c7277a1b88 184 if (l==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 185 i++;
el13ks 3:83c1d9cd97f1 186
el13ks 3:83c1d9cd97f1 187
el13ks 1:98cc4f4a20dc 188 }
el13ks 0:1c3f3fe862f2 189 }
el13ks 5:61c3bbef19f0 190 void checkUp()
el13ks 6:af4d3c5a9d43 191 {
el13ks 6:af4d3c5a9d43 192 int u=0;
el13ks 7:9ecf9df1e95e 193 if(lcd.getPixel (i,j-3))//Check 4 pixels above
el13ks 5:61c3bbef19f0 194 u++;
el13ks 7:9ecf9df1e95e 195 if(lcd.getPixel (i,j-4))//Check 5 pixels above
el13ks 5:61c3bbef19f0 196 u++;
el13ks 10:cc0621fbe99b 197 if(lcd.getPixel (i+1,j-4))
el13ks 8:c12828c83a44 198 u++;
el13ks 10:cc0621fbe99b 199 if(lcd.getPixel (i-1,j-4))
el13ks 10:cc0621fbe99b 200 u++;
el13ks 11:2fd81f59d7a7 201 if(lcd.getPixel (i-2,j-4))
el13ks 11:2fd81f59d7a7 202 u++;
el13ks 11:2fd81f59d7a7 203 if (u>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 204 j++;
el13ks 6:af4d3c5a9d43 205 }
el13ks 5:61c3bbef19f0 206 }
el13ks 5:61c3bbef19f0 207
el13ks 6:af4d3c5a9d43 208 void checkDown()
el13ks 6:af4d3c5a9d43 209 {
el13ks 6:af4d3c5a9d43 210 int d=0;
el13ks 7:9ecf9df1e95e 211 if(lcd.getPixel (i,j+3))//Check 4 pixels below
el13ks 5:61c3bbef19f0 212 d++;
el13ks 7:9ecf9df1e95e 213 if(lcd.getPixel (i,j+4))//Check 5 pixels below
el13ks 5:61c3bbef19f0 214 d++;
el13ks 10:cc0621fbe99b 215 if(lcd.getPixel (i+1,j+4))
el13ks 8:c12828c83a44 216 d++;
el13ks 10:cc0621fbe99b 217 if(lcd.getPixel (i-1,j+4))
el13ks 10:cc0621fbe99b 218 d++;
el13ks 13:098319060433 219 if(lcd.getPixel (i-2,j+4))
el13ks 11:2fd81f59d7a7 220 d++;
el13ks 11:2fd81f59d7a7 221 if (d>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 222 j--;
el13ks 6:af4d3c5a9d43 223 }
el13ks 5:61c3bbef19f0 224 }
el13ks 11:2fd81f59d7a7 225
el13ks 11:2fd81f59d7a7 226
el13ks 17:9a8a6516d63d 227 void drawCoin(void)
el13ks 17:9a8a6516d63d 228 {
el13ks 17:9a8a6516d63d 229 for (int k=0; k<30; k++) {
el13ks 17:9a8a6516d63d 230 lcd.drawCircle(coins[k][0], coins[k][1],2,0);
el13ks 13:098319060433 231 }
el13ks 6:af4d3c5a9d43 232 }
el13ks 11:2fd81f59d7a7 233
el13ks 17:9a8a6516d63d 234
el13ks 17:9a8a6516d63d 235
el13ks 6:af4d3c5a9d43 236 void checkCoin()
el13ks 6:af4d3c5a9d43 237 {
el13ks 17:9a8a6516d63d 238 for (int c=0; c<30; c++) {
el13ks 17:9a8a6516d63d 239 if(i==coins[c][0]&& j==coins[c][1]) {
el13ks 17:9a8a6516d63d 240 coins[c][0]=90;
el13ks 17:9a8a6516d63d 241 coins[c][1]=50;
el13ks 17:9a8a6516d63d 242 w--;
el13ks 17:9a8a6516d63d 243 }
el13ks 11:2fd81f59d7a7 244 }
el13ks 5:61c3bbef19f0 245 }
el13ks 5:61c3bbef19f0 246
el13ks 17:9a8a6516d63d 247
el13ks 17:9a8a6516d63d 248
el13ks 6:af4d3c5a9d43 249 void Joystickcheck()
el13ks 6:af4d3c5a9d43 250 {
el13ks 6:af4d3c5a9d43 251 if (joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 252 j--;
el13ks 4:75c7277a1b88 253 }
el13ks 6:af4d3c5a9d43 254 if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 255 j++;
el13ks 6:af4d3c5a9d43 256 }
el13ks 6:af4d3c5a9d43 257 if (joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 258 i--;
el13ks 6:af4d3c5a9d43 259 }
el13ks 6:af4d3c5a9d43 260 if (joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 261 i++;
el13ks 4:75c7277a1b88 262 }
el13ks 4:75c7277a1b88 263
el13ks 6:af4d3c5a9d43 264 }
el13ks 6:af4d3c5a9d43 265 void drawPacman()
el13ks 6:af4d3c5a9d43 266 {
el13ks 6:af4d3c5a9d43 267 if(joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 268 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 269 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 270 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 271 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 272 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 273 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 274 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 275 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 276 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 277 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 278 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 279 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 280 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 281 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 282 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 283 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 284 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 285 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 286 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 287 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 288 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 289 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 290 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 291 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 292 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 293 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 294 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 295 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 296 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 297
el13ks 4:75c7277a1b88 298
el13ks 6:af4d3c5a9d43 299 } else if(joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 300 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 301 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 302 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 303 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 304 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 305 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 306 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 307 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 308 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 309 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 310 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 311 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 312 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 313 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 314 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 315 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 316 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 317 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 318 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 319 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 320 lcd.setPixel(i+1,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 321 lcd.setPixel(i+2,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 322 lcd.setPixel(i+3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 323 lcd.setPixel(i+1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 324 lcd.setPixel(i+2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 325 lcd.setPixel(i+3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 326 lcd.setPixel(i+1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 327 lcd.setPixel(i+2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 328 lcd.setPixel(i+3,j-1);//Direction dependent (left and right)
el13ks 4:75c7277a1b88 329
el13ks 6:af4d3c5a9d43 330 } else if(joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 331 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 332 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 333 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 334 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 335 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 336 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 337 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 338 lcd.setPixel(i,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 339 lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 340 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 341 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 342 lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 343 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 344 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 345 lcd.setPixel(i,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 346 lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 347 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 348 lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 349 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 350 lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 351 lcd.setPixel(i,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 352 lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 353 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 354 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 355 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 356 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 357 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 358 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 359
el13ks 3:83c1d9cd97f1 360
el13ks 6:af4d3c5a9d43 361 } else if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 362 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 363 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 364 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 365 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 366 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 367 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 368 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 369 lcd.setPixel(i,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 370 lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 371 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 372 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 373 lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 374 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 375 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 376 lcd.setPixel(i,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 377 lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 378 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 379 lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 380 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 381 lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 382 lcd.setPixel(i,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 383 lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 384 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 385 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 386 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 387 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 388 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 389 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 390
el13ks 6:af4d3c5a9d43 391 } else {
el13ks 6:af4d3c5a9d43 392 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 393 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 394 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 395 lcd.setPixel(i-3,j);//Direction dependent (left and right)
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+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 410 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 411 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 412 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 413 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 414 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 415 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 416 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 417 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 418 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 419 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 420 lcd.setPixel(i-1,j-3);
el13ks 0:1c3f3fe862f2 421 }
el13ks 6:af4d3c5a9d43 422 }
el13ks 6:af4d3c5a9d43 423
el13ks 6:af4d3c5a9d43 424
el13ks 16:237375c3fc62 425
el13ks 17:9a8a6516d63d 426 void drawGhost()
el13ks 16:237375c3fc62 427 {
el13ks 16:237375c3fc62 428 lcd.setPixel(x,y);
el13ks 16:237375c3fc62 429 lcd.setPixel(x+2,y);
el13ks 16:237375c3fc62 430 lcd.setPixel(x-2,y);
el13ks 16:237375c3fc62 431 lcd.setPixel(x,y+1);
el13ks 16:237375c3fc62 432 lcd.setPixel(x,y-1);
el13ks 16:237375c3fc62 433 lcd.setPixel(x-1,y-1);
el13ks 16:237375c3fc62 434 lcd.setPixel(x-2,y-1);
el13ks 16:237375c3fc62 435 lcd.setPixel(x+1,y-1);
el13ks 16:237375c3fc62 436 lcd.setPixel(x+2,y-1);
el13ks 16:237375c3fc62 437 lcd.setPixel(x+2,y+1);
el13ks 16:237375c3fc62 438 lcd.setPixel(x+1,y+1);
el13ks 16:237375c3fc62 439 lcd.setPixel(x-1,y+1);
el13ks 16:237375c3fc62 440 lcd.setPixel(x-2,y+1);
el13ks 16:237375c3fc62 441 lcd.setPixel(x+2,y+2);
el13ks 16:237375c3fc62 442 lcd.setPixel(x+2,y+2);
el13ks 16:237375c3fc62 443 lcd.setPixel(x-1,y+2);
el13ks 16:237375c3fc62 444 lcd.setPixel(x+1,y+2);
el13ks 16:237375c3fc62 445 lcd.setPixel(x,y-2);
el13ks 16:237375c3fc62 446 lcd.setPixel(x+2,y-2);
el13ks 16:237375c3fc62 447 lcd.setPixel(x-1,y-2);
el13ks 16:237375c3fc62 448 lcd.setPixel(x+1,y-2);
el13ks 16:237375c3fc62 449 lcd.setPixel(x-2,y-2);
el13ks 16:237375c3fc62 450 lcd.setPixel(x-2,y+2);
el13ks 16:237375c3fc62 451 }
el13ks 16:237375c3fc62 452 void Boundarycheck()// Set boundary conditions so that ghost and pacman cannot move off screen
el13ks 6:af4d3c5a9d43 453 {
el13ks 6:af4d3c5a9d43 454 if (i<3) {
el13ks 6:af4d3c5a9d43 455 i=3;
el13ks 6:af4d3c5a9d43 456 }
el13ks 6:af4d3c5a9d43 457 if (j<3) {
el13ks 6:af4d3c5a9d43 458 j=3;
el13ks 6:af4d3c5a9d43 459 }
el13ks 6:af4d3c5a9d43 460 if (j>44) {
el13ks 6:af4d3c5a9d43 461 j=44;
el13ks 6:af4d3c5a9d43 462 }
el13ks 6:af4d3c5a9d43 463 if (i>80) {
el13ks 6:af4d3c5a9d43 464 i=80;
el13ks 6:af4d3c5a9d43 465 }
el13ks 6:af4d3c5a9d43 466 }
el13ks 6:af4d3c5a9d43 467
el13ks 15:6d258c667a00 468
el13ks 17:9a8a6516d63d 469 void winningcondition()// Player wins if all coins are eaten
el13ks 16:237375c3fc62 470 {
el13ks 17:9a8a6516d63d 471 if(w==0) {
el13ks 16:237375c3fc62 472 win=true;
el13ks 15:6d258c667a00 473 }
el13ks 16:237375c3fc62 474 }
el13ks 16:237375c3fc62 475
el13ks 17:9a8a6516d63d 476 void losingcondition()//Player loses if pacman is eaten by ghost
el13ks 16:237375c3fc62 477 {
el13ks 16:237375c3fc62 478 if (i==x && j==y) {
el13ks 16:237375c3fc62 479 win = false;
el13ks 16:237375c3fc62 480 lose = true;
el13ks 16:237375c3fc62 481 }
el13ks 16:237375c3fc62 482 }
el13ks 16:237375c3fc62 483
el13ks 16:237375c3fc62 484
el13ks 6:af4d3c5a9d43 485 int main()
el13ks 6:af4d3c5a9d43 486 {
el13ks 6:af4d3c5a9d43 487
el13ks 6:af4d3c5a9d43 488 lcd.init();
el13ks 6:af4d3c5a9d43 489 calibrateJoystick(); // get centred values of joystick
el13ks 6:af4d3c5a9d43 490 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
el13ks 13:098319060433 491 PHY_PowerDown();
el13ks 13:098319060433 492
el13ks 16:237375c3fc62 493 while(win==false&& lose==false) {
el13ks 12:3f4d9cb7dd8a 494 lcd.setBrightness(bright);
el13ks 6:af4d3c5a9d43 495 lcd.clear();
el13ks 12:3f4d9cb7dd8a 496 pause();
el13ks 15:6d258c667a00 497 winningcondition();
el13ks 16:237375c3fc62 498 losingcondition();
el13ks 6:af4d3c5a9d43 499 drawPacman();
el13ks 6:af4d3c5a9d43 500 drawMap();
el13ks 6:af4d3c5a9d43 501 drawCoin();
el13ks 16:237375c3fc62 502 drawGhost();
el13ks 6:af4d3c5a9d43 503 checkRight();
el13ks 6:af4d3c5a9d43 504 checkLeft();
el13ks 6:af4d3c5a9d43 505 checkDown();
el13ks 6:af4d3c5a9d43 506 checkUp();
el13ks 6:af4d3c5a9d43 507 Joystickcheck();
el13ks 6:af4d3c5a9d43 508 Boundarycheck();
el13ks 6:af4d3c5a9d43 509 checkCoin();
el13ks 9:d36fed674428 510 lcd.refresh();
el13ks 10:cc0621fbe99b 511 wait_ms(35);
el13ks 11:2fd81f59d7a7 512
el13ks 6:af4d3c5a9d43 513 }
el13ks 16:237375c3fc62 514 if (win==true) {
el13ks 15:6d258c667a00 515 lcd.clear();
el13ks 17:9a8a6516d63d 516 lcd.printString("Yay!", 25,21);
el13ks 16:237375c3fc62 517 }
el13ks 16:237375c3fc62 518 if (lose==true) {
el13ks 16:237375c3fc62 519 lcd.clear();
el13ks 16:237375c3fc62 520 lcd.printString("Game Over", 15,10);
el13ks 16:237375c3fc62 521
el13ks 16:237375c3fc62 522 }
el13ks 15:6d258c667a00 523 }
el13ks 15:6d258c667a00 524