Snake vs Block Game to be run upon K64F.

Dependencies:   mbed

Committer:
AhmedPlaymaker
Date:
Sat May 04 20:48:10 2019 +0000
Revision:
70:7caab8069b9b
Parent:
68:b9cfd27987ac
Child:
71:4bd2b27693f3
Thanks to my newly created test files, I removed some of the most uselessly redundant functions in my snake class relating to get pos. The test classes helped me debug the problems with the bulky code by letting me know what coordinates were saved.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AhmedPlaymaker 7:48ba87cd79b5 1 #include "Snake.h"
AhmedPlaymaker 7:48ba87cd79b5 2
AhmedPlaymaker 7:48ba87cd79b5 3 Snake::Snake()
AhmedPlaymaker 7:48ba87cd79b5 4 {
AhmedPlaymaker 7:48ba87cd79b5 5
AhmedPlaymaker 7:48ba87cd79b5 6 }
AhmedPlaymaker 7:48ba87cd79b5 7
AhmedPlaymaker 7:48ba87cd79b5 8 Snake::~Snake()
AhmedPlaymaker 7:48ba87cd79b5 9 {
AhmedPlaymaker 7:48ba87cd79b5 10
AhmedPlaymaker 7:48ba87cd79b5 11 }
AhmedPlaymaker 7:48ba87cd79b5 12
AhmedPlaymaker 7:48ba87cd79b5 13 //The Snake Sprite.
AhmedPlaymaker 8:890b986b16a4 14 int snake_sprite[3][3] = {
AhmedPlaymaker 8:890b986b16a4 15 {0,1,0},
AhmedPlaymaker 8:890b986b16a4 16 {1,0,1},
AhmedPlaymaker 8:890b986b16a4 17 {0,1,0},
AhmedPlaymaker 9:d1d79d4ee673 18 };
AhmedPlaymaker 7:48ba87cd79b5 19
AhmedPlaymaker 68:b9cfd27987ac 20 void Snake::init(int length, int speed)
AhmedPlaymaker 7:48ba87cd79b5 21 {
AhmedPlaymaker 68:b9cfd27987ac 22 _length = length;
AhmedPlaymaker 68:b9cfd27987ac 23 _speed = speed;// change this according to the options selected
AhmedPlaymaker 30:461231877c89 24 m = 0; //Variable used to allow a starting location for the player.
AhmedPlaymaker 7:48ba87cd79b5 25 }
AhmedPlaymaker 7:48ba87cd79b5 26
AhmedPlaymaker 7:48ba87cd79b5 27
AhmedPlaymaker 53:527cf297b088 28 void Snake::draw(N5110 &lcd, int length, int level)
AhmedPlaymaker 33:249cf423fb18 29 {
AhmedPlaymaker 41:4edac50f010d 30 _length = length;
AhmedPlaymaker 63:205f0ca48473 31 if(m == 0) {
AhmedPlaymaker 70:7caab8069b9b 32
AhmedPlaymaker 68:b9cfd27987ac 33 Vector2D p = {WIDTH/2, HEIGHT - 3}; //Spawns player sprite near the middle of the screen.
AhmedPlaymaker 68:b9cfd27987ac 34 Snake::set_pos(p);
AhmedPlaymaker 63:205f0ca48473 35
AhmedPlaymaker 33:249cf423fb18 36 m = m+1;
AhmedPlaymaker 22:ee698f66146f 37 }
AhmedPlaymaker 63:205f0ca48473 38 //printf("SPRITE %d %d \n", _x[0], _y[0]);
AhmedPlaymaker 63:205f0ca48473 39
AhmedPlaymaker 70:7caab8069b9b 40 for(int i=0; i<=_length-1; i++) {
AhmedPlaymaker 70:7caab8069b9b 41 lcd.drawSprite(_x[i],_y[i],3,3,(int *)snake_sprite); //Function used to draw the sprite.
AhmedPlaymaker 8:890b986b16a4 42 }
AhmedPlaymaker 7:48ba87cd79b5 43 }
AhmedPlaymaker 19:05cc9f801468 44
AhmedPlaymaker 24:1c118b071430 45
AhmedPlaymaker 68:b9cfd27987ac 46 void Snake::set_pos(Vector2D p)
AhmedPlaymaker 68:b9cfd27987ac 47 {
AhmedPlaymaker 68:b9cfd27987ac 48 _x[0] = p.x; //Spawns player sprite near the middle of the screen.
AhmedPlaymaker 68:b9cfd27987ac 49 _y[0] = p.y;
AhmedPlaymaker 68:b9cfd27987ac 50
AhmedPlaymaker 68:b9cfd27987ac 51 for(int i=0; i<=13; i++) {
AhmedPlaymaker 68:b9cfd27987ac 52 _x[i+1] = _x[i];
AhmedPlaymaker 68:b9cfd27987ac 53 _y[i+1] = _y[i] - 3;
AhmedPlaymaker 68:b9cfd27987ac 54 }
AhmedPlaymaker 68:b9cfd27987ac 55 }
AhmedPlaymaker 68:b9cfd27987ac 56
AhmedPlaymaker 70:7caab8069b9b 57 Vector2D Snake::get_pos(int snakeIndex)
AhmedPlaymaker 7:48ba87cd79b5 58 {
AhmedPlaymaker 70:7caab8069b9b 59 Vector2D snakepos; //Stores the snake position.
AhmedPlaymaker 70:7caab8069b9b 60 for(int i = (snakeIndex + 1); i<=10; i++) {
AhmedPlaymaker 41:4edac50f010d 61 if(_length == i) {
AhmedPlaymaker 70:7caab8069b9b 62 snakepos.x = _x[i - (snakeIndex + 1)];
AhmedPlaymaker 70:7caab8069b9b 63 snakepos.y = _y[i - (snakeIndex + 1)];
AhmedPlaymaker 24:1c118b071430 64 return snakepos;
AhmedPlaymaker 24:1c118b071430 65 }
AhmedPlaymaker 9:d1d79d4ee673 66 }
AhmedPlaymaker 41:4edac50f010d 67 if(_length >= 10) {
AhmedPlaymaker 70:7caab8069b9b 68 snakepos.x = _x[9 - snakeIndex];
AhmedPlaymaker 70:7caab8069b9b 69 snakepos.y = _y[9 - snakeIndex];
AhmedPlaymaker 63:205f0ca48473 70 return snakepos;
AhmedPlaymaker 37:ee47699915b8 71 }
AhmedPlaymaker 70:7caab8069b9b 72 snakepos.x = NULL;
AhmedPlaymaker 70:7caab8069b9b 73 snakepos.y = NULL;
AhmedPlaymaker 24:1c118b071430 74 return snakepos;
AhmedPlaymaker 7:48ba87cd79b5 75 //printf("snakepos from player = %f %f \n", snakepos.x, snakepos.y);
AhmedPlaymaker 13:9785f2404045 76 }
AhmedPlaymaker 13:9785f2404045 77
AhmedPlaymaker 41:4edac50f010d 78 void Snake::update(Direction d, int* b)
AhmedPlaymaker 13:9785f2404045 79 {
AhmedPlaymaker 63:205f0ca48473 80 if(_length >= 10) {
AhmedPlaymaker 63:205f0ca48473 81 _length = 10; //to stop the snake length virtually at 10 when it goes past it.
AhmedPlaymaker 63:205f0ca48473 82 }
AhmedPlaymaker 63:205f0ca48473 83
AhmedPlaymaker 25:e827f1a8fadc 84 //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
AhmedPlaymaker 43:233f93860d08 85 //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.
AhmedPlaymaker 22:ee698f66146f 86 for(int i=0; i<=13; i++) {
AhmedPlaymaker 37:ee47699915b8 87 if((_length > i+1)&&(_x[i] != _x[i+1])) {
AhmedPlaymaker 22:ee698f66146f 88 if ((_x[i] > _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) {
AhmedPlaymaker 63:205f0ca48473 89 _x[i]-=_speed;
AhmedPlaymaker 8:890b986b16a4 90 }
AhmedPlaymaker 22:ee698f66146f 91 if ((_x[i] < _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) {
AhmedPlaymaker 63:205f0ca48473 92 _x[i]+=_speed;
AhmedPlaymaker 22:ee698f66146f 93 }
AhmedPlaymaker 21:e41126528cc6 94 }
AhmedPlaymaker 21:e41126528cc6 95 }
AhmedPlaymaker 63:205f0ca48473 96 //this makes the controls of W/E directions only exclusive to the top beed in the snake
AhmedPlaymaker 22:ee698f66146f 97 for(int i=14; i>=0; i--) {
AhmedPlaymaker 63:205f0ca48473 98 if((_length == i+1)&&(b[i] == 1)) {
AhmedPlaymaker 63:205f0ca48473 99
AhmedPlaymaker 63:205f0ca48473 100 if (d == E) {
AhmedPlaymaker 63:205f0ca48473 101 _x[i]+= _speed;
AhmedPlaymaker 22:ee698f66146f 102 }
AhmedPlaymaker 63:205f0ca48473 103
AhmedPlaymaker 63:205f0ca48473 104 if (d == W) {
AhmedPlaymaker 63:205f0ca48473 105 _x[i]-= _speed;
AhmedPlaymaker 63:205f0ca48473 106 }
AhmedPlaymaker 63:205f0ca48473 107
AhmedPlaymaker 63:205f0ca48473 108 }
AhmedPlaymaker 7:48ba87cd79b5 109 }
AhmedPlaymaker 7:48ba87cd79b5 110
AhmedPlaymaker 9:d1d79d4ee673 111 // the following makes sure that when the length is increased, the snake stays where it was when it ate food.
AhmedPlaymaker 7:48ba87cd79b5 112
AhmedPlaymaker 32:3a3bdeffdf62 113 for(int i=2; i<=15; i++) {
AhmedPlaymaker 63:205f0ca48473 114
AhmedPlaymaker 63:205f0ca48473 115 if(_length < i) {
AhmedPlaymaker 63:205f0ca48473 116 _x[i-1] = _x[i-2];
AhmedPlaymaker 63:205f0ca48473 117 }
AhmedPlaymaker 9:d1d79d4ee673 118 }
AhmedPlaymaker 63:205f0ca48473 119
AhmedPlaymaker 25:e827f1a8fadc 120 //Limits set so that the snake does not travel off the screen.
AhmedPlaymaker 22:ee698f66146f 121 for(int i=0; i<=14; i++) {
AhmedPlaymaker 63:205f0ca48473 122
AhmedPlaymaker 63:205f0ca48473 123 if (_x[i] <= 0) {
AhmedPlaymaker 63:205f0ca48473 124 _x[i] = 0;
AhmedPlaymaker 63:205f0ca48473 125 }
AhmedPlaymaker 63:205f0ca48473 126
AhmedPlaymaker 63:205f0ca48473 127 if (_x[i] > 81) {
AhmedPlaymaker 63:205f0ca48473 128 _x[i] = 81;
AhmedPlaymaker 63:205f0ca48473 129 }
AhmedPlaymaker 8:890b986b16a4 130 }
AhmedPlaymaker 70:7caab8069b9b 131 }