ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el17sdl_v2

Dependencies:   mbed

Committer:
sdlashmar
Date:
Fri May 08 08:40:29 2020 +0000
Revision:
4:c5addc5475d3
Parent:
3:36f9e3a75905
snake class rev 2;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sdlashmar 3:36f9e3a75905 1 #include "Snake.h"
sdlashmar 3:36f9e3a75905 2
sdlashmar 3:36f9e3a75905 3 Snake::Snake()
sdlashmar 3:36f9e3a75905 4 {
sdlashmar 3:36f9e3a75905 5
sdlashmar 3:36f9e3a75905 6 }
sdlashmar 3:36f9e3a75905 7
sdlashmar 3:36f9e3a75905 8 Snake::~Snake()
sdlashmar 3:36f9e3a75905 9 {
sdlashmar 3:36f9e3a75905 10
sdlashmar 3:36f9e3a75905 11 }
sdlashmar 3:36f9e3a75905 12
sdlashmar 3:36f9e3a75905 13 void Snake::init(int size, int speed) {
sdlashmar 3:36f9e3a75905 14 _size = size*2;
sdlashmar 3:36f9e3a75905 15 _speed = speed;
sdlashmar 3:36f9e3a75905 16
sdlashmar 3:36f9e3a75905 17 _x = WIDTH/2 - _size/2;
sdlashmar 3:36f9e3a75905 18 _y = HEIGHT/2 - _size/2;
sdlashmar 3:36f9e3a75905 19
sdlashmar 3:36f9e3a75905 20 srand(time(NULL));
sdlashmar 3:36f9e3a75905 21 int direction = rand() %4;
sdlashmar 3:36f9e3a75905 22
sdlashmar 3:36f9e3a75905 23 if (direction == 0) { //snake moves north
sdlashmar 4:c5addc5475d3 24 _velocity.x = -_speed;
sdlashmar 3:36f9e3a75905 25 _velocity.y = 0;
sdlashmar 3:36f9e3a75905 26 }
sdlashmar 3:36f9e3a75905 27 else if (direction == 1) { //snake moves east
sdlashmar 3:36f9e3a75905 28 _velocity.x = 0;
sdlashmar 4:c5addc5475d3 29 _velocity.y = _speed;
sdlashmar 3:36f9e3a75905 30 }
sdlashmar 3:36f9e3a75905 31 else if (direction == 2) { //sake moves south
sdlashmar 4:c5addc5475d3 32 _velocity.x = _speed;
sdlashmar 3:36f9e3a75905 33 _velocity.y = 0;
sdlashmar 3:36f9e3a75905 34 }
sdlashmar 4:c5addc5475d3 35 else { //snake moves west
sdlashmar 3:36f9e3a75905 36 _velocity.x = 0;
sdlashmar 4:c5addc5475d3 37 _velocity.y = -_speed;
sdlashmar 3:36f9e3a75905 38 }
sdlashmar 3:36f9e3a75905 39 }
sdlashmar 3:36f9e3a75905 40
sdlashmar 3:36f9e3a75905 41 void Snake::draw(N5110 &lcd) {
sdlashmar 3:36f9e3a75905 42 lcd.drawRect(_x,_y,_size,_size,FILL_BLACK);
sdlashmar 3:36f9e3a75905 43 }
sdlashmar 3:36f9e3a75905 44
sdlashmar 4:c5addc5475d3 45 void Snake::update() {
sdlashmar 3:36f9e3a75905 46
sdlashmar 4:c5addc5475d3 47 _x += _velocity.x;
sdlashmar 4:c5addc5475d3 48 _y += _velocity.y;
sdlashmar 4:c5addc5475d3 49
sdlashmar 4:c5addc5475d3 50 if (_x < 0) {
sdlashmar 4:c5addc5475d3 51 _x = 1;
sdlashmar 4:c5addc5475d3 52 } else if (_x > 84) {
sdlashmar 4:c5addc5475d3 53 _x = 84 - _size;
sdlashmar 4:c5addc5475d3 54 } else if (_y < 0) {
sdlashmar 4:c5addc5475d3 55 _y = 1;
sdlashmar 4:c5addc5475d3 56 } else if (_y > 48) {
sdlashmar 4:c5addc5475d3 57 _y = 48 - _size;
sdlashmar 4:c5addc5475d3 58 }
sdlashmar 4:c5addc5475d3 59
sdlashmar 4:c5addc5475d3 60 }
sdlashmar 4:c5addc5475d3 61
sdlashmar 4:c5addc5475d3 62 void Snake::change_direction(Direction d) {
sdlashmar 4:c5addc5475d3 63
sdlashmar 4:c5addc5475d3 64 if (d == N) {
sdlashmar 4:c5addc5475d3 65 _velocity.x = 0;
sdlashmar 4:c5addc5475d3 66 _velocity.y = -_speed;
sdlashmar 4:c5addc5475d3 67 } else if (d == E) {
sdlashmar 4:c5addc5475d3 68 _velocity.x = _speed;
sdlashmar 4:c5addc5475d3 69 _velocity.y = 0;
sdlashmar 4:c5addc5475d3 70 } else if (d == S) {
sdlashmar 4:c5addc5475d3 71 _velocity.x = 0;
sdlashmar 4:c5addc5475d3 72 _velocity.y = _speed;
sdlashmar 4:c5addc5475d3 73 } else if (d == W) {
sdlashmar 4:c5addc5475d3 74 _velocity.x = -_speed;
sdlashmar 4:c5addc5475d3 75 _velocity.y = 0;
sdlashmar 3:36f9e3a75905 76 }
sdlashmar 4:c5addc5475d3 77
sdlashmar 3:36f9e3a75905 78 }
sdlashmar 3:36f9e3a75905 79
sdlashmar 3:36f9e3a75905 80 void Snake::set_velocity(Vector2D v) {
sdlashmar 3:36f9e3a75905 81 _velocity.x = v.x;
sdlashmar 3:36f9e3a75905 82 _velocity.y = v.y;
sdlashmar 3:36f9e3a75905 83 }
sdlashmar 3:36f9e3a75905 84
sdlashmar 4:c5addc5475d3 85
sdlashmar 4:c5addc5475d3 86
sdlashmar 3:36f9e3a75905 87 Vector2D Snake::get_velocity() {
sdlashmar 3:36f9e3a75905 88
sdlashmar 3:36f9e3a75905 89 Vector2D v = {_velocity.x, _velocity.y};
sdlashmar 3:36f9e3a75905 90 return v;
sdlashmar 3:36f9e3a75905 91 }
sdlashmar 3:36f9e3a75905 92
sdlashmar 3:36f9e3a75905 93 Vector2D Snake::get_pos() {
sdlashmar 3:36f9e3a75905 94
sdlashmar 3:36f9e3a75905 95 Vector2D p = {_x, _y};
sdlashmar 3:36f9e3a75905 96 return p;
sdlashmar 3:36f9e3a75905 97 }
sdlashmar 3:36f9e3a75905 98
sdlashmar 3:36f9e3a75905 99 void Snake::set_pos(Vector2D p) {
sdlashmar 3:36f9e3a75905 100
sdlashmar 3:36f9e3a75905 101 _x = p.x;
sdlashmar 3:36f9e3a75905 102 _y = p.y;
sdlashmar 3:36f9e3a75905 103 }
sdlashmar 3:36f9e3a75905 104