Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@2:fae6fef4f5ad, 2016-05-05 (annotated)
- Committer:
- Honeymeister
- Date:
- Thu May 05 14:53:32 2016 +0000
- Revision:
- 2:fae6fef4f5ad
- Parent:
- 1:2ab3e61fa258
snake game el13dh
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Honeymeister | 0:46009d41b72b | 1 | #include "mbed.h" |
Honeymeister | 0:46009d41b72b | 2 | #include "N5110.h" |
Honeymeister | 0:46009d41b72b | 3 | |
Honeymeister | 0:46009d41b72b | 4 | // VCC, SCE, RST, D/C, MOSI, SCLK, LED |
Honeymeister | 0:46009d41b72b | 5 | N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3); |
Honeymeister | 2:fae6fef4f5ad | 6 | //BusOut leds(PTC5 , PTC7); |
Honeymeister | 0:46009d41b72b | 7 | AnalogIn pot(PTB10); |
Honeymeister | 0:46009d41b72b | 8 | |
Honeymeister | 0:46009d41b72b | 9 | // change this to alter tolerance of joystick direction |
Honeymeister | 2:fae6fef4f5ad | 10 | //#define DIRECTION_TOLERANCE 0.05L |
Honeymeister | 0:46009d41b72b | 11 | |
Honeymeister | 0:46009d41b72b | 12 | // connections for joystick |
Honeymeister | 0:46009d41b72b | 13 | DigitalIn button(PTB11); |
Honeymeister | 0:46009d41b72b | 14 | AnalogIn xPot(PTB2); |
Honeymeister | 0:46009d41b72b | 15 | AnalogIn yPot(PTB3); |
Honeymeister | 0:46009d41b72b | 16 | |
Honeymeister | 0:46009d41b72b | 17 | |
Honeymeister | 2:fae6fef4f5ad | 18 | int x = 42; |
Honeymeister | 2:fae6fef4f5ad | 19 | int y = 24; |
Honeymeister | 2:fae6fef4f5ad | 20 | //int gameStart = 0; |
Honeymeister | 2:fae6fef4f5ad | 21 | |
Honeymeister | 0:46009d41b72b | 22 | int nx= 84; |
Honeymeister | 0:46009d41b72b | 23 | int ny= 48; |
Honeymeister | 2:fae6fef4f5ad | 24 | |
Honeymeister | 0:46009d41b72b | 25 | int NextGen[84][48]= {0}; |
Honeymeister | 1:2ab3e61fa258 | 26 | void splashScreen(); |
Honeymeister | 1:2ab3e61fa258 | 27 | void clearCells(); |
Honeymeister | 1:2ab3e61fa258 | 28 | void Wall(); |
Honeymeister | 1:2ab3e61fa258 | 29 | void snakeBody(char x,char y); |
Honeymeister | 2:fae6fef4f5ad | 30 | //void joystickMovement(); |
Honeymeister | 1:2ab3e61fa258 | 31 | |
Honeymeister | 1:2ab3e61fa258 | 32 | // timer to regularly read the joystick |
Honeymeister | 2:fae6fef4f5ad | 33 | //Ticker pollJoystick; |
Honeymeister | 1:2ab3e61fa258 | 34 | |
Honeymeister | 1:2ab3e61fa258 | 35 | // create enumerated type (0,1,2,3 etc. for direction) |
Honeymeister | 1:2ab3e61fa258 | 36 | // could be extended for diagonals etc. |
Honeymeister | 2:fae6fef4f5ad | 37 | /* |
Honeymeister | 1:2ab3e61fa258 | 38 | enum DirectionName { |
Honeymeister | 1:2ab3e61fa258 | 39 | UP, |
Honeymeister | 1:2ab3e61fa258 | 40 | DOWN, |
Honeymeister | 1:2ab3e61fa258 | 41 | LEFT, |
Honeymeister | 1:2ab3e61fa258 | 42 | RIGHT, |
Honeymeister | 2:fae6fef4f5ad | 43 | CENTRE |
Honeymeister | 1:2ab3e61fa258 | 44 | }; |
Honeymeister | 2:fae6fef4f5ad | 45 | */ |
Honeymeister | 2:fae6fef4f5ad | 46 | /* |
Honeymeister | 1:2ab3e61fa258 | 47 | // struct for Joystick |
Honeymeister | 1:2ab3e61fa258 | 48 | typedef struct JoyStick Joystick; |
Honeymeister | 1:2ab3e61fa258 | 49 | struct JoyStick { |
Honeymeister | 1:2ab3e61fa258 | 50 | float x; // current x value |
Honeymeister | 1:2ab3e61fa258 | 51 | float x0; // 'centred' x value |
Honeymeister | 1:2ab3e61fa258 | 52 | float y; // current y value |
Honeymeister | 1:2ab3e61fa258 | 53 | float y0; // 'centred' y value |
Honeymeister | 1:2ab3e61fa258 | 54 | int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
Honeymeister | 1:2ab3e61fa258 | 55 | DirectionName direction; // current direction |
Honeymeister | 1:2ab3e61fa258 | 56 | }; |
Honeymeister | 2:fae6fef4f5ad | 57 | */ |
Honeymeister | 1:2ab3e61fa258 | 58 | // create struct variable |
Honeymeister | 2:fae6fef4f5ad | 59 | //Joystick joystick; |
Honeymeister | 1:2ab3e61fa258 | 60 | |
Honeymeister | 2:fae6fef4f5ad | 61 | //int printFlag = 0; |
Honeymeister | 1:2ab3e61fa258 | 62 | |
Honeymeister | 1:2ab3e61fa258 | 63 | // function prototypes |
Honeymeister | 2:fae6fef4f5ad | 64 | //void calibrateJoystick(); |
Honeymeister | 2:fae6fef4f5ad | 65 | //void updateJoystick(); |
Honeymeister | 1:2ab3e61fa258 | 66 | |
Honeymeister | 1:2ab3e61fa258 | 67 | int main() |
Honeymeister | 1:2ab3e61fa258 | 68 | { |
Honeymeister | 1:2ab3e61fa258 | 69 | srand(time(NULL)); |
Honeymeister | 1:2ab3e61fa258 | 70 | |
Honeymeister | 1:2ab3e61fa258 | 71 | wait(2); |
Honeymeister | 1:2ab3e61fa258 | 72 | lcd.init(); |
Honeymeister | 1:2ab3e61fa258 | 73 | splashScreen(); |
Honeymeister | 1:2ab3e61fa258 | 74 | clearCells(); |
Honeymeister | 1:2ab3e61fa258 | 75 | wait(0.5); |
Honeymeister | 2:fae6fef4f5ad | 76 | Wall(); |
Honeymeister | 2:fae6fef4f5ad | 77 | snakeBody(x,y); |
Honeymeister | 2:fae6fef4f5ad | 78 | // calibrateJoystick(); // get centred values of joystick |
Honeymeister | 2:fae6fef4f5ad | 79 | // pollJoystick.attach(&updateJoystick,1.0); // read joystick 10 times per second |
Honeymeister | 2:fae6fef4f5ad | 80 | // gameStart = 1; |
Honeymeister | 2:fae6fef4f5ad | 81 | while (1) |
Honeymeister | 2:fae6fef4f5ad | 82 | { |
Honeymeister | 2:fae6fef4f5ad | 83 | int x_joystick = xPot.read() * 1000; // float (0->1) to int (0-1000) |
Honeymeister | 2:fae6fef4f5ad | 84 | int y_joystick = yPot.read() * 1000; |
Honeymeister | 2:fae6fef4f5ad | 85 | |
Honeymeister | 2:fae6fef4f5ad | 86 | wait(0.05); |
Honeymeister | 2:fae6fef4f5ad | 87 | |
Honeymeister | 2:fae6fef4f5ad | 88 | if ( ((x_joystick > 30) && (x_joystick < 100)) && ((y_joystick > 0) && (y_joystick < 5)) ) |
Honeymeister | 2:fae6fef4f5ad | 89 | {// UP |
Honeymeister | 2:fae6fef4f5ad | 90 | lcd.clearPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 91 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 92 | if (y > 0) |
Honeymeister | 2:fae6fef4f5ad | 93 | --y; |
Honeymeister | 2:fae6fef4f5ad | 94 | lcd.setPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 95 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 96 | } |
Honeymeister | 2:fae6fef4f5ad | 97 | else if ( ((x_joystick > 400) && (x_joystick < 600)) && ((y_joystick > 950) && (y_joystick < 1000)) ) |
Honeymeister | 2:fae6fef4f5ad | 98 | { // DOWN |
Honeymeister | 2:fae6fef4f5ad | 99 | lcd.clearPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 100 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 101 | if (y < 48) |
Honeymeister | 2:fae6fef4f5ad | 102 | ++y; |
Honeymeister | 2:fae6fef4f5ad | 103 | lcd.setPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 104 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 105 | } |
Honeymeister | 2:fae6fef4f5ad | 106 | else if ( ((x_joystick > 330) && (x_joystick < 399)) && ((y_joystick > 450) && (y_joystick < 550)) ) |
Honeymeister | 2:fae6fef4f5ad | 107 | {// RIGHT |
Honeymeister | 2:fae6fef4f5ad | 108 | lcd.clearPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 109 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 110 | if (x < 84) |
Honeymeister | 2:fae6fef4f5ad | 111 | ++x; |
Honeymeister | 2:fae6fef4f5ad | 112 | lcd.setPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 113 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 114 | } |
Honeymeister | 2:fae6fef4f5ad | 115 | else if ( ((x_joystick > 230) && (x_joystick < 280)) && ((y_joystick > 450) && (y_joystick < 550)) ) |
Honeymeister | 2:fae6fef4f5ad | 116 | {//LEFT |
Honeymeister | 2:fae6fef4f5ad | 117 | lcd.clearPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 118 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 119 | if (x > 0) |
Honeymeister | 2:fae6fef4f5ad | 120 | --x; |
Honeymeister | 2:fae6fef4f5ad | 121 | lcd.setPixel(x,y); |
Honeymeister | 2:fae6fef4f5ad | 122 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 123 | } |
Honeymeister | 2:fae6fef4f5ad | 124 | |
Honeymeister | 2:fae6fef4f5ad | 125 | // joystickMovement(); |
Honeymeister | 2:fae6fef4f5ad | 126 | // lcd.setBrightness(pot*0.001f); |
Honeymeister | 2:fae6fef4f5ad | 127 | } |
Honeymeister | 2:fae6fef4f5ad | 128 | } |
Honeymeister | 2:fae6fef4f5ad | 129 | /* |
Honeymeister | 2:fae6fef4f5ad | 130 | // read default positions of the joystick to calibrate later readings |
Honeymeister | 2:fae6fef4f5ad | 131 | void calibrateJoystick() |
Honeymeister | 2:fae6fef4f5ad | 132 | { |
Honeymeister | 2:fae6fef4f5ad | 133 | button.mode(PullDown); |
Honeymeister | 2:fae6fef4f5ad | 134 | // must not move during calibration |
Honeymeister | 2:fae6fef4f5ad | 135 | |
Honeymeister | 2:fae6fef4f5ad | 136 | joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) |
Honeymeister | 2:fae6fef4f5ad | 137 | joystick.y0 = yPot; |
Honeymeister | 2:fae6fef4f5ad | 138 | } |
Honeymeister | 2:fae6fef4f5ad | 139 | */ |
Honeymeister | 2:fae6fef4f5ad | 140 | |
Honeymeister | 2:fae6fef4f5ad | 141 | /* |
Honeymeister | 2:fae6fef4f5ad | 142 | void updateJoystick() |
Honeymeister | 2:fae6fef4f5ad | 143 | { |
Honeymeister | 2:fae6fef4f5ad | 144 | // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) |
Honeymeister | 2:fae6fef4f5ad | 145 | joystick.x = xPot - joystick.x0; |
Honeymeister | 2:fae6fef4f5ad | 146 | joystick.y = yPot - joystick.y0; |
Honeymeister | 2:fae6fef4f5ad | 147 | // read button state |
Honeymeister | 2:fae6fef4f5ad | 148 | joystick.button = button; |
Honeymeister | 2:fae6fef4f5ad | 149 | |
Honeymeister | 2:fae6fef4f5ad | 150 | // calculate direction depending on x,y values |
Honeymeister | 2:fae6fef4f5ad | 151 | // tolerance allows a little lee-way in case joystick not exactly in the stated direction |
Honeymeister | 2:fae6fef4f5ad | 152 | if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Honeymeister | 2:fae6fef4f5ad | 153 | joystick.direction = CENTRE; |
Honeymeister | 2:fae6fef4f5ad | 154 | } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Honeymeister | 2:fae6fef4f5ad | 155 | joystick.direction = UP; |
Honeymeister | 2:fae6fef4f5ad | 156 | } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { |
Honeymeister | 2:fae6fef4f5ad | 157 | joystick.direction = DOWN; |
Honeymeister | 2:fae6fef4f5ad | 158 | } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Honeymeister | 2:fae6fef4f5ad | 159 | joystick.direction = RIGHT; |
Honeymeister | 2:fae6fef4f5ad | 160 | } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { |
Honeymeister | 2:fae6fef4f5ad | 161 | joystick.direction = LEFT; |
Honeymeister | 2:fae6fef4f5ad | 162 | } |
Honeymeister | 2:fae6fef4f5ad | 163 | |
Honeymeister | 2:fae6fef4f5ad | 164 | // set flag for printing |
Honeymeister | 2:fae6fef4f5ad | 165 | printFlag = 1; |
Honeymeister | 2:fae6fef4f5ad | 166 | } |
Honeymeister | 2:fae6fef4f5ad | 167 | */ |
Honeymeister | 2:fae6fef4f5ad | 168 | |
Honeymeister | 2:fae6fef4f5ad | 169 | /* |
Honeymeister | 2:fae6fef4f5ad | 170 | void joystickMovement() |
Honeymeister | 1:2ab3e61fa258 | 171 | |
Honeymeister | 1:2ab3e61fa258 | 172 | |
Honeymeister | 1:2ab3e61fa258 | 173 | { |
Honeymeister | 1:2ab3e61fa258 | 174 | |
Honeymeister | 2:fae6fef4f5ad | 175 | while(gameStart) { |
Honeymeister | 1:2ab3e61fa258 | 176 | if (printFlag) { // if flag set, clear flag and print joystick values to serial port |
Honeymeister | 1:2ab3e61fa258 | 177 | printFlag = 0; |
Honeymeister | 1:2ab3e61fa258 | 178 | |
Honeymeister | 1:2ab3e61fa258 | 179 | // check joystick direction |
Honeymeister | 1:2ab3e61fa258 | 180 | if (joystick.direction == UP) |
Honeymeister | 2:fae6fef4f5ad | 181 | j--; |
Honeymeister | 1:2ab3e61fa258 | 182 | if (joystick.direction == DOWN) |
Honeymeister | 2:fae6fef4f5ad | 183 | j++; |
Honeymeister | 1:2ab3e61fa258 | 184 | if (joystick.direction == LEFT) |
Honeymeister | 2:fae6fef4f5ad | 185 | i--; |
Honeymeister | 1:2ab3e61fa258 | 186 | if (joystick.direction == RIGHT) |
Honeymeister | 2:fae6fef4f5ad | 187 | i++; |
Honeymeister | 2:fae6fef4f5ad | 188 | // if (joystick.direction == CENTRE) |
Honeymeister | 2:fae6fef4f5ad | 189 | // lcd.printString(" CENTRE ",5,2); |
Honeymeister | 2:fae6fef4f5ad | 190 | |
Honeymeister | 1:2ab3e61fa258 | 191 | |
Honeymeister | 1:2ab3e61fa258 | 192 | } |
Honeymeister | 2:fae6fef4f5ad | 193 | sleep(); |
Honeymeister | 1:2ab3e61fa258 | 194 | } |
Honeymeister | 1:2ab3e61fa258 | 195 | } |
Honeymeister | 2:fae6fef4f5ad | 196 | */ |
Honeymeister | 0:46009d41b72b | 197 | |
Honeymeister | 0:46009d41b72b | 198 | void splashScreen() //This is the first screen the user sees when the game is turned on |
Honeymeister | 0:46009d41b72b | 199 | { |
Honeymeister | 0:46009d41b72b | 200 | |
Honeymeister | 0:46009d41b72b | 201 | lcd.printString("Welcome To",15,1); |
Honeymeister | 0:46009d41b72b | 202 | wait(1); |
Honeymeister | 0:46009d41b72b | 203 | lcd.printString("D.Honeywell's",3,2); |
Honeymeister | 0:46009d41b72b | 204 | lcd.printString("------------------",1,3); |
Honeymeister | 0:46009d41b72b | 205 | wait(2); |
Honeymeister | 0:46009d41b72b | 206 | lcd.printString("E",15,4); |
Honeymeister | 0:46009d41b72b | 207 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 208 | lcd.printString("EP",15,4); |
Honeymeister | 0:46009d41b72b | 209 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 210 | lcd.printString("EPI",15,4); |
Honeymeister | 0:46009d41b72b | 211 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 212 | lcd.printString("EPIC",15,4); |
Honeymeister | 0:46009d41b72b | 213 | lcd.printString("EPIC ",15,4); |
Honeymeister | 0:46009d41b72b | 214 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 215 | lcd.printString("EPIC G",15,4); |
Honeymeister | 0:46009d41b72b | 216 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 217 | lcd.printString("EPIC GA",15,4); |
Honeymeister | 0:46009d41b72b | 218 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 219 | lcd.printString("EPIC GAM",15,4); |
Honeymeister | 0:46009d41b72b | 220 | wait(0.3); |
Honeymeister | 0:46009d41b72b | 221 | lcd.printString("EPIC GAME",15,4); |
Honeymeister | 0:46009d41b72b | 222 | wait(0.3); |
Honeymeister | 2:fae6fef4f5ad | 223 | |
Honeymeister | 2:fae6fef4f5ad | 224 | } |
Honeymeister | 0:46009d41b72b | 225 | |
Honeymeister | 0:46009d41b72b | 226 | |
Honeymeister | 0:46009d41b72b | 227 | void clearCells() |
Honeymeister | 0:46009d41b72b | 228 | { |
Honeymeister | 0:46009d41b72b | 229 | for (int i = 0; i < nx ; i++) { |
Honeymeister | 0:46009d41b72b | 230 | for (int j = 0; j < ny ; j++) { |
Honeymeister | 0:46009d41b72b | 231 | lcd.clearPixel(i,j); |
Honeymeister | 0:46009d41b72b | 232 | |
Honeymeister | 0:46009d41b72b | 233 | } |
Honeymeister | 0:46009d41b72b | 234 | } |
Honeymeister | 0:46009d41b72b | 235 | lcd.refresh(); |
Honeymeister | 0:46009d41b72b | 236 | |
Honeymeister | 0:46009d41b72b | 237 | } |
Honeymeister | 0:46009d41b72b | 238 | |
Honeymeister | 0:46009d41b72b | 239 | |
Honeymeister | 2:fae6fef4f5ad | 240 | |
Honeymeister | 0:46009d41b72b | 241 | void snakeBody(char x, char y) |
Honeymeister | 0:46009d41b72b | 242 | |
Honeymeister | 0:46009d41b72b | 243 | { |
Honeymeister | 0:46009d41b72b | 244 | lcd.setPixel(x,y); |
Honeymeister | 0:46009d41b72b | 245 | lcd.refresh(); |
Honeymeister | 2:fae6fef4f5ad | 246 | |
Honeymeister | 0:46009d41b72b | 247 | } |
Honeymeister | 0:46009d41b72b | 248 | |
Honeymeister | 2:fae6fef4f5ad | 249 | /* |
Honeymeister | 0:46009d41b72b | 250 | int Rand (int Min = 1, int Max = 83) |
Honeymeister | 2:fae6fef4f5ad | 251 | { |
Honeymeister | 2:fae6fef4f5ad | 252 | static bool First = true; |
Honeymeister | 2:fae6fef4f5ad | 253 | if (First) srand (time (NULL)), First = false; |
Honeymeister | 2:fae6fef4f5ad | 254 | while (7) { |
Honeymeister | 2:fae6fef4f5ad | 255 | int S = rand () % (Max - Min + 1) + Min; |
Honeymeister | 2:fae6fef4f5ad | 256 | if (!((S - 1) % 3)) return S; |
Honeymeister | 2:fae6fef4f5ad | 257 | } |
Honeymeister | 0:46009d41b72b | 258 | } |
Honeymeister | 0:46009d41b72b | 259 | |
Honeymeister | 2:fae6fef4f5ad | 260 | */ |
Honeymeister | 2:fae6fef4f5ad | 261 | |
Honeymeister | 0:46009d41b72b | 262 | void Wall () |
Honeymeister | 0:46009d41b72b | 263 | |
Honeymeister | 0:46009d41b72b | 264 | { |
Honeymeister | 2:fae6fef4f5ad | 265 | |
Honeymeister | 0:46009d41b72b | 266 | lcd.drawRect(0,0,82,46,0); |
Honeymeister | 0:46009d41b72b | 267 | lcd.drawRect(1,1,80,44,0); |
Honeymeister | 2:fae6fef4f5ad | 268 | |
Honeymeister | 0:46009d41b72b | 269 | } |
Honeymeister | 0:46009d41b72b | 270 | |
Honeymeister | 0:46009d41b72b | 271 |