ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Mon May 07 18:06:50 2018 +0000
Revision:
12:d3eef5ea3f43
Parent:
7:c1e0593bfc99
Child:
15:130900e5c268
Functional level select system with 3 different levels, sprite added to main menu for decoration. Minor reorganising within classes was needed, mainly game engine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Andrew_M 1:a14415de3ad5 1 #include "Snek.h"
Andrew_M 1:a14415de3ad5 2
Andrew_M 1:a14415de3ad5 3 // nothing doing in the constructor and destructor
Andrew_M 1:a14415de3ad5 4 Snek::Snek()
Andrew_M 1:a14415de3ad5 5 {
Andrew_M 1:a14415de3ad5 6
Andrew_M 1:a14415de3ad5 7 }
Andrew_M 1:a14415de3ad5 8
Andrew_M 1:a14415de3ad5 9 Snek::~Snek()
Andrew_M 1:a14415de3ad5 10 {
Andrew_M 1:a14415de3ad5 11
Andrew_M 1:a14415de3ad5 12 }
Andrew_M 1:a14415de3ad5 13
Andrew_M 2:9ca5e1c221c3 14 void Snek::init(int x, int y)
Andrew_M 1:a14415de3ad5 15 {
Andrew_M 12:d3eef5ea3f43 16 memset(_x, 0, sizeof(_x));
Andrew_M 12:d3eef5ea3f43 17 memset(_y, 0, sizeof(_y));
Andrew_M 12:d3eef5ea3f43 18
Andrew_M 1:a14415de3ad5 19 //Inital values for variables
Andrew_M 4:6353f829c56c 20 _length = 3;
Andrew_M 7:c1e0593bfc99 21
Andrew_M 5:a3a9e0417e04 22 _oldDirection = 'N';
Andrew_M 4:6353f829c56c 23
Andrew_M 4:6353f829c56c 24 for (int i = 0; i < _length; i++) {
Andrew_M 4:6353f829c56c 25 _x[i] = x;
Andrew_M 5:a3a9e0417e04 26 _y[i] = y + i;
Andrew_M 4:6353f829c56c 27 }
Andrew_M 1:a14415de3ad5 28 }
Andrew_M 1:a14415de3ad5 29
Andrew_M 2:9ca5e1c221c3 30 void Snek::update(Direction d)
Andrew_M 2:9ca5e1c221c3 31 {
Andrew_M 5:a3a9e0417e04 32 for (int i = _length-1; i >= 1; i--) {
Andrew_M 7:c1e0593bfc99 33 _x[i] = _x[i-1];
Andrew_M 7:c1e0593bfc99 34 _y[i] = _y[i-1];
Andrew_M 5:a3a9e0417e04 35 }
Andrew_M 7:c1e0593bfc99 36
Andrew_M 5:a3a9e0417e04 37 if (d == N && _oldDirection != 'S') { //checks the current direction so the snake cannot go back on itself
Andrew_M 4:6353f829c56c 38 _y[0] -= 1;
Andrew_M 3:6253a2d374fa 39 _oldDirection = 'N';
Andrew_M 5:a3a9e0417e04 40 } else if (d == S && _oldDirection != 'N') {
Andrew_M 4:6353f829c56c 41 _y[0] += 1;
Andrew_M 3:6253a2d374fa 42 _oldDirection = 'S';
Andrew_M 5:a3a9e0417e04 43 } else if (d == E && _oldDirection != 'W') {
Andrew_M 4:6353f829c56c 44 _x[0] += 1;
Andrew_M 3:6253a2d374fa 45 _oldDirection = 'E';
Andrew_M 5:a3a9e0417e04 46 } else if (d == W && _oldDirection != 'E') {
Andrew_M 4:6353f829c56c 47 _x[0] -= 1;
Andrew_M 3:6253a2d374fa 48 _oldDirection = 'W';
Andrew_M 3:6253a2d374fa 49 } else {
Andrew_M 3:6253a2d374fa 50 if (_oldDirection == 'N') {
Andrew_M 4:6353f829c56c 51 _y[0] -= 1;
Andrew_M 3:6253a2d374fa 52 } else if (_oldDirection == 'S') {
Andrew_M 4:6353f829c56c 53 _y[0] += 1;
Andrew_M 3:6253a2d374fa 54 } else if (_oldDirection == 'E') {
Andrew_M 4:6353f829c56c 55 _x[0] += 1;
Andrew_M 3:6253a2d374fa 56 } else if (_oldDirection == 'W') {
Andrew_M 4:6353f829c56c 57 _x[0] -= 1;
Andrew_M 3:6253a2d374fa 58 }
Andrew_M 7:c1e0593bfc99 59 }
Andrew_M 2:9ca5e1c221c3 60 }
Andrew_M 2:9ca5e1c221c3 61
Andrew_M 4:6353f829c56c 62 int Snek::getX(int ref)
Andrew_M 1:a14415de3ad5 63 {
Andrew_M 4:6353f829c56c 64 return _x[ref];
Andrew_M 2:9ca5e1c221c3 65 }
Andrew_M 1:a14415de3ad5 66
Andrew_M 4:6353f829c56c 67 int Snek::getY(int ref)
Andrew_M 2:9ca5e1c221c3 68 {
Andrew_M 4:6353f829c56c 69 return _y[ref];
Andrew_M 2:9ca5e1c221c3 70 }
Andrew_M 4:6353f829c56c 71
Andrew_M 4:6353f829c56c 72 int Snek::getLength()
Andrew_M 4:6353f829c56c 73 {
Andrew_M 4:6353f829c56c 74 return _length;
Andrew_M 4:6353f829c56c 75 }
Andrew_M 5:a3a9e0417e04 76
Andrew_M 5:a3a9e0417e04 77 void Snek::grow()
Andrew_M 5:a3a9e0417e04 78 {
Andrew_M 5:a3a9e0417e04 79 _length+=1;
Andrew_M 5:a3a9e0417e04 80 }
Andrew_M 7:c1e0593bfc99 81