The original snake game for the mbedgc

Dependencies:   mbed EthernetNetIf HTTPClient

Fork of SimpleLib_03272011 by J.P. Armstrong

Committer:
jp
Date:
Thu Aug 22 00:28:15 2013 +0000
Revision:
2:da81fd97aa86
Parent:
1:3606fe561f47
getting it working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jp 0:011be8250218 1 #include "mbed.h"
jp 0:011be8250218 2 #include "mbedGC/mbedgc.h"
jp 0:011be8250218 3 #include "Snake.h"
jp 0:011be8250218 4 #include "sprites.h"
jp 0:011be8250218 5 #include <string>
jp 0:011be8250218 6 #include "EthernetNetIf.h"
jp 0:011be8250218 7 #include "HTTPClient.h"
jp 0:011be8250218 8
jp 0:011be8250218 9 EthernetNetIf eth;
jp 0:011be8250218 10
jp 0:011be8250218 11 void apples(int);
jp 0:011be8250218 12 void startGame();
jp 0:011be8250218 13 void endGame();
jp 0:011be8250218 14 int networking();
jp 0:011be8250218 15
jp 0:011be8250218 16 void drawNumbers(int, int, unsigned char, int);
jp 0:011be8250218 17 void drawStrings(int, int, unsigned char, string);
jp 0:011be8250218 18 Snake snake;
jp 0:011be8250218 19 int snake_x = 60;
jp 0:011be8250218 20 int snake_y = 10;
jp 0:011be8250218 21 int snake_direction = 0;
jp 0:011be8250218 22 int snake_length = 10;
jp 0:011be8250218 23 int snake_apples_eaten = 0;
jp 0:011be8250218 24 float logic_percent = 0;
jp 0:011be8250218 25 int score = 0;
jp 0:011be8250218 26 unsigned char snake_color = 192;
jp 0:011be8250218 27
jp 0:011be8250218 28 bool game_paused = false;
jp 0:011be8250218 29 bool faster = false;
jp 0:011be8250218 30
jp 0:011be8250218 31 const int num_apples = 10;
jp 0:011be8250218 32
jp 0:011be8250218 33
jp 0:011be8250218 34 int main() {
jp 0:011be8250218 35
jp 0:011be8250218 36 // networking();
jp 0:011be8250218 37
jp 0:011be8250218 38 blankFB();
jp 0:011be8250218 39 soundNoteHalf = 0;
jp 0:011be8250218 40
jp 0:011be8250218 41 NVIC_SetPriority(TIMER0_IRQn, 0);
jp 0:011be8250218 42
jp 0:011be8250218 43 COLOR_INIT();
jp 0:011be8250218 44 TIMER0_INIT();
jp 0:011be8250218 45 TIMER0_SETPCLK(CCLK4);
jp 0:011be8250218 46 TIMER0_SETPRESCALE(3000); // 3000 : 134
jp 0:011be8250218 47 TIMER0_SETMATCH(0, 132);
jp 0:011be8250218 48 TIMER0_SETMATCHCONTROL(0, MATCH_RESET | MATCH_INTERRUPT); // Reset and Interrupt each 100ms
jp 0:011be8250218 49 TIMER0_ENABLE_INTERRUPT();
jp 0:011be8250218 50 TIMER0_START();
jp 0:011be8250218 51
jp 0:011be8250218 52 setup();
jp 0:011be8250218 53
jp 0:011be8250218 54 while (1){
jp 0:011be8250218 55 loop();
jp 0:011be8250218 56
jp 0:011be8250218 57 if (hsync_count > 0xFFFFF)
jp 0:011be8250218 58 hsync_count = 0x80000;
jp 0:011be8250218 59
jp 0:011be8250218 60 logic_count++;
jp 0:011be8250218 61
jp 0:011be8250218 62 if (logic_count > 0xFFFFFF)
jp 0:011be8250218 63 logic_count = 0;
jp 0:011be8250218 64 }
jp 0:011be8250218 65
jp 0:011be8250218 66 }
jp 0:011be8250218 67
jp 0:011be8250218 68 void drawRectangle(int x, int y, int width, int height, unsigned char color)
jp 0:011be8250218 69 {
jp 0:011be8250218 70
jp 0:011be8250218 71 if (x < 0 || y < 0)
jp 0:011be8250218 72 return;
jp 0:011be8250218 73
jp 0:011be8250218 74 for (int i = 0; i < height; i++)
jp 0:011be8250218 75 {
jp 0:011be8250218 76
jp 0:011be8250218 77 for (int j = 0; j < width; j++)
jp 0:011be8250218 78 {
jp 0:011be8250218 79
jp 0:011be8250218 80 framebuffer[ (y + i) % fbH ][ (x + j) % fbW ] = color;
jp 0:011be8250218 81
jp 0:011be8250218 82 }
jp 0:011be8250218 83 }
jp 0:011be8250218 84 }
jp 0:011be8250218 85
jp 0:011be8250218 86 void drawCharacter(int x, int y, unsigned char color, char ch) {
jp 0:011be8250218 87
jp 0:011be8250218 88 if (ch <= 'z' && ch >= 'a')
jp 0:011be8250218 89 ch = ch - 'a' + 10;
jp 0:011be8250218 90 else if (ch <= 'Z' && ch >= 'A')
jp 0:011be8250218 91 ch = ch - 'A' + 10;
jp 0:011be8250218 92 else if (ch <= '9' && ch >= '0')
jp 0:011be8250218 93 ch = ch - '0';
jp 0:011be8250218 94 else if (ch == ' ')
jp 0:011be8250218 95 ch = 36;
jp 0:011be8250218 96 else if (ch == '.')
jp 0:011be8250218 97 ch = 37;
jp 0:011be8250218 98
jp 0:011be8250218 99 for (int i = 0; i < 5; i++) {
jp 0:011be8250218 100
jp 0:011be8250218 101 unsigned char buf = alphabet[ch][i];
jp 0:011be8250218 102
jp 0:011be8250218 103 // buf = numbers[ch][i] << 3;
jp 0:011be8250218 104
jp 0:011be8250218 105 for (int j = 4; j >= 0; j--) {
jp 0:011be8250218 106
jp 0:011be8250218 107 framebuffer[(y + i) % fbH ][ (x + j) % fbW ] = (buf % 2) * color;
jp 0:011be8250218 108 buf = ( buf >> 1 );
jp 0:011be8250218 109 }
jp 0:011be8250218 110
jp 0:011be8250218 111 y %= fbH;
jp 0:011be8250218 112
jp 0:011be8250218 113 }
jp 0:011be8250218 114 }
jp 0:011be8250218 115
jp 0:011be8250218 116
jp 0:011be8250218 117 void fill(unsigned char val)
jp 0:011be8250218 118 {
jp 0:011be8250218 119
jp 0:011be8250218 120 for (int i = 0; i < fbH; i++)
jp 0:011be8250218 121 {
jp 0:011be8250218 122
jp 0:011be8250218 123 for (int j = 0; j < fbW; j++)
jp 0:011be8250218 124 {
jp 0:011be8250218 125 framebuffer[i][j] = val;
jp 0:011be8250218 126 }
jp 0:011be8250218 127 }
jp 0:011be8250218 128
jp 0:011be8250218 129 }
jp 0:011be8250218 130
jp 0:011be8250218 131 void blankFB()
jp 0:011be8250218 132 {
jp 0:011be8250218 133
jp 0:011be8250218 134 for (int i = 0; i < fbH; i++)
jp 0:011be8250218 135 {
jp 0:011be8250218 136 for (int j = 0; j < fbW; j++)
jp 0:011be8250218 137 {
jp 0:011be8250218 138 framebuffer[i][j] = 0;
jp 0:011be8250218 139 }
jp 0:011be8250218 140 }
jp 0:011be8250218 141
jp 0:011be8250218 142 }
jp 0:011be8250218 143
jp 0:011be8250218 144 TIMER0_INTERRUPT_HANDLER(void)
jp 0:011be8250218 145 {
jp 0:011be8250218 146 TIMER0_CLEAR_INTERRUPT(MR0_INT);
jp 0:011be8250218 147
jp 0:011be8250218 148 vSync = 1;
jp 0:011be8250218 149 for( int i = 0; i < fbH * 2; i++ )
jp 0:011be8250218 150 {
jp 0:011be8250218 151 COLOR_SET(0);
jp 0:011be8250218 152 hSync = 0;
jp 0:011be8250218 153
jp 0:011be8250218 154 for (int tmp = 0; tmp < 90; tmp++) { // 206
jp 0:011be8250218 155 __nop();
jp 0:011be8250218 156 }
jp 0:011be8250218 157
jp 0:011be8250218 158 hSync = 1;
jp 0:011be8250218 159
jp 0:011be8250218 160 for (int tmp = 0; tmp < 110; tmp++) { // 206
jp 0:011be8250218 161 __nop();
jp 0:011be8250218 162 }
jp 0:011be8250218 163
jp 0:011be8250218 164 for( int j = 0; j < fbW; j++ )
jp 0:011be8250218 165 {
jp 0:011be8250218 166 unsigned char bp = framebuffer[ i / 2 ][ j ];
jp 0:011be8250218 167 COLOR_SET(bp);
jp 0:011be8250218 168
jp 0:011be8250218 169 soundPin = (hsync_count % soundNote < soundNoteHalf) ? 1 : 0;
jp 0:011be8250218 170
jp 0:011be8250218 171 hsync_count++;
jp 0:011be8250218 172
jp 0:011be8250218 173 __nop();
jp 0:011be8250218 174 __nop();
jp 0:011be8250218 175 __nop();
jp 0:011be8250218 176 __nop();
jp 0:011be8250218 177 __nop();
jp 1:3606fe561f47 178 // __nop();
jp 0:011be8250218 179 __nop();
jp 0:011be8250218 180 }
jp 0:011be8250218 181 }
jp 0:011be8250218 182 COLOR_SET(0);
jp 0:011be8250218 183
jp 1:3606fe561f47 184 __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); //__nop();
jp 0:011be8250218 185 // __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();
jp 0:011be8250218 186
jp 0:011be8250218 187 vSync = 0;
jp 0:011be8250218 188
jp 0:011be8250218 189 }
jp 0:011be8250218 190
jp 0:011be8250218 191 int getButton(WiiClassicControllerReader* const ctrlr)
jp 0:011be8250218 192 {
jp 0:011be8250218 193 //int bufSize = 0;
jp 0:011be8250218 194 //char* bufPtr = NULL;
jp 0:011be8250218 195 ctrlr->RequestRead();
jp 0:011be8250218 196
jp 0:011be8250218 197 bool up = !ctrlr->getButtonDU();
jp 0:011be8250218 198 if (up) return 2;
jp 0:011be8250218 199
jp 0:011be8250218 200 bool down = !ctrlr->getButtonDD();
jp 0:011be8250218 201 if (down) return 0;
jp 0:011be8250218 202
jp 0:011be8250218 203 bool left = !ctrlr->getButtonDL();
jp 0:011be8250218 204 if (left) return 3;
jp 0:011be8250218 205
jp 0:011be8250218 206 bool right = !ctrlr->getButtonDR();
jp 0:011be8250218 207 if (right) return 1;
jp 0:011be8250218 208
jp 0:011be8250218 209 if (!ctrlr->getButtonSTART()) {
jp 0:011be8250218 210 game_paused = !game_paused;
jp 0:011be8250218 211 wait(0.5);
jp 0:011be8250218 212 }
jp 0:011be8250218 213
jp 0:011be8250218 214 return -1;
jp 0:011be8250218 215 }
jp 0:011be8250218 216
jp 0:011be8250218 217 // MBEDGC SNAKE BY J.P. ARMSTRONG WWW.JPARMSTRONG.COM
jp 0:011be8250218 218 // LICENSED UNDER GNU PUBLIC LICENSE.
jp 0:011be8250218 219
jp 0:011be8250218 220 void setup()
jp 0:011be8250218 221 {
jp 0:011be8250218 222
jp 0:011be8250218 223 drawStrings(28, 50, 28, "MBEDGC.COM");
jp 0:011be8250218 224
jp 0:011be8250218 225 drawStrings(10, 70, 192, "JP. YIGAL. DANNY.");
jp 0:011be8250218 226 drawStrings(12, 78, 192, "SHAIN. ALFREDO.");
jp 0:011be8250218 227
jp 0:011be8250218 228 wait(3);
jp 0:011be8250218 229 blankFB();
jp 0:011be8250218 230
jp 0:011be8250218 231 drawStrings(30, 50, 192, "FIU SENIOR");
jp 0:011be8250218 232 drawStrings(28, 58, 192, "DESIGN 2011");
jp 0:011be8250218 233
jp 0:011be8250218 234 wait(3);
jp 0:011be8250218 235 blankFB();
jp 0:011be8250218 236 startGame();
jp 0:011be8250218 237 }
jp 0:011be8250218 238
jp 0:011be8250218 239 void loop()
jp 0:011be8250218 240 {
jp 0:011be8250218 241 // KEEP THE SNAKE IN THE FRAMEBUFFER.
jp 0:011be8250218 242 // IF IT'S CORD ARE BEYOND THE FRAMEBUFFER. ADJUST IT.
jp 0:011be8250218 243 if (snake_y <= 0)
jp 0:011be8250218 244 snake_y = fbH - 1;
jp 0:011be8250218 245
jp 0:011be8250218 246 if (snake_x <= 0)
jp 0:011be8250218 247 snake_x = fbW - 1;
jp 0:011be8250218 248
jp 0:011be8250218 249 snake_y %= fbH;
jp 0:011be8250218 250 snake_x %= fbW;
jp 0:011be8250218 251
jp 0:011be8250218 252 // GET VALUE FROM CONTROLLER
jp 0:011be8250218 253 int tmp_sd;
jp 0:011be8250218 254 do {
jp 0:011be8250218 255 tmp_sd = getButton(&ctrlrA);
jp 0:011be8250218 256 }
jp 0:011be8250218 257 while (game_paused);
jp 0:011be8250218 258
jp 0:011be8250218 259 // MAKE SURE BUTTON WAS PRESSED OTHERWISE IGNORE IT.
jp 0:011be8250218 260 if (tmp_sd != -1) {
jp 0:011be8250218 261
jp 0:011be8250218 262 // YOU CAN'T GO LEFT IF YOU'RE ALREADY GOING RIGHT AND VICE VERSA
jp 0:011be8250218 263 // YOU CAN'T GO UP IF YOU'RE ALREADY GOING DOWN AND VICE VERSA
jp 0:011be8250218 264 if (!((snake_direction == 0 && tmp_sd == 2) || (snake_direction == 2 && tmp_sd == 0) ||
jp 0:011be8250218 265 (snake_direction == 3 && tmp_sd == 1) || (snake_direction == 1 && tmp_sd == 3) )) {
jp 0:011be8250218 266 snake_direction = tmp_sd;
jp 0:011be8250218 267 }
jp 0:011be8250218 268 }
jp 0:011be8250218 269
jp 0:011be8250218 270 // PRODUCE NO SOUND
jp 0:011be8250218 271 soundNoteHalf = 0;
jp 0:011be8250218 272
jp 0:011be8250218 273 // INCREMENT OR DECREMENT SNAKE'S COORD DEPENDING ON DIRECTION
jp 0:011be8250218 274 switch (snake_direction)
jp 0:011be8250218 275 {
jp 0:011be8250218 276 case 0:
jp 0:011be8250218 277 snake_y += 2;
jp 0:011be8250218 278 break;
jp 0:011be8250218 279 case 2:
jp 0:011be8250218 280 snake_y -= 2;
jp 0:011be8250218 281 break;
jp 0:011be8250218 282 case 1:
jp 0:011be8250218 283 snake_x += 2;
jp 0:011be8250218 284 break;
jp 0:011be8250218 285 case 3:
jp 0:011be8250218 286 snake_x -= 2;
jp 0:011be8250218 287 break;
jp 0:011be8250218 288 }
jp 0:011be8250218 289
jp 0:011be8250218 290 // IF LOCATION SNAKE IS GOING IS AN APPLE. EAT IT.
jp 0:011be8250218 291 if (framebuffer[snake_y][snake_x] == 3) {
jp 0:011be8250218 292
jp 0:011be8250218 293 snake_apples_eaten++;
jp 0:011be8250218 294 snake_length += 2;
jp 0:011be8250218 295
jp 0:011be8250218 296 // DECREASE COUNTDOWN TIMER
jp 0:011be8250218 297 logic_count -= 50;
jp 0:011be8250218 298
jp 0:011be8250218 299 if (logic_count < 0)
jp 0:011be8250218 300 logic_count = 0;
jp 0:011be8250218 301
jp 0:011be8250218 302 score += 5;
jp 0:011be8250218 303
jp 0:011be8250218 304 // BEEP
jp 0:011be8250218 305 soundNote = 3100;
jp 0:011be8250218 306 soundNoteHalf = 1550;
jp 0:011be8250218 307
jp 0:011be8250218 308 // IF NO MORE APPLES ADD N MORE. "NEW LEVEL"
jp 0:011be8250218 309 if (snake_apples_eaten % num_apples == 0) {
jp 0:011be8250218 310
jp 0:011be8250218 311 score += (snake_apples_eaten / 10) * (100 - 100 * ((float) logic_count / 1000));
jp 0:011be8250218 312
jp 0:011be8250218 313 soundNote = 2000;
jp 0:011be8250218 314 soundNoteHalf = 1000;
jp 0:011be8250218 315
jp 0:011be8250218 316 apples(num_apples);
jp 0:011be8250218 317
jp 0:011be8250218 318 }
jp 0:011be8250218 319
jp 0:011be8250218 320 drawNumbers(36, 105, 16, score);
jp 0:011be8250218 321
jp 0:011be8250218 322 }
jp 0:011be8250218 323 // IF NOT AN APPLE, AND NOT EMPTY SPACE, THE SNAKE EITHER
jp 0:011be8250218 324 // HIT THE WALL OR IT ITSELF AND THE GAME IS LOST.
jp 0:011be8250218 325 else if (framebuffer[snake_y][snake_x] != 0) {
jp 0:011be8250218 326
jp 0:011be8250218 327
jp 0:011be8250218 328 endGame();
jp 0:011be8250218 329 startGame();
jp 0:011be8250218 330
jp 0:011be8250218 331
jp 0:011be8250218 332 }
jp 0:011be8250218 333 else {
jp 0:011be8250218 334 soundNote = 4000;
jp 0:011be8250218 335 soundNoteHalf = 0;
jp 0:011be8250218 336 }
jp 0:011be8250218 337
jp 0:011be8250218 338 // ADVANCE THE SNAKE TO NEW POSITION
jp 0:011be8250218 339 snake.addHead(snake_x, snake_y);
jp 0:011be8250218 340 drawRectangle(snake_x, snake_y, 2, 2, snake_color);
jp 0:011be8250218 341
jp 0:011be8250218 342 // REMOVE THE TAIL UNLESS IT ATE AN APPLE.
jp 0:011be8250218 343 while (snake_length <= snake.getSize()) {
jp 0:011be8250218 344 drawRectangle(snake.getTailXCor(), snake.getTailYCor(), 2, 2, 0);
jp 0:011be8250218 345 snake.removeTail();
jp 0:011be8250218 346 }
jp 0:011be8250218 347
jp 0:011be8250218 348
jp 0:011be8250218 349 // COUNT DOWN
jp 0:011be8250218 350 logic_percent = (float) logic_count / 1000 ;
jp 0:011be8250218 351 drawRectangle(60, 106, 48, 4 , 0);
jp 0:011be8250218 352
jp 0:011be8250218 353 if ((logic_percent * 100) < 75.0) {
jp 0:011be8250218 354 drawRectangle(60, 106, 48 - 48 * logic_percent, 4 , 192);
jp 0:011be8250218 355 }
jp 0:011be8250218 356 else {
jp 0:011be8250218 357
jp 0:011be8250218 358 if ((logic_percent * 100) > 100) {
jp 0:011be8250218 359 endGame();
jp 0:011be8250218 360 startGame();
jp 0:011be8250218 361 }
jp 0:011be8250218 362 else {
jp 0:011be8250218 363 drawRectangle(60, 106, 48 - 48 * logic_percent, 4 , 3);
jp 0:011be8250218 364 }
jp 0:011be8250218 365
jp 0:011be8250218 366 if (logic_count % 20 == 0) {
jp 0:011be8250218 367 soundNote = 4000;
jp 0:011be8250218 368 soundNoteHalf = 2000;
jp 0:011be8250218 369 }
jp 0:011be8250218 370 else {
jp 0:011be8250218 371 soundNoteHalf = 0;
jp 0:011be8250218 372 }
jp 0:011be8250218 373 }
jp 0:011be8250218 374
jp 0:011be8250218 375 // ADD DELAY TO THE LOGIC
jp 0:011be8250218 376 wait(0.05);
jp 0:011be8250218 377 }
jp 0:011be8250218 378
jp 0:011be8250218 379 // SETUP A NEW GAME
jp 0:011be8250218 380 void startGame() {
jp 0:011be8250218 381
jp 0:011be8250218 382 // blank framebuffer
jp 0:011be8250218 383 blankFB();
jp 0:011be8250218 384
jp 0:011be8250218 385 // initialization variables
jp 0:011be8250218 386 snake_x = 60;
jp 0:011be8250218 387 snake_y = 12;
jp 0:011be8250218 388 snake_direction = 0;
jp 0:011be8250218 389 snake_apples_eaten = 0;
jp 0:011be8250218 390 snake_length = 10;
jp 0:011be8250218 391 score = 0;
jp 0:011be8250218 392
jp 0:011be8250218 393
jp 0:011be8250218 394 // add apples
jp 0:011be8250218 395 apples(num_apples);
jp 0:011be8250218 396
jp 0:011be8250218 397 // add head to beginning of snake linked list
jp 0:011be8250218 398 snake.addHead(snake_x, snake_y);
jp 0:011be8250218 399
jp 0:011be8250218 400
jp 0:011be8250218 401 // BLUE BORDERS
jp 0:011be8250218 402 drawRectangle(4, 10, 2, 90, 16);
jp 0:011be8250218 403 drawRectangle(4, 10, 104, 2, 16);
jp 0:011be8250218 404
jp 0:011be8250218 405 drawRectangle(108, 10, 2, 90, 16);
jp 0:011be8250218 406 drawRectangle(4, 100, 106, 2, 16);
jp 0:011be8250218 407
jp 0:011be8250218 408 // COUNTDOWN
jp 0:011be8250218 409 drawRectangle(59, 105, 50, 6 , 16);
jp 0:011be8250218 410 drawRectangle(60, 106, 48, 4 , 0);
jp 0:011be8250218 411
jp 0:011be8250218 412 logic_count = 0;
jp 0:011be8250218 413
jp 0:011be8250218 414
jp 0:011be8250218 415 drawNumbers(36, 105, 16, score);
jp 0:011be8250218 416
jp 0:011be8250218 417 }
jp 0:011be8250218 418
jp 0:011be8250218 419 void endGame() {
jp 0:011be8250218 420 // blankFB();
jp 0:011be8250218 421
jp 0:011be8250218 422 soundNote = 4000;
jp 0:011be8250218 423 soundNoteHalf = soundNote / 2;
jp 0:011be8250218 424
jp 0:011be8250218 425 wait(0.1);
jp 0:011be8250218 426
jp 0:011be8250218 427 soundNoteHalf = 0;
jp 0:011be8250218 428
jp 0:011be8250218 429
jp 0:011be8250218 430 drawStrings(30, 40, 192, "GAME OVER");
jp 0:011be8250218 431 drawStrings(28, 50, 192, "MBEDGC.COM");
jp 0:011be8250218 432 drawNumbers(73, 60, 192, score);
jp 0:011be8250218 433
jp 0:011be8250218 434 wait(3);
jp 0:011be8250218 435 blankFB();
jp 0:011be8250218 436 wait(0.1);
jp 0:011be8250218 437
jp 0:011be8250218 438 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
jp 0:011be8250218 439
jp 0:011be8250218 440 FILE *fp = fopen("/local/hs.txt", "a"); // Open "out.txt" on the local file system for writing
jp 0:011be8250218 441
jp 0:011be8250218 442 char buf[16];
jp 0:011be8250218 443 sprintf(buf, "AMS\t%05d\r\n", score);
jp 0:011be8250218 444 fprintf(fp, buf);
jp 0:011be8250218 445
jp 0:011be8250218 446 fclose(fp);
jp 0:011be8250218 447
jp 0:011be8250218 448 }
jp 0:011be8250218 449
jp 0:011be8250218 450 void drawStrings(int x, int y, unsigned char color, string str) {
jp 0:011be8250218 451
jp 0:011be8250218 452 for (int i = 0; i < str.size(); i++) {
jp 0:011be8250218 453 drawCharacter( x + (6 * i), y, color, str[i]);
jp 0:011be8250218 454 }
jp 0:011be8250218 455
jp 0:011be8250218 456 }
jp 0:011be8250218 457
jp 0:011be8250218 458 void drawNumbers(int x, int y, unsigned char color, int num) {
jp 0:011be8250218 459
jp 0:011be8250218 460 for (int i = 1; i <= 5; i++) {
jp 0:011be8250218 461 drawCharacter( x - (6 * i), y, color, num % 10);
jp 0:011be8250218 462 num /= 10;
jp 0:011be8250218 463 }
jp 0:011be8250218 464 }
jp 0:011be8250218 465
jp 0:011be8250218 466 // ADD N APPLES TO THE SCREEN
jp 0:011be8250218 467 void apples(int number) {
jp 0:011be8250218 468
jp 0:011be8250218 469 int i = 0;
jp 0:011be8250218 470 int x = 0, y = 0;
jp 0:011be8250218 471
jp 0:011be8250218 472 do {
jp 0:011be8250218 473 x = 2 * (rand() % (90 / 2)) + 6;
jp 0:011be8250218 474 y = 2 * (rand() % (86 / 2)) + 12;
jp 0:011be8250218 475
jp 0:011be8250218 476 // MAKE SURE YOU DON'T ADD AN APPLE ON THE SNAKE OR WALL
jp 0:011be8250218 477 if (framebuffer[y][x] == 0) {
jp 0:011be8250218 478 drawRectangle(x, y, 2 , 2, 3);
jp 0:011be8250218 479 i++;
jp 0:011be8250218 480 }
jp 0:011be8250218 481
jp 0:011be8250218 482 }
jp 0:011be8250218 483 while (i < number);
jp 0:011be8250218 484 }
jp 0:011be8250218 485
jp 0:011be8250218 486
jp 0:011be8250218 487 DigitalOut mled0(LED1);
jp 0:011be8250218 488 DigitalOut mled1(LED2);
jp 0:011be8250218 489 DigitalOut mled2(LED3);
jp 0:011be8250218 490 DigitalOut mled3(LED4);
jp 0:011be8250218 491
jp 0:011be8250218 492
jp 0:011be8250218 493 int networking() {
jp 0:011be8250218 494
jp 0:011be8250218 495 mled0 = 1;
jp 0:011be8250218 496
jp 0:011be8250218 497 printf("Init\n");
jp 0:011be8250218 498
jp 0:011be8250218 499 printf("\r\nSetting up...\r\n");
jp 0:011be8250218 500 EthernetErr ethErr = eth.setup();
jp 0:011be8250218 501
jp 0:011be8250218 502 mled1 = 1;
jp 0:011be8250218 503
jp 0:011be8250218 504 if(ethErr)
jp 0:011be8250218 505 {
jp 0:011be8250218 506 printf("Error %d in setup.\n", ethErr);
jp 0:011be8250218 507 }
jp 0:011be8250218 508 mled2 = 1;
jp 0:011be8250218 509 printf("\r\nSetup OK\r\n");
jp 0:011be8250218 510
jp 0:011be8250218 511 HTTPClient twitter;
jp 0:011be8250218 512 mled1 = 0;
jp 0:011be8250218 513
jp 0:011be8250218 514 HTTPMap msg;
jp 0:011be8250218 515 mled0 = 0;
jp 0:011be8250218 516 msg["status"] = "I am tweeting from my mbedgc!"; //A good example of Key/Value pair use with Web APIs
jp 0:011be8250218 517
jp 0:011be8250218 518 twitter.basicAuth("mbedgc", "mbgc321"); //We use basic authentication, replace with you account's parameters
jp 0:011be8250218 519 mled0 = 1;
jp 0:011be8250218 520
jp 0:011be8250218 521 //No need to retieve data sent back by the server
jp 0:011be8250218 522 HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL);
jp 0:011be8250218 523
jp 0:011be8250218 524 if( r == HTTP_OK )
jp 0:011be8250218 525 {
jp 0:011be8250218 526 printf("Tweet sent with success!\n");
jp 0:011be8250218 527
jp 0:011be8250218 528 mled3 = 1;
jp 0:011be8250218 529 }
jp 0:011be8250218 530 else
jp 0:011be8250218 531 {
jp 0:011be8250218 532 printf("Problem during tweeting, return code %d\n", r);
jp 0:011be8250218 533 mled2 = 0;
jp 0:011be8250218 534 }
jp 0:011be8250218 535
jp 0:011be8250218 536 return 0;
jp 0:011be8250218 537 }