
Samuel Lashmar 201170334
Dependencies: mbed
SnakeHead/SnakeHead.cpp@12:cb3a81adf48b, 2020-05-24 (annotated)
- Committer:
- sdlashmar
- Date:
- Sun May 24 14:19:21 2020 +0000
- Revision:
- 12:cb3a81adf48b
- Parent:
- 10:3958fb08696d
- Child:
- 14:4356797fd16e
start screen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sdlashmar | 5:256e5e0b6cd7 | 1 | #include "SnakeHead.h" |
sdlashmar | 5:256e5e0b6cd7 | 2 | |
sdlashmar | 12:cb3a81adf48b | 3 | |
sdlashmar | 5:256e5e0b6cd7 | 4 | SnakeHead::SnakeHead() |
sdlashmar | 5:256e5e0b6cd7 | 5 | { |
sdlashmar | 12:cb3a81adf48b | 6 | |
sdlashmar | 5:256e5e0b6cd7 | 7 | } |
sdlashmar | 5:256e5e0b6cd7 | 8 | |
sdlashmar | 5:256e5e0b6cd7 | 9 | SnakeHead::~SnakeHead() |
sdlashmar | 5:256e5e0b6cd7 | 10 | { |
sdlashmar | 5:256e5e0b6cd7 | 11 | |
sdlashmar | 5:256e5e0b6cd7 | 12 | } |
sdlashmar | 5:256e5e0b6cd7 | 13 | |
sdlashmar | 5:256e5e0b6cd7 | 14 | void SnakeHead::init(int size, int speed) { |
sdlashmar | 5:256e5e0b6cd7 | 15 | _size = size*2; |
sdlashmar | 5:256e5e0b6cd7 | 16 | _speed = speed; |
sdlashmar | 5:256e5e0b6cd7 | 17 | |
sdlashmar | 5:256e5e0b6cd7 | 18 | _x = WIDTH/2 - _size/2; |
sdlashmar | 5:256e5e0b6cd7 | 19 | _y = HEIGHT/2 - _size/2; |
sdlashmar | 5:256e5e0b6cd7 | 20 | |
sdlashmar | 5:256e5e0b6cd7 | 21 | srand(time(NULL)); |
sdlashmar | 10:3958fb08696d | 22 | int direction = rand() %3; |
sdlashmar | 5:256e5e0b6cd7 | 23 | |
sdlashmar | 5:256e5e0b6cd7 | 24 | if (direction == 0) { //snake moves north |
sdlashmar | 5:256e5e0b6cd7 | 25 | _velocity.x = -_speed; |
sdlashmar | 5:256e5e0b6cd7 | 26 | _velocity.y = 0; |
sdlashmar | 5:256e5e0b6cd7 | 27 | } |
sdlashmar | 5:256e5e0b6cd7 | 28 | else if (direction == 1) { //snake moves east |
sdlashmar | 5:256e5e0b6cd7 | 29 | _velocity.x = 0; |
sdlashmar | 5:256e5e0b6cd7 | 30 | _velocity.y = _speed; |
sdlashmar | 5:256e5e0b6cd7 | 31 | } |
sdlashmar | 10:3958fb08696d | 32 | else if (direction == 2) { //snake moves south |
sdlashmar | 5:256e5e0b6cd7 | 33 | _velocity.x = _speed; |
sdlashmar | 5:256e5e0b6cd7 | 34 | _velocity.y = 0; |
sdlashmar | 5:256e5e0b6cd7 | 35 | } |
sdlashmar | 10:3958fb08696d | 36 | else if (direction == 3){ //snake moves west |
sdlashmar | 5:256e5e0b6cd7 | 37 | _velocity.x = 0; |
sdlashmar | 5:256e5e0b6cd7 | 38 | _velocity.y = -_speed; |
sdlashmar | 9:f0213e632379 | 39 | } |
sdlashmar | 5:256e5e0b6cd7 | 40 | } |
sdlashmar | 5:256e5e0b6cd7 | 41 | |
sdlashmar | 5:256e5e0b6cd7 | 42 | void SnakeHead::draw(N5110 &lcd) { |
sdlashmar | 5:256e5e0b6cd7 | 43 | lcd.drawRect(_x,_y,_size,2,FILL_BLACK); |
sdlashmar | 5:256e5e0b6cd7 | 44 | } |
sdlashmar | 5:256e5e0b6cd7 | 45 | |
sdlashmar | 5:256e5e0b6cd7 | 46 | void SnakeHead::update() { |
sdlashmar | 5:256e5e0b6cd7 | 47 | |
sdlashmar | 5:256e5e0b6cd7 | 48 | _x += _velocity.x; |
sdlashmar | 5:256e5e0b6cd7 | 49 | _y += _velocity.y; |
sdlashmar | 5:256e5e0b6cd7 | 50 | |
sdlashmar | 5:256e5e0b6cd7 | 51 | if (_x < 0) { |
sdlashmar | 5:256e5e0b6cd7 | 52 | _x = 1; |
sdlashmar | 5:256e5e0b6cd7 | 53 | } else if (_x > 84) { |
sdlashmar | 5:256e5e0b6cd7 | 54 | _x = 84 - _size; |
sdlashmar | 5:256e5e0b6cd7 | 55 | } else if (_y < 0) { |
sdlashmar | 5:256e5e0b6cd7 | 56 | _y = 1; |
sdlashmar | 5:256e5e0b6cd7 | 57 | } else if (_y > 48) { |
sdlashmar | 5:256e5e0b6cd7 | 58 | _y = 48 - _size; |
sdlashmar | 5:256e5e0b6cd7 | 59 | } |
sdlashmar | 10:3958fb08696d | 60 | //printf("head x = %i\n", _x); |
sdlashmar | 10:3958fb08696d | 61 | //printf("head y = %i\n", _y); |
sdlashmar | 5:256e5e0b6cd7 | 62 | } |
sdlashmar | 5:256e5e0b6cd7 | 63 | |
sdlashmar | 5:256e5e0b6cd7 | 64 | void SnakeHead::change_direction(Direction d) { |
sdlashmar | 5:256e5e0b6cd7 | 65 | |
sdlashmar | 5:256e5e0b6cd7 | 66 | if (d == N) { |
sdlashmar | 5:256e5e0b6cd7 | 67 | _velocity.x = 0; |
sdlashmar | 5:256e5e0b6cd7 | 68 | _velocity.y = -_speed; |
sdlashmar | 5:256e5e0b6cd7 | 69 | } else if (d == E) { |
sdlashmar | 5:256e5e0b6cd7 | 70 | _velocity.x = _speed; |
sdlashmar | 5:256e5e0b6cd7 | 71 | _velocity.y = 0; |
sdlashmar | 5:256e5e0b6cd7 | 72 | } else if (d == S) { |
sdlashmar | 5:256e5e0b6cd7 | 73 | _velocity.x = 0; |
sdlashmar | 5:256e5e0b6cd7 | 74 | _velocity.y = _speed; |
sdlashmar | 5:256e5e0b6cd7 | 75 | } else if (d == W) { |
sdlashmar | 5:256e5e0b6cd7 | 76 | _velocity.x = -_speed; |
sdlashmar | 5:256e5e0b6cd7 | 77 | _velocity.y = 0; |
sdlashmar | 5:256e5e0b6cd7 | 78 | } |
sdlashmar | 5:256e5e0b6cd7 | 79 | |
sdlashmar | 5:256e5e0b6cd7 | 80 | } |
sdlashmar | 5:256e5e0b6cd7 | 81 | |
sdlashmar | 5:256e5e0b6cd7 | 82 | void SnakeHead::set_velocity(Vector2D v) { |
sdlashmar | 5:256e5e0b6cd7 | 83 | _velocity.x = v.x; |
sdlashmar | 5:256e5e0b6cd7 | 84 | _velocity.y = v.y; |
sdlashmar | 5:256e5e0b6cd7 | 85 | } |
sdlashmar | 5:256e5e0b6cd7 | 86 | |
sdlashmar | 5:256e5e0b6cd7 | 87 | |
sdlashmar | 5:256e5e0b6cd7 | 88 | |
sdlashmar | 5:256e5e0b6cd7 | 89 | Vector2D SnakeHead::get_velocity() { |
sdlashmar | 5:256e5e0b6cd7 | 90 | |
sdlashmar | 5:256e5e0b6cd7 | 91 | Vector2D v = {_velocity.x, _velocity.y}; |
sdlashmar | 5:256e5e0b6cd7 | 92 | return v; |
sdlashmar | 5:256e5e0b6cd7 | 93 | } |
sdlashmar | 5:256e5e0b6cd7 | 94 | |
sdlashmar | 5:256e5e0b6cd7 | 95 | Vector2D SnakeHead::get_pos() { |
sdlashmar | 5:256e5e0b6cd7 | 96 | |
sdlashmar | 5:256e5e0b6cd7 | 97 | Vector2D p = {_x, _y}; |
sdlashmar | 5:256e5e0b6cd7 | 98 | return p; |
sdlashmar | 5:256e5e0b6cd7 | 99 | } |
sdlashmar | 5:256e5e0b6cd7 | 100 | |
sdlashmar | 5:256e5e0b6cd7 | 101 | void SnakeHead::set_pos(Vector2D p) { |
sdlashmar | 5:256e5e0b6cd7 | 102 | |
sdlashmar | 5:256e5e0b6cd7 | 103 | _x = p.x; |
sdlashmar | 5:256e5e0b6cd7 | 104 | _y = p.y; |
sdlashmar | 5:256e5e0b6cd7 | 105 | } |
sdlashmar | 5:256e5e0b6cd7 | 106 |