Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Sat Mar 30 17:09:18 2019 +0000
Revision:
10:751bd953fa27
Parent:
9:d1d79d4ee673
Child:
12:1e601b176437
Can now draw blocks and generate random numbers in them, they can be seen on screen, the next step is creating collision

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 10:751bd953fa27 40 if(foodbuff == 110) {
AhmedPlaymaker 10:751bd953fa27 41 foodbuff = 110;
AhmedPlaymaker 9:d1d79d4ee673 42 }
AhmedPlaymaker 9:d1d79d4ee673 43 }
AhmedPlaymaker 10:751bd953fa27 44 _b.draw(lcd, length);
AhmedPlaymaker 7:48ba87cd79b5 45
AhmedPlaymaker 7:48ba87cd79b5 46 //Code to print length on game screen.
AhmedPlaymaker 7:48ba87cd79b5 47 char bufferscore[14];
AhmedPlaymaker 7:48ba87cd79b5 48 sprintf(bufferscore,"%d",length);
AhmedPlaymaker 7:48ba87cd79b5 49 lcd.printString(bufferscore,1,0);
AhmedPlaymaker 7:48ba87cd79b5 50
AhmedPlaymaker 7:48ba87cd79b5 51 if(pad.check_event(Gamepad::BACK_PRESSED)){ //Waits for Back button to be pressed.
AhmedPlaymaker 7:48ba87cd79b5 52
AhmedPlaymaker 7:48ba87cd79b5 53 NVIC_SystemReset(); //Software Reset.
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
AhmedPlaymaker 7:48ba87cd79b5 61 void SnakevsBlock::update(Gamepad &pad) //Updates objects on screen.
AhmedPlaymaker 7:48ba87cd79b5 62 {
AhmedPlaymaker 9:d1d79d4ee673 63 _s.update(_d,_mag, length);
AhmedPlaymaker 9:d1d79d4ee673 64 _f.update();
AhmedPlaymaker 9:d1d79d4ee673 65 _ff.update();
AhmedPlaymaker 9:d1d79d4ee673 66 _fff.update();
AhmedPlaymaker 10:751bd953fa27 67 _b.update();
AhmedPlaymaker 9:d1d79d4ee673 68 CheckSnakeFoodCollision(pad); //Function checks for when the snake collides with it's food.
AhmedPlaymaker 7:48ba87cd79b5 69 }
AhmedPlaymaker 7:48ba87cd79b5 70
AhmedPlaymaker 7:48ba87cd79b5 71 void SnakevsBlock::get_pos()
AhmedPlaymaker 7:48ba87cd79b5 72 {
AhmedPlaymaker 9:d1d79d4ee673 73 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 7:48ba87cd79b5 74 //printf("player pos = %f %f \n", player_pos.x, player_pos.y); //top left of player sprite
AhmedPlaymaker 7:48ba87cd79b5 75 // 81.000000 0.000000 top right
AhmedPlaymaker 7:48ba87cd79b5 76 // 0.000000 0.000000 is top left
AhmedPlaymaker 7:48ba87cd79b5 77 // 81.000000 45.000000 bottom right
AhmedPlaymaker 7:48ba87cd79b5 78 snakex = snake_pos.x;
AhmedPlaymaker 7:48ba87cd79b5 79 snakey = snake_pos.y;
AhmedPlaymaker 7:48ba87cd79b5 80 //printf("snakexy in GAME = %d %d \n", snakex, snakey);
AhmedPlaymaker 7:48ba87cd79b5 81 }
AhmedPlaymaker 7:48ba87cd79b5 82
AhmedPlaymaker 9:d1d79d4ee673 83
AhmedPlaymaker 9:d1d79d4ee673 84 void SnakevsBlock::CheckSnakeFoodCollision(Gamepad &pad)
AhmedPlaymaker 9:d1d79d4ee673 85 {
AhmedPlaymaker 9:d1d79d4ee673 86 //Obtains all required coordinates.
AhmedPlaymaker 9:d1d79d4ee673 87
AhmedPlaymaker 9:d1d79d4ee673 88
AhmedPlaymaker 9:d1d79d4ee673 89 Vector2D f_pos = _f.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 90 Vector2D ff_pos = _ff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 91 Vector2D fff_pos = _fff.get_pos();
AhmedPlaymaker 9:d1d79d4ee673 92 Vector2D snake_pos = _s.get_pos(length);
AhmedPlaymaker 9:d1d79d4ee673 93
AhmedPlaymaker 9:d1d79d4ee673 94 //If statements check if the snake sprite has collided with any
AhmedPlaymaker 9:d1d79d4ee673 95 //of the three food sprites, if so then the food location is reset and
AhmedPlaymaker 9:d1d79d4ee673 96 //length of the snake is increased using the length variable.
AhmedPlaymaker 9:d1d79d4ee673 97
AhmedPlaymaker 9:d1d79d4ee673 98 if (
AhmedPlaymaker 9:d1d79d4ee673 99 ((snake_pos.y == f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 100 (snake_pos.y == f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 101 (snake_pos.y == f_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 102 (snake_pos.y + 1== f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 103 (snake_pos.y + 1== f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 104 (snake_pos.y + 1== f_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 105 (snake_pos.y + 2 == f_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 106 (snake_pos.y + 2 == f_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 107 (snake_pos.y + 2 == f_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 108 ((snake_pos.x == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 109 (snake_pos.x == f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 110 (snake_pos.x == f_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 111 (snake_pos.x + 1 == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 112 (snake_pos.x + 1== f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 113 (snake_pos.x + 1 == f_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 114 (snake_pos.x + 2 == f_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 115 (snake_pos.x + 2 == f_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 116 (snake_pos.x + 2 == f_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 117 ) {
AhmedPlaymaker 9:d1d79d4ee673 118
AhmedPlaymaker 9:d1d79d4ee673 119 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 120 //audio feedback
AhmedPlaymaker 9:d1d79d4ee673 121 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 122 f_pos.x = rand() % 82;
AhmedPlaymaker 9:d1d79d4ee673 123 f_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 124
AhmedPlaymaker 9:d1d79d4ee673 125 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 126
AhmedPlaymaker 9:d1d79d4ee673 127 }
AhmedPlaymaker 9:d1d79d4ee673 128
AhmedPlaymaker 9:d1d79d4ee673 129 if (
AhmedPlaymaker 9:d1d79d4ee673 130 ((snake_pos.y == ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 131 (snake_pos.y == ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 132 (snake_pos.y == ff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 133 (snake_pos.y + 1== ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 134 (snake_pos.y + 1== ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 135 (snake_pos.y + 1== ff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 136 (snake_pos.y + 2 == ff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 137 (snake_pos.y + 2 == ff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 138 (snake_pos.y + 2 == ff_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 139 ((snake_pos.x == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 140 (snake_pos.x == ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 141 (snake_pos.x == ff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 142 (snake_pos.x + 1 == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 143 (snake_pos.x + 1== ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 144 (snake_pos.x + 1 == ff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 145 (snake_pos.x + 2 == ff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 146 (snake_pos.x + 2 == ff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 147 (snake_pos.x + 2 == ff_pos.x + 2))
AhmedPlaymaker 9:d1d79d4ee673 148 ) {
AhmedPlaymaker 9:d1d79d4ee673 149
AhmedPlaymaker 9:d1d79d4ee673 150 //printf("snake feast working \n");
AhmedPlaymaker 9:d1d79d4ee673 151 // audio feedback
AhmedPlaymaker 9:d1d79d4ee673 152 pad.tone(1000.0,0.1);
AhmedPlaymaker 9:d1d79d4ee673 153 ff_pos.x = rand() % 82;
AhmedPlaymaker 9:d1d79d4ee673 154 ff_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 155
AhmedPlaymaker 9:d1d79d4ee673 156 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 157
AhmedPlaymaker 9:d1d79d4ee673 158 }
AhmedPlaymaker 9:d1d79d4ee673 159
AhmedPlaymaker 9:d1d79d4ee673 160 if (
AhmedPlaymaker 9:d1d79d4ee673 161 ((snake_pos.y == fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 162 (snake_pos.y == fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 163 (snake_pos.y == fff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 164 (snake_pos.y + 1== fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 165 (snake_pos.y + 1== fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 166 (snake_pos.y + 1== fff_pos.y + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 167 (snake_pos.y + 2 == fff_pos.y) ||
AhmedPlaymaker 9:d1d79d4ee673 168 (snake_pos.y + 2 == fff_pos.y + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 169 (snake_pos.y + 2 == fff_pos.y + 2)) &&
AhmedPlaymaker 9:d1d79d4ee673 170 ((snake_pos.x == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 171 (snake_pos.x == fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 172 (snake_pos.x == fff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 173 (snake_pos.x + 1 == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 174 (snake_pos.x + 1== fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 175 (snake_pos.x + 1 == fff_pos.x + 2) ||
AhmedPlaymaker 9:d1d79d4ee673 176 (snake_pos.x + 2 == fff_pos.x) ||
AhmedPlaymaker 9:d1d79d4ee673 177 (snake_pos.x + 2 == fff_pos.x + 1) ||
AhmedPlaymaker 9:d1d79d4ee673 178 (snake_pos.x + 2 == 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 9:d1d79d4ee673 185 fff_pos.y = 0;
AhmedPlaymaker 9:d1d79d4ee673 186
AhmedPlaymaker 9:d1d79d4ee673 187 length+=1;
AhmedPlaymaker 9:d1d79d4ee673 188
AhmedPlaymaker 9:d1d79d4ee673 189 }
AhmedPlaymaker 9:d1d79d4ee673 190
AhmedPlaymaker 9:d1d79d4ee673 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 9:d1d79d4ee673 196 }