Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Mon Apr 27 16:23:01 2015 +0000
Revision:
15:6d258c667a00
Parent:
14:883a86f009fd
Child:
16:237375c3fc62
V3 Winning conditions added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13ks 0:1c3f3fe862f2 1 #include "mbed.h"
el13ks 0:1c3f3fe862f2 2 #include "N5110.h"
el13ks 10:cc0621fbe99b 3 #define DIRECTION_TOLERANCE 0.1// Tolerance of Joystick
el13ks 13:098319060433 4 #include "tone.h"
el13ks 13:098319060433 5 #define PI 3.14159265359
el13ks 13:098319060433 6 #include "PowerControl/PowerControl.h"
el13ks 13:098319060433 7 #include "PowerControl/EthernetPowerControl.h"
el13ks 0:1c3f3fe862f2 8 BusOut myleds(p24,p23,p22); //External LEDS
el13ks 15:6d258c667a00 9 volatile bool win=false ;
el13ks 0:1c3f3fe862f2 10 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //PWR, SCE, RST, DC, MOSI, SCLK, LED
el13ks 12:3f4d9cb7dd8a 11 AnalogIn bright(p20);//Pot to adjust brightness
el13ks 13:098319060433 12 Timeout timer; //Create ticker object
el13ks 12:3f4d9cb7dd8a 13 DigitalIn Jbutton(p17);// Joystick Button
el13ks 0:1c3f3fe862f2 14 AnalogIn xPot(p15);// Joystick x-direction
el13ks 0:1c3f3fe862f2 15 AnalogIn yPot(p16);// Joystick y-direction
el13ks 3:83c1d9cd97f1 16 int i=3; // Pacman's starting position
el13ks 5:61c3bbef19f0 17 int j = 3;
el13ks 13:098319060433 18 int buttonflag=0; // flag for pause button
el13ks 12:3f4d9cb7dd8a 19 InterruptIn button(p18);//Pause button
el13ks 0:1c3f3fe862f2 20 Ticker pollJoystick; // timer to regularly read the joystick
el13ks 13:098319060433 21 int timerflag=0;
el13ks 2:830feffe8462 22 int coinflag = 1;
el13ks 3:83c1d9cd97f1 23 int coinflag2 = 1;
el13ks 4:75c7277a1b88 24 int coinflag3 = 1;
el13ks 4:75c7277a1b88 25 int coinflag4 = 1;
el13ks 4:75c7277a1b88 26 int coinflag5 = 1;
el13ks 11:2fd81f59d7a7 27 int coinflag6 = 1;
el13ks 11:2fd81f59d7a7 28 int coinflag7 = 1;
el13ks 11:2fd81f59d7a7 29 int coinflag8 = 1;
el13ks 11:2fd81f59d7a7 30 int coinflag9 = 1;
el13ks 11:2fd81f59d7a7 31 int coinflag10 = 1;
el13ks 11:2fd81f59d7a7 32 int coinflag11= 1;
el13ks 11:2fd81f59d7a7 33 int coinflag12 = 1;
el13ks 11:2fd81f59d7a7 34 int coinflag13 = 1;
el13ks 11:2fd81f59d7a7 35 int coinflag14 = 1;
el13ks 11:2fd81f59d7a7 36 int coinflag15 = 1;
el13ks 11:2fd81f59d7a7 37 int coinflag16 = 1;
el13ks 11:2fd81f59d7a7 38 int coinflag17 = 1;
el13ks 11:2fd81f59d7a7 39 int coinflag18 = 1;
el13ks 11:2fd81f59d7a7 40 int coinflag19 = 1;
el13ks 11:2fd81f59d7a7 41 int coinflag20 = 1;
el13ks 11:2fd81f59d7a7 42 int coinflag21 = 1;
el13ks 11:2fd81f59d7a7 43 int coinflag22 = 1;
el13ks 6:af4d3c5a9d43 44
el13ks 1:98cc4f4a20dc 45
el13ks 0:1c3f3fe862f2 46 enum DirectionName { // create enumerated type (0,1,2,3 etc. for direction)
el13ks 0:1c3f3fe862f2 47 UP, // could be extended for diagonals etc.
el13ks 0:1c3f3fe862f2 48 DOWN,
el13ks 0:1c3f3fe862f2 49 LEFT,
el13ks 0:1c3f3fe862f2 50 RIGHT,
el13ks 0:1c3f3fe862f2 51 CENTRE,
el13ks 0:1c3f3fe862f2 52 UNKNOWN
el13ks 0:1c3f3fe862f2 53 };
el13ks 0:1c3f3fe862f2 54
el13ks 0:1c3f3fe862f2 55 typedef struct JoyStick Joystick; // struct for Joystick
el13ks 0:1c3f3fe862f2 56 struct JoyStick {
el13ks 0:1c3f3fe862f2 57 float x; // current x value
el13ks 0:1c3f3fe862f2 58 float x0; // 'centred' x value
el13ks 0:1c3f3fe862f2 59 float y; // current y value
el13ks 0:1c3f3fe862f2 60 float y0; // 'centred' y value
el13ks 0:1c3f3fe862f2 61 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13ks 0:1c3f3fe862f2 62 DirectionName direction; // current direction
el13ks 0:1c3f3fe862f2 63 };
el13ks 0:1c3f3fe862f2 64
el13ks 0:1c3f3fe862f2 65 Joystick joystick; // create struct variable
el13ks 0:1c3f3fe862f2 66
el13ks 0:1c3f3fe862f2 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 13:098319060433 117 button.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 15:6d258c667a00 121 while (timerflag) {
el13ks 13:098319060433 122 timer.detach();
el13ks 13:098319060433 123 lcd.turnOff();
el13ks 13:098319060433 124 Sleep();
el13ks 15:6d258c667a00 125 if (!buttonflag) {
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 12:3f4d9cb7dd8a 134
el13ks 4:75c7277a1b88 135 void drawMap()
el13ks 4:75c7277a1b88 136 {
el13ks 10:cc0621fbe99b 137
el13ks 10:cc0621fbe99b 138 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 139 lcd.drawRect(40,40,2,7,1);// T-shaped obstacle Vertical
el13ks 10:cc0621fbe99b 140 lcd.drawRect(7,8,23,2,1);// Left hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 141 lcd.drawRect(51,8,24,2,1);//Right hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 142 lcd.drawRect(0,18,3,29,1);// left hand border
el13ks 11:2fd81f59d7a7 143 lcd.drawRect(78,18,5,29,1);// Right hand border
el13ks 10:cc0621fbe99b 144 lcd.drawRect(11,18,3,21,1);//Left hand C shape obstacle vertical
el13ks 10:cc0621fbe99b 145 lcd.drawRect(27,11,3,18,1);// Left hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 146 lcd.drawRect(35,37,12,2,1);//T-shaped obstacle Horizontal
el13ks 10:cc0621fbe99b 147 lcd.drawRect(67,18,3,21,1);// Right hand C shaped obstacle vertical
el13ks 10:cc0621fbe99b 148 lcd.drawRect(51,11,3,18,1);//Right hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 149 lcd.drawRect(38,18,5,11,1);// Central block
el13ks 11:2fd81f59d7a7 150 lcd.drawRect(15,18,4,2,1);//Left hand C shape obstacle horizontal
el13ks 10:cc0621fbe99b 151 lcd.drawRect(22,27,5,2,1);//Left hand "Hook" shaped obstacle
el13ks 11:2fd81f59d7a7 152 lcd.drawRect(15,37,4,2,1);//Left hand C shape obstacle
el13ks 11:2fd81f59d7a7 153 lcd.drawRect(55,27,3,2,1);// Right hand "Hook" shaped obstacle
el13ks 10:cc0621fbe99b 154 lcd.drawRect(63,18,4,2,1);//Right hand C shape obstacle horizontal
el13ks 11:2fd81f59d7a7 155 lcd.drawRect(63,37,4,2,1);//Right hand C shape obstacle
el13ks 11:2fd81f59d7a7 156
el13ks 0:1c3f3fe862f2 157 }
el13ks 0:1c3f3fe862f2 158
el13ks 4:75c7277a1b88 159 void checkRight()
el13ks 0:1c3f3fe862f2 160 {
el13ks 1:98cc4f4a20dc 161
el13ks 3:83c1d9cd97f1 162
el13ks 4:75c7277a1b88 163 int r = 0;//Variable for right movement check
el13ks 7:9ecf9df1e95e 164 if(lcd.getPixel (i+3,j))//Check 4 pixels to the right
el13ks 4:75c7277a1b88 165 r++;
el13ks 7:9ecf9df1e95e 166 if(lcd.getPixel (i+4,j))//Check 5 pixels to the right
el13ks 4:75c7277a1b88 167 r++;
el13ks 4:75c7277a1b88 168 if (r==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 169 i--;
el13ks 1:98cc4f4a20dc 170
el13ks 4:75c7277a1b88 171 }
el13ks 4:75c7277a1b88 172 }
el13ks 4:75c7277a1b88 173 void checkLeft()
el13ks 4:75c7277a1b88 174 {
el13ks 4:75c7277a1b88 175 int l = 0 ; // Variable for left movement check
el13ks 7:9ecf9df1e95e 176 if(lcd.getPixel (i-3,j))//Check 4 pixels to the left
el13ks 4:75c7277a1b88 177 l++;
el13ks 7:9ecf9df1e95e 178 if(lcd.getPixel (i-4,j))//Check 5 pixels to the left
el13ks 4:75c7277a1b88 179 l++;
el13ks 4:75c7277a1b88 180 if (l==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 181 i++;
el13ks 3:83c1d9cd97f1 182
el13ks 3:83c1d9cd97f1 183
el13ks 1:98cc4f4a20dc 184 }
el13ks 0:1c3f3fe862f2 185 }
el13ks 5:61c3bbef19f0 186 void checkUp()
el13ks 6:af4d3c5a9d43 187 {
el13ks 6:af4d3c5a9d43 188 int u=0;
el13ks 7:9ecf9df1e95e 189 if(lcd.getPixel (i,j-3))//Check 4 pixels above
el13ks 5:61c3bbef19f0 190 u++;
el13ks 7:9ecf9df1e95e 191 if(lcd.getPixel (i,j-4))//Check 5 pixels above
el13ks 5:61c3bbef19f0 192 u++;
el13ks 10:cc0621fbe99b 193 if(lcd.getPixel (i+1,j-4))
el13ks 8:c12828c83a44 194 u++;
el13ks 10:cc0621fbe99b 195 if(lcd.getPixel (i-1,j-4))
el13ks 10:cc0621fbe99b 196 u++;
el13ks 11:2fd81f59d7a7 197 if(lcd.getPixel (i-2,j-4))
el13ks 11:2fd81f59d7a7 198 u++;
el13ks 11:2fd81f59d7a7 199 if (u>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 200 j++;
el13ks 6:af4d3c5a9d43 201 }
el13ks 5:61c3bbef19f0 202 }
el13ks 5:61c3bbef19f0 203
el13ks 6:af4d3c5a9d43 204 void checkDown()
el13ks 6:af4d3c5a9d43 205 {
el13ks 6:af4d3c5a9d43 206 int d=0;
el13ks 7:9ecf9df1e95e 207 if(lcd.getPixel (i,j+3))//Check 4 pixels below
el13ks 5:61c3bbef19f0 208 d++;
el13ks 7:9ecf9df1e95e 209 if(lcd.getPixel (i,j+4))//Check 5 pixels below
el13ks 5:61c3bbef19f0 210 d++;
el13ks 10:cc0621fbe99b 211 if(lcd.getPixel (i+1,j+4))
el13ks 8:c12828c83a44 212 d++;
el13ks 10:cc0621fbe99b 213 if(lcd.getPixel (i-1,j+4))
el13ks 10:cc0621fbe99b 214 d++;
el13ks 13:098319060433 215 if(lcd.getPixel (i-2,j+4))
el13ks 11:2fd81f59d7a7 216 d++;
el13ks 11:2fd81f59d7a7 217 if (d>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 218 j--;
el13ks 6:af4d3c5a9d43 219 }
el13ks 5:61c3bbef19f0 220 }
el13ks 6:af4d3c5a9d43 221 void drawCoin()
el13ks 6:af4d3c5a9d43 222 {
el13ks 6:af4d3c5a9d43 223
el13ks 6:af4d3c5a9d43 224 if (coinflag) {
el13ks 11:2fd81f59d7a7 225 lcd.drawCircle(10,3,2,0);//Coin 1.1
el13ks 6:af4d3c5a9d43 226 }
el13ks 6:af4d3c5a9d43 227 if (coinflag2) {
el13ks 11:2fd81f59d7a7 228 lcd.drawCircle(22,3,2,0);//Coin 1.2
el13ks 6:af4d3c5a9d43 229 }
el13ks 6:af4d3c5a9d43 230 if (coinflag3) {
el13ks 11:2fd81f59d7a7 231 lcd.drawCircle(35,3,2,0); //Coin 1.3
el13ks 6:af4d3c5a9d43 232 }
el13ks 6:af4d3c5a9d43 233 if (coinflag4) {
el13ks 11:2fd81f59d7a7 234 lcd.drawCircle(47,3,2,0);//Coin 1.4
el13ks 6:af4d3c5a9d43 235 }
el13ks 6:af4d3c5a9d43 236 if (coinflag5) {
el13ks 11:2fd81f59d7a7 237 lcd.drawCircle(65,3,2,0);//Coin 1.5
el13ks 11:2fd81f59d7a7 238 }
el13ks 11:2fd81f59d7a7 239
el13ks 11:2fd81f59d7a7 240 if (coinflag6) {
el13ks 11:2fd81f59d7a7 241 lcd.drawCircle(80,3,2,0);//Coin 1.6
el13ks 11:2fd81f59d7a7 242 }
el13ks 11:2fd81f59d7a7 243 if (coinflag7) {
el13ks 11:2fd81f59d7a7 244 lcd.drawCircle(41,14,2,0);//Coin 2.2
el13ks 11:2fd81f59d7a7 245 }
el13ks 11:2fd81f59d7a7 246 if (coinflag8) {
el13ks 11:2fd81f59d7a7 247 lcd.drawCircle(35,44,2,0);// Coin 5.3
el13ks 11:2fd81f59d7a7 248 }
el13ks 11:2fd81f59d7a7 249 if (coinflag9) {
el13ks 11:2fd81f59d7a7 250 lcd.drawCircle(47,44,2,0);//Coin 5.4
el13ks 11:2fd81f59d7a7 251 }
el13ks 11:2fd81f59d7a7 252 if (coinflag10) {
el13ks 11:2fd81f59d7a7 253 lcd.drawCircle(34,24,2,0); //Coin 3.3
el13ks 11:2fd81f59d7a7 254 }
el13ks 11:2fd81f59d7a7 255 if (coinflag11) {
el13ks 11:2fd81f59d7a7 256 lcd.drawCircle(47,24,2,0); //Coin 3.4
el13ks 11:2fd81f59d7a7 257 }
el13ks 11:2fd81f59d7a7 258
el13ks 11:2fd81f59d7a7 259 if (coinflag12) {
el13ks 11:2fd81f59d7a7 260 lcd.drawCircle(41,33,2,0);//Coin 4
el13ks 11:2fd81f59d7a7 261 }
el13ks 11:2fd81f59d7a7 262
el13ks 11:2fd81f59d7a7 263
el13ks 11:2fd81f59d7a7 264 if (coinflag13) {
el13ks 11:2fd81f59d7a7 265 lcd.drawCircle(7,44,2,0);//Coin 5.1
el13ks 6:af4d3c5a9d43 266 }
el13ks 11:2fd81f59d7a7 267
el13ks 11:2fd81f59d7a7 268 if (coinflag14) {
el13ks 11:2fd81f59d7a7 269 lcd.drawCircle(74,44,2,0);//Coin 5.6
el13ks 11:2fd81f59d7a7 270 }
el13ks 11:2fd81f59d7a7 271 if (coinflag15) {
el13ks 11:2fd81f59d7a7 272 lcd.drawCircle(21,44,2,0);//Coin 5.2
el13ks 11:2fd81f59d7a7 273 }
el13ks 11:2fd81f59d7a7 274 if (coinflag16) {
el13ks 11:2fd81f59d7a7 275 lcd.drawCircle(61,44,2,0);//Coin 5.5
el13ks 11:2fd81f59d7a7 276 }
el13ks 11:2fd81f59d7a7 277 if (coinflag17) {
el13ks 11:2fd81f59d7a7 278 lcd.drawCircle(7,24,2,0); //Coin 3.1
el13ks 11:2fd81f59d7a7 279 }
el13ks 11:2fd81f59d7a7 280 if (coinflag18) {
el13ks 11:2fd81f59d7a7 281 lcd.drawCircle(19,24,2,0); //Coin 3.2
el13ks 11:2fd81f59d7a7 282 }
el13ks 11:2fd81f59d7a7 283 if (coinflag19) {
el13ks 11:2fd81f59d7a7 284 lcd.drawCircle(62,24,2,0); //Coin 3.5
el13ks 13:098319060433 285
el13ks 11:2fd81f59d7a7 286 }
el13ks 13:098319060433 287
el13ks 11:2fd81f59d7a7 288 if (coinflag20) {
el13ks 11:2fd81f59d7a7 289 lcd.drawCircle(74,24,2,0); //Coin 3.6
el13ks 11:2fd81f59d7a7 290 }
el13ks 13:098319060433 291 if (coinflag21) {
el13ks 11:2fd81f59d7a7 292 lcd.drawCircle(15,15,2,0);//Coin 2.1
el13ks 13:098319060433 293 }
el13ks 13:098319060433 294 if (coinflag22) {
el13ks 11:2fd81f59d7a7 295 lcd.drawCircle(65,15,2,0);//Coin 2.3
el13ks 13:098319060433 296 }
el13ks 6:af4d3c5a9d43 297 }
el13ks 11:2fd81f59d7a7 298
el13ks 6:af4d3c5a9d43 299 void checkCoin()
el13ks 11:2fd81f59d7a7 300
el13ks 6:af4d3c5a9d43 301 {
el13ks 6:af4d3c5a9d43 302 if (i==10 &&j==3) {
el13ks 6:af4d3c5a9d43 303 coinflag=0;
el13ks 6:af4d3c5a9d43 304 }
el13ks 11:2fd81f59d7a7 305 if (i==22 &&j==3) {
el13ks 6:af4d3c5a9d43 306 coinflag2=0;
el13ks 6:af4d3c5a9d43 307 }
el13ks 11:2fd81f59d7a7 308 if (i==35 &&j==3) {
el13ks 6:af4d3c5a9d43 309 coinflag3=0;
el13ks 6:af4d3c5a9d43 310 }
el13ks 11:2fd81f59d7a7 311 if (i==47 &&j==3) {
el13ks 6:af4d3c5a9d43 312 coinflag4=0;
el13ks 6:af4d3c5a9d43 313 }
el13ks 11:2fd81f59d7a7 314 if (i==65 &&j==3) {
el13ks 6:af4d3c5a9d43 315 coinflag5=0;
el13ks 6:af4d3c5a9d43 316 }
el13ks 11:2fd81f59d7a7 317 if (i==80 &&j==3) {
el13ks 11:2fd81f59d7a7 318 coinflag6=0;
el13ks 11:2fd81f59d7a7 319 }
el13ks 11:2fd81f59d7a7 320 if (i== 41&&j==14) {
el13ks 11:2fd81f59d7a7 321 coinflag7=0;
el13ks 11:2fd81f59d7a7 322 }
el13ks 11:2fd81f59d7a7 323 if (i==35 &&j==44) {
el13ks 11:2fd81f59d7a7 324 coinflag8=0;
el13ks 11:2fd81f59d7a7 325 }
el13ks 11:2fd81f59d7a7 326 if (i==47&&j==44) {
el13ks 11:2fd81f59d7a7 327 coinflag9=0;
el13ks 11:2fd81f59d7a7 328 }
el13ks 11:2fd81f59d7a7 329 if (i==34 &&j==24) {
el13ks 11:2fd81f59d7a7 330 coinflag10=0;
el13ks 11:2fd81f59d7a7 331 }
el13ks 11:2fd81f59d7a7 332 if (i==47 &&j==24) {
el13ks 11:2fd81f59d7a7 333 coinflag11=0;
el13ks 11:2fd81f59d7a7 334 }
el13ks 11:2fd81f59d7a7 335 if (i==41 &&j==33) {
el13ks 11:2fd81f59d7a7 336 coinflag12=0;
el13ks 11:2fd81f59d7a7 337 }
el13ks 11:2fd81f59d7a7 338 if (i==7 &&j==44) {
el13ks 11:2fd81f59d7a7 339 coinflag13=0;
el13ks 11:2fd81f59d7a7 340 }
el13ks 11:2fd81f59d7a7 341 if (i==74 &&j==44) {
el13ks 11:2fd81f59d7a7 342 coinflag14=0;
el13ks 11:2fd81f59d7a7 343 }
el13ks 11:2fd81f59d7a7 344 if (i==21 &&j==44) {
el13ks 11:2fd81f59d7a7 345 coinflag15=0;
el13ks 11:2fd81f59d7a7 346 }
el13ks 11:2fd81f59d7a7 347 if (i==61 &&j==44) {
el13ks 11:2fd81f59d7a7 348 coinflag16=0;
el13ks 11:2fd81f59d7a7 349 }
el13ks 11:2fd81f59d7a7 350 if (i== 7&&j==24) {
el13ks 11:2fd81f59d7a7 351 coinflag17=0;
el13ks 11:2fd81f59d7a7 352 }
el13ks 11:2fd81f59d7a7 353 if (i==19 &&j==24) {
el13ks 11:2fd81f59d7a7 354 coinflag18=0;
el13ks 11:2fd81f59d7a7 355 }
el13ks 11:2fd81f59d7a7 356 if (i==62 &&j==24) {
el13ks 11:2fd81f59d7a7 357 coinflag19=0;
el13ks 11:2fd81f59d7a7 358 }
el13ks 11:2fd81f59d7a7 359 if (i==74 &&j==24) {
el13ks 11:2fd81f59d7a7 360 coinflag20=0;
el13ks 11:2fd81f59d7a7 361 }
el13ks 11:2fd81f59d7a7 362 if (i==15 &&j==15) {
el13ks 11:2fd81f59d7a7 363 coinflag21=0;
el13ks 11:2fd81f59d7a7 364 }
el13ks 11:2fd81f59d7a7 365 if (i==65 &&j==15) {
el13ks 11:2fd81f59d7a7 366 coinflag22=0;
el13ks 11:2fd81f59d7a7 367 }
el13ks 5:61c3bbef19f0 368 }
el13ks 5:61c3bbef19f0 369
el13ks 6:af4d3c5a9d43 370 void Joystickcheck()
el13ks 6:af4d3c5a9d43 371 {
el13ks 6:af4d3c5a9d43 372 if (joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 373 j--;
el13ks 4:75c7277a1b88 374 }
el13ks 6:af4d3c5a9d43 375 if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 376 j++;
el13ks 6:af4d3c5a9d43 377 }
el13ks 6:af4d3c5a9d43 378 if (joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 379 i--;
el13ks 6:af4d3c5a9d43 380 }
el13ks 6:af4d3c5a9d43 381 if (joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 382 i++;
el13ks 4:75c7277a1b88 383 }
el13ks 4:75c7277a1b88 384
el13ks 6:af4d3c5a9d43 385 }
el13ks 6:af4d3c5a9d43 386 void drawPacman()
el13ks 6:af4d3c5a9d43 387 {
el13ks 6:af4d3c5a9d43 388 if(joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 389 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 390 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 391 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 392 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 393 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 394 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 395 lcd.setPixel(i,j+3);
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-1,j+3);
el13ks 6:af4d3c5a9d43 400 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 401 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 402 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 403 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 404 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 405 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 406 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 407 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 408 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
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-2);
el13ks 6:af4d3c5a9d43 413 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 414 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 415 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 416 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 417 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 418
el13ks 4:75c7277a1b88 419
el13ks 6:af4d3c5a9d43 420 } else if(joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 421 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 422 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 423 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 424 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 425 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 426 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 427 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 428 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 429 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 430 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 431 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 432 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 433 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 434 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 435 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 436 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 437 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 438 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 439 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 440 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 441 lcd.setPixel(i+1,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 442 lcd.setPixel(i+2,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 443 lcd.setPixel(i+3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 444 lcd.setPixel(i+1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 445 lcd.setPixel(i+2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 446 lcd.setPixel(i+3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 447 lcd.setPixel(i+1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 448 lcd.setPixel(i+2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 449 lcd.setPixel(i+3,j-1);//Direction dependent (left and right)
el13ks 4:75c7277a1b88 450
el13ks 6:af4d3c5a9d43 451 } else if(joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 452 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 453 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 454 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 455 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 456 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 457 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 458 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 459 lcd.setPixel(i,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 460 lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 461 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 462 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 463 lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 464 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 465 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 466 lcd.setPixel(i,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 467 lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 468 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 469 lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 470 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 471 lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 472 lcd.setPixel(i,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 473 lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 474 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 475 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 476 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 477 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 478 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 479 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 480
el13ks 3:83c1d9cd97f1 481
el13ks 6:af4d3c5a9d43 482 } else if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 483 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 484 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 485 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 486 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 487 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 488 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 489 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 490 lcd.setPixel(i,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 491 lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 492 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 493 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 494 lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 495 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 496 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 497 lcd.setPixel(i,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 498 lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 499 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 500 lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 501 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 502 lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 503 lcd.setPixel(i,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 504 lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 505 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 506 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 507 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 508 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 509 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 510 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 511
el13ks 6:af4d3c5a9d43 512 } else {
el13ks 6:af4d3c5a9d43 513 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 514 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 515 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 516 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 517 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 518 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 519 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 520 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 521 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 522 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 523 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 524 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 525 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 526 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 527 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 528 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 529 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 530 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 531 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 532 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 533 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 534 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 535 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 536 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 537 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 538 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 539 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 540 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 541 lcd.setPixel(i-1,j-3);
el13ks 0:1c3f3fe862f2 542 }
el13ks 6:af4d3c5a9d43 543 }
el13ks 6:af4d3c5a9d43 544
el13ks 6:af4d3c5a9d43 545
el13ks 6:af4d3c5a9d43 546 void Boundarycheck()
el13ks 6:af4d3c5a9d43 547 {
el13ks 6:af4d3c5a9d43 548 if (i<3) {
el13ks 6:af4d3c5a9d43 549 i=3;
el13ks 6:af4d3c5a9d43 550 }
el13ks 6:af4d3c5a9d43 551 if (j<3) {
el13ks 6:af4d3c5a9d43 552 j=3;
el13ks 6:af4d3c5a9d43 553 }
el13ks 6:af4d3c5a9d43 554 if (j>44) {
el13ks 6:af4d3c5a9d43 555 j=44;
el13ks 6:af4d3c5a9d43 556 }
el13ks 6:af4d3c5a9d43 557 if (i>80) {
el13ks 6:af4d3c5a9d43 558 i=80;
el13ks 6:af4d3c5a9d43 559 }
el13ks 6:af4d3c5a9d43 560 }
el13ks 6:af4d3c5a9d43 561
el13ks 15:6d258c667a00 562
el13ks 15:6d258c667a00 563 void winningcondition(){
el13ks 15:6d258c667a00 564 int WC = coinflag+coinflag2+coinflag3+coinflag4+coinflag5+coinflag6+coinflag7+coinflag8+coinflag9+coinflag10+coinflag11+coinflag12+coinflag13+coinflag14+coinflag15+coinflag16+coinflag17+coinflag18+coinflag19+coinflag20+coinflag21+coinflag22;
el13ks 15:6d258c667a00 565 if (WC==0){
el13ks 15:6d258c667a00 566 win=true;
el13ks 15:6d258c667a00 567 }
el13ks 15:6d258c667a00 568
el13ks 15:6d258c667a00 569
el13ks 15:6d258c667a00 570 }
el13ks 15:6d258c667a00 571
el13ks 6:af4d3c5a9d43 572 int main()
el13ks 6:af4d3c5a9d43 573 {
el13ks 6:af4d3c5a9d43 574
el13ks 6:af4d3c5a9d43 575 lcd.init();
el13ks 6:af4d3c5a9d43 576 calibrateJoystick(); // get centred values of joystick
el13ks 6:af4d3c5a9d43 577 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
el13ks 13:098319060433 578 PHY_PowerDown();
el13ks 13:098319060433 579
el13ks 15:6d258c667a00 580 while(win==false) {
el13ks 12:3f4d9cb7dd8a 581 lcd.setBrightness(bright);
el13ks 6:af4d3c5a9d43 582 lcd.clear();
el13ks 12:3f4d9cb7dd8a 583 pause();
el13ks 15:6d258c667a00 584 winningcondition();
el13ks 6:af4d3c5a9d43 585 drawPacman();
el13ks 6:af4d3c5a9d43 586 drawMap();
el13ks 6:af4d3c5a9d43 587 drawCoin();
el13ks 6:af4d3c5a9d43 588 checkRight();
el13ks 6:af4d3c5a9d43 589 checkLeft();
el13ks 6:af4d3c5a9d43 590 checkDown();
el13ks 6:af4d3c5a9d43 591 checkUp();
el13ks 6:af4d3c5a9d43 592 Joystickcheck();
el13ks 6:af4d3c5a9d43 593 Boundarycheck();
el13ks 6:af4d3c5a9d43 594 checkCoin();
el13ks 9:d36fed674428 595 lcd.refresh();
el13ks 10:cc0621fbe99b 596 wait_ms(35);
el13ks 11:2fd81f59d7a7 597
el13ks 6:af4d3c5a9d43 598 }
el13ks 15:6d258c667a00 599 if (win==true){
el13ks 15:6d258c667a00 600 lcd.clear();
el13ks 15:6d258c667a00 601 lcd.printString("Yay", 25,21);
el13ks 6:af4d3c5a9d43 602 }
el13ks 15:6d258c667a00 603 }
el13ks 15:6d258c667a00 604