
ELEC 2645 Embedded System Project Name: Wang Luyu SID: 200985894
main.cpp@0:075d80c9688d, 2016-05-05 (annotated)
- Committer:
- wangwanglouisa
- Date:
- Thu May 05 09:35:12 2016 +0000
- Revision:
- 0:075d80c9688d
Final test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |