Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Wed Apr 10 14:37:05 2019 +0000
Revision:
25:e827f1a8fadc
Parent:
24:1c118b071430
Child:
26:3495f7b0ede7
Now if we press back during a game, we go to main menu, also reduced code size

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AhmedPlaymaker 7:48ba87cd79b5 1 #include "SnakevsBlock.h"
AhmedPlaymaker 7:48ba87cd79b5 2
AhmedPlaymaker 7:48ba87cd79b5 3 SnakevsBlock::SnakevsBlock()
AhmedPlaymaker 7:48ba87cd79b5 4 {
AhmedPlaymaker 7:48ba87cd79b5 5
AhmedPlaymaker 7:48ba87cd79b5 6 }
AhmedPlaymaker 7:48ba87cd79b5 7
AhmedPlaymaker 7:48ba87cd79b5 8 SnakevsBlock::~SnakevsBlock()
AhmedPlaymaker 7:48ba87cd79b5 9 {
AhmedPlaymaker 7:48ba87cd79b5 10
AhmedPlaymaker 7:48ba87cd79b5 11 }
AhmedPlaymaker 7:48ba87cd79b5 12
AhmedPlaymaker 7:48ba87cd79b5 13 void SnakevsBlock::init()
AhmedPlaymaker 7:48ba87cd79b5 14 {
AhmedPlaymaker 7:48ba87cd79b5 15 //The snake length configuration and all the other initial information passing will be done here
AhmedPlaymaker 12:1e601b176437 16 length = 3;
AhmedPlaymaker 19:05cc9f801468 17 level = 1;
AhmedPlaymaker 12:1e601b176437 18 foodbuff = 0;
AhmedPlaymaker 12:1e601b176437 19 send=0;
AhmedPlaymaker 13:9785f2404045 20 speed = 1;
AhmedPlaymaker 20:1e6338403427 21 blockgap = 500;
AhmedPlaymaker 19:05cc9f801468 22 blockbuff = 0;
AhmedPlaymaker 22:ee698f66146f 23 for(int i=0; i<=14; i++) {
AhmedPlaymaker 22:ee698f66146f 24 b[i] = 1;
AhmedPlaymaker 22:ee698f66146f 25 }
AhmedPlaymaker 25:e827f1a8fadc 26 _s.init();
AhmedPlaymaker 25:e827f1a8fadc 27 _f.init();
AhmedPlaymaker 25:e827f1a8fadc 28 _ff.init();
AhmedPlaymaker 25:e827f1a8fadc 29 _fff.init();
AhmedPlaymaker 25:e827f1a8fadc 30 _b.init();
AhmedPlaymaker 7:48ba87cd79b5 31 }
AhmedPlaymaker 7:48ba87cd79b5 32
AhmedPlaymaker 7:48ba87cd79b5 33
AhmedPlaymaker 7:48ba87cd79b5 34
AhmedPlaymaker 7:48ba87cd79b5 35 void SnakevsBlock::read_input(Gamepad &pad)
AhmedPlaymaker 7:48ba87cd79b5 36 {
AhmedPlaymaker 7:48ba87cd79b5 37 _d = pad.get_direction(); //Obtains Direction pushed towards on Joystick.
AhmedPlaymaker 7:48ba87cd79b5 38 _mag = pad.get_mag(); //Obtains Magnitude of Joystick.
AhmedPlaymaker 7:48ba87cd79b5 39 }
AhmedPlaymaker 7:48ba87cd79b5 40
AhmedPlaymaker 7:48ba87cd79b5 41 void SnakevsBlock::draw(N5110 &lcd, Gamepad &pad)
AhmedPlaymaker 7:48ba87cd79b5 42 {
AhmedPlaymaker 20:1e6338403427 43 length = _s.draw(pad, lcd, length, level); //Draws the Snake. //Make these snake buffs relative to the snake drops which in turn relate to the game speed
AhmedPlaymaker 9:d1d79d4ee673 44 if(foodbuff >=0) {
AhmedPlaymaker 25:e827f1a8fadc 45 _f.draw(lcd, blockgap, blockbuff); //Draws the first food.
AhmedPlaymaker 9:d1d79d4ee673 46 if(foodbuff >=50) {
AhmedPlaymaker 25:e827f1a8fadc 47 _ff.draw(lcd, blockgap, blockbuff); //Draws the second food.
AhmedPlaymaker 9:d1d79d4ee673 48 if(foodbuff >=80) {
AhmedPlaymaker 25:e827f1a8fadc 49 _fff.draw(lcd, blockgap, blockbuff); //Draws the third food.
AhmedPlaymaker 9:d1d79d4ee673 50 }
AhmedPlaymaker 9:d1d79d4ee673 51 }
AhmedPlaymaker 9:d1d79d4ee673 52 foodbuff +=1;
AhmedPlaymaker 9:d1d79d4ee673 53 }
AhmedPlaymaker 16:7b474f873683 54 if(foodbuff >=8) {
AhmedPlaymaker 19:05cc9f801468 55 send = _b.draw(lcd, length, blocknum, srn, blockgap);
AhmedPlaymaker 19:05cc9f801468 56 }
AhmedPlaymaker 19:05cc9f801468 57 if(foodbuff == 8) {
AhmedPlaymaker 19:05cc9f801468 58 blockbuff = 0;
AhmedPlaymaker 13:9785f2404045 59 }
AhmedPlaymaker 7:48ba87cd79b5 60
AhmedPlaymaker 7:48ba87cd79b5 61 //Code to print length on game screen.
AhmedPlaymaker 7:48ba87cd79b5 62 char bufferscore[14];
AhmedPlaymaker 7:48ba87cd79b5 63 sprintf(bufferscore,"%d",length);
AhmedPlaymaker 25:e827f1a8fadc 64 lcd.printString(bufferscore,1,0);
AhmedPlaymaker 7:48ba87cd79b5 65
AhmedPlaymaker 7:48ba87cd79b5 66 }
AhmedPlaymaker 7:48ba87cd79b5 67
AhmedPlaymaker 7:48ba87cd79b5 68
AhmedPlaymaker 25:e827f1a8fadc 69 int SnakevsBlock::update(Gamepad &pad) //Updates objects on screen.
AhmedPlaymaker 7:48ba87cd79b5 70 {
AhmedPlaymaker 18:b391caa5754c 71 CheckSnakeBlockCollision(pad); //Function checks for when the snake collides with any of the blocks.
AhmedPlaymaker 12:1e601b176437 72 CheckSnakeFoodCollision(pad); //Function checks for when the snake collides with it's food.
AhmedPlaymaker 13:9785f2404045 73 CheckSnakeBlockSidesCollision(pad, _d); //Function checks for when the snake collides with any of the blocks' sides.
AhmedPlaymaker 22:ee698f66146f 74 _s.update(_d,_mag, length, speed, b); //_d is the direction of joystick and b controls thew motion of a section of the snake relative to obstruction
AhmedPlaymaker 9:d1d79d4ee673 75 _f.update();
AhmedPlaymaker 9:d1d79d4ee673 76 _ff.update();
AhmedPlaymaker 9:d1d79d4ee673 77 _fff.update();
AhmedPlaymaker 12:1e601b176437 78 _b.update(blocknum, srn, send);
AhmedPlaymaker 19:05cc9f801468 79 blockbuff++;
AhmedPlaymaker 19:05cc9f801468 80 if(blockbuff == blockgap) { //change this while changing the block drop gap
AhmedPlaymaker 19:05cc9f801468 81 blockbuff = 0;
AhmedPlaymaker 19:05cc9f801468 82 }
AhmedPlaymaker 21:e41126528cc6 83 if(length >= 11) { //to make it easier to react to sudden happenings
AhmedPlaymaker 20:1e6338403427 84 speed = 2;
AhmedPlaymaker 20:1e6338403427 85 }
AhmedPlaymaker 20:1e6338403427 86 else {
AhmedPlaymaker 20:1e6338403427 87 speed = 1;
AhmedPlaymaker 20:1e6338403427 88 }
AhmedPlaymaker 21:e41126528cc6 89 if(length > 15) { //to make progressive levels harder
AhmedPlaymaker 20:1e6338403427 90 blockgap -= 20;
AhmedPlaymaker 19:05cc9f801468 91 level += 1;
AhmedPlaymaker 16:7b474f873683 92 }
AhmedPlaymaker 25:e827f1a8fadc 93 if(pad.check_event(Gamepad::BACK_PRESSED)){ //Waits for Back button to be pressed.
AhmedPlaymaker 25:e827f1a8fadc 94 back = 1;
AhmedPlaymaker 25:e827f1a8fadc 95 //add some warning here and use A as the button to confirm
AhmedPlaymaker 25:e827f1a8fadc 96 SnakevsBlock::init();
AhmedPlaymaker 25:e827f1a8fadc 97 }
AhmedPlaymaker 25:e827f1a8fadc 98 else {
AhmedPlaymaker 25:e827f1a8fadc 99 back = 0;
AhmedPlaymaker 25:e827f1a8fadc 100 }
AhmedPlaymaker 25:e827f1a8fadc 101 return back;
AhmedPlaymaker 7:48ba87cd79b5 102 }
AhmedPlaymaker 7:48ba87cd79b5 103
AhmedPlaymaker 7:48ba87cd79b5 104 void SnakevsBlock::get_pos()
AhmedPlaymaker 7:48ba87cd79b5 105 {
AhmedPlaymaker 9:d1d79d4ee673 106 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 7:48ba87cd79b5 107 //printf("player pos = %f %f \n", player_pos.x, player_pos.y); //top left of player sprite
AhmedPlaymaker 7:48ba87cd79b5 108 // 81.000000 0.000000 top right
AhmedPlaymaker 7:48ba87cd79b5 109 // 0.000000 0.000000 is top left
AhmedPlaymaker 7:48ba87cd79b5 110 // 81.000000 45.000000 bottom right
AhmedPlaymaker 7:48ba87cd79b5 111 snakex = snake_pos.x;
AhmedPlaymaker 7:48ba87cd79b5 112 snakey = snake_pos.y;
AhmedPlaymaker 7:48ba87cd79b5 113 //printf("snakexy in GAME = %d %d \n", snakex, snakey);
AhmedPlaymaker 7:48ba87cd79b5 114 }
AhmedPlaymaker 7:48ba87cd79b5 115
AhmedPlaymaker 9:d1d79d4ee673 116
AhmedPlaymaker 9:d1d79d4ee673 117 void SnakevsBlock::CheckSnakeFoodCollision(Gamepad &pad)
AhmedPlaymaker 9:d1d79d4ee673 118 {
AhmedPlaymaker 9:d1d79d4ee673 119 //Obtains all required coordinates.
AhmedPlaymaker 9:d1d79d4ee673 120
AhmedPlaymaker 9:d1d79d4ee673 121
AhmedPlaymaker 9:d1d79d4ee673 122 Vector2D f_pos = _f.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 123 Vector2D ff_pos = _ff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 124 Vector2D fff_pos = _fff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 125 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 9:d1d79d4ee673 126
AhmedPlaymaker 9:d1d79d4ee673 127 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 9:d1d79d4ee673 128 //of the three food sprites, if so then the food location is reset and
AhmedPlaymaker 9:d1d79d4ee673 129 //length of the snake is increased using the length variable.
AhmedPlaymaker 25:e827f1a8fadc 130 for(int i=0; i<=2; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 25:e827f1a8fadc 131 if (
AhmedPlaymaker 25:e827f1a8fadc 132 ((snake_pos.y + i == f_pos.y) ||
AhmedPlaymaker 25:e827f1a8fadc 133 (snake_pos.y + i == f_pos.y + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 134 (snake_pos.y + i == f_pos.y + 2)) &&
AhmedPlaymaker 25:e827f1a8fadc 135 ((snake_pos.x + i == f_pos.x) ||
AhmedPlaymaker 25:e827f1a8fadc 136 (snake_pos.x + i == f_pos.x + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 137 (snake_pos.x + i == f_pos.x + 2))
AhmedPlaymaker 25:e827f1a8fadc 138 ) {
AhmedPlaymaker 25:e827f1a8fadc 139
AhmedPlaymaker 25:e827f1a8fadc 140 //printf("snake feast working \n");
AhmedPlaymaker 25:e827f1a8fadc 141 //audio feedback
AhmedPlaymaker 25:e827f1a8fadc 142 pad.tone(1000.0,0.1);
AhmedPlaymaker 25:e827f1a8fadc 143 f_pos.x = rand() % 82;
AhmedPlaymaker 25:e827f1a8fadc 144 if((blockbuff>=11)&&(blockbuff<=blockgap-11)) { //this makes sure that the snake food appears seperated from the block
AhmedPlaymaker 25:e827f1a8fadc 145 f_pos.y = -2;
AhmedPlaymaker 25:e827f1a8fadc 146 }
AhmedPlaymaker 25:e827f1a8fadc 147 length+=1;
AhmedPlaymaker 25:e827f1a8fadc 148
AhmedPlaymaker 25:e827f1a8fadc 149 }
AhmedPlaymaker 25:e827f1a8fadc 150
AhmedPlaymaker 25:e827f1a8fadc 151
AhmedPlaymaker 9:d1d79d4ee673 152 if (
AhmedPlaymaker 25:e827f1a8fadc 153 ((snake_pos.y + i== ff_pos.y) ||
AhmedPlaymaker 25:e827f1a8fadc 154 (snake_pos.y + i == ff_pos.y + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 155 (snake_pos.y + i == ff_pos.y + 2)) &&
AhmedPlaymaker 25:e827f1a8fadc 156 ((snake_pos.x + i == ff_pos.x) ||
AhmedPlaymaker 25:e827f1a8fadc 157 (snake_pos.x + i == ff_pos.x + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 158 (snake_pos.x + i == ff_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 159 ) {
AhmedPlaymaker 9:d1d79d4ee673 160
AhmedPlaymaker 9:d1d79d4ee673 161 //printf("snake feast working \n");
AhmedPlaymaker 25:e827f1a8fadc 162 // audio feedback
AhmedPlaymaker 9:d1d79d4ee673 163 pad.tone(1000.0,0.1);
AhmedPlaymaker 25:e827f1a8fadc 164 ff_pos.x = rand() % 82;
AhmedPlaymaker 25:e827f1a8fadc 165 if((blockbuff>=11)&&(blockbuff<=blockgap-11)) { //this makes sure that the snake food appears seperated from the block
AhmedPlaymaker 25:e827f1a8fadc 166 ff_pos.y = -2;
AhmedPlaymaker 16:7b474f873683 167 }
AhmedPlaymaker 9:d1d79d4ee673 168 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 169
AhmedPlaymaker 9:d1d79d4ee673 170 }
AhmedPlaymaker 9:d1d79d4ee673 171
AhmedPlaymaker 9:d1d79d4ee673 172 if (
AhmedPlaymaker 25:e827f1a8fadc 173 ((snake_pos.y + i == fff_pos.y) ||
AhmedPlaymaker 25:e827f1a8fadc 174 (snake_pos.y + i == fff_pos.y + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 175 (snake_pos.y + i == fff_pos.y + 2)) &&
AhmedPlaymaker 25:e827f1a8fadc 176 ((snake_pos.x + i == fff_pos.x) ||
AhmedPlaymaker 25:e827f1a8fadc 177 (snake_pos.x + i == fff_pos.x + 1) ||
AhmedPlaymaker 25:e827f1a8fadc 178 (snake_pos.x + i == fff_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 179 ) {
AhmedPlaymaker 9:d1d79d4ee673 180
AhmedPlaymaker 9:d1d79d4ee673 181 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 182 // audio feedback
AhmedPlaymaker 9:d1d79d4ee673 183 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 184 fff_pos.x = rand() % 82;
AhmedPlaymaker 25:e827f1a8fadc 185 if((blockbuff>=11)&&(blockbuff<=blockgap-11)) { //this makes sure that the snake food appears seperated from the block
AhmedPlaymaker 25:e827f1a8fadc 186 fff_pos.y = -2;
AhmedPlaymaker 16:7b474f873683 187 }
AhmedPlaymaker 9:d1d79d4ee673 188 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 189
AhmedPlaymaker 9:d1d79d4ee673 190 }
AhmedPlaymaker 25:e827f1a8fadc 191 }
AhmedPlaymaker 9:d1d79d4ee673 192 _f.set_pos(f_pos);
AhmedPlaymaker 9:d1d79d4ee673 193 _ff.set_pos(ff_pos);
AhmedPlaymaker 9:d1d79d4ee673 194 _fff.set_pos(fff_pos);
AhmedPlaymaker 9:d1d79d4ee673 195
AhmedPlaymaker 12:1e601b176437 196 }
AhmedPlaymaker 12:1e601b176437 197
AhmedPlaymaker 12:1e601b176437 198 void SnakevsBlock::CheckSnakeBlockCollision(Gamepad &pad)
AhmedPlaymaker 12:1e601b176437 199 {
AhmedPlaymaker 12:1e601b176437 200 //Obtains all required coordinates.
AhmedPlaymaker 12:1e601b176437 201 Vector2D b_pos = _b.get_pos();
AhmedPlaymaker 12:1e601b176437 202 int *b_number;
AhmedPlaymaker 12:1e601b176437 203 b_number = _b.get_number();
AhmedPlaymaker 12:1e601b176437 204 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 12:1e601b176437 205
AhmedPlaymaker 12:1e601b176437 206 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 12:1e601b176437 207 //of the blocks which are a maximum of 5, if so then the snake length reduces and the block number reduces
AhmedPlaymaker 12:1e601b176437 208 //the block has to move slower and come down after every 2/3 iterations(dependent on the snake size.(think about this)
AhmedPlaymaker 12:1e601b176437 209
AhmedPlaymaker 12:1e601b176437 210 if (
AhmedPlaymaker 25:e827f1a8fadc 211 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 12:1e601b176437 212 ((snake_pos.x + 1 == b_pos.x + 1) ||
AhmedPlaymaker 12:1e601b176437 213 (snake_pos.x + 1 == b_pos.x + 2) ||
AhmedPlaymaker 12:1e601b176437 214 (snake_pos.x + 1 == b_pos.x + 3) ||
AhmedPlaymaker 12:1e601b176437 215 (snake_pos.x + 1 == b_pos.x + 4) ||
AhmedPlaymaker 12:1e601b176437 216 (snake_pos.x + 1 == b_pos.x + 5) ||
AhmedPlaymaker 12:1e601b176437 217 (snake_pos.x + 1 == b_pos.x + 6) ||
AhmedPlaymaker 12:1e601b176437 218 (snake_pos.x + 1 == b_pos.x + 7) ||
AhmedPlaymaker 12:1e601b176437 219 (snake_pos.x + 1 == b_pos.x + 8) ||
AhmedPlaymaker 12:1e601b176437 220 (snake_pos.x + 1 == b_pos.x + 9) ||
AhmedPlaymaker 12:1e601b176437 221 (snake_pos.x + 1 == b_pos.x + 10) ||
AhmedPlaymaker 12:1e601b176437 222 (snake_pos.x + 1 == b_pos.x + 11) ||
AhmedPlaymaker 12:1e601b176437 223 (snake_pos.x + 1 == b_pos.x + 12) ||
AhmedPlaymaker 12:1e601b176437 224 (snake_pos.x + 1 == b_pos.x + 13) ||
AhmedPlaymaker 12:1e601b176437 225 (snake_pos.x + 1 == b_pos.x + 14) ||
AhmedPlaymaker 12:1e601b176437 226 (snake_pos.x + 1 == b_pos.x + 15) ||
AhmedPlaymaker 12:1e601b176437 227 (snake_pos.x + 1 == b_pos.x + 16) ||
AhmedPlaymaker 12:1e601b176437 228 (snake_pos.x + 1 == b_pos.x + 17) ||
AhmedPlaymaker 12:1e601b176437 229 (snake_pos.x + 1 == b_pos.x + 18))
AhmedPlaymaker 12:1e601b176437 230 ) {
AhmedPlaymaker 12:1e601b176437 231
AhmedPlaymaker 12:1e601b176437 232 //printf("snake collision working \n");
AhmedPlaymaker 12:1e601b176437 233 //audio feedback
AhmedPlaymaker 13:9785f2404045 234 if(blocknum > 0) {
AhmedPlaymaker 12:1e601b176437 235 b_pos.y = 0;
AhmedPlaymaker 12:1e601b176437 236 }
AhmedPlaymaker 12:1e601b176437 237 srn = 0;
AhmedPlaymaker 12:1e601b176437 238 blocknum = b_number[srn];
AhmedPlaymaker 12:1e601b176437 239 send=1;
AhmedPlaymaker 12:1e601b176437 240 blocknum-=1;
AhmedPlaymaker 13:9785f2404045 241 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 18:b391caa5754c 242 speed = 2;
AhmedPlaymaker 12:1e601b176437 243 length-=1;
AhmedPlaymaker 13:9785f2404045 244 pad.tone(1000.0,0.1);
AhmedPlaymaker 18:b391caa5754c 245 wait(0.05);
AhmedPlaymaker 18:b391caa5754c 246 }
AhmedPlaymaker 18:b391caa5754c 247 else {
AhmedPlaymaker 18:b391caa5754c 248 speed = 1;
AhmedPlaymaker 12:1e601b176437 249 }
AhmedPlaymaker 12:1e601b176437 250 }
AhmedPlaymaker 12:1e601b176437 251
AhmedPlaymaker 12:1e601b176437 252 if (
AhmedPlaymaker 25:e827f1a8fadc 253 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 12:1e601b176437 254 ((snake_pos.x + 1 == b_pos.x + 19) ||
AhmedPlaymaker 12:1e601b176437 255 (snake_pos.x + 1 == b_pos.x + 20) ||
AhmedPlaymaker 12:1e601b176437 256 (snake_pos.x + 1 == b_pos.x + 21) ||
AhmedPlaymaker 12:1e601b176437 257 (snake_pos.x + 1 == b_pos.x + 22) ||
AhmedPlaymaker 12:1e601b176437 258 (snake_pos.x + 1 == b_pos.x + 23) ||
AhmedPlaymaker 12:1e601b176437 259 (snake_pos.x + 1 == b_pos.x + 24) ||
AhmedPlaymaker 12:1e601b176437 260 (snake_pos.x + 1 == b_pos.x + 25) ||
AhmedPlaymaker 12:1e601b176437 261 (snake_pos.x + 1 == b_pos.x + 26) ||
AhmedPlaymaker 12:1e601b176437 262 (snake_pos.x + 1 == b_pos.x + 27) ||
AhmedPlaymaker 12:1e601b176437 263 (snake_pos.x + 1 == b_pos.x + 28) ||
AhmedPlaymaker 12:1e601b176437 264 (snake_pos.x + 1 == b_pos.x + 29) ||
AhmedPlaymaker 12:1e601b176437 265 (snake_pos.x + 1 == b_pos.x + 30) ||
AhmedPlaymaker 12:1e601b176437 266 (snake_pos.x + 1 == b_pos.x + 31) ||
AhmedPlaymaker 12:1e601b176437 267 (snake_pos.x + 1 == b_pos.x + 32) ||
AhmedPlaymaker 12:1e601b176437 268 (snake_pos.x + 1 == b_pos.x + 33) ||
AhmedPlaymaker 12:1e601b176437 269 (snake_pos.x + 1 == b_pos.x + 34))
AhmedPlaymaker 12:1e601b176437 270 ) {
AhmedPlaymaker 12:1e601b176437 271
AhmedPlaymaker 12:1e601b176437 272 //printf("snake collision working \n");
AhmedPlaymaker 12:1e601b176437 273 //audio feedback
AhmedPlaymaker 13:9785f2404045 274 if(blocknum > 0) {
AhmedPlaymaker 12:1e601b176437 275 b_pos.y = 0;
AhmedPlaymaker 12:1e601b176437 276 }
AhmedPlaymaker 12:1e601b176437 277 srn = 1;
AhmedPlaymaker 12:1e601b176437 278 blocknum = b_number[srn];
AhmedPlaymaker 12:1e601b176437 279 send=1;
AhmedPlaymaker 12:1e601b176437 280 blocknum-=1;
AhmedPlaymaker 13:9785f2404045 281 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 18:b391caa5754c 282 speed = 2;
AhmedPlaymaker 12:1e601b176437 283 length-=1;
AhmedPlaymaker 13:9785f2404045 284 pad.tone(1000.0,0.1);
AhmedPlaymaker 18:b391caa5754c 285 wait(0.05);
AhmedPlaymaker 18:b391caa5754c 286 }
AhmedPlaymaker 18:b391caa5754c 287 else {
AhmedPlaymaker 18:b391caa5754c 288 speed = 1;
AhmedPlaymaker 12:1e601b176437 289 }
AhmedPlaymaker 12:1e601b176437 290
AhmedPlaymaker 12:1e601b176437 291 }
AhmedPlaymaker 12:1e601b176437 292
AhmedPlaymaker 12:1e601b176437 293 if (
AhmedPlaymaker 25:e827f1a8fadc 294 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 12:1e601b176437 295 ((snake_pos.x + 1 == b_pos.x + 35) ||
AhmedPlaymaker 12:1e601b176437 296 (snake_pos.x + 1 == b_pos.x + 36) ||
AhmedPlaymaker 12:1e601b176437 297 (snake_pos.x + 1 == b_pos.x + 37) ||
AhmedPlaymaker 12:1e601b176437 298 (snake_pos.x + 1 == b_pos.x + 38) ||
AhmedPlaymaker 12:1e601b176437 299 (snake_pos.x + 1 == b_pos.x + 39) ||
AhmedPlaymaker 12:1e601b176437 300 (snake_pos.x + 1 == b_pos.x + 40) ||
AhmedPlaymaker 12:1e601b176437 301 (snake_pos.x + 1 == b_pos.x + 41) ||
AhmedPlaymaker 12:1e601b176437 302 (snake_pos.x + 1 == b_pos.x + 42) ||
AhmedPlaymaker 12:1e601b176437 303 (snake_pos.x + 1 == b_pos.x + 43) ||
AhmedPlaymaker 12:1e601b176437 304 (snake_pos.x + 1 == b_pos.x + 44) ||
AhmedPlaymaker 12:1e601b176437 305 (snake_pos.x + 1 == b_pos.x + 45) ||
AhmedPlaymaker 12:1e601b176437 306 (snake_pos.x + 1 == b_pos.x + 46) ||
AhmedPlaymaker 12:1e601b176437 307 (snake_pos.x + 1 == b_pos.x + 47) ||
AhmedPlaymaker 12:1e601b176437 308 (snake_pos.x + 1 == b_pos.x + 48) ||
AhmedPlaymaker 12:1e601b176437 309 (snake_pos.x + 1 == b_pos.x + 49) ||
AhmedPlaymaker 12:1e601b176437 310 (snake_pos.x + 1 == b_pos.x + 50))
AhmedPlaymaker 12:1e601b176437 311 ) {
AhmedPlaymaker 12:1e601b176437 312
AhmedPlaymaker 12:1e601b176437 313 //printf("snake collision working \n");
AhmedPlaymaker 12:1e601b176437 314 //audio feedback
AhmedPlaymaker 13:9785f2404045 315 if(blocknum > 0) {
AhmedPlaymaker 12:1e601b176437 316 b_pos.y = 0;
AhmedPlaymaker 12:1e601b176437 317 }
AhmedPlaymaker 12:1e601b176437 318 srn = 2;
AhmedPlaymaker 12:1e601b176437 319 blocknum = b_number[srn];
AhmedPlaymaker 12:1e601b176437 320 send=1;
AhmedPlaymaker 12:1e601b176437 321 blocknum-=1;
AhmedPlaymaker 13:9785f2404045 322 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 18:b391caa5754c 323 speed = 2;
AhmedPlaymaker 12:1e601b176437 324 length-=1;
AhmedPlaymaker 13:9785f2404045 325 pad.tone(1000.0,0.1);
AhmedPlaymaker 18:b391caa5754c 326 wait(0.05);
AhmedPlaymaker 18:b391caa5754c 327 }
AhmedPlaymaker 18:b391caa5754c 328 else {
AhmedPlaymaker 18:b391caa5754c 329 speed = 1;
AhmedPlaymaker 12:1e601b176437 330 }
AhmedPlaymaker 12:1e601b176437 331
AhmedPlaymaker 12:1e601b176437 332 }
AhmedPlaymaker 12:1e601b176437 333
AhmedPlaymaker 12:1e601b176437 334 if (
AhmedPlaymaker 25:e827f1a8fadc 335 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 12:1e601b176437 336 ((snake_pos.x + 1 == b_pos.x + 51) ||
AhmedPlaymaker 12:1e601b176437 337 (snake_pos.x + 1 == b_pos.x + 52) ||
AhmedPlaymaker 12:1e601b176437 338 (snake_pos.x + 1 == b_pos.x + 53) ||
AhmedPlaymaker 12:1e601b176437 339 (snake_pos.x + 1 == b_pos.x + 54) ||
AhmedPlaymaker 12:1e601b176437 340 (snake_pos.x + 1 == b_pos.x + 55) ||
AhmedPlaymaker 12:1e601b176437 341 (snake_pos.x + 1 == b_pos.x + 56) ||
AhmedPlaymaker 12:1e601b176437 342 (snake_pos.x + 1 == b_pos.x + 57) ||
AhmedPlaymaker 12:1e601b176437 343 (snake_pos.x + 1 == b_pos.x + 58) ||
AhmedPlaymaker 12:1e601b176437 344 (snake_pos.x + 1 == b_pos.x + 59) ||
AhmedPlaymaker 12:1e601b176437 345 (snake_pos.x + 1 == b_pos.x + 60) ||
AhmedPlaymaker 12:1e601b176437 346 (snake_pos.x + 1 == b_pos.x + 61) ||
AhmedPlaymaker 12:1e601b176437 347 (snake_pos.x + 1 == b_pos.x + 62) ||
AhmedPlaymaker 12:1e601b176437 348 (snake_pos.x + 1 == b_pos.x + 63) ||
AhmedPlaymaker 12:1e601b176437 349 (snake_pos.x + 1 == b_pos.x + 64) ||
AhmedPlaymaker 12:1e601b176437 350 (snake_pos.x + 1 == b_pos.x + 65) ||
AhmedPlaymaker 12:1e601b176437 351 (snake_pos.x + 1 == b_pos.x + 66))
AhmedPlaymaker 12:1e601b176437 352 ) {
AhmedPlaymaker 12:1e601b176437 353
AhmedPlaymaker 12:1e601b176437 354 //printf("snake collision working \n");
AhmedPlaymaker 12:1e601b176437 355 //audio feedback
AhmedPlaymaker 13:9785f2404045 356 if(blocknum > 0) {
AhmedPlaymaker 12:1e601b176437 357 b_pos.y = 0;
AhmedPlaymaker 12:1e601b176437 358 }
AhmedPlaymaker 12:1e601b176437 359 srn = 3;
AhmedPlaymaker 12:1e601b176437 360 blocknum = b_number[srn];
AhmedPlaymaker 12:1e601b176437 361 send=1;
AhmedPlaymaker 12:1e601b176437 362 blocknum-=1;
AhmedPlaymaker 13:9785f2404045 363 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 12:1e601b176437 364 length-=1;
AhmedPlaymaker 13:9785f2404045 365 pad.tone(1000.0,0.1);
AhmedPlaymaker 18:b391caa5754c 366 wait(0.05);
AhmedPlaymaker 18:b391caa5754c 367 }
AhmedPlaymaker 18:b391caa5754c 368 else {
AhmedPlaymaker 18:b391caa5754c 369 speed = 1;
AhmedPlaymaker 12:1e601b176437 370 }
AhmedPlaymaker 12:1e601b176437 371
AhmedPlaymaker 12:1e601b176437 372 }
AhmedPlaymaker 12:1e601b176437 373
AhmedPlaymaker 12:1e601b176437 374 if (
AhmedPlaymaker 25:e827f1a8fadc 375 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 12:1e601b176437 376 ((snake_pos.x + 1 == b_pos.x + 67) ||
AhmedPlaymaker 12:1e601b176437 377 (snake_pos.x + 1 == b_pos.x + 68) ||
AhmedPlaymaker 12:1e601b176437 378 (snake_pos.x + 1 == b_pos.x + 69) ||
AhmedPlaymaker 12:1e601b176437 379 (snake_pos.x + 1 == b_pos.x + 70) ||
AhmedPlaymaker 12:1e601b176437 380 (snake_pos.x + 1 == b_pos.x + 71) ||
AhmedPlaymaker 12:1e601b176437 381 (snake_pos.x + 1 == b_pos.x + 72) ||
AhmedPlaymaker 12:1e601b176437 382 (snake_pos.x + 1 == b_pos.x + 73) ||
AhmedPlaymaker 12:1e601b176437 383 (snake_pos.x + 1 == b_pos.x + 74) ||
AhmedPlaymaker 12:1e601b176437 384 (snake_pos.x + 1 == b_pos.x + 75) ||
AhmedPlaymaker 12:1e601b176437 385 (snake_pos.x + 1 == b_pos.x + 76) ||
AhmedPlaymaker 12:1e601b176437 386 (snake_pos.x + 1 == b_pos.x + 77) ||
AhmedPlaymaker 12:1e601b176437 387 (snake_pos.x + 1 == b_pos.x + 78) ||
AhmedPlaymaker 12:1e601b176437 388 (snake_pos.x + 1 == b_pos.x + 79) ||
AhmedPlaymaker 12:1e601b176437 389 (snake_pos.x + 1 == b_pos.x + 80) ||
AhmedPlaymaker 12:1e601b176437 390 (snake_pos.x + 1 == b_pos.x + 81) ||
AhmedPlaymaker 12:1e601b176437 391 (snake_pos.x + 1 == b_pos.x + 82) ||
AhmedPlaymaker 12:1e601b176437 392 (snake_pos.x + 1 == b_pos.x + 83))
AhmedPlaymaker 12:1e601b176437 393 ) {
AhmedPlaymaker 12:1e601b176437 394
AhmedPlaymaker 12:1e601b176437 395 //printf("snake collision working \n");
AhmedPlaymaker 12:1e601b176437 396 //audio feedback
AhmedPlaymaker 13:9785f2404045 397 if(blocknum > 0) {
AhmedPlaymaker 12:1e601b176437 398 b_pos.y = 0;
AhmedPlaymaker 12:1e601b176437 399 }
AhmedPlaymaker 12:1e601b176437 400 srn = 4;
AhmedPlaymaker 12:1e601b176437 401 blocknum = b_number[srn];
AhmedPlaymaker 12:1e601b176437 402 send=1;
AhmedPlaymaker 12:1e601b176437 403 blocknum-=1;
AhmedPlaymaker 13:9785f2404045 404 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 18:b391caa5754c 405 speed = 2;
AhmedPlaymaker 12:1e601b176437 406 length-=1;
AhmedPlaymaker 13:9785f2404045 407 pad.tone(1000.0,0.1);
AhmedPlaymaker 18:b391caa5754c 408 wait(0.05);
AhmedPlaymaker 18:b391caa5754c 409 }
AhmedPlaymaker 18:b391caa5754c 410 else {
AhmedPlaymaker 18:b391caa5754c 411 speed = 1;
AhmedPlaymaker 12:1e601b176437 412 }
AhmedPlaymaker 12:1e601b176437 413 }
AhmedPlaymaker 12:1e601b176437 414
AhmedPlaymaker 13:9785f2404045 415 }
AhmedPlaymaker 13:9785f2404045 416
AhmedPlaymaker 13:9785f2404045 417 void SnakevsBlock::CheckSnakeBlockSidesCollision(Gamepad &pad, Direction d)
AhmedPlaymaker 13:9785f2404045 418 {
AhmedPlaymaker 13:9785f2404045 419 //Obtains all required coordinates.
AhmedPlaymaker 13:9785f2404045 420 Vector2D b_pos = _b.get_pos();
AhmedPlaymaker 24:1c118b071430 421 snake_pos[0] = _s.get_pos(length);
AhmedPlaymaker 24:1c118b071430 422 snake_pos[1] = _s.get_pos_before1(length);
AhmedPlaymaker 24:1c118b071430 423 snake_pos[2] = _s.get_pos_before2(length);
AhmedPlaymaker 24:1c118b071430 424 snake_pos[3] = _s.get_pos_before3(length);
AhmedPlaymaker 24:1c118b071430 425 snake_pos[4] = _s.get_pos_before4(length);
AhmedPlaymaker 24:1c118b071430 426 snake_pos[5] = _s.get_pos_before5(length);
AhmedPlaymaker 24:1c118b071430 427 snake_pos[6] = _s.get_pos_before6(length);
AhmedPlaymaker 24:1c118b071430 428 snake_pos[7] = _s.get_pos_before7(length);
AhmedPlaymaker 24:1c118b071430 429 snake_pos[8] = _s.get_pos_before8(length);
AhmedPlaymaker 24:1c118b071430 430 snake_pos[9] = _s.get_pos_before9(length);
AhmedPlaymaker 24:1c118b071430 431 snake_pos[10] = _s.get_pos_before10(length);
AhmedPlaymaker 24:1c118b071430 432 snake_pos[11] = _s.get_pos_before11(length);
AhmedPlaymaker 24:1c118b071430 433 snake_pos[12] = _s.get_pos_before12(length);
AhmedPlaymaker 24:1c118b071430 434 snake_pos[13] = _s.get_pos_before13(length);
AhmedPlaymaker 24:1c118b071430 435 snake_pos[14] = _s.get_pos_before14(length);
AhmedPlaymaker 13:9785f2404045 436
AhmedPlaymaker 13:9785f2404045 437 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 13:9785f2404045 438 //of the blocks' sides and then stop the snake moving in x axis
AhmedPlaymaker 13:9785f2404045 439
AhmedPlaymaker 24:1c118b071430 440 speed = 1;
AhmedPlaymaker 24:1c118b071430 441 for(int i=0; i<=14; i++) {
AhmedPlaymaker 24:1c118b071430 442 b[i] = 1;
AhmedPlaymaker 24:1c118b071430 443 }
AhmedPlaymaker 23:592345a70329 444
AhmedPlaymaker 23:592345a70329 445 for(int i=0; i<=14; i++) {
AhmedPlaymaker 23:592345a70329 446 if (
AhmedPlaymaker 25:e827f1a8fadc 447 ((snake_pos[i].y == b_pos.y + 1) ||
AhmedPlaymaker 24:1c118b071430 448 (snake_pos[i].y == b_pos.y + 1) ||
AhmedPlaymaker 24:1c118b071430 449 (snake_pos[i].y == b_pos.y + 2) ||
AhmedPlaymaker 24:1c118b071430 450 (snake_pos[i].y == b_pos.y + 3) ||
AhmedPlaymaker 24:1c118b071430 451 (snake_pos[i].y == b_pos.y + 4) ||
AhmedPlaymaker 24:1c118b071430 452 (snake_pos[i].y == b_pos.y + 5) ||
AhmedPlaymaker 24:1c118b071430 453 (snake_pos[i].y == b_pos.y + 6) ||
AhmedPlaymaker 24:1c118b071430 454 (snake_pos[i].y == b_pos.y + 7) ||
AhmedPlaymaker 24:1c118b071430 455 (snake_pos[i].y == b_pos.y + 8) ||
AhmedPlaymaker 24:1c118b071430 456 (snake_pos[i].y == b_pos.y + 9) ||
AhmedPlaymaker 24:1c118b071430 457 (snake_pos[i].y == b_pos.y + 10) ||
AhmedPlaymaker 24:1c118b071430 458 (snake_pos[i].y + 1 == b_pos.y) ||
AhmedPlaymaker 24:1c118b071430 459 (snake_pos[i].y + 1 == b_pos.y + 1) ||
AhmedPlaymaker 24:1c118b071430 460 (snake_pos[i].y + 1 == b_pos.y + 2) ||
AhmedPlaymaker 24:1c118b071430 461 (snake_pos[i].y + 1 == b_pos.y + 3) ||
AhmedPlaymaker 24:1c118b071430 462 (snake_pos[i].y + 1 == b_pos.y + 4) ||
AhmedPlaymaker 24:1c118b071430 463 (snake_pos[i].y + 1 == b_pos.y + 5) ||
AhmedPlaymaker 24:1c118b071430 464 (snake_pos[i].y + 1 == b_pos.y + 6) ||
AhmedPlaymaker 24:1c118b071430 465 (snake_pos[i].y + 1 == b_pos.y + 7) ||
AhmedPlaymaker 24:1c118b071430 466 (snake_pos[i].y + 1 == b_pos.y + 8) ||
AhmedPlaymaker 24:1c118b071430 467 (snake_pos[i].y + 1 == b_pos.y + 9) ||
AhmedPlaymaker 24:1c118b071430 468 (snake_pos[i].y + 1 == b_pos.y + 10) ||
AhmedPlaymaker 24:1c118b071430 469 (snake_pos[i].y + 2 == b_pos.y) ||
AhmedPlaymaker 24:1c118b071430 470 (snake_pos[i].y + 2 == b_pos.y + 1) ||
AhmedPlaymaker 24:1c118b071430 471 (snake_pos[i].y + 2 == b_pos.y + 2) ||
AhmedPlaymaker 24:1c118b071430 472 (snake_pos[i].y + 2 == b_pos.y + 3) ||
AhmedPlaymaker 24:1c118b071430 473 (snake_pos[i].y + 2 == b_pos.y + 4) ||
AhmedPlaymaker 24:1c118b071430 474 (snake_pos[i].y + 2 == b_pos.y + 5) ||
AhmedPlaymaker 24:1c118b071430 475 (snake_pos[i].y + 2 == b_pos.y + 6) ||
AhmedPlaymaker 24:1c118b071430 476 (snake_pos[i].y + 2 == b_pos.y + 7) ||
AhmedPlaymaker 24:1c118b071430 477 (snake_pos[i].y + 2 == b_pos.y + 8) ||
AhmedPlaymaker 24:1c118b071430 478 (snake_pos[i].y + 2 == b_pos.y + 9) ||
AhmedPlaymaker 25:e827f1a8fadc 479 (snake_pos[i].y + 2 == b_pos.y + 10))) {
AhmedPlaymaker 25:e827f1a8fadc 480
AhmedPlaymaker 25:e827f1a8fadc 481 //For West side of walls
AhmedPlaymaker 25:e827f1a8fadc 482 if(
AhmedPlaymaker 25:e827f1a8fadc 483 (((snake_pos[i].x == b_pos.x + 4) || //W
AhmedPlaymaker 25:e827f1a8fadc 484 (snake_pos[i].x == b_pos.x + 36) || //W
AhmedPlaymaker 25:e827f1a8fadc 485 (snake_pos[i].x == b_pos.x + 68) || //W
AhmedPlaymaker 25:e827f1a8fadc 486 (snake_pos[i].x + 1 == b_pos.x + 4) || //W
AhmedPlaymaker 25:e827f1a8fadc 487 (snake_pos[i].x + 1 == b_pos.x + 36) || //W
AhmedPlaymaker 25:e827f1a8fadc 488 (snake_pos[i].x + 1 == b_pos.x + 68) || //W
AhmedPlaymaker 25:e827f1a8fadc 489 (snake_pos[i].x == b_pos.x + 20) || //W
AhmedPlaymaker 25:e827f1a8fadc 490 (snake_pos[i].x == b_pos.x + 52) || //W
AhmedPlaymaker 25:e827f1a8fadc 491 (snake_pos[i].x == b_pos.x + 84) || //W
AhmedPlaymaker 25:e827f1a8fadc 492 (snake_pos[i].x + 1 == b_pos.x + 20) || //W
AhmedPlaymaker 25:e827f1a8fadc 493 (snake_pos[i].x + 1 == b_pos.x + 52) || //W
AhmedPlaymaker 25:e827f1a8fadc 494 (snake_pos[i].x + 1 == b_pos.x + 84))&&(d != E)&&(length > i)) //W
AhmedPlaymaker 25:e827f1a8fadc 495 ) {
AhmedPlaymaker 25:e827f1a8fadc 496 //code makes sure that the colliding part doesn't move in x axis.
AhmedPlaymaker 25:e827f1a8fadc 497 for(int snake_beed_num=0; snake_beed_num<=15; snake_beed_num++) {
AhmedPlaymaker 25:e827f1a8fadc 498 if(length == snake_beed_num + i) {
AhmedPlaymaker 25:e827f1a8fadc 499 b[snake_beed_num - 1] = 0;
AhmedPlaymaker 25:e827f1a8fadc 500 }
AhmedPlaymaker 24:1c118b071430 501 }
AhmedPlaymaker 23:592345a70329 502 }
AhmedPlaymaker 15:f4d069da093d 503
AhmedPlaymaker 25:e827f1a8fadc 504 //for East side of walls
AhmedPlaymaker 25:e827f1a8fadc 505 else if (
AhmedPlaymaker 25:e827f1a8fadc 506 (((snake_pos[i].x + 1 == b_pos.x + 18) || //E
AhmedPlaymaker 25:e827f1a8fadc 507 (snake_pos[i].x + 1 == b_pos.x + 50) || //E
AhmedPlaymaker 25:e827f1a8fadc 508 (snake_pos[i].x + 1 == b_pos.x + 82) || //E
AhmedPlaymaker 25:e827f1a8fadc 509 (snake_pos[i].x + 2 == b_pos.x + 18) || //E
AhmedPlaymaker 25:e827f1a8fadc 510 (snake_pos[i].x + 2 == b_pos.x + 50) || //E
AhmedPlaymaker 25:e827f1a8fadc 511 (snake_pos[i].x + 2 == b_pos.x + 82) || //E
AhmedPlaymaker 25:e827f1a8fadc 512 (snake_pos[i].x + 1 == b_pos.x + 2) || //E
AhmedPlaymaker 25:e827f1a8fadc 513 (snake_pos[i].x + 1 == b_pos.x + 34) || //E
AhmedPlaymaker 25:e827f1a8fadc 514 (snake_pos[i].x + 1 == b_pos.x + 66) || //E
AhmedPlaymaker 25:e827f1a8fadc 515 (snake_pos[i].x + 2 == b_pos.x + 2) || //E
AhmedPlaymaker 25:e827f1a8fadc 516 (snake_pos[i].x + 2 == b_pos.x + 34) || //E
AhmedPlaymaker 25:e827f1a8fadc 517 (snake_pos[i].x + 2 == b_pos.x + 66))&&(d != W)) //E
AhmedPlaymaker 25:e827f1a8fadc 518 ) {
AhmedPlaymaker 25:e827f1a8fadc 519 //add some code that it doesn't move through
AhmedPlaymaker 25:e827f1a8fadc 520 speed = 0;
AhmedPlaymaker 25:e827f1a8fadc 521 }
AhmedPlaymaker 24:1c118b071430 522 }
AhmedPlaymaker 15:f4d069da093d 523 }
AhmedPlaymaker 22:ee698f66146f 524 }