C++ code for snake game

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player

Fork of MPR121_Demo by jim hamblen

Committer:
ykuris3
Date:
Mon Mar 13 20:01:41 2017 +0000
Revision:
1:2eaf4c475fde
Parent:
0:e09703934ff4
Child:
2:97ec9d79e015
for notebook page

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ykuris3 1:2eaf4c475fde 1 #include "mbed.h"
ykuris3 1:2eaf4c475fde 2 #include "mpr121.h"
ykuris3 1:2eaf4c475fde 3 #include "uLCD_4DGL.h"
ykuris3 1:2eaf4c475fde 4 #include "rtos.h"
ykuris3 1:2eaf4c475fde 5 #include "SDFileSystem.h"
ykuris3 1:2eaf4c475fde 6 #include "wave_player.h"
ykuris3 1:2eaf4c475fde 7 #include <ctime>
4180_1 0:e09703934ff4 8 DigitalOut led1(LED1);
4180_1 0:e09703934ff4 9 DigitalOut led2(LED2);
4180_1 0:e09703934ff4 10 DigitalOut led3(LED3);
4180_1 0:e09703934ff4 11 DigitalOut led4(LED4);
4180_1 0:e09703934ff4 12 // Create the interrupt receiver object on pin 26
4180_1 0:e09703934ff4 13 InterruptIn interrupt(p26);
ykuris3 1:2eaf4c475fde 14 // Setup the i2c bus on pins 9 and 10
ykuris3 1:2eaf4c475fde 15 I2C i2c(p28, p27);
ykuris3 1:2eaf4c475fde 16 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
4180_1 0:e09703934ff4 17 // Setup the Mpr121:
4180_1 0:e09703934ff4 18 // constructor(i2c object, i2c address of the mpr121)
4180_1 0:e09703934ff4 19 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
ykuris3 1:2eaf4c475fde 20 volatile int bnum = 0;
ykuris3 1:2eaf4c475fde 21 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
ykuris3 1:2eaf4c475fde 22 AnalogOut DACout(p18);
ykuris3 1:2eaf4c475fde 23 wave_player waver(&DACout);
ykuris3 1:2eaf4c475fde 24 Timer timer;
4180_1 0:e09703934ff4 25
ykuris3 1:2eaf4c475fde 26 Mutex stdio_mutex;
ykuris3 1:2eaf4c475fde 27
ykuris3 1:2eaf4c475fde 28 Thread t1;
ykuris3 1:2eaf4c475fde 29 Thread t2;
ykuris3 1:2eaf4c475fde 30 Thread t3;
ykuris3 1:2eaf4c475fde 31
ykuris3 1:2eaf4c475fde 32 struct node {
ykuris3 1:2eaf4c475fde 33 int x;
ykuris3 1:2eaf4c475fde 34 int y;
ykuris3 1:2eaf4c475fde 35 node *next;
ykuris3 1:2eaf4c475fde 36 };
ykuris3 1:2eaf4c475fde 37
ykuris3 1:2eaf4c475fde 38 void drawNodes(node *nodes, int color);
ykuris3 1:2eaf4c475fde 39 node* getFoodNode(node *snake);
ykuris3 1:2eaf4c475fde 40 bool nodeCollision(node *nodes, node *snake, int start);
ykuris3 1:2eaf4c475fde 41
ykuris3 1:2eaf4c475fde 42 void startscreen() {
ykuris3 1:2eaf4c475fde 43 FILE *wave_file;
ykuris3 1:2eaf4c475fde 44 stdio_mutex.lock();
ykuris3 1:2eaf4c475fde 45 wave_file=fopen("/sd/startscreen.wav","r");
ykuris3 1:2eaf4c475fde 46 stdio_mutex.unlock();
ykuris3 1:2eaf4c475fde 47 waver.play(wave_file);
ykuris3 1:2eaf4c475fde 48 fclose(wave_file);
4180_1 0:e09703934ff4 49 }
4180_1 0:e09703934ff4 50
ykuris3 1:2eaf4c475fde 51 void gameover() {
ykuris3 1:2eaf4c475fde 52 FILE *wave_file;
ykuris3 1:2eaf4c475fde 53 stdio_mutex.lock();
ykuris3 1:2eaf4c475fde 54 wave_file=fopen("/sd/gameover.wav","r");
ykuris3 1:2eaf4c475fde 55 stdio_mutex.unlock();
ykuris3 1:2eaf4c475fde 56 waver.play(wave_file);
ykuris3 1:2eaf4c475fde 57 fclose(wave_file);
ykuris3 1:2eaf4c475fde 58 }
4180_1 0:e09703934ff4 59
ykuris3 1:2eaf4c475fde 60 void snakedie() {
ykuris3 1:2eaf4c475fde 61 FILE *wave_file;
ykuris3 1:2eaf4c475fde 62 stdio_mutex.lock();
ykuris3 1:2eaf4c475fde 63 wave_file=fopen("/sd/snakedie.wav","r");
ykuris3 1:2eaf4c475fde 64 stdio_mutex.unlock();
ykuris3 1:2eaf4c475fde 65 waver.play(wave_file);
ykuris3 1:2eaf4c475fde 66 fclose(wave_file);
ykuris3 1:2eaf4c475fde 67 }
4180_1 0:e09703934ff4 68
ykuris3 1:2eaf4c475fde 69 void eategg() {
ykuris3 1:2eaf4c475fde 70 FILE *wave_file;
ykuris3 1:2eaf4c475fde 71 stdio_mutex.lock();
ykuris3 1:2eaf4c475fde 72 wave_file=fopen("/sd/eategg2.wav","r");
ykuris3 1:2eaf4c475fde 73 stdio_mutex.unlock();
ykuris3 1:2eaf4c475fde 74 waver.play(wave_file);
ykuris3 1:2eaf4c475fde 75 fclose(wave_file);
ykuris3 1:2eaf4c475fde 76 }
4180_1 0:e09703934ff4 77
ykuris3 1:2eaf4c475fde 78 void stagebegin() {
ykuris3 1:2eaf4c475fde 79 FILE *wave_file;
ykuris3 1:2eaf4c475fde 80 stdio_mutex.lock();
ykuris3 1:2eaf4c475fde 81 wave_file=fopen("/sd/stagebegin.wav","r");
ykuris3 1:2eaf4c475fde 82 stdio_mutex.unlock();
ykuris3 1:2eaf4c475fde 83 waver.play(wave_file);
ykuris3 1:2eaf4c475fde 84 fclose(wave_file);
ykuris3 1:2eaf4c475fde 85 }
ykuris3 1:2eaf4c475fde 86
ykuris3 1:2eaf4c475fde 87 // Key hit/release interrupt routine
ykuris3 1:2eaf4c475fde 88 void fallInterrupt() {
ykuris3 1:2eaf4c475fde 89 int key_code = 0;
ykuris3 1:2eaf4c475fde 90 int i = 0;
ykuris3 1:2eaf4c475fde 91 int value = mpr121.read(0x00);
ykuris3 1:2eaf4c475fde 92 value += mpr121.read(0x01)<<8;
ykuris3 1:2eaf4c475fde 93 // LED demo mod
ykuris3 1:2eaf4c475fde 94 i = 0;
ykuris3 1:2eaf4c475fde 95 // puts key number out to LEDs for demo
ykuris3 1:2eaf4c475fde 96 for (i = 0; i < 12; i++) {
ykuris3 1:2eaf4c475fde 97 if (((value>>i)&0x01) == 1) {
ykuris3 1:2eaf4c475fde 98 key_code=i;
ykuris3 1:2eaf4c475fde 99 }
ykuris3 1:2eaf4c475fde 100 if (key_code != 0) {
ykuris3 1:2eaf4c475fde 101 bnum = key_code;
ykuris3 1:2eaf4c475fde 102 }
ykuris3 1:2eaf4c475fde 103
ykuris3 1:2eaf4c475fde 104 led4=key_code & 0x01;
ykuris3 1:2eaf4c475fde 105 led3=(key_code>>1) & 0x01;
ykuris3 1:2eaf4c475fde 106 led2=(key_code>>2) & 0x01;
ykuris3 1:2eaf4c475fde 107 led1=(key_code>>3) & 0x01;
4180_1 0:e09703934ff4 108 }
ykuris3 1:2eaf4c475fde 109 }
ykuris3 1:2eaf4c475fde 110
ykuris3 1:2eaf4c475fde 111 int main() {
ykuris3 1:2eaf4c475fde 112 timer.start();
4180_1 0:e09703934ff4 113 interrupt.fall(&fallInterrupt);
4180_1 0:e09703934ff4 114 interrupt.mode(PullUp);
ykuris3 1:2eaf4c475fde 115 uLCD.baudrate(3000000);
ykuris3 1:2eaf4c475fde 116 int state = 0;
ykuris3 1:2eaf4c475fde 117 int score;
ykuris3 1:2eaf4c475fde 118 int deltax;
ykuris3 1:2eaf4c475fde 119 int deltay;
ykuris3 1:2eaf4c475fde 120 float waitTime;
ykuris3 1:2eaf4c475fde 121 node *snake;
ykuris3 1:2eaf4c475fde 122 node *start;
ykuris3 1:2eaf4c475fde 123 node *end;
ykuris3 1:2eaf4c475fde 124 node *food;
ykuris3 1:2eaf4c475fde 125 bool foodEaten;
ykuris3 1:2eaf4c475fde 126 bool pause;
ykuris3 1:2eaf4c475fde 127 while (1) {
ykuris3 1:2eaf4c475fde 128 srand((unsigned)timer.read_us());
ykuris3 1:2eaf4c475fde 129 if (state == 0) {
ykuris3 1:2eaf4c475fde 130 t1.start(startscreen);
ykuris3 1:2eaf4c475fde 131 uLCD.cls();
ykuris3 1:2eaf4c475fde 132 uLCD.media_init();
ykuris3 1:2eaf4c475fde 133 uLCD.set_sector_address(0x0000, 0x0104);
ykuris3 1:2eaf4c475fde 134 uLCD.display_video(0,0);
ykuris3 1:2eaf4c475fde 135 bnum = 0;
ykuris3 1:2eaf4c475fde 136 uLCD.cls();
ykuris3 1:2eaf4c475fde 137 uLCD.media_init();
ykuris3 1:2eaf4c475fde 138 uLCD.set_sector_address(0x0000, 0x0000);
ykuris3 1:2eaf4c475fde 139 uLCD.display_image(0,0);
ykuris3 1:2eaf4c475fde 140 while (state == 0) {
ykuris3 1:2eaf4c475fde 141 if (bnum == 6) {
ykuris3 1:2eaf4c475fde 142 state = 1;
ykuris3 1:2eaf4c475fde 143 break;
ykuris3 1:2eaf4c475fde 144 }
ykuris3 1:2eaf4c475fde 145 uLCD.filled_rectangle(0, 100, 127, 127, BLACK);
ykuris3 1:2eaf4c475fde 146 wait(1);
ykuris3 1:2eaf4c475fde 147 if (bnum == 6) {
ykuris3 1:2eaf4c475fde 148 state = 1;
ykuris3 1:2eaf4c475fde 149 break;
ykuris3 1:2eaf4c475fde 150 }
ykuris3 1:2eaf4c475fde 151 uLCD.locate(0, 14);
ykuris3 1:2eaf4c475fde 152 uLCD.printf(" Press Key 6");
ykuris3 1:2eaf4c475fde 153 wait(1);
ykuris3 1:2eaf4c475fde 154 }
ykuris3 1:2eaf4c475fde 155 }
ykuris3 1:2eaf4c475fde 156 if (state == 1) {
ykuris3 1:2eaf4c475fde 157 t1.start(stagebegin);
ykuris3 1:2eaf4c475fde 158 bnum = 0;
ykuris3 1:2eaf4c475fde 159 uLCD.cls();
ykuris3 1:2eaf4c475fde 160 uLCD.filled_rectangle(0, 0, 127, 5, GREEN);
ykuris3 1:2eaf4c475fde 161 uLCD.filled_rectangle(0, 122, 127, 127, GREEN);
ykuris3 1:2eaf4c475fde 162 uLCD.filled_rectangle(0, 0, 5, 127, GREEN);
ykuris3 1:2eaf4c475fde 163 uLCD.filled_rectangle(122, 0, 127, 127, GREEN);
ykuris3 1:2eaf4c475fde 164 uLCD.text_width(2);
ykuris3 1:2eaf4c475fde 165 uLCD.text_height(2);
ykuris3 1:2eaf4c475fde 166 uLCD.text_string("LEVEL 1", 1, 3, FONT_12X16, GREEN);
ykuris3 1:2eaf4c475fde 167 wait(4);
ykuris3 1:2eaf4c475fde 168 uLCD.cls();
ykuris3 1:2eaf4c475fde 169 score = 0;
ykuris3 1:2eaf4c475fde 170 waitTime = 0.4;
ykuris3 1:2eaf4c475fde 171 uLCD.printf("Score: %d", score);
ykuris3 1:2eaf4c475fde 172 uLCD.filled_rectangle(0, 10, 127, 15, 0xEF4400);
ykuris3 1:2eaf4c475fde 173 uLCD.filled_rectangle(0, 122, 127, 127, 0xEF4400);
ykuris3 1:2eaf4c475fde 174 uLCD.filled_rectangle(0, 10, 5, 127, 0xEF4400);
ykuris3 1:2eaf4c475fde 175 uLCD.filled_rectangle(122, 10, 127, 127, 0xEF4400);
ykuris3 1:2eaf4c475fde 176 snake = new node;
ykuris3 1:2eaf4c475fde 177 start = snake;
ykuris3 1:2eaf4c475fde 178 for (int i = 4; i >= 0; i--) {
ykuris3 1:2eaf4c475fde 179 snake->x = 60 + (4*i);
ykuris3 1:2eaf4c475fde 180 snake->y = 60;
ykuris3 1:2eaf4c475fde 181 snake->next = new node;
ykuris3 1:2eaf4c475fde 182 if (i != 0) {
ykuris3 1:2eaf4c475fde 183 snake = snake->next;
ykuris3 1:2eaf4c475fde 184 }
ykuris3 1:2eaf4c475fde 185 }
ykuris3 1:2eaf4c475fde 186 snake->next = 0;
ykuris3 1:2eaf4c475fde 187 end = snake;
ykuris3 1:2eaf4c475fde 188 drawNodes(start, 0x00FF00);
ykuris3 1:2eaf4c475fde 189 food = getFoodNode(start);
ykuris3 1:2eaf4c475fde 190 drawNodes(food, 0xFFCC00);
ykuris3 1:2eaf4c475fde 191 deltax = -1;
ykuris3 1:2eaf4c475fde 192 deltay = 0;
ykuris3 1:2eaf4c475fde 193 state = 1;
ykuris3 1:2eaf4c475fde 194 foodEaten = false;
ykuris3 1:2eaf4c475fde 195 pause = false;
ykuris3 1:2eaf4c475fde 196 while (state == 1) {
ykuris3 1:2eaf4c475fde 197 if (bnum == 6) {
ykuris3 1:2eaf4c475fde 198 pause = !pause;
ykuris3 1:2eaf4c475fde 199 bnum = 0;
ykuris3 1:2eaf4c475fde 200 }
ykuris3 1:2eaf4c475fde 201 if (!pause) {
ykuris3 1:2eaf4c475fde 202 if (bnum == 2 && deltax != 1 && deltay != 0) {
ykuris3 1:2eaf4c475fde 203 deltax = -1;
ykuris3 1:2eaf4c475fde 204 deltay = 0;
ykuris3 1:2eaf4c475fde 205 } else if (bnum == 10 && deltax != -1 && deltay != 0) {
ykuris3 1:2eaf4c475fde 206 deltax = 1;
ykuris3 1:2eaf4c475fde 207 deltay = 0;
ykuris3 1:2eaf4c475fde 208 } else if (bnum == 5 && deltax != 0 && deltay != -1) {
ykuris3 1:2eaf4c475fde 209 deltax = 0;
ykuris3 1:2eaf4c475fde 210 deltay = 1;
ykuris3 1:2eaf4c475fde 211 } else if (bnum == 7 && deltax != 0 && deltay != 1) {
ykuris3 1:2eaf4c475fde 212 deltax = 0;
ykuris3 1:2eaf4c475fde 213 deltay = -1;
ykuris3 1:2eaf4c475fde 214 }
ykuris3 1:2eaf4c475fde 215 snake = new node;
ykuris3 1:2eaf4c475fde 216 snake->x = end->x + (deltax * 4);
ykuris3 1:2eaf4c475fde 217 snake->y = end->y + (deltay * 4);
ykuris3 1:2eaf4c475fde 218 snake->next = 0;
ykuris3 1:2eaf4c475fde 219 if (!(snake->x > 5 && snake->x < 122 && snake->y > 15 && snake->y < 122) || nodeCollision(snake, start, 0)) {
ykuris3 1:2eaf4c475fde 220 t1.start(snakedie);
ykuris3 1:2eaf4c475fde 221 bnum = 0;
ykuris3 1:2eaf4c475fde 222 state = 2;
ykuris3 1:2eaf4c475fde 223 break;
ykuris3 1:2eaf4c475fde 224 } else if (nodeCollision(food, snake, 0)) {
ykuris3 1:2eaf4c475fde 225 t1.start(eategg);
ykuris3 1:2eaf4c475fde 226 if (waitTime > 0) {
ykuris3 1:2eaf4c475fde 227 waitTime -= 0.01;
ykuris3 1:2eaf4c475fde 228 }
ykuris3 1:2eaf4c475fde 229 foodEaten = true;
ykuris3 1:2eaf4c475fde 230 uLCD.filled_rectangle(food->x, food->y, food->x + 3, food->y + 3, 0x000000);
ykuris3 1:2eaf4c475fde 231 end->next = snake;
ykuris3 1:2eaf4c475fde 232 end = snake;
ykuris3 1:2eaf4c475fde 233 drawNodes(end, 0x00FF00);
ykuris3 1:2eaf4c475fde 234 food = getFoodNode(start);
ykuris3 1:2eaf4c475fde 235 drawNodes(food, 0xFFCC00);
ykuris3 1:2eaf4c475fde 236 score += 10;
ykuris3 1:2eaf4c475fde 237 uLCD.filled_rectangle(0, 0, 127, 9, 0x000000);
ykuris3 1:2eaf4c475fde 238 uLCD.locate(0, 0);
ykuris3 1:2eaf4c475fde 239 uLCD.printf("Score: %d", score);
ykuris3 1:2eaf4c475fde 240
ykuris3 1:2eaf4c475fde 241 }
ykuris3 1:2eaf4c475fde 242 if (!foodEaten) {
ykuris3 1:2eaf4c475fde 243 end->next = snake;
ykuris3 1:2eaf4c475fde 244 end = snake;
ykuris3 1:2eaf4c475fde 245 drawNodes(end, 0x00FF00);
ykuris3 1:2eaf4c475fde 246 uLCD.filled_rectangle(start->x, start->y, start->x + 3, start->y + 3, 0x000000);
ykuris3 1:2eaf4c475fde 247 start = start->next;
ykuris3 1:2eaf4c475fde 248 }
ykuris3 1:2eaf4c475fde 249 foodEaten = false;
ykuris3 1:2eaf4c475fde 250 wait(waitTime);
ykuris3 1:2eaf4c475fde 251 }
ykuris3 1:2eaf4c475fde 252 }
ykuris3 1:2eaf4c475fde 253 }
ykuris3 1:2eaf4c475fde 254 if (state == 2) {
ykuris3 1:2eaf4c475fde 255 uLCD.cls();
ykuris3 1:2eaf4c475fde 256 uLCD.filled_rectangle(0, 0, 127, 5, GREEN);
ykuris3 1:2eaf4c475fde 257 uLCD.filled_rectangle(0, 122, 127, 127, GREEN);
ykuris3 1:2eaf4c475fde 258 uLCD.filled_rectangle(0, 0, 5, 127, GREEN);
ykuris3 1:2eaf4c475fde 259 uLCD.filled_rectangle(122, 0, 127, 127, GREEN);
ykuris3 1:2eaf4c475fde 260 uLCD.text_width(2);
ykuris3 1:2eaf4c475fde 261 uLCD.text_height(2);
ykuris3 1:2eaf4c475fde 262 uLCD.text_string("SCORE", 2, 2, FONT_12X16, GREEN);
ykuris3 1:2eaf4c475fde 263 char n_str[10];
ykuris3 1:2eaf4c475fde 264 sprintf(n_str, "%d", score);
ykuris3 1:2eaf4c475fde 265 int loc = 3;
ykuris3 1:2eaf4c475fde 266 if (score == 0) {
ykuris3 1:2eaf4c475fde 267 loc = 4;
ykuris3 1:2eaf4c475fde 268 }
ykuris3 1:2eaf4c475fde 269 uLCD.text_string(n_str, loc, 4, FONT_12X16, GREEN);
ykuris3 1:2eaf4c475fde 270 wait(6);
ykuris3 1:2eaf4c475fde 271 t1.start(gameover);
ykuris3 1:2eaf4c475fde 272 uLCD.cls();
ykuris3 1:2eaf4c475fde 273 uLCD.media_init();
ykuris3 1:2eaf4c475fde 274 uLCD.set_sector_address(0x0000, 0x00C3);
ykuris3 1:2eaf4c475fde 275 uLCD.display_image(0,0);
ykuris3 1:2eaf4c475fde 276 while (state == 2) {
ykuris3 1:2eaf4c475fde 277 if (bnum == 6) {
ykuris3 1:2eaf4c475fde 278 state = 1;
ykuris3 1:2eaf4c475fde 279 break;
ykuris3 1:2eaf4c475fde 280 }
ykuris3 1:2eaf4c475fde 281 uLCD.filled_rectangle(0, 100, 127, 127, BLACK);
ykuris3 1:2eaf4c475fde 282 wait(1);
ykuris3 1:2eaf4c475fde 283 if (bnum == 6) {
ykuris3 1:2eaf4c475fde 284 state = 1;
ykuris3 1:2eaf4c475fde 285 break;
ykuris3 1:2eaf4c475fde 286 }
ykuris3 1:2eaf4c475fde 287 uLCD.locate(0, 14);
ykuris3 1:2eaf4c475fde 288 uLCD.printf(" Press Key 6");
ykuris3 1:2eaf4c475fde 289 wait(1);
ykuris3 1:2eaf4c475fde 290 }
ykuris3 1:2eaf4c475fde 291 }
ykuris3 1:2eaf4c475fde 292 /*
ykuris3 1:2eaf4c475fde 293 mySpeaker.PlayNote(200.0, 0.25, 0.1);
ykuris3 1:2eaf4c475fde 294 mySpeaker.PlayNote(100.0, 0.80, 0.5);
ykuris3 1:2eaf4c475fde 295 mySpeaker.PlayNote(300.0, 0.95, 0.6);
ykuris3 1:2eaf4c475fde 296 mySpeaker.PlayNote(400.0, 0.25, 0.9);
ykuris3 1:2eaf4c475fde 297 switch (bnum) {
ykuris3 1:2eaf4c475fde 298 case 6: //number button 1
ykuris3 1:2eaf4c475fde 299 uLCD.cls();
ykuris3 1:2eaf4c475fde 300 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 301 uLCD.filled_rectangle(50, 50, 100, 90, 0xFF0000);
ykuris3 1:2eaf4c475fde 302 t1.start(sound3);
ykuris3 1:2eaf4c475fde 303 break;
ykuris3 1:2eaf4c475fde 304 case 1: //number button 1
ykuris3 1:2eaf4c475fde 305 uLCD.cls();
ykuris3 1:2eaf4c475fde 306 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 307 uLCD.filled_rectangle(50, 50, 100, 90, 0x0000FF);
ykuris3 1:2eaf4c475fde 308 t1.start(sound1);
ykuris3 1:2eaf4c475fde 309 break;
ykuris3 1:2eaf4c475fde 310 case 2: //number button 1 //snake color
ykuris3 1:2eaf4c475fde 311 uLCD.cls();
ykuris3 1:2eaf4c475fde 312 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 313 uLCD.filled_rectangle(50, 50, 100, 90, 0x00FF00);
ykuris3 1:2eaf4c475fde 314 t1.start(sound2);
ykuris3 1:2eaf4c475fde 315 break;
ykuris3 1:2eaf4c475fde 316 case 3: //number button 1 //food color
ykuris3 1:2eaf4c475fde 317 uLCD.cls();
ykuris3 1:2eaf4c475fde 318 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 319 uLCD.filled_rectangle(50, 50, 100, 90, 0xFFCC00);
ykuris3 1:2eaf4c475fde 320 break;
ykuris3 1:2eaf4c475fde 321 case 4: //number button 1
ykuris3 1:2eaf4c475fde 322 uLCD.cls();
ykuris3 1:2eaf4c475fde 323 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 324 uLCD.filled_rectangle(50, 50, 100, 90, 0x777777);
ykuris3 1:2eaf4c475fde 325 break;
ykuris3 1:2eaf4c475fde 326 case 5: //number button 1
ykuris3 1:2eaf4c475fde 327 uLCD.cls();
ykuris3 1:2eaf4c475fde 328 uLCD.printf("The number is %d", bnum);
ykuris3 1:2eaf4c475fde 329 uLCD.filled_rectangle(50, 50, 100, 90, 0xEF4400);
ykuris3 1:2eaf4c475fde 330 break;
ykuris3 1:2eaf4c475fde 331 default:
ykuris3 1:2eaf4c475fde 332 break;
ykuris3 1:2eaf4c475fde 333 }
ykuris3 1:2eaf4c475fde 334 */
ykuris3 1:2eaf4c475fde 335 }
ykuris3 1:2eaf4c475fde 336 }
4180_1 0:e09703934ff4 337
ykuris3 1:2eaf4c475fde 338 void drawNodes(node *nodes, int color) {
ykuris3 1:2eaf4c475fde 339 while (nodes != 0) {
ykuris3 1:2eaf4c475fde 340 uLCD.filled_rectangle(nodes->x, nodes->y, nodes->x + 3, nodes->y + 3, color);
ykuris3 1:2eaf4c475fde 341 //uLCD.rectangle(nodes->x - 1, nodes->y - 1, nodes->x + 4, nodes->y + 4, BLACK);
ykuris3 1:2eaf4c475fde 342 nodes = nodes->next;
4180_1 0:e09703934ff4 343 }
4180_1 0:e09703934ff4 344 }
4180_1 0:e09703934ff4 345
ykuris3 1:2eaf4c475fde 346 node* getFoodNode(node *snake) {
ykuris3 1:2eaf4c475fde 347 bool leave = false;
ykuris3 1:2eaf4c475fde 348 bool check = false;
ykuris3 1:2eaf4c475fde 349 node *food = new node;
ykuris3 1:2eaf4c475fde 350 food->next = 0;
ykuris3 1:2eaf4c475fde 351 while (!leave) {
ykuris3 1:2eaf4c475fde 352 food->x = rand()%111 + 6;
ykuris3 1:2eaf4c475fde 353 food->y = rand()%101 + 16;
ykuris3 1:2eaf4c475fde 354 check = false;
ykuris3 1:2eaf4c475fde 355 check = nodeCollision(food, snake, -3);
ykuris3 1:2eaf4c475fde 356 if (!check) {
ykuris3 1:2eaf4c475fde 357 leave = true;
ykuris3 1:2eaf4c475fde 358 }
ykuris3 1:2eaf4c475fde 359 }
ykuris3 1:2eaf4c475fde 360 return food;
ykuris3 1:2eaf4c475fde 361 }
4180_1 0:e09703934ff4 362
ykuris3 1:2eaf4c475fde 363 bool nodeCollision(node *nodes, node *snake, int start) {
ykuris3 1:2eaf4c475fde 364 while (snake != 0) {
ykuris3 1:2eaf4c475fde 365 for (int i = 0; i < 4; i++) {
ykuris3 1:2eaf4c475fde 366 for (int j = 0; j < 4; j++) {
ykuris3 1:2eaf4c475fde 367 for (int a = start; a < 4; a++) {
ykuris3 1:2eaf4c475fde 368 for (int b = start; b < 4; b++) {
ykuris3 1:2eaf4c475fde 369 if (((snake->x + i) == (nodes->x + a)) && ((snake->y + j) == (nodes->y + b))) {
ykuris3 1:2eaf4c475fde 370 return true;
ykuris3 1:2eaf4c475fde 371 }
ykuris3 1:2eaf4c475fde 372 }
ykuris3 1:2eaf4c475fde 373 }
ykuris3 1:2eaf4c475fde 374 }
ykuris3 1:2eaf4c475fde 375 }
ykuris3 1:2eaf4c475fde 376 snake = snake->next;
ykuris3 1:2eaf4c475fde 377 }
ykuris3 1:2eaf4c475fde 378 return false;
ykuris3 1:2eaf4c475fde 379 }
ykuris3 1:2eaf4c475fde 380
ykuris3 1:2eaf4c475fde 381
ykuris3 1:2eaf4c475fde 382