ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun Apr 29 18:03:45 2018 +0000
Revision:
5:a3a9e0417e04
Parent:
4:6353f829c56c
Child:
6:ed553fd191c2
Food class is now a thing, the snake grows when it eats and a game over state is reached when the snake eats it's own tail with a simple animation to demonstrate the game over state has been reached

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Andrew_M 1:a14415de3ad5 1 #include "Engine.h"
Andrew_M 1:a14415de3ad5 2
Andrew_M 1:a14415de3ad5 3 Engine::Engine()
Andrew_M 1:a14415de3ad5 4 {
Andrew_M 1:a14415de3ad5 5
Andrew_M 1:a14415de3ad5 6 }
Andrew_M 1:a14415de3ad5 7
Andrew_M 1:a14415de3ad5 8 Engine::~Engine()
Andrew_M 1:a14415de3ad5 9 {
Andrew_M 1:a14415de3ad5 10
Andrew_M 1:a14415de3ad5 11 }
Andrew_M 1:a14415de3ad5 12
Andrew_M 2:9ca5e1c221c3 13 void Engine::init() // initialise the game parameters
Andrew_M 1:a14415de3ad5 14 {
Andrew_M 3:6253a2d374fa 15 memset(_grid, 0, sizeof(_grid));
Andrew_M 2:9ca5e1c221c3 16 _solid.init(3,5);
Andrew_M 5:a3a9e0417e04 17 _noodles.init(10,10);
Andrew_M 1:a14415de3ad5 18 }
Andrew_M 1:a14415de3ad5 19
Andrew_M 1:a14415de3ad5 20 void Engine::read_input(Gamepad &pad)
Andrew_M 1:a14415de3ad5 21 {
Andrew_M 1:a14415de3ad5 22 _d = pad.get_direction();
Andrew_M 1:a14415de3ad5 23 }
Andrew_M 1:a14415de3ad5 24
Andrew_M 1:a14415de3ad5 25 void Engine::draw(N5110 &lcd)
Andrew_M 1:a14415de3ad5 26 {
Andrew_M 2:9ca5e1c221c3 27 lcd.drawRect(0,0,48,48,FILL_TRANSPARENT);
Andrew_M 2:9ca5e1c221c3 28 for (int j = 0; j < 22; j++) {
Andrew_M 2:9ca5e1c221c3 29 for (int i = 0; i < 22; i++) {
Andrew_M 2:9ca5e1c221c3 30 if (_grid[i][j] != 0) {
Andrew_M 4:6353f829c56c 31 lcd.drawRect((2 * i) + 2,(2 * j) + 2,2,2,FILL_BLACK);
Andrew_M 2:9ca5e1c221c3 32 }
Andrew_M 2:9ca5e1c221c3 33 }
Andrew_M 2:9ca5e1c221c3 34 }
Andrew_M 5:a3a9e0417e04 35
Andrew_M 5:a3a9e0417e04 36 if (_gameOver) {
Andrew_M 5:a3a9e0417e04 37 for (int i = 0; i <= 22; i++) {
Andrew_M 5:a3a9e0417e04 38 for (int j = 0; j <= 22; j++) {
Andrew_M 5:a3a9e0417e04 39 lcd.drawRect((2 * i) + 1,(2 * j) + 1,2,2,FILL_BLACK);
Andrew_M 5:a3a9e0417e04 40 wait(0.01);
Andrew_M 5:a3a9e0417e04 41 lcd.refresh();
Andrew_M 5:a3a9e0417e04 42 }
Andrew_M 5:a3a9e0417e04 43 }
Andrew_M 5:a3a9e0417e04 44 }
Andrew_M 5:a3a9e0417e04 45
Andrew_M 5:a3a9e0417e04 46 //lcd.printString("Score",45,44);
Andrew_M 5:a3a9e0417e04 47
Andrew_M 5:a3a9e0417e04 48 // lcd.printString(convertString(_score),45,38);
Andrew_M 1:a14415de3ad5 49 }
Andrew_M 1:a14415de3ad5 50
Andrew_M 1:a14415de3ad5 51 void Engine::update(Gamepad &pad)
Andrew_M 1:a14415de3ad5 52 {
Andrew_M 3:6253a2d374fa 53 memset(_grid, 0, sizeof(_grid));
Andrew_M 3:6253a2d374fa 54
Andrew_M 3:6253a2d374fa 55 _solid.update(_d);
Andrew_M 3:6253a2d374fa 56
Andrew_M 4:6353f829c56c 57 int _l =_solid.getLength();
Andrew_M 3:6253a2d374fa 58
Andrew_M 5:a3a9e0417e04 59 for (int i = 0; i < _l; i++) {
Andrew_M 5:a3a9e0417e04 60 if (_grid[_solid.getX(i)][_solid.getY(i)] != 1) {
Andrew_M 5:a3a9e0417e04 61 _grid[_solid.getX(i)][_solid.getY(i)] = 1;
Andrew_M 5:a3a9e0417e04 62 } else {
Andrew_M 5:a3a9e0417e04 63 _gameOver = true;
Andrew_M 5:a3a9e0417e04 64 }
Andrew_M 5:a3a9e0417e04 65 }
Andrew_M 5:a3a9e0417e04 66
Andrew_M 5:a3a9e0417e04 67 _grid[_noodles.getY()][_noodles.getY()] = 2;
Andrew_M 5:a3a9e0417e04 68
Andrew_M 5:a3a9e0417e04 69 if (_grid[_solid.getX(0)][_solid.getY(0)] == 2) {
Andrew_M 5:a3a9e0417e04 70 if (_solid.getLength()<100) {
Andrew_M 5:a3a9e0417e04 71 _solid.grow();
Andrew_M 5:a3a9e0417e04 72 }
Andrew_M 4:6353f829c56c 73 }
Andrew_M 1:a14415de3ad5 74 }
Andrew_M 5:a3a9e0417e04 75