ELEC2645 (2015/16) / Mbed 2 deprecated Gameinitial

Dependencies:   N5110 mbed

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?

UserRevisionLine numberNew 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