Ahmed Adamjee
/
SnakeVSBlock
Snake vs Block Game to be run upon K64F.
GameObjects/Snake/Snake.cpp@70:7caab8069b9b, 2019-05-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |