Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Snake/Snake.cpp@4:c5addc5475d3, 2020-05-08 (annotated)
- 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?
| User | Revision | Line number | New 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 |