Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Thu Apr 11 05:34:03 2019 +0000
Revision:
26:3495f7b0ede7
Parent:
25:e827f1a8fadc
Child:
27:3b4775a0d0bb
Made the Start Screen Class shorter

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 26:3495f7b0ede7 209 for(int i=1; i<=18; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 26:3495f7b0ede7 210 if (
AhmedPlaymaker 26:3495f7b0ede7 211 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 26:3495f7b0ede7 212 ((snake_pos.x + 1 == b_pos.x + i))
AhmedPlaymaker 26:3495f7b0ede7 213 ) {
AhmedPlaymaker 26:3495f7b0ede7 214
AhmedPlaymaker 26:3495f7b0ede7 215 //printf("snake collision working \n");
AhmedPlaymaker 26:3495f7b0ede7 216 //audio feedback
AhmedPlaymaker 26:3495f7b0ede7 217 if(blocknum > 0) {
AhmedPlaymaker 26:3495f7b0ede7 218 b_pos.y = 0;
AhmedPlaymaker 26:3495f7b0ede7 219 }
AhmedPlaymaker 26:3495f7b0ede7 220 srn = 0;
AhmedPlaymaker 26:3495f7b0ede7 221 blocknum = b_number[srn];
AhmedPlaymaker 26:3495f7b0ede7 222 send=1;
AhmedPlaymaker 26:3495f7b0ede7 223 blocknum-=1;
AhmedPlaymaker 26:3495f7b0ede7 224 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 26:3495f7b0ede7 225 speed = 2;
AhmedPlaymaker 26:3495f7b0ede7 226 length-=1;
AhmedPlaymaker 26:3495f7b0ede7 227 pad.tone(1000.0,0.1);
AhmedPlaymaker 26:3495f7b0ede7 228 wait(0.05);
AhmedPlaymaker 26:3495f7b0ede7 229 }
AhmedPlaymaker 26:3495f7b0ede7 230 else {
AhmedPlaymaker 26:3495f7b0ede7 231 speed = 1;
AhmedPlaymaker 26:3495f7b0ede7 232 }
AhmedPlaymaker 12:1e601b176437 233 }
AhmedPlaymaker 26:3495f7b0ede7 234 }
AhmedPlaymaker 26:3495f7b0ede7 235 for(int i=19; i<=34; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 26:3495f7b0ede7 236 if (
AhmedPlaymaker 26:3495f7b0ede7 237 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 26:3495f7b0ede7 238 ((snake_pos.x + 1 == b_pos.x + i))
AhmedPlaymaker 26:3495f7b0ede7 239 ) {
AhmedPlaymaker 26:3495f7b0ede7 240
AhmedPlaymaker 26:3495f7b0ede7 241 //printf("snake collision working \n");
AhmedPlaymaker 26:3495f7b0ede7 242 //audio feedback
AhmedPlaymaker 26:3495f7b0ede7 243 if(blocknum > 0) {
AhmedPlaymaker 26:3495f7b0ede7 244 b_pos.y = 0;
AhmedPlaymaker 26:3495f7b0ede7 245 }
AhmedPlaymaker 26:3495f7b0ede7 246 srn = 1;
AhmedPlaymaker 26:3495f7b0ede7 247 blocknum = b_number[srn];
AhmedPlaymaker 26:3495f7b0ede7 248 send=1;
AhmedPlaymaker 26:3495f7b0ede7 249 blocknum-=1;
AhmedPlaymaker 26:3495f7b0ede7 250 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 26:3495f7b0ede7 251 speed = 2;
AhmedPlaymaker 26:3495f7b0ede7 252 length-=1;
AhmedPlaymaker 26:3495f7b0ede7 253 pad.tone(1000.0,0.1);
AhmedPlaymaker 26:3495f7b0ede7 254 wait(0.05);
AhmedPlaymaker 26:3495f7b0ede7 255 }
AhmedPlaymaker 26:3495f7b0ede7 256 else {
AhmedPlaymaker 26:3495f7b0ede7 257 speed = 1;
AhmedPlaymaker 26:3495f7b0ede7 258 }
AhmedPlaymaker 26:3495f7b0ede7 259
AhmedPlaymaker 12:1e601b176437 260 }
AhmedPlaymaker 12:1e601b176437 261 }
AhmedPlaymaker 26:3495f7b0ede7 262 for(int i=35; i<=50; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 26:3495f7b0ede7 263 if (
AhmedPlaymaker 26:3495f7b0ede7 264 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 26:3495f7b0ede7 265 ((snake_pos.x + 1 == b_pos.x + i))
AhmedPlaymaker 26:3495f7b0ede7 266 ) {
AhmedPlaymaker 26:3495f7b0ede7 267
AhmedPlaymaker 26:3495f7b0ede7 268 //printf("snake collision working \n");
AhmedPlaymaker 26:3495f7b0ede7 269 //audio feedback
AhmedPlaymaker 26:3495f7b0ede7 270 if(blocknum > 0) {
AhmedPlaymaker 26:3495f7b0ede7 271 b_pos.y = 0;
AhmedPlaymaker 26:3495f7b0ede7 272 }
AhmedPlaymaker 26:3495f7b0ede7 273 srn = 2;
AhmedPlaymaker 26:3495f7b0ede7 274 blocknum = b_number[srn];
AhmedPlaymaker 26:3495f7b0ede7 275 send=1;
AhmedPlaymaker 26:3495f7b0ede7 276 blocknum-=1;
AhmedPlaymaker 26:3495f7b0ede7 277 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 26:3495f7b0ede7 278 speed = 2;
AhmedPlaymaker 26:3495f7b0ede7 279 length-=1;
AhmedPlaymaker 26:3495f7b0ede7 280 pad.tone(1000.0,0.1);
AhmedPlaymaker 26:3495f7b0ede7 281 wait(0.05);
AhmedPlaymaker 26:3495f7b0ede7 282 }
AhmedPlaymaker 26:3495f7b0ede7 283 else {
AhmedPlaymaker 26:3495f7b0ede7 284 speed = 1;
AhmedPlaymaker 26:3495f7b0ede7 285 }
AhmedPlaymaker 26:3495f7b0ede7 286
AhmedPlaymaker 12:1e601b176437 287 }
AhmedPlaymaker 26:3495f7b0ede7 288 }
AhmedPlaymaker 26:3495f7b0ede7 289 for(int i=51; i<=66; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 26:3495f7b0ede7 290 if (
AhmedPlaymaker 26:3495f7b0ede7 291 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 26:3495f7b0ede7 292 ((snake_pos.x + 1 == b_pos.x + i))
AhmedPlaymaker 26:3495f7b0ede7 293 ) {
AhmedPlaymaker 26:3495f7b0ede7 294
AhmedPlaymaker 26:3495f7b0ede7 295 //printf("snake collision working \n");
AhmedPlaymaker 26:3495f7b0ede7 296 //audio feedback
AhmedPlaymaker 26:3495f7b0ede7 297 if(blocknum > 0) {
AhmedPlaymaker 26:3495f7b0ede7 298 b_pos.y = 0;
AhmedPlaymaker 26:3495f7b0ede7 299 }
AhmedPlaymaker 26:3495f7b0ede7 300 srn = 3;
AhmedPlaymaker 26:3495f7b0ede7 301 blocknum = b_number[srn];
AhmedPlaymaker 26:3495f7b0ede7 302 send=1;
AhmedPlaymaker 26:3495f7b0ede7 303 blocknum-=1;
AhmedPlaymaker 26:3495f7b0ede7 304 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 26:3495f7b0ede7 305 length-=1;
AhmedPlaymaker 26:3495f7b0ede7 306 pad.tone(1000.0,0.1);
AhmedPlaymaker 26:3495f7b0ede7 307 wait(0.05);
AhmedPlaymaker 26:3495f7b0ede7 308 }
AhmedPlaymaker 26:3495f7b0ede7 309 else {
AhmedPlaymaker 26:3495f7b0ede7 310 speed = 1;
AhmedPlaymaker 26:3495f7b0ede7 311 }
AhmedPlaymaker 26:3495f7b0ede7 312
AhmedPlaymaker 18:b391caa5754c 313 }
AhmedPlaymaker 26:3495f7b0ede7 314 }
AhmedPlaymaker 26:3495f7b0ede7 315 for(int i=67; i<=83; i++) { //this loop automatically detects each combination of collision
AhmedPlaymaker 26:3495f7b0ede7 316 if (
AhmedPlaymaker 26:3495f7b0ede7 317 ((snake_pos.y == b_pos.y + 10)) &&
AhmedPlaymaker 26:3495f7b0ede7 318 ((snake_pos.x + 1 == b_pos.x + i))
AhmedPlaymaker 26:3495f7b0ede7 319 ) {
AhmedPlaymaker 26:3495f7b0ede7 320
AhmedPlaymaker 26:3495f7b0ede7 321 //printf("snake collision working \n");
AhmedPlaymaker 26:3495f7b0ede7 322 //audio feedback
AhmedPlaymaker 26:3495f7b0ede7 323 if(blocknum > 0) {
AhmedPlaymaker 26:3495f7b0ede7 324 b_pos.y = 0;
AhmedPlaymaker 26:3495f7b0ede7 325 }
AhmedPlaymaker 26:3495f7b0ede7 326 srn = 4;
AhmedPlaymaker 26:3495f7b0ede7 327 blocknum = b_number[srn];
AhmedPlaymaker 26:3495f7b0ede7 328 send=1;
AhmedPlaymaker 26:3495f7b0ede7 329 blocknum-=1;
AhmedPlaymaker 26:3495f7b0ede7 330 if(blocknum >= 0) { // to make sure that snake doesn't decrease in length if number on the block is less than 1;
AhmedPlaymaker 26:3495f7b0ede7 331 speed = 2;
AhmedPlaymaker 26:3495f7b0ede7 332 length-=1;
AhmedPlaymaker 26:3495f7b0ede7 333 pad.tone(1000.0,0.1);
AhmedPlaymaker 26:3495f7b0ede7 334 wait(0.05);
AhmedPlaymaker 26:3495f7b0ede7 335 }
AhmedPlaymaker 26:3495f7b0ede7 336 else {
AhmedPlaymaker 26:3495f7b0ede7 337 speed = 1;
AhmedPlaymaker 26:3495f7b0ede7 338 }
AhmedPlaymaker 12:1e601b176437 339 }
AhmedPlaymaker 12:1e601b176437 340
AhmedPlaymaker 12:1e601b176437 341 }
AhmedPlaymaker 13:9785f2404045 342 }
AhmedPlaymaker 13:9785f2404045 343
AhmedPlaymaker 13:9785f2404045 344 void SnakevsBlock::CheckSnakeBlockSidesCollision(Gamepad &pad, Direction d)
AhmedPlaymaker 13:9785f2404045 345 {
AhmedPlaymaker 26:3495f7b0ede7 346 //Obtains all required coordinates for checking block sides and snake collision.
AhmedPlaymaker 13:9785f2404045 347 Vector2D b_pos = _b.get_pos();
AhmedPlaymaker 24:1c118b071430 348 snake_pos[0] = _s.get_pos(length);
AhmedPlaymaker 24:1c118b071430 349 snake_pos[1] = _s.get_pos_before1(length);
AhmedPlaymaker 24:1c118b071430 350 snake_pos[2] = _s.get_pos_before2(length);
AhmedPlaymaker 24:1c118b071430 351 snake_pos[3] = _s.get_pos_before3(length);
AhmedPlaymaker 24:1c118b071430 352 snake_pos[4] = _s.get_pos_before4(length);
AhmedPlaymaker 24:1c118b071430 353 snake_pos[5] = _s.get_pos_before5(length);
AhmedPlaymaker 24:1c118b071430 354 snake_pos[6] = _s.get_pos_before6(length);
AhmedPlaymaker 24:1c118b071430 355 snake_pos[7] = _s.get_pos_before7(length);
AhmedPlaymaker 24:1c118b071430 356 snake_pos[8] = _s.get_pos_before8(length);
AhmedPlaymaker 24:1c118b071430 357 snake_pos[9] = _s.get_pos_before9(length);
AhmedPlaymaker 24:1c118b071430 358 snake_pos[10] = _s.get_pos_before10(length);
AhmedPlaymaker 24:1c118b071430 359 snake_pos[11] = _s.get_pos_before11(length);
AhmedPlaymaker 24:1c118b071430 360 snake_pos[12] = _s.get_pos_before12(length);
AhmedPlaymaker 24:1c118b071430 361 snake_pos[13] = _s.get_pos_before13(length);
AhmedPlaymaker 24:1c118b071430 362 snake_pos[14] = _s.get_pos_before14(length);
AhmedPlaymaker 13:9785f2404045 363
AhmedPlaymaker 13:9785f2404045 364 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 13:9785f2404045 365 //of the blocks' sides and then stop the snake moving in x axis
AhmedPlaymaker 13:9785f2404045 366
AhmedPlaymaker 24:1c118b071430 367 speed = 1;
AhmedPlaymaker 24:1c118b071430 368 for(int i=0; i<=14; i++) {
AhmedPlaymaker 24:1c118b071430 369 b[i] = 1;
AhmedPlaymaker 24:1c118b071430 370 }
AhmedPlaymaker 23:592345a70329 371
AhmedPlaymaker 23:592345a70329 372 for(int i=0; i<=14; i++) {
AhmedPlaymaker 26:3495f7b0ede7 373 for(int a=0; a<=10; a++) {
AhmedPlaymaker 26:3495f7b0ede7 374 if (
AhmedPlaymaker 26:3495f7b0ede7 375 (snake_pos[i].y == b_pos.y + a) ||
AhmedPlaymaker 26:3495f7b0ede7 376 (snake_pos[i].y + 1 == b_pos.y + a) ||
AhmedPlaymaker 26:3495f7b0ede7 377 (snake_pos[i].y + 2 == b_pos.y + a)) {
AhmedPlaymaker 26:3495f7b0ede7 378
AhmedPlaymaker 26:3495f7b0ede7 379 //For West side of walls
AhmedPlaymaker 26:3495f7b0ede7 380 if(
AhmedPlaymaker 26:3495f7b0ede7 381 (((snake_pos[i].x == b_pos.x + 4) || //W
AhmedPlaymaker 26:3495f7b0ede7 382 (snake_pos[i].x == b_pos.x + 36) || //W
AhmedPlaymaker 26:3495f7b0ede7 383 (snake_pos[i].x == b_pos.x + 68) || //W
AhmedPlaymaker 26:3495f7b0ede7 384 (snake_pos[i].x + 1 == b_pos.x + 4) || //W
AhmedPlaymaker 26:3495f7b0ede7 385 (snake_pos[i].x + 1 == b_pos.x + 36) || //W
AhmedPlaymaker 26:3495f7b0ede7 386 (snake_pos[i].x + 1 == b_pos.x + 68) || //W
AhmedPlaymaker 26:3495f7b0ede7 387 (snake_pos[i].x == b_pos.x + 20) || //W
AhmedPlaymaker 26:3495f7b0ede7 388 (snake_pos[i].x == b_pos.x + 52) || //W
AhmedPlaymaker 26:3495f7b0ede7 389 (snake_pos[i].x == b_pos.x + 84) || //W
AhmedPlaymaker 26:3495f7b0ede7 390 (snake_pos[i].x + 1 == b_pos.x + 20) || //W
AhmedPlaymaker 26:3495f7b0ede7 391 (snake_pos[i].x + 1 == b_pos.x + 52) || //W
AhmedPlaymaker 26:3495f7b0ede7 392 (snake_pos[i].x + 1 == b_pos.x + 84))&&(d != E)&&(length > i)) //W
AhmedPlaymaker 26:3495f7b0ede7 393 ) {
AhmedPlaymaker 26:3495f7b0ede7 394 //code makes sure that the colliding part doesn't move in x axis.
AhmedPlaymaker 26:3495f7b0ede7 395 for(int snake_beed_num=0; snake_beed_num<=15; snake_beed_num++) {
AhmedPlaymaker 26:3495f7b0ede7 396 if(length == snake_beed_num + i) {
AhmedPlaymaker 26:3495f7b0ede7 397 b[snake_beed_num - 1] = 0;
AhmedPlaymaker 26:3495f7b0ede7 398 }
AhmedPlaymaker 25:e827f1a8fadc 399 }
AhmedPlaymaker 24:1c118b071430 400 }
AhmedPlaymaker 26:3495f7b0ede7 401
AhmedPlaymaker 26:3495f7b0ede7 402 //for East side of walls
AhmedPlaymaker 26:3495f7b0ede7 403 else if (
AhmedPlaymaker 26:3495f7b0ede7 404 (((snake_pos[i].x + 1 == b_pos.x + 18) || //E
AhmedPlaymaker 26:3495f7b0ede7 405 (snake_pos[i].x + 1 == b_pos.x + 50) || //E
AhmedPlaymaker 26:3495f7b0ede7 406 (snake_pos[i].x + 1 == b_pos.x + 82) || //E
AhmedPlaymaker 26:3495f7b0ede7 407 (snake_pos[i].x + 2 == b_pos.x + 18) || //E
AhmedPlaymaker 26:3495f7b0ede7 408 (snake_pos[i].x + 2 == b_pos.x + 50) || //E
AhmedPlaymaker 26:3495f7b0ede7 409 (snake_pos[i].x + 2 == b_pos.x + 82) || //E
AhmedPlaymaker 26:3495f7b0ede7 410 (snake_pos[i].x + 1 == b_pos.x + 2) || //E
AhmedPlaymaker 26:3495f7b0ede7 411 (snake_pos[i].x + 1 == b_pos.x + 34) || //E
AhmedPlaymaker 26:3495f7b0ede7 412 (snake_pos[i].x + 1 == b_pos.x + 66) || //E
AhmedPlaymaker 26:3495f7b0ede7 413 (snake_pos[i].x + 2 == b_pos.x + 2) || //E
AhmedPlaymaker 26:3495f7b0ede7 414 (snake_pos[i].x + 2 == b_pos.x + 34) || //E
AhmedPlaymaker 26:3495f7b0ede7 415 (snake_pos[i].x + 2 == b_pos.x + 66))&&(d != W)) //E
AhmedPlaymaker 26:3495f7b0ede7 416 ) {
AhmedPlaymaker 26:3495f7b0ede7 417 //add some code that it doesn't move through
AhmedPlaymaker 26:3495f7b0ede7 418 speed = 0;
AhmedPlaymaker 26:3495f7b0ede7 419 }
AhmedPlaymaker 25:e827f1a8fadc 420 }
AhmedPlaymaker 24:1c118b071430 421 }
AhmedPlaymaker 15:f4d069da093d 422 }
AhmedPlaymaker 22:ee698f66146f 423 }