Ahmed Adamjee
/
SnakeVSBlock
Snake vs Block Game to be run upon K64F.
Diff: GameObjects/Snake/Snake.cpp
- Revision:
- 51:387249f9b333
- Parent:
- 44:cd10d07ea1e5
- Child:
- 53:527cf297b088
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GameObjects/Snake/Snake.cpp Fri Apr 26 18:30:25 2019 +0000 @@ -0,0 +1,273 @@ +#include "Snake.h" + +Snake::Snake() +{ + +} + +Snake::~Snake() +{ + +} + +//The Snake Sprite. +int snake_sprite[3][3] = { + {0,1,0}, + {1,0,1}, + {0,1,0}, +}; + +void Snake::init() +{ + _speed = 1;// change this according to the options selected + m = 0; //Variable used to allow a starting location for the player. +} + + +void Snake::draw(Gamepad &pad, N5110 &lcd, int length, int level) +{ + _length = length; + if(m == 0){ + _x[0] = WIDTH/2; //Spawns player sprite near the middle of the screen. + _y[0] = HEIGHT - 3; + + for(int i=0; i<=13; i++) { + _x[i+1] = _x[i]; + _y[i+1] = _y[i] - 3; + b[i] = 1; + } + b[14] = 1; + m = m+1; + } + //printf("SPRITE %d %d \n", _x[0], _y[0]); + + for(int a=1; a<=10; a++) { + if(_length == a) { + for(int i=0; i<=a-1; i++) { + lcd.drawSprite(_x[i],_y[i],3,3,(int *)snake_sprite); //Function used to draw the sprite. + } + } + } + if(_length >= 10) { + for(int a=1; a<=10; a++) { + for(int i=0; i<=a-1; i++) { + lcd.drawSprite(_x[i],_y[i],3,3,(int *)snake_sprite); //Function used to draw the sprite. + } + } + } +} + + +Vector2D Snake::get_pos() +{ + for(int i=1; i<=10; i++) { + if(_length == i) { + Vector2D snakepos = {_x[i-1],_y[i-1]}; //Obtains the snake position. + return snakepos; + } + } + if(_length >= 10) { + Vector2D snakepos = {_x[9],_y[9]}; //Obtains the snake position. + return snakepos; + } + Vector2D snakepos = {-20,-20}; //Obtains the snake position. + return snakepos; + //printf("snakepos from player = %f %f \n", snakepos.x, snakepos.y); +} + +Vector2D Snake::get_pos_before1() //this sends data of following sprites. +{ + for(int i=2; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b1 = {_x[i-2],_y[i-2]}; //Obtains the snake position. + return snakepos_b1; + } + } + if(_length >= 10) { + Vector2D snakepos_b1 = {_x[8],_y[8]}; //Obtains the snake position. + return snakepos_b1; + } + Vector2D snakepos_b1 = {-20,-20}; //Obtains the snake position. + return snakepos_b1; + //printf("snakepos_b1 from player = %f %f \n", snakepos_b1.x, snakepos_b1.y); +} + +Vector2D Snake::get_pos_before2() //this sends data of following sprites. +{ + for(int i=3; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b2 = {_x[i-3],_y[i-3]}; //Obtains the snake position. + return snakepos_b2; + } + } + if(_length >= 10) { + Vector2D snakepos_b2 = {_x[7],_y[7]}; //Obtains the snake position. + return snakepos_b2; + } + Vector2D snakepos_b2 = {-20,-20}; //Obtains the snake position. + return snakepos_b2; + //printf("snakepos_b2 from player = %f %f \n", snakepos_b2.x, snakepos_b2.y); +} + +Vector2D Snake::get_pos_before3() //this sends data of following sprites. +{ + for(int i=4; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b3 = {_x[i-4],_y[i-4]}; //Obtains the snake position. + return snakepos_b3; + } + } + if(_length >= 10) { + Vector2D snakepos_b3 = {_x[6],_y[6]}; //Obtains the snake position. + return snakepos_b3; + } + Vector2D snakepos_b3 = {-20,-20}; //Obtains the snake position. + return snakepos_b3; + //printf("snakepos_b3 from player = %f %f \n", snakepos_b3.x, snakepos_b3.y); +} + +Vector2D Snake::get_pos_before4() //this sends data of following sprites. +{ + for(int i=5; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b4 = {_x[i-5],_y[i-5]}; //Obtains the snake position. + return snakepos_b4; + } + } + if(_length >= 10) { + Vector2D snakepos_b4 = {_x[5],_y[5]}; //Obtains the snake position. + return snakepos_b4; + } + Vector2D snakepos_b4 = {-20,-20}; //Obtains the snake position. + return snakepos_b4; + //printf("snakepos_b4 from player = %f %f \n", snakepos_b4.x, snakepos_b4.y); +} + +Vector2D Snake::get_pos_before5() //this sends data of following sprites. +{ + for(int i=6; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b5 = {_x[i-6],_y[i-6]}; //Obtains the snake position. + return snakepos_b5; + } + } + if(_length >= 10) { + Vector2D snakepos_b5 = {_x[4],_y[4]}; //Obtains the snake position. + return snakepos_b5; + } + Vector2D snakepos_b5 = {-20,-20}; //Obtains the snake position. + return snakepos_b5; + //printf("snakepos_b5 from player = %f %f \n", snakepos_b5.x, snakepos_b5.y); +} + +Vector2D Snake::get_pos_before6() //this sends data of following sprites. +{ + for(int i=7; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b6 = {_x[i-7],_y[i-7]}; //Obtains the snake position. + return snakepos_b6; + } + } + if(_length >= 10) { + Vector2D snakepos_b6 = {_x[3],_y[3]}; //Obtains the snake position. + return snakepos_b6; + } + Vector2D snakepos_b6 = {-20,-20}; //Obtains the snake position. + return snakepos_b6; + //printf("snakepos_b6 from player = %f %f \n", snakepos_b6.x, snakepos_b6.y); +} + +Vector2D Snake::get_pos_before7() //this sends data of following sprites. +{ + for(int i=8; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b7 = {_x[i-8],_y[i-8]}; //Obtains the snake position. + return snakepos_b7; + } + } + if(_length >= 10) { + Vector2D snakepos_b7 = {_x[2],_y[2]}; //Obtains the snake position. + return snakepos_b7; + } + Vector2D snakepos_b7 = {-20,-20}; //Obtains the snake position. + return snakepos_b7; + //printf("snakepos_b7 from player = %f %f \n", snakepos_b7.x, snakepos_b7.y); +} + +Vector2D Snake::get_pos_before8() //this sends data of following sprites. +{ + for(int i=9; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b8 = {_x[i-9],_y[i-9]}; //Obtains the snake position. + return snakepos_b8; + } + } + if(_length >= 10) { + Vector2D snakepos_b8 = {_x[1],_y[1]}; //Obtains the snake position. + return snakepos_b8; + } + Vector2D snakepos_b8 = {-20,-20}; //Obtains the snake position. + return snakepos_b8; + //printf("snakepos_b8 from player = %f %f \n", snakepos_b8.x, snakepos_b8.y); +} + +Vector2D Snake::get_pos_before9() //this sends data of following sprites. +{ + for(int i=10; i<=10; i++) { + if(_length == i) { + Vector2D snakepos_b9 = {_x[i-10],_y[i-10]}; //Obtains the snake position. + return snakepos_b9; + } + } + if(_length >= 10) { + Vector2D snakepos_b9 = {_x[0],_y[0]}; //Obtains the snake position. + return snakepos_b9; + } + Vector2D snakepos_b9 = {-20,-20}; //Obtains the snake position. + return snakepos_b9; + //printf("snakepos_b9 from player = %f %f \n", snakepos_b9.x, snakepos_b9.y); +} + +void Snake::update(Direction d, int* b) +{ + if(_length >= 10) {_length = 10;} //to stop the snake length virtually at 10 when it goes past it. + + //this makes all of the snake beeds chained together by making the lower ones drag towards where the top one was in the previous loop + //the b[i] makes sure that the snake beed doesn't move if that beed is deactivated by colliding with a barrier. b[i] also signifies the specific beed number by i. + for(int i=0; i<=13; i++) { + if((_length > i+1)&&(_x[i] != _x[i+1])) { + if ((_x[i] > _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) { + _x[i]-=_speed; + } + if ((_x[i] < _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) { + _x[i]+=_speed; + } + } + } + //this makes the controls of W/E directions only exclusive to the top beed in the snake + for(int i=14; i>=0; i--) { + if((_length == i+1)&&(b[i] == 1)) { + + if (d == E) {_x[i]+= _speed;} + + if (d == W) {_x[i]-= _speed;} + + } + } + +// the following makes sure that when the length is increased, the snake stays where it was when it ate food. + + for(int i=2; i<=15; i++) { + + if(_length < i) {_x[i-1] = _x[i-2];} + } + + //Limits set so that the snake does not travel off the screen. + for(int i=0; i<=14; i++) { + + if (_x[i] <= 0) {_x[i] = 0;} + + if (_x[i] > 81) {_x[i] = 81;} + } +} +