ELEC 2645 Embedded System Project Name: Wang Luyu SID: 200985894

Dependencies:   N5110 mbed

Committer:
wangwanglouisa
Date:
Thu May 05 09:35:12 2016 +0000
Revision:
0:075d80c9688d
Final test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wangwanglouisa 0:075d80c9688d 1 #include "main.h"
wangwanglouisa 0:075d80c9688d 2
wangwanglouisa 0:075d80c9688d 3 volatile int eat_flag = 0;
wangwanglouisa 0:075d80c9688d 4
wangwanglouisa 0:075d80c9688d 5 void PacmanRight(int pacman_x, int pacman_y) //draw the pacman that the mouth in the right
wangwanglouisa 0:075d80c9688d 6 {
wangwanglouisa 0:075d80c9688d 7 for (int m=pacman_x-1; m<=pacman_x+1; m++)
wangwanglouisa 0:075d80c9688d 8 {
wangwanglouisa 0:075d80c9688d 9 lcd.setPixel (m, pacman_y-4);
wangwanglouisa 0:075d80c9688d 10 lcd.setPixel (m, pacman_y+4);
wangwanglouisa 0:075d80c9688d 11 }
wangwanglouisa 0:075d80c9688d 12
wangwanglouisa 0:075d80c9688d 13 for (int n=pacman_x-3; n<=pacman_x+3; n++)
wangwanglouisa 0:075d80c9688d 14 {
wangwanglouisa 0:075d80c9688d 15 lcd.setPixel (n, pacman_y-3);
wangwanglouisa 0:075d80c9688d 16 lcd.setPixel (n-1, pacman_y-1);
wangwanglouisa 0:075d80c9688d 17 lcd.setPixel (n-1, pacman_y+1);
wangwanglouisa 0:075d80c9688d 18 lcd.setPixel (n, pacman_y+3);
wangwanglouisa 0:075d80c9688d 19 }
wangwanglouisa 0:075d80c9688d 20
wangwanglouisa 0:075d80c9688d 21 for (int p=pacman_x-3; p<=pacman_x+4; p++)
wangwanglouisa 0:075d80c9688d 22 {
wangwanglouisa 0:075d80c9688d 23 lcd.setPixel (p, pacman_y-2);
wangwanglouisa 0:075d80c9688d 24 lcd.setPixel (p, pacman_y+2);
wangwanglouisa 0:075d80c9688d 25 }
wangwanglouisa 0:075d80c9688d 26
wangwanglouisa 0:075d80c9688d 27 for (int q=pacman_x-4; q<=pacman_x; q++)
wangwanglouisa 0:075d80c9688d 28 {
wangwanglouisa 0:075d80c9688d 29 lcd.setPixel (q, pacman_y);
wangwanglouisa 0:075d80c9688d 30 }
wangwanglouisa 0:075d80c9688d 31 }
wangwanglouisa 0:075d80c9688d 32
wangwanglouisa 0:075d80c9688d 33 void PacmanLeft (int pacman_x, int pacman_y) // draw the pacman that the mouth in the left
wangwanglouisa 0:075d80c9688d 34 {
wangwanglouisa 0:075d80c9688d 35 for (int m=pacman_x-1; m<=pacman_x+1; m++)
wangwanglouisa 0:075d80c9688d 36 {
wangwanglouisa 0:075d80c9688d 37 lcd.setPixel (m, pacman_y-4);
wangwanglouisa 0:075d80c9688d 38 lcd.setPixel (m, pacman_y+4);
wangwanglouisa 0:075d80c9688d 39 }
wangwanglouisa 0:075d80c9688d 40
wangwanglouisa 0:075d80c9688d 41 for (int n=pacman_x-3; n<=pacman_x+3; n++)
wangwanglouisa 0:075d80c9688d 42 {
wangwanglouisa 0:075d80c9688d 43 lcd.setPixel (n, pacman_y-3);
wangwanglouisa 0:075d80c9688d 44 lcd.setPixel (n+1, pacman_y-1);
wangwanglouisa 0:075d80c9688d 45 lcd.setPixel (n+1, pacman_y+1);
wangwanglouisa 0:075d80c9688d 46 lcd.setPixel (n, pacman_y+3);
wangwanglouisa 0:075d80c9688d 47 }
wangwanglouisa 0:075d80c9688d 48
wangwanglouisa 0:075d80c9688d 49 for (int p=pacman_x-4; p<=pacman_x+3; p++)
wangwanglouisa 0:075d80c9688d 50 {
wangwanglouisa 0:075d80c9688d 51 lcd.setPixel (p, pacman_y-2);
wangwanglouisa 0:075d80c9688d 52 lcd.setPixel (p, pacman_y+2);
wangwanglouisa 0:075d80c9688d 53 }
wangwanglouisa 0:075d80c9688d 54
wangwanglouisa 0:075d80c9688d 55 for (int q=pacman_x; q<=pacman_x+4; q++)
wangwanglouisa 0:075d80c9688d 56 {
wangwanglouisa 0:075d80c9688d 57 lcd.setPixel (q, pacman_y);
wangwanglouisa 0:075d80c9688d 58 }
wangwanglouisa 0:075d80c9688d 59 }
wangwanglouisa 0:075d80c9688d 60
wangwanglouisa 0:075d80c9688d 61 void PacmanDown(int pacman_x, int pacman_y) //draw the pacman that the mouth in the below
wangwanglouisa 0:075d80c9688d 62 {
wangwanglouisa 0:075d80c9688d 63 for (int m=pacman_y-1; m<=pacman_y+1; m++)
wangwanglouisa 0:075d80c9688d 64 {
wangwanglouisa 0:075d80c9688d 65 lcd.setPixel (pacman_x-4, m);
wangwanglouisa 0:075d80c9688d 66 lcd.setPixel (pacman_x+4, m);
wangwanglouisa 0:075d80c9688d 67 }
wangwanglouisa 0:075d80c9688d 68
wangwanglouisa 0:075d80c9688d 69 for (int n=pacman_y-3; n<=pacman_y+3; n++)
wangwanglouisa 0:075d80c9688d 70 {
wangwanglouisa 0:075d80c9688d 71 lcd.setPixel (pacman_x-3, n);
wangwanglouisa 0:075d80c9688d 72 lcd.setPixel (pacman_x-1, n-1);
wangwanglouisa 0:075d80c9688d 73 lcd.setPixel (pacman_x+1, n-1);
wangwanglouisa 0:075d80c9688d 74 lcd.setPixel (pacman_x+3, n);
wangwanglouisa 0:075d80c9688d 75 }
wangwanglouisa 0:075d80c9688d 76
wangwanglouisa 0:075d80c9688d 77 for (int p=pacman_y-3; p<=pacman_y+4; p++)
wangwanglouisa 0:075d80c9688d 78 {
wangwanglouisa 0:075d80c9688d 79 lcd.setPixel (pacman_x-2, p);
wangwanglouisa 0:075d80c9688d 80 lcd.setPixel (pacman_x+2, p);
wangwanglouisa 0:075d80c9688d 81 }
wangwanglouisa 0:075d80c9688d 82
wangwanglouisa 0:075d80c9688d 83 for (int q=pacman_y-4; q<=pacman_y; q++)
wangwanglouisa 0:075d80c9688d 84 {
wangwanglouisa 0:075d80c9688d 85 lcd.setPixel (pacman_x, q);
wangwanglouisa 0:075d80c9688d 86 }
wangwanglouisa 0:075d80c9688d 87 }
wangwanglouisa 0:075d80c9688d 88
wangwanglouisa 0:075d80c9688d 89 void PacmanUp(int pacman_x, int pacman_y) //draw the pacman that the mouth in the above
wangwanglouisa 0:075d80c9688d 90 {
wangwanglouisa 0:075d80c9688d 91 for (int m=pacman_y-1; m<=pacman_y+1; m++)
wangwanglouisa 0:075d80c9688d 92 {
wangwanglouisa 0:075d80c9688d 93 lcd.setPixel (pacman_x-4, m);
wangwanglouisa 0:075d80c9688d 94 lcd.setPixel (pacman_x+4, m);
wangwanglouisa 0:075d80c9688d 95 }
wangwanglouisa 0:075d80c9688d 96
wangwanglouisa 0:075d80c9688d 97 for (int n=pacman_y-3; n<=pacman_y+3; n++)
wangwanglouisa 0:075d80c9688d 98 {
wangwanglouisa 0:075d80c9688d 99 lcd.setPixel (pacman_x-3, n);
wangwanglouisa 0:075d80c9688d 100 lcd.setPixel (pacman_x-1, n+1);
wangwanglouisa 0:075d80c9688d 101 lcd.setPixel (pacman_x+1, n+1);
wangwanglouisa 0:075d80c9688d 102 lcd.setPixel (pacman_x+3, n);
wangwanglouisa 0:075d80c9688d 103 }
wangwanglouisa 0:075d80c9688d 104
wangwanglouisa 0:075d80c9688d 105 for (int p=pacman_y-4; p<=pacman_y+3; p++)
wangwanglouisa 0:075d80c9688d 106 {
wangwanglouisa 0:075d80c9688d 107 lcd.setPixel (pacman_x-2, p);
wangwanglouisa 0:075d80c9688d 108 lcd.setPixel (pacman_x+2, p);
wangwanglouisa 0:075d80c9688d 109 }
wangwanglouisa 0:075d80c9688d 110
wangwanglouisa 0:075d80c9688d 111 for (int q=pacman_y; q<=pacman_y+4; q++)
wangwanglouisa 0:075d80c9688d 112 {
wangwanglouisa 0:075d80c9688d 113 lcd.setPixel (pacman_x, q);
wangwanglouisa 0:075d80c9688d 114 }
wangwanglouisa 0:075d80c9688d 115 }
wangwanglouisa 0:075d80c9688d 116
wangwanglouisa 0:075d80c9688d 117 void Wall(int wall_x, int wall_y) // draw the wall
wangwanglouisa 0:075d80c9688d 118 {
wangwanglouisa 0:075d80c9688d 119 for (int k=wall_x; k<=wall_x+83; k++) // the x direction of the wall
wangwanglouisa 0:075d80c9688d 120 {
wangwanglouisa 0:075d80c9688d 121 lcd.setPixel (k, wall_y);
wangwanglouisa 0:075d80c9688d 122 lcd.setPixel (k, wall_y+47);
wangwanglouisa 0:075d80c9688d 123
wangwanglouisa 0:075d80c9688d 124 for (int t=wall_y; t<=wall_y+47; t++) // the y direction of the wall
wangwanglouisa 0:075d80c9688d 125 {
wangwanglouisa 0:075d80c9688d 126 lcd.setPixel (wall_x, t);
wangwanglouisa 0:075d80c9688d 127 lcd.setPixel (wall_x+83, t);
wangwanglouisa 0:075d80c9688d 128 }
wangwanglouisa 0:075d80c9688d 129 }
wangwanglouisa 0:075d80c9688d 130 }
wangwanglouisa 0:075d80c9688d 131
wangwanglouisa 0:075d80c9688d 132 int main()
wangwanglouisa 0:075d80c9688d 133 {
wangwanglouisa 0:075d80c9688d 134 // Use the joystick button to see the currently score
wangwanglouisa 0:075d80c9688d 135 button.fall(&joystickbutton_isr);
wangwanglouisa 0:075d80c9688d 136 // Set the operation of the button, pull down
wangwanglouisa 0:075d80c9688d 137 button.mode(PullDown);
wangwanglouisa 0:075d80c9688d 138
wangwanglouisa 0:075d80c9688d 139 // first need to initialise display
wangwanglouisa 0:075d80c9688d 140 lcd.init();
wangwanglouisa 0:075d80c9688d 141
wangwanglouisa 0:075d80c9688d 142 // these are default settings so not strictly needed
wangwanglouisa 0:075d80c9688d 143 lcd.normalMode(); // normal colour mode
wangwanglouisa 0:075d80c9688d 144 lcd.setBrightness(0.5); // put LED backlight on 50%
wangwanglouisa 0:075d80c9688d 145
wangwanglouisa 0:075d80c9688d 146 // can directly print strings at specified co-ordinates
wangwanglouisa 0:075d80c9688d 147 lcd.printString("FOODIE",24,1);
wangwanglouisa 0:075d80c9688d 148 lcd.printString("PACMAN",24,3);
wangwanglouisa 0:075d80c9688d 149 wait(5.0);
wangwanglouisa 0:075d80c9688d 150 lcd.clear();
wangwanglouisa 0:075d80c9688d 151
wangwanglouisa 0:075d80c9688d 152 //show the designer's name and student number
wangwanglouisa 0:075d80c9688d 153 lcd.printString("by Wang Luyu",6,2);
wangwanglouisa 0:075d80c9688d 154 lcd.printString("200985894",15,4);
wangwanglouisa 0:075d80c9688d 155 wait(5.0);
wangwanglouisa 0:075d80c9688d 156 lcd.clear();
wangwanglouisa 0:075d80c9688d 157
wangwanglouisa 0:075d80c9688d 158 calibrateJoystick();
wangwanglouisa 0:075d80c9688d 159
wangwanglouisa 0:075d80c9688d 160 // update the location by using Joystick
wangwanglouisa 0:075d80c9688d 161 // every 0.05 second update the location
wangwanglouisa 0:075d80c9688d 162 pollJoystick.attach(&updateJoystick,0.05);
wangwanglouisa 0:075d80c9688d 163 yellow_led = 1;
wangwanglouisa 0:075d80c9688d 164
wangwanglouisa 0:075d80c9688d 165 while(1) {
wangwanglouisa 0:075d80c9688d 166 if (joystickbutton == true)
wangwanglouisa 0:075d80c9688d 167 {
wangwanglouisa 0:075d80c9688d 168 // present the wall
wangwanglouisa 0:075d80c9688d 169 Wall(Wall_X, Wall_Y);
wangwanglouisa 0:075d80c9688d 170
wangwanglouisa 0:075d80c9688d 171 // present the pacman
wangwanglouisa 0:075d80c9688d 172 PacmanRight(Pacman_X, Pacman_Y);
wangwanglouisa 0:075d80c9688d 173
wangwanglouisa 0:075d80c9688d 174 // if the pacman touch the wall, game over and shows the score
wangwanglouisa 0:075d80c9688d 175 if(Pacman_X-5 == 0||Pacman_X+5 == 83||Pacman_Y-5 == 0||Pacman_Y+5 == 47)
wangwanglouisa 0:075d80c9688d 176 {
wangwanglouisa 0:075d80c9688d 177 gameover_flag = 1;
wangwanglouisa 0:075d80c9688d 178
wangwanglouisa 0:075d80c9688d 179 if (gameover_flag == 1)
wangwanglouisa 0:075d80c9688d 180 {
wangwanglouisa 0:075d80c9688d 181 lcd.clear();
wangwanglouisa 0:075d80c9688d 182 lcd.printString("GAME OVER",15,1);
wangwanglouisa 0:075d80c9688d 183 char s[14];
wangwanglouisa 0:075d80c9688d 184 sprintf(s,"SCORE: %d",score);
wangwanglouisa 0:075d80c9688d 185 lcd.printString(s,15,3);
wangwanglouisa 0:075d80c9688d 186 }
wangwanglouisa 0:075d80c9688d 187 break;
wangwanglouisa 0:075d80c9688d 188 }
wangwanglouisa 0:075d80c9688d 189
wangwanglouisa 0:075d80c9688d 190 if (printFlag) // if flag set, clear flag and print joystick values to serial port
wangwanglouisa 0:075d80c9688d 191 {
wangwanglouisa 0:075d80c9688d 192 printFlag = 0;
wangwanglouisa 0:075d80c9688d 193 yellow_led=0;
wangwanglouisa 0:075d80c9688d 194 eat();
wangwanglouisa 0:075d80c9688d 195 lcd.clear();
wangwanglouisa 0:075d80c9688d 196 food();
wangwanglouisa 0:075d80c9688d 197
wangwanglouisa 0:075d80c9688d 198 // check joystick direction
wangwanglouisa 0:075d80c9688d 199 if (joystick.direction == UP)
wangwanglouisa 0:075d80c9688d 200 {
wangwanglouisa 0:075d80c9688d 201 Pacman_Y += 1;
wangwanglouisa 0:075d80c9688d 202 }
wangwanglouisa 0:075d80c9688d 203
wangwanglouisa 0:075d80c9688d 204 if (joystick.direction == DOWN)
wangwanglouisa 0:075d80c9688d 205 {
wangwanglouisa 0:075d80c9688d 206 Pacman_Y -= 1;
wangwanglouisa 0:075d80c9688d 207 }
wangwanglouisa 0:075d80c9688d 208
wangwanglouisa 0:075d80c9688d 209 if (joystick.direction == LEFT)
wangwanglouisa 0:075d80c9688d 210 {
wangwanglouisa 0:075d80c9688d 211 Pacman_X += 1;
wangwanglouisa 0:075d80c9688d 212 }
wangwanglouisa 0:075d80c9688d 213
wangwanglouisa 0:075d80c9688d 214 if (joystick.direction == RIGHT)
wangwanglouisa 0:075d80c9688d 215 {
wangwanglouisa 0:075d80c9688d 216 Pacman_X -= 1;
wangwanglouisa 0:075d80c9688d 217 }
wangwanglouisa 0:075d80c9688d 218
wangwanglouisa 0:075d80c9688d 219 if (joystick.direction == CENTRE)
wangwanglouisa 0:075d80c9688d 220 {
wangwanglouisa 0:075d80c9688d 221 //PacmanRight(Pacman_X, Pacman_Y);
wangwanglouisa 0:075d80c9688d 222 }
wangwanglouisa 0:075d80c9688d 223
wangwanglouisa 0:075d80c9688d 224 if (joystick.direction == UNKNOWN)
wangwanglouisa 0:075d80c9688d 225 {
wangwanglouisa 0:075d80c9688d 226 //PacmanRight(Pacman_X, Pacman_Y);
wangwanglouisa 0:075d80c9688d 227 }
wangwanglouisa 0:075d80c9688d 228 }
wangwanglouisa 0:075d80c9688d 229 lcd.refresh(); // need to refresh screen
wangwanglouisa 0:075d80c9688d 230 }
wangwanglouisa 0:075d80c9688d 231
wangwanglouisa 0:075d80c9688d 232 else
wangwanglouisa 0:075d80c9688d 233 {
wangwanglouisa 0:075d80c9688d 234 lcd.clear();
wangwanglouisa 0:075d80c9688d 235 char s[14];
wangwanglouisa 0:075d80c9688d 236 sprintf(s,"SCORE: %d",score);
wangwanglouisa 0:075d80c9688d 237 lcd.printString(s,15,2);
wangwanglouisa 0:075d80c9688d 238 lcd.refresh();
wangwanglouisa 0:075d80c9688d 239 }
wangwanglouisa 0:075d80c9688d 240 }
wangwanglouisa 0:075d80c9688d 241 }
wangwanglouisa 0:075d80c9688d 242
wangwanglouisa 0:075d80c9688d 243 // read default positions of the joystick to calibrate later readings
wangwanglouisa 0:075d80c9688d 244 void calibrateJoystick()
wangwanglouisa 0:075d80c9688d 245 {
wangwanglouisa 0:075d80c9688d 246 button.mode(PullDown);
wangwanglouisa 0:075d80c9688d 247
wangwanglouisa 0:075d80c9688d 248 // must not move during calibration
wangwanglouisa 0:075d80c9688d 249 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
wangwanglouisa 0:075d80c9688d 250 joystick.y0 = yPot;
wangwanglouisa 0:075d80c9688d 251 }
wangwanglouisa 0:075d80c9688d 252
wangwanglouisa 0:075d80c9688d 253 void updateJoystick()
wangwanglouisa 0:075d80c9688d 254 {
wangwanglouisa 0:075d80c9688d 255 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
wangwanglouisa 0:075d80c9688d 256 joystick.x = xPot - joystick.x0;
wangwanglouisa 0:075d80c9688d 257 joystick.y = yPot - joystick.y0;
wangwanglouisa 0:075d80c9688d 258
wangwanglouisa 0:075d80c9688d 259 // read button state
wangwanglouisa 0:075d80c9688d 260 joystick.button = button;
wangwanglouisa 0:075d80c9688d 261
wangwanglouisa 0:075d80c9688d 262 // calculate direction depending on x,y values
wangwanglouisa 0:075d80c9688d 263 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
wangwanglouisa 0:075d80c9688d 264 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
wangwanglouisa 0:075d80c9688d 265 joystick.direction = CENTRE;
wangwanglouisa 0:075d80c9688d 266 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
wangwanglouisa 0:075d80c9688d 267 joystick.direction = UP;
wangwanglouisa 0:075d80c9688d 268 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
wangwanglouisa 0:075d80c9688d 269 joystick.direction = DOWN;
wangwanglouisa 0:075d80c9688d 270 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
wangwanglouisa 0:075d80c9688d 271 joystick.direction = RIGHT;
wangwanglouisa 0:075d80c9688d 272 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
wangwanglouisa 0:075d80c9688d 273 joystick.direction = LEFT;
wangwanglouisa 0:075d80c9688d 274 } else {
wangwanglouisa 0:075d80c9688d 275 joystick.direction = UNKNOWN;
wangwanglouisa 0:075d80c9688d 276 }
wangwanglouisa 0:075d80c9688d 277
wangwanglouisa 0:075d80c9688d 278 // set flag for printing
wangwanglouisa 0:075d80c9688d 279 printFlag = 1;
wangwanglouisa 0:075d80c9688d 280 }
wangwanglouisa 0:075d80c9688d 281
wangwanglouisa 0:075d80c9688d 282 void eat()
wangwanglouisa 0:075d80c9688d 283 {
wangwanglouisa 0:075d80c9688d 284 eat_flag = 0;
wangwanglouisa 0:075d80c9688d 285
wangwanglouisa 0:075d80c9688d 286 // the right of the pacman can eat the point
wangwanglouisa 0:075d80c9688d 287 // when the point on the right edge touch the point
wangwanglouisa 0:075d80c9688d 288 // the pacman can 'eat' the 'food'
wangwanglouisa 0:075d80c9688d 289 if (lcd.getPixel(Pacman_X+5,Pacman_Y-2)||lcd.getPixel(Pacman_X+5,Pacman_Y)||lcd.getPixel(Pacman_X+5,Pacman_Y+2)) {
wangwanglouisa 0:075d80c9688d 290 eat_flag = 1;
wangwanglouisa 0:075d80c9688d 291 yellow_led = 1;
wangwanglouisa 0:075d80c9688d 292 score++;
wangwanglouisa 0:075d80c9688d 293 }
wangwanglouisa 0:075d80c9688d 294
wangwanglouisa 0:075d80c9688d 295 // the left of the pacman can eat the point
wangwanglouisa 0:075d80c9688d 296 // when the point on the left edge touch the point
wangwanglouisa 0:075d80c9688d 297 // the pacman can 'eat' the 'food'
wangwanglouisa 0:075d80c9688d 298 if (lcd.getPixel(Pacman_X-5,Pacman_Y-2)||lcd.getPixel(Pacman_X-5,Pacman_Y)||lcd.getPixel(Pacman_X-5,Pacman_Y+2)) {
wangwanglouisa 0:075d80c9688d 299 eat_flag = 1;
wangwanglouisa 0:075d80c9688d 300 yellow_led = 1;
wangwanglouisa 0:075d80c9688d 301 score++;
wangwanglouisa 0:075d80c9688d 302 }
wangwanglouisa 0:075d80c9688d 303
wangwanglouisa 0:075d80c9688d 304 // the top of the pacman can eat the point
wangwanglouisa 0:075d80c9688d 305 // when the point on the upper edge touch the point
wangwanglouisa 0:075d80c9688d 306 // the pacman can 'eat' the 'food'
wangwanglouisa 0:075d80c9688d 307 if (lcd.getPixel(Pacman_X+2,Pacman_Y-5)||lcd.getPixel(Pacman_X,Pacman_Y-5)||lcd.getPixel(Pacman_X-2,Pacman_Y-5)) {
wangwanglouisa 0:075d80c9688d 308 eat_flag = 1;
wangwanglouisa 0:075d80c9688d 309 yellow_led = 1;
wangwanglouisa 0:075d80c9688d 310 score++;
wangwanglouisa 0:075d80c9688d 311 }
wangwanglouisa 0:075d80c9688d 312
wangwanglouisa 0:075d80c9688d 313 // the bottom of the pacman can eat the point
wangwanglouisa 0:075d80c9688d 314 // when the point on the bottom edge touch the point
wangwanglouisa 0:075d80c9688d 315 // the pacman can 'eat' the 'food'
wangwanglouisa 0:075d80c9688d 316 if (lcd.getPixel(Pacman_X+2,Pacman_Y+5)||lcd.getPixel(Pacman_X,Pacman_Y+5)||lcd.getPixel(Pacman_X-2,Pacman_Y+5)) {
wangwanglouisa 0:075d80c9688d 317 eat_flag = 1;
wangwanglouisa 0:075d80c9688d 318 yellow_led = 1;
wangwanglouisa 0:075d80c9688d 319 score++;
wangwanglouisa 0:075d80c9688d 320 }
wangwanglouisa 0:075d80c9688d 321 }
wangwanglouisa 0:075d80c9688d 322
wangwanglouisa 0:075d80c9688d 323 void food()
wangwanglouisa 0:075d80c9688d 324 {
wangwanglouisa 0:075d80c9688d 325 if (eat_flag) {
wangwanglouisa 0:075d80c9688d 326 // new food
wangwanglouisa 0:075d80c9688d 327 x_square = rand()%(82-2)+2;
wangwanglouisa 0:075d80c9688d 328 y_square = rand()%(46-2)+2;
wangwanglouisa 0:075d80c9688d 329 lcd.drawRect(x_square,y_square,2,2,1);
wangwanglouisa 0:075d80c9688d 330 }
wangwanglouisa 0:075d80c9688d 331 else if(eat_flag == 0) {
wangwanglouisa 0:075d80c9688d 332 lcd.drawRect(x_square,y_square,2,2,1);
wangwanglouisa 0:075d80c9688d 333 }
wangwanglouisa 0:075d80c9688d 334 }
wangwanglouisa 0:075d80c9688d 335
wangwanglouisa 0:075d80c9688d 336 void yellow()
wangwanglouisa 0:075d80c9688d 337 {
wangwanglouisa 0:075d80c9688d 338 // on-board LEDs are active-low, so set pin high to turn them off.
wangwanglouisa 0:075d80c9688d 339 yellow_led = ! yellow_led;
wangwanglouisa 0:075d80c9688d 340 }
wangwanglouisa 0:075d80c9688d 341
wangwanglouisa 0:075d80c9688d 342
wangwanglouisa 0:075d80c9688d 343 void joystickbutton_isr()
wangwanglouisa 0:075d80c9688d 344 {
wangwanglouisa 0:075d80c9688d 345 // use the joystick button to see the currently score
wangwanglouisa 0:075d80c9688d 346 joystickbutton = !joystickbutton;
wangwanglouisa 0:075d80c9688d 347 }