Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Wed Mar 27 18:20:36 2019 +0000
Revision:
9:d1d79d4ee673
Parent:
8:890b986b16a4
Child:
10:751bd953fa27
Food Created, now if the snake eats food, it's length will increase.

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 9:d1d79d4ee673 16 length=3;
AhmedPlaymaker 9:d1d79d4ee673 17 foodbuff=0;
AhmedPlaymaker 7:48ba87cd79b5 18 }
AhmedPlaymaker 7:48ba87cd79b5 19
AhmedPlaymaker 7:48ba87cd79b5 20
AhmedPlaymaker 7:48ba87cd79b5 21
AhmedPlaymaker 7:48ba87cd79b5 22 void SnakevsBlock::read_input(Gamepad &pad)
AhmedPlaymaker 7:48ba87cd79b5 23 {
AhmedPlaymaker 7:48ba87cd79b5 24 _d = pad.get_direction(); //Obtains Direction pushed towards on Joystick.
AhmedPlaymaker 7:48ba87cd79b5 25 _mag = pad.get_mag(); //Obtains Magnitude of Joystick.
AhmedPlaymaker 7:48ba87cd79b5 26 }
AhmedPlaymaker 7:48ba87cd79b5 27
AhmedPlaymaker 7:48ba87cd79b5 28 void SnakevsBlock::draw(N5110 &lcd, Gamepad &pad)
AhmedPlaymaker 7:48ba87cd79b5 29 {
AhmedPlaymaker 9:d1d79d4ee673 30 _s.draw(lcd, length); //Draws the Snake. //Make these snake buffs relative to the snake drops which in turn relate to the game speed
AhmedPlaymaker 9:d1d79d4ee673 31 if(foodbuff >=0) {
AhmedPlaymaker 9:d1d79d4ee673 32 _f.draw(lcd); //Draws the first food.
AhmedPlaymaker 9:d1d79d4ee673 33 if(foodbuff >=50) {
AhmedPlaymaker 9:d1d79d4ee673 34 _ff.draw(lcd); //Draws the second food.
AhmedPlaymaker 9:d1d79d4ee673 35 if(foodbuff >=80) {
AhmedPlaymaker 9:d1d79d4ee673 36 _fff.draw(lcd); //Draws the third food.
AhmedPlaymaker 9:d1d79d4ee673 37 }
AhmedPlaymaker 9:d1d79d4ee673 38 }
AhmedPlaymaker 9:d1d79d4ee673 39 foodbuff +=1;
AhmedPlaymaker 9:d1d79d4ee673 40 if(foodbuff == 90) {
AhmedPlaymaker 9:d1d79d4ee673 41 foodbuff = 90;
AhmedPlaymaker 9:d1d79d4ee673 42 }
AhmedPlaymaker 9:d1d79d4ee673 43 }
AhmedPlaymaker 7:48ba87cd79b5 44
AhmedPlaymaker 7:48ba87cd79b5 45 //Code to print length on game screen.
AhmedPlaymaker 7:48ba87cd79b5 46 char bufferscore[14];
AhmedPlaymaker 7:48ba87cd79b5 47 sprintf(bufferscore,"%d",length);
AhmedPlaymaker 7:48ba87cd79b5 48 lcd.printString(bufferscore,1,0);
AhmedPlaymaker 7:48ba87cd79b5 49
AhmedPlaymaker 7:48ba87cd79b5 50 if(pad.check_event(Gamepad::BACK_PRESSED)){ //Waits for Back button to be pressed.
AhmedPlaymaker 7:48ba87cd79b5 51
AhmedPlaymaker 7:48ba87cd79b5 52 NVIC_SystemReset(); //Software Reset.
AhmedPlaymaker 7:48ba87cd79b5 53
AhmedPlaymaker 7:48ba87cd79b5 54 }
AhmedPlaymaker 7:48ba87cd79b5 55
AhmedPlaymaker 7:48ba87cd79b5 56
AhmedPlaymaker 7:48ba87cd79b5 57 }
AhmedPlaymaker 7:48ba87cd79b5 58
AhmedPlaymaker 7:48ba87cd79b5 59
AhmedPlaymaker 7:48ba87cd79b5 60 void SnakevsBlock::update(Gamepad &pad) //Updates objects on screen.
AhmedPlaymaker 7:48ba87cd79b5 61 {
AhmedPlaymaker 9:d1d79d4ee673 62 _s.update(_d,_mag, length);
AhmedPlaymaker 9:d1d79d4ee673 63 _f.update();
AhmedPlaymaker 9:d1d79d4ee673 64 _ff.update();
AhmedPlaymaker 9:d1d79d4ee673 65 _fff.update();
AhmedPlaymaker 9:d1d79d4ee673 66 CheckSnakeFoodCollision(pad); //Function checks for when the snake collides with it's food.
AhmedPlaymaker 7:48ba87cd79b5 67 }
AhmedPlaymaker 7:48ba87cd79b5 68
AhmedPlaymaker 7:48ba87cd79b5 69 void SnakevsBlock::get_pos()
AhmedPlaymaker 7:48ba87cd79b5 70 {
AhmedPlaymaker 9:d1d79d4ee673 71 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 7:48ba87cd79b5 72 //printf("player pos = %f %f \n", player_pos.x, player_pos.y); //top left of player sprite
AhmedPlaymaker 7:48ba87cd79b5 73 // 81.000000 0.000000 top right
AhmedPlaymaker 7:48ba87cd79b5 74 // 0.000000 0.000000 is top left
AhmedPlaymaker 7:48ba87cd79b5 75 // 81.000000 45.000000 bottom right
AhmedPlaymaker 7:48ba87cd79b5 76 snakex = snake_pos.x;
AhmedPlaymaker 7:48ba87cd79b5 77 snakey = snake_pos.y;
AhmedPlaymaker 7:48ba87cd79b5 78 //printf("snakexy in GAME = %d %d \n", snakex, snakey);
AhmedPlaymaker 7:48ba87cd79b5 79 }
AhmedPlaymaker 7:48ba87cd79b5 80
AhmedPlaymaker 9:d1d79d4ee673 81
AhmedPlaymaker 9:d1d79d4ee673 82 void SnakevsBlock::CheckSnakeFoodCollision(Gamepad &pad)
AhmedPlaymaker 9:d1d79d4ee673 83 {
AhmedPlaymaker 9:d1d79d4ee673 84 //Obtains all required coordinates.
AhmedPlaymaker 9:d1d79d4ee673 85
AhmedPlaymaker 9:d1d79d4ee673 86
AhmedPlaymaker 9:d1d79d4ee673 87 Vector2D f_pos = _f.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 88 Vector2D ff_pos = _ff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 89 Vector2D fff_pos = _fff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 90 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 9:d1d79d4ee673 91
AhmedPlaymaker 9:d1d79d4ee673 92 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 9:d1d79d4ee673 93 //of the three food sprites, if so then the food location is reset and
AhmedPlaymaker 9:d1d79d4ee673 94 //length of the snake is increased using the length variable.
AhmedPlaymaker 9:d1d79d4ee673 95
AhmedPlaymaker 9:d1d79d4ee673 96 if (
AhmedPlaymaker 9:d1d79d4ee673 97 ((snake_pos.y == f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 98 (snake_pos.y == f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 99 (snake_pos.y == f_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 100 (snake_pos.y + 1== f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 101 (snake_pos.y + 1== f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 102 (snake_pos.y + 1== f_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 103 (snake_pos.y + 2 == f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 104 (snake_pos.y + 2 == f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 105 (snake_pos.y + 2 == f_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 106 ((snake_pos.x == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 107 (snake_pos.x == f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 108 (snake_pos.x == f_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 109 (snake_pos.x + 1 == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 110 (snake_pos.x + 1== f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 111 (snake_pos.x + 1 == f_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 112 (snake_pos.x + 2 == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 113 (snake_pos.x + 2 == f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 114 (snake_pos.x + 2 == f_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 115 ) {
AhmedPlaymaker 9:d1d79d4ee673 116
AhmedPlaymaker 9:d1d79d4ee673 117 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 118 //audio feedback
AhmedPlaymaker 9:d1d79d4ee673 119 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 120 f_pos.x = rand() % 82;
AhmedPlaymaker 9:d1d79d4ee673 121 f_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 122
AhmedPlaymaker 9:d1d79d4ee673 123 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 124
AhmedPlaymaker 9:d1d79d4ee673 125 }
AhmedPlaymaker 9:d1d79d4ee673 126
AhmedPlaymaker 9:d1d79d4ee673 127 if (
AhmedPlaymaker 9:d1d79d4ee673 128 ((snake_pos.y == ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 129 (snake_pos.y == ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 130 (snake_pos.y == ff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 131 (snake_pos.y + 1== ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 132 (snake_pos.y + 1== ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 133 (snake_pos.y + 1== ff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 134 (snake_pos.y + 2 == ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 135 (snake_pos.y + 2 == ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 136 (snake_pos.y + 2 == ff_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 137 ((snake_pos.x == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 138 (snake_pos.x == ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 139 (snake_pos.x == ff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 140 (snake_pos.x + 1 == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 141 (snake_pos.x + 1== ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 142 (snake_pos.x + 1 == ff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 143 (snake_pos.x + 2 == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 144 (snake_pos.x + 2 == ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 145 (snake_pos.x + 2 == ff_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 146 ) {
AhmedPlaymaker 9:d1d79d4ee673 147
AhmedPlaymaker 9:d1d79d4ee673 148 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 149 // audio feedback
AhmedPlaymaker 9:d1d79d4ee673 150 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 151 ff_pos.x = rand() % 82;
AhmedPlaymaker 9:d1d79d4ee673 152 ff_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 153
AhmedPlaymaker 9:d1d79d4ee673 154 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 155
AhmedPlaymaker 9:d1d79d4ee673 156 }
AhmedPlaymaker 9:d1d79d4ee673 157
AhmedPlaymaker 9:d1d79d4ee673 158 if (
AhmedPlaymaker 9:d1d79d4ee673 159 ((snake_pos.y == fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 160 (snake_pos.y == fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 161 (snake_pos.y == fff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 162 (snake_pos.y + 1== fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 163 (snake_pos.y + 1== fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 164 (snake_pos.y + 1== fff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 165 (snake_pos.y + 2 == fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 166 (snake_pos.y + 2 == fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 167 (snake_pos.y + 2 == fff_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 168 ((snake_pos.x == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 169 (snake_pos.x == fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 170 (snake_pos.x == fff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 171 (snake_pos.x + 1 == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 172 (snake_pos.x + 1== fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 173 (snake_pos.x + 1 == fff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 174 (snake_pos.x + 2 == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 175 (snake_pos.x + 2 == fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 176 (snake_pos.x + 2 == fff_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 177 ) {
AhmedPlaymaker 9:d1d79d4ee673 178
AhmedPlaymaker 9:d1d79d4ee673 179 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 180 // audio feedback
AhmedPlaymaker 9:d1d79d4ee673 181 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 182 fff_pos.x = rand() % 82;
AhmedPlaymaker 9:d1d79d4ee673 183 fff_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 184
AhmedPlaymaker 9:d1d79d4ee673 185 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 186
AhmedPlaymaker 9:d1d79d4ee673 187 }
AhmedPlaymaker 9:d1d79d4ee673 188
AhmedPlaymaker 9:d1d79d4ee673 189
AhmedPlaymaker 9:d1d79d4ee673 190 _f.set_pos(f_pos);
AhmedPlaymaker 9:d1d79d4ee673 191 _ff.set_pos(ff_pos);
AhmedPlaymaker 9:d1d79d4ee673 192 _fff.set_pos(fff_pos);
AhmedPlaymaker 9:d1d79d4ee673 193
AhmedPlaymaker 9:d1d79d4ee673 194 }