Completed Snake Program

Dependencies:   N5110 PinDetect PowerControl mbed

Fork of DocTest by Craig Evans

Committer:
MBirney
Date:
Tue Apr 14 15:34:37 2015 +0000
Revision:
4:551dea241d0a
Parent:
3:478b090b7e1b
Child:
5:1bfc306466db
Snake moves with joystick as expected(next stage to add food)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MBirney 2:deb61a34ac31 1 #include "mbed.h"
MBirney 2:deb61a34ac31 2 #include "N5110.h"
MBirney 4:551dea241d0a 3 #include <vector>
MBirney 4:551dea241d0a 4 #include <cstddef> // std::size_t
MBirney 4:551dea241d0a 5 #include <valarray>
MBirney 4:551dea241d0a 6 #include <iostream>
MBirney 2:deb61a34ac31 7
MBirney 4:551dea241d0a 8 //#include "PinDetect.h"
MBirney 3:478b090b7e1b 9
MBirney 3:478b090b7e1b 10 // change this to alter tolerance of joystick direction
MBirney 4:551dea241d0a 11 #define DIRECTION_TOLERANCE 0.1
MBirney 4:551dea241d0a 12 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
MBirney 2:deb61a34ac31 13 N5110 lcd(p7,p8,p9,p10,p11,p13,p21);
MBirney 4:551dea241d0a 14 BusOut myleds(LED1,LED2,LED3,LED4);
MBirney 4:551dea241d0a 15 InterruptIn startButton(p16);
MBirney 4:551dea241d0a 16 InterruptIn resetButton(p17);
MBirney 4:551dea241d0a 17
MBirney 3:478b090b7e1b 18 // connections for joystick
MBirney 3:478b090b7e1b 19 DigitalIn button(p18);
MBirney 3:478b090b7e1b 20 AnalogIn xPot(p19);
MBirney 3:478b090b7e1b 21 AnalogIn yPot(p20);
MBirney 4:551dea241d0a 22 Serial serial(USBTX,USBRX);
MBirney 4:551dea241d0a 23 int snake[84][47];
MBirney 4:551dea241d0a 24 bool gamePlaying =0;
MBirney 3:478b090b7e1b 25
MBirney 4:551dea241d0a 26 vector<int> snakeX (5);
MBirney 4:551dea241d0a 27 vector<int> snakeY (5,27);
MBirney 4:551dea241d0a 28
MBirney 4:551dea241d0a 29
MBirney 4:551dea241d0a 30
MBirney 4:551dea241d0a 31
MBirney 4:551dea241d0a 32 //snakeX[4]=21;
MBirney 4:551dea241d0a 33
MBirney 4:551dea241d0a 34 //int snakeX[4]={21,22,23,24}; //5 pixels start position 21 22 23 24 25
MBirney 4:551dea241d0a 35 //int snakeY[4]={27,27,27,27}; //5 pixels y position 27 27 27 27 27
MBirney 4:551dea241d0a 36
MBirney 4:551dea241d0a 37
MBirney 4:551dea241d0a 38 void startingSnake(){
MBirney 4:551dea241d0a 39
MBirney 4:551dea241d0a 40 for (int i=0; i<5; i++){
MBirney 4:551dea241d0a 41 lcd.setPixel(snakeX[i],snakeY[i]);
MBirney 4:551dea241d0a 42 // lcd.drawRect(snakeX[i],snakeY[i],1,1,1);
MBirney 4:551dea241d0a 43 }
MBirney 4:551dea241d0a 44 }
MBirney 4:551dea241d0a 45
MBirney 4:551dea241d0a 46
MBirney 3:478b090b7e1b 47
MBirney 3:478b090b7e1b 48 // timer to regularly read the joystick
MBirney 3:478b090b7e1b 49 Ticker pollJoystick;
MBirney 4:551dea241d0a 50
MBirney 4:551dea241d0a 51 Ticker startGame;
MBirney 3:478b090b7e1b 52
eencae 0:b85460bc73b9 53
MBirney 4:551dea241d0a 54 void Boundary(){
MBirney 3:478b090b7e1b 55
MBirney 4:551dea241d0a 56
MBirney 4:551dea241d0a 57 for(int x = 0; x< 84; x++) {
MBirney 4:551dea241d0a 58 lcd.setPixel(x,0);
MBirney 4:551dea241d0a 59 }
MBirney 4:551dea241d0a 60 for(int x = 0; x< 84; x++) {
MBirney 4:551dea241d0a 61 lcd.setPixel(x,47);
MBirney 4:551dea241d0a 62 }
MBirney 4:551dea241d0a 63 for(int y = 0; y< 48; y++) {
MBirney 4:551dea241d0a 64 lcd.setPixel(0,y);
MBirney 4:551dea241d0a 65 }
MBirney 4:551dea241d0a 66 for(int y = 0; y< 48; y++) {
MBirney 4:551dea241d0a 67 lcd.setPixel(83,y);
MBirney 4:551dea241d0a 68 }
MBirney 4:551dea241d0a 69
MBirney 4:551dea241d0a 70 lcd.refresh();
MBirney 4:551dea241d0a 71
MBirney 4:551dea241d0a 72
MBirney 3:478b090b7e1b 73 }
MBirney 2:deb61a34ac31 74 enum Difficulty {
MBirney 2:deb61a34ac31 75 EASY,
MBirney 2:deb61a34ac31 76 MEDIUM,
MBirney 2:deb61a34ac31 77 HARD,
MBirney 2:deb61a34ac31 78 };
MBirney 3:478b090b7e1b 79
MBirney 2:deb61a34ac31 80 int gameSpeed;//change depending on difficulty selected
eencae 0:b85460bc73b9 81
MBirney 3:478b090b7e1b 82 Difficulty currentDifficulty=EASY;
MBirney 3:478b090b7e1b 83
MBirney 3:478b090b7e1b 84 // create enumerated type (0,1,2,3 etc. for direction)
MBirney 3:478b090b7e1b 85 // could be extended for diagonals etc.
MBirney 3:478b090b7e1b 86 enum DirectionName {
MBirney 3:478b090b7e1b 87 UP,
MBirney 3:478b090b7e1b 88 DOWN,
MBirney 3:478b090b7e1b 89 LEFT,
MBirney 3:478b090b7e1b 90 RIGHT,
MBirney 3:478b090b7e1b 91 CENTRE,
MBirney 3:478b090b7e1b 92 UNKNOWN
MBirney 3:478b090b7e1b 93 };
MBirney 3:478b090b7e1b 94
MBirney 3:478b090b7e1b 95 // struct for Joystick
MBirney 3:478b090b7e1b 96 typedef struct JoyStick Joystick;
MBirney 3:478b090b7e1b 97 struct JoyStick {
MBirney 3:478b090b7e1b 98 float x; // current x value
MBirney 3:478b090b7e1b 99 float x0; // 'centred' x value
MBirney 3:478b090b7e1b 100 float y; // current y value
MBirney 3:478b090b7e1b 101 float y0; // 'centred' y value
MBirney 3:478b090b7e1b 102 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
MBirney 3:478b090b7e1b 103 DirectionName direction; // current direction
MBirney 3:478b090b7e1b 104 };
MBirney 3:478b090b7e1b 105 // create struct variable
MBirney 3:478b090b7e1b 106 Joystick joystick;
MBirney 3:478b090b7e1b 107
MBirney 3:478b090b7e1b 108
MBirney 4:551dea241d0a 109 DirectionName previousDirection =RIGHT;
MBirney 3:478b090b7e1b 110
MBirney 3:478b090b7e1b 111 // read default positions of the joystick to calibrate later readings
MBirney 3:478b090b7e1b 112 void calibrateJoystick()
MBirney 3:478b090b7e1b 113 {
MBirney 3:478b090b7e1b 114 button.mode(PullDown);
MBirney 3:478b090b7e1b 115 // must not move during calibration
MBirney 3:478b090b7e1b 116 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
MBirney 3:478b090b7e1b 117 joystick.y0 = yPot;
MBirney 3:478b090b7e1b 118 }
MBirney 3:478b090b7e1b 119 void updateJoystick()
MBirney 3:478b090b7e1b 120 {
MBirney 3:478b090b7e1b 121 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
MBirney 3:478b090b7e1b 122 joystick.x = xPot - joystick.x0;
MBirney 3:478b090b7e1b 123 joystick.y = yPot - joystick.y0;
MBirney 3:478b090b7e1b 124 // read button state
MBirney 3:478b090b7e1b 125 joystick.button = button;
MBirney 3:478b090b7e1b 126
MBirney 3:478b090b7e1b 127 // calculate direction depending on x,y values
MBirney 3:478b090b7e1b 128 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
MBirney 3:478b090b7e1b 129 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
MBirney 3:478b090b7e1b 130 joystick.direction = CENTRE;
MBirney 3:478b090b7e1b 131 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
MBirney 3:478b090b7e1b 132 joystick.direction = UP;
MBirney 3:478b090b7e1b 133 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
MBirney 3:478b090b7e1b 134 joystick.direction = DOWN;
MBirney 3:478b090b7e1b 135 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
MBirney 3:478b090b7e1b 136 joystick.direction = LEFT; // remember switched this with right
MBirney 3:478b090b7e1b 137 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
MBirney 3:478b090b7e1b 138 joystick.direction = RIGHT;
MBirney 3:478b090b7e1b 139 } else {
MBirney 3:478b090b7e1b 140 joystick.direction = UNKNOWN;
MBirney 3:478b090b7e1b 141 }
MBirney 3:478b090b7e1b 142 }
eencae 0:b85460bc73b9 143
MBirney 4:551dea241d0a 144
MBirney 4:551dea241d0a 145 void updateSnakeArray(){
MBirney 4:551dea241d0a 146
MBirney 4:551dea241d0a 147 if (joystick.direction==LEFT && previousDirection==RIGHT){
MBirney 4:551dea241d0a 148 joystick.direction=RIGHT;
MBirney 4:551dea241d0a 149 }
MBirney 4:551dea241d0a 150
MBirney 4:551dea241d0a 151 if (joystick.direction==RIGHT && previousDirection==LEFT){
MBirney 4:551dea241d0a 152 joystick.direction=LEFT;
MBirney 4:551dea241d0a 153 }
MBirney 4:551dea241d0a 154
MBirney 4:551dea241d0a 155 if (joystick.direction==UP && previousDirection==DOWN){
MBirney 4:551dea241d0a 156 joystick.direction=DOWN;
MBirney 4:551dea241d0a 157 }
MBirney 4:551dea241d0a 158
MBirney 4:551dea241d0a 159 if (joystick.direction==DOWN && previousDirection==UP){
MBirney 4:551dea241d0a 160 joystick.direction=UP;
MBirney 4:551dea241d0a 161 }
MBirney 4:551dea241d0a 162
MBirney 4:551dea241d0a 163 if (joystick.direction==UNKNOWN || joystick.direction==CENTRE){
MBirney 4:551dea241d0a 164 joystick.direction= previousDirection;
MBirney 4:551dea241d0a 165 }
MBirney 4:551dea241d0a 166
MBirney 4:551dea241d0a 167
MBirney 4:551dea241d0a 168 lcd.clearPixel(snakeX[0],snakeY[0]);//delete tail
MBirney 4:551dea241d0a 169 // lcd.drawRect(snakeX[0],snakeY[0],1,1,2);
MBirney 4:551dea241d0a 170
MBirney 4:551dea241d0a 171 for (int i =0; i<snakeX.size(); i++){ // shift elements
MBirney 4:551dea241d0a 172 snakeX[i]=snakeX[i + 1]; // apart from head
MBirney 4:551dea241d0a 173 snakeY[i]=snakeY[i+ 1];
MBirney 4:551dea241d0a 174 }
MBirney 4:551dea241d0a 175
MBirney 4:551dea241d0a 176 switch(joystick.direction){
MBirney 4:551dea241d0a 177
MBirney 4:551dea241d0a 178 case UP:snakeX[4]=snakeX[3];
MBirney 4:551dea241d0a 179 snakeY[4]=snakeY[3]-1;
MBirney 4:551dea241d0a 180 break;
MBirney 4:551dea241d0a 181
MBirney 4:551dea241d0a 182 case DOWN:
MBirney 4:551dea241d0a 183 snakeX[4]=snakeX[3];
MBirney 4:551dea241d0a 184 snakeY[4]=snakeY[3]+1;
MBirney 4:551dea241d0a 185 break;
MBirney 4:551dea241d0a 186
MBirney 4:551dea241d0a 187 case LEFT:
MBirney 4:551dea241d0a 188 snakeX[4]=snakeX[3]-1;
MBirney 4:551dea241d0a 189 snakeY[4]=snakeY[3];
MBirney 4:551dea241d0a 190 break;
MBirney 4:551dea241d0a 191
MBirney 4:551dea241d0a 192 case RIGHT:
MBirney 4:551dea241d0a 193 snakeX[4]=snakeX[3]+1;
MBirney 4:551dea241d0a 194 snakeY[4]=snakeY[3];
MBirney 4:551dea241d0a 195 break;
MBirney 4:551dea241d0a 196
MBirney 4:551dea241d0a 197 case CENTRE:
MBirney 4:551dea241d0a 198 snakeX[4]=snakeX[3]+1;
MBirney 4:551dea241d0a 199 snakeY[4]=snakeY[3];
MBirney 4:551dea241d0a 200 break;
MBirney 4:551dea241d0a 201 case UNKNOWN:
MBirney 4:551dea241d0a 202 snakeX[4]=snakeX[3]+1;
MBirney 4:551dea241d0a 203 snakeY[4]=snakeY[3];
MBirney 4:551dea241d0a 204 break;
MBirney 4:551dea241d0a 205
MBirney 4:551dea241d0a 206
MBirney 4:551dea241d0a 207 }
MBirney 4:551dea241d0a 208
MBirney 4:551dea241d0a 209 /* snakeX[0]=snakeX[1];
MBirney 4:551dea241d0a 210 snakeX[1]=snakeX[2];
MBirney 4:551dea241d0a 211 snakeX[2]=snakeX[3];
MBirney 4:551dea241d0a 212 snakeX[3]=snakeX[4];
MBirney 4:551dea241d0a 213 snakeY[0]=snakeY[1];
MBirney 4:551dea241d0a 214 snakeY[1]=snakeY[2];
MBirney 4:551dea241d0a 215 snakeY[2]=snakeY[3];
MBirney 4:551dea241d0a 216 snakeY[3]=snakeY[4];
MBirney 4:551dea241d0a 217
MBirney 4:551dea241d0a 218
MBirney 4:551dea241d0a 219 */
MBirney 4:551dea241d0a 220
MBirney 4:551dea241d0a 221 }
MBirney 4:551dea241d0a 222
MBirney 4:551dea241d0a 223 void checkForCollision(){
MBirney 4:551dea241d0a 224
MBirney 4:551dea241d0a 225 if (snakeX.back()==0 || snakeX.back()==83 || snakeY.back()==0 ||snakeY.back()==47){
MBirney 4:551dea241d0a 226 startGame.detach();
MBirney 4:551dea241d0a 227 lcd.clear();
MBirney 4:551dea241d0a 228
MBirney 4:551dea241d0a 229
MBirney 4:551dea241d0a 230
MBirney 4:551dea241d0a 231 }
MBirney 4:551dea241d0a 232
MBirney 4:551dea241d0a 233
MBirney 4:551dea241d0a 234 }
MBirney 4:551dea241d0a 235 void startButtonPressed(){
MBirney 4:551dea241d0a 236 gamePlaying=1;
MBirney 4:551dea241d0a 237 myleds=15;
MBirney 4:551dea241d0a 238 }
MBirney 4:551dea241d0a 239
MBirney 4:551dea241d0a 240 void resetButtonPressed(){
MBirney 4:551dea241d0a 241 gamePlaying=0;
MBirney 4:551dea241d0a 242 myleds=0;
MBirney 4:551dea241d0a 243 }
MBirney 2:deb61a34ac31 244 void displaySplash()
MBirney 2:deb61a34ac31 245 {
MBirney 2:deb61a34ac31 246 // these are default settings so not strictly needed
MBirney 2:deb61a34ac31 247 lcd.inverseMode(); // normal colour mode
MBirney 2:deb61a34ac31 248 lcd.setBrightness(0.5); // put LED backlight on 50%
MBirney 2:deb61a34ac31 249
MBirney 2:deb61a34ac31 250 //Draw S
MBirney 2:deb61a34ac31 251 lcd.drawRect(28,10,2,5,1);
MBirney 2:deb61a34ac31 252 lcd.drawRect(15,10,15,2,1);
MBirney 2:deb61a34ac31 253 lcd.drawRect(15,10,2,10,1);
MBirney 2:deb61a34ac31 254 lcd.drawRect(15,20,15,2,1);
MBirney 2:deb61a34ac31 255 lcd.drawRect(28,20,2,10,1);
MBirney 2:deb61a34ac31 256 lcd.drawRect(15,28,15,2,1);
MBirney 2:deb61a34ac31 257 lcd.drawRect(15,25,2,3,1);
MBirney 2:deb61a34ac31 258
MBirney 2:deb61a34ac31 259 lcd.printString("NAKE ",34,3);
MBirney 2:deb61a34ac31 260 lcd.printString("By M.Birney",10,5);
MBirney 2:deb61a34ac31 261 lcd.drawRect(10,5,65,30,0);
MBirney 2:deb61a34ac31 262
MBirney 2:deb61a34ac31 263 // need to refresh display after setting pixels
MBirney 2:deb61a34ac31 264
MBirney 2:deb61a34ac31 265 lcd.refresh();
eencae 0:b85460bc73b9 266 }
eencae 0:b85460bc73b9 267
eencae 0:b85460bc73b9 268
MBirney 2:deb61a34ac31 269
MBirney 2:deb61a34ac31 270 void easySelected() // display when easy is selected
MBirney 2:deb61a34ac31 271 {
MBirney 3:478b090b7e1b 272 currentDifficulty=EASY;
MBirney 2:deb61a34ac31 273 lcd.clear();
MBirney 2:deb61a34ac31 274 lcd.printString("Please Select",2,0);
MBirney 2:deb61a34ac31 275 lcd.printString("Difficulty:",2,1);
MBirney 2:deb61a34ac31 276 lcd.printString("Easy",20,3);
MBirney 2:deb61a34ac31 277 lcd.printString("Medium",20,4);
MBirney 2:deb61a34ac31 278 lcd.printString("Hard",20,5);
MBirney 2:deb61a34ac31 279 lcd.refresh();
MBirney 2:deb61a34ac31 280 lcd.drawCircle(10,27,2,1);
MBirney 2:deb61a34ac31 281 lcd.drawCircle(10,35,2,0);
MBirney 2:deb61a34ac31 282 lcd.drawCircle(10,43,2,0);
MBirney 2:deb61a34ac31 283
MBirney 2:deb61a34ac31 284 gameSpeed= 1.0;
MBirney 2:deb61a34ac31 285 }
MBirney 2:deb61a34ac31 286 void mediumSelected() // display when medium is selected
MBirney 2:deb61a34ac31 287 {
MBirney 3:478b090b7e1b 288 currentDifficulty=MEDIUM;
MBirney 2:deb61a34ac31 289 lcd.clear();
MBirney 2:deb61a34ac31 290 lcd.printString("Please Select",2,0);
MBirney 2:deb61a34ac31 291 lcd.printString("Difficulty:",2,1);
MBirney 2:deb61a34ac31 292 lcd.printString("Easy",20,3);
MBirney 2:deb61a34ac31 293 lcd.printString("Medium",20,4);
MBirney 2:deb61a34ac31 294 lcd.printString("Hard",20,5);
MBirney 2:deb61a34ac31 295 lcd.refresh();
MBirney 2:deb61a34ac31 296 lcd.drawCircle(10,27,2,0);
MBirney 2:deb61a34ac31 297 lcd.drawCircle(10,35,2,1);
MBirney 2:deb61a34ac31 298 lcd.drawCircle(10,43,2,0);
MBirney 2:deb61a34ac31 299 gameSpeed=1.0/4;
MBirney 2:deb61a34ac31 300 }
MBirney 2:deb61a34ac31 301
MBirney 2:deb61a34ac31 302 void hardSelected() // display when hard is selected
MBirney 2:deb61a34ac31 303 {
MBirney 3:478b090b7e1b 304 currentDifficulty=HARD;
MBirney 2:deb61a34ac31 305 lcd.clear();
MBirney 2:deb61a34ac31 306 lcd.printString("Please Select",2,0);
MBirney 2:deb61a34ac31 307 lcd.printString("Difficulty:",2,1);
MBirney 2:deb61a34ac31 308 lcd.printString("Easy",20,3);
MBirney 2:deb61a34ac31 309 lcd.printString("Medium",20,4);
MBirney 2:deb61a34ac31 310 lcd.printString("Hard",20,5);
MBirney 2:deb61a34ac31 311 lcd.refresh();
MBirney 2:deb61a34ac31 312 lcd.drawCircle(10,27,2,0);
MBirney 2:deb61a34ac31 313 lcd.drawCircle(10,35,2,0);
MBirney 2:deb61a34ac31 314 lcd.drawCircle(10,43,2,1);
MBirney 2:deb61a34ac31 315 gameSpeed=1.0/8;
MBirney 2:deb61a34ac31 316 }
MBirney 4:551dea241d0a 317 void drawSnake() {
MBirney 4:551dea241d0a 318
MBirney 4:551dea241d0a 319 for(int x =10; x<15; x++) {
MBirney 4:551dea241d0a 320 lcd.setPixel(x,25);
MBirney 4:551dea241d0a 321 // lcd.drawRect(x,25,2,2,1);
MBirney 4:551dea241d0a 322 snake[x][25]=1;
MBirney 4:551dea241d0a 323 }
MBirney 4:551dea241d0a 324 }
MBirney 4:551dea241d0a 325
MBirney 4:551dea241d0a 326
MBirney 4:551dea241d0a 327 void checkSelectedDifficulty() {
MBirney 4:551dea241d0a 328
MBirney 4:551dea241d0a 329 switch(currentDifficulty) {
MBirney 4:551dea241d0a 330 case EASY:
MBirney 4:551dea241d0a 331
MBirney 4:551dea241d0a 332 switch (joystick.direction) {
MBirney 4:551dea241d0a 333
MBirney 4:551dea241d0a 334 case UP:
MBirney 4:551dea241d0a 335 hardSelected();
MBirney 4:551dea241d0a 336 break;
MBirney 4:551dea241d0a 337
MBirney 4:551dea241d0a 338
MBirney 4:551dea241d0a 339 case DOWN:
MBirney 4:551dea241d0a 340 mediumSelected();
MBirney 4:551dea241d0a 341 break;
MBirney 4:551dea241d0a 342 }
MBirney 4:551dea241d0a 343 break;
MBirney 2:deb61a34ac31 344
MBirney 2:deb61a34ac31 345
MBirney 4:551dea241d0a 346 case MEDIUM:
MBirney 4:551dea241d0a 347
MBirney 4:551dea241d0a 348 switch (joystick.direction) {
MBirney 4:551dea241d0a 349
MBirney 4:551dea241d0a 350 case UP:
MBirney 4:551dea241d0a 351 easySelected();
MBirney 4:551dea241d0a 352 break;
MBirney 4:551dea241d0a 353
MBirney 4:551dea241d0a 354
MBirney 4:551dea241d0a 355 case DOWN:
MBirney 4:551dea241d0a 356 hardSelected();
MBirney 4:551dea241d0a 357 break;
MBirney 4:551dea241d0a 358 }
MBirney 4:551dea241d0a 359
MBirney 4:551dea241d0a 360
MBirney 4:551dea241d0a 361
MBirney 4:551dea241d0a 362 break;
MBirney 4:551dea241d0a 363 case HARD:
MBirney 4:551dea241d0a 364 switch (joystick.direction) {
MBirney 4:551dea241d0a 365
MBirney 4:551dea241d0a 366 case UP:
MBirney 4:551dea241d0a 367 mediumSelected();
MBirney 4:551dea241d0a 368 break;
MBirney 4:551dea241d0a 369
MBirney 4:551dea241d0a 370
MBirney 4:551dea241d0a 371 case DOWN:
MBirney 4:551dea241d0a 372 easySelected();
MBirney 4:551dea241d0a 373 break;
MBirney 4:551dea241d0a 374 }
MBirney 4:551dea241d0a 375 break;
MBirney 4:551dea241d0a 376 }
MBirney 4:551dea241d0a 377 wait(0.2);
MBirney 4:551dea241d0a 378 }
MBirney 4:551dea241d0a 379
MBirney 4:551dea241d0a 380 int updateGameFlag=0;
MBirney 4:551dea241d0a 381 void updateGameISR(){
MBirney 4:551dea241d0a 382 updateGameFlag=1;
MBirney 4:551dea241d0a 383 }
MBirney 2:deb61a34ac31 384
MBirney 2:deb61a34ac31 385 int main()
MBirney 2:deb61a34ac31 386 {
MBirney 3:478b090b7e1b 387
MBirney 2:deb61a34ac31 388 // first need to initialise display
MBirney 2:deb61a34ac31 389 lcd.init();
MBirney 4:551dea241d0a 390
MBirney 2:deb61a34ac31 391 displaySplash();
MBirney 4:551dea241d0a 392 wait(4);
MBirney 2:deb61a34ac31 393 easySelected();
MBirney 3:478b090b7e1b 394 joystick.direction=UNKNOWN;
MBirney 3:478b090b7e1b 395 calibrateJoystick(); // get centred values of joystick
MBirney 4:551dea241d0a 396 pollJoystick.attach(&updateJoystick,1.0/5.0);
MBirney 4:551dea241d0a 397 startGame.attach(&updateGameISR,gameSpeed); // read joystick 10 times per second
MBirney 4:551dea241d0a 398 startButton.mode(PullUp);
MBirney 4:551dea241d0a 399 startButton.rise(&startButtonPressed);
MBirney 4:551dea241d0a 400 resetButton.rise(&resetButtonPressed);
MBirney 4:551dea241d0a 401 // startGame.attach(&startButtonPressed,10);
MBirney 4:551dea241d0a 402
MBirney 4:551dea241d0a 403 while(1) {
MBirney 4:551dea241d0a 404 if (gamePlaying==0){
MBirney 4:551dea241d0a 405 checkSelectedDifficulty();
MBirney 3:478b090b7e1b 406 }
MBirney 4:551dea241d0a 407 else if (gamePlaying==1){
MBirney 4:551dea241d0a 408 lcd.clear();
MBirney 4:551dea241d0a 409 lcd.normalMode(); // normal colour mode
MBirney 4:551dea241d0a 410 Boundary();
MBirney 4:551dea241d0a 411 snakeX[0]=21;
MBirney 4:551dea241d0a 412 snakeX[1]=22;
MBirney 4:551dea241d0a 413 snakeX[2]=23;
MBirney 4:551dea241d0a 414 snakeX[3]=24;
MBirney 4:551dea241d0a 415 snakeX[4]=25;
MBirney 4:551dea241d0a 416 pollJoystick.detach();
MBirney 4:551dea241d0a 417 startGame.attach(&updateGameISR,0.1);
MBirney 4:551dea241d0a 418 startingSnake();
MBirney 4:551dea241d0a 419 lcd.refresh();
MBirney 4:551dea241d0a 420 //init game start time back food
MBirney 4:551dea241d0a 421 while (1){
MBirney 4:551dea241d0a 422 if(updateGameFlag==1){
MBirney 4:551dea241d0a 423 //updateJoystick();
MBirney 4:551dea241d0a 424 updateGameFlag=0;
MBirney 4:551dea241d0a 425 updateJoystick();
MBirney 4:551dea241d0a 426 // lcd.clearPixel(snakeX[0],snakeY[0]);
MBirney 4:551dea241d0a 427 // updateSnakeDirection();
MBirney 4:551dea241d0a 428 updateSnakeArray();
MBirney 4:551dea241d0a 429 for (int i=0;i<snakeX.size();i++){
MBirney 4:551dea241d0a 430 // lcd.drawRect(snakeX[i],snakeY[i],1,1,1);
MBirney 4:551dea241d0a 431 lcd.setPixel(snakeX[i],snakeY[i]);
MBirney 4:551dea241d0a 432 }
MBirney 4:551dea241d0a 433 lcd.refresh();
MBirney 4:551dea241d0a 434 previousDirection=joystick.direction;
MBirney 4:551dea241d0a 435 checkForCollision();
MBirney 4:551dea241d0a 436 }
MBirney 4:551dea241d0a 437
MBirney 4:551dea241d0a 438 }
MBirney 4:551dea241d0a 439
MBirney 4:551dea241d0a 440 }
MBirney 4:551dea241d0a 441 }
MBirney 4:551dea241d0a 442
MBirney 4:551dea241d0a 443
MBirney 2:deb61a34ac31 444
eencae 0:b85460bc73b9 445 }