ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Mon Apr 30 18:14:24 2018 +0000
Revision:
7:c1e0593bfc99
Parent:
6:ed553fd191c2
Child:
8:9d01fd4a63ad
Food now randomises location once eaten, basic game is now done. Next stage is more level types and a main menu

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 6:ed553fd191c2 16 _solid.init(10,4);
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 7:c1e0593bfc99 35
Andrew_M 7:c1e0593bfc99 36 lcd.printString("Score",48,0);
Andrew_M 7:c1e0593bfc99 37
Andrew_M 7:c1e0593bfc99 38
Andrew_M 7:c1e0593bfc99 39 int _score = (_solid.getLength() - 3);
Andrew_M 7:c1e0593bfc99 40
Andrew_M 7:c1e0593bfc99 41 char buffer1[14];
Andrew_M 7:c1e0593bfc99 42 sprintf(buffer1,"%2d",_score);
Andrew_M 7:c1e0593bfc99 43 lcd.printString(buffer1,48,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
Andrew_M 5:a3a9e0417e04 44
Andrew_M 5:a3a9e0417e04 45 if (_gameOver) {
Andrew_M 5:a3a9e0417e04 46 for (int i = 0; i <= 22; i++) {
Andrew_M 5:a3a9e0417e04 47 for (int j = 0; j <= 22; j++) {
Andrew_M 5:a3a9e0417e04 48 lcd.drawRect((2 * i) + 1,(2 * j) + 1,2,2,FILL_BLACK);
Andrew_M 5:a3a9e0417e04 49 wait(0.01);
Andrew_M 5:a3a9e0417e04 50 lcd.refresh();
Andrew_M 5:a3a9e0417e04 51 }
Andrew_M 5:a3a9e0417e04 52 }
Andrew_M 7:c1e0593bfc99 53 }
Andrew_M 1:a14415de3ad5 54 }
Andrew_M 1:a14415de3ad5 55
Andrew_M 1:a14415de3ad5 56 void Engine::update(Gamepad &pad)
Andrew_M 1:a14415de3ad5 57 {
Andrew_M 3:6253a2d374fa 58 memset(_grid, 0, sizeof(_grid));
Andrew_M 3:6253a2d374fa 59
Andrew_M 3:6253a2d374fa 60 _solid.update(_d);
Andrew_M 3:6253a2d374fa 61
Andrew_M 4:6353f829c56c 62 int _l =_solid.getLength();
Andrew_M 3:6253a2d374fa 63
Andrew_M 5:a3a9e0417e04 64 for (int i = 0; i < _l; i++) {
Andrew_M 5:a3a9e0417e04 65 if (_grid[_solid.getX(i)][_solid.getY(i)] != 1) {
Andrew_M 5:a3a9e0417e04 66 _grid[_solid.getX(i)][_solid.getY(i)] = 1;
Andrew_M 5:a3a9e0417e04 67 } else {
Andrew_M 5:a3a9e0417e04 68 _gameOver = true;
Andrew_M 5:a3a9e0417e04 69 }
Andrew_M 5:a3a9e0417e04 70 }
Andrew_M 5:a3a9e0417e04 71
Andrew_M 5:a3a9e0417e04 72 _grid[_noodles.getY()][_noodles.getY()] = 2;
Andrew_M 5:a3a9e0417e04 73
Andrew_M 5:a3a9e0417e04 74 if (_grid[_solid.getX(0)][_solid.getY(0)] == 2) {
Andrew_M 5:a3a9e0417e04 75 if (_solid.getLength()<100) {
Andrew_M 7:c1e0593bfc99 76
Andrew_M 7:c1e0593bfc99 77 _solid.grow(); //makes snake longer
Andrew_M 7:c1e0593bfc99 78
Andrew_M 7:c1e0593bfc99 79 bool empty = false; //makes a varible for finding an empty square
Andrew_M 7:c1e0593bfc99 80 while (!empty) { //loops until empty square found
Andrew_M 7:c1e0593bfc99 81 _noodles.random(); //randomise position of noodles
Andrew_M 7:c1e0593bfc99 82 if ( _grid[_noodles.getY()][_noodles.getY()] == 0) {
Andrew_M 7:c1e0593bfc99 83 empty = true; //stops looping when free space is found
Andrew_M 7:c1e0593bfc99 84 // no need to set the grid as it will put the noodles in the new location the next time 'update' is called
Andrew_M 7:c1e0593bfc99 85 }
Andrew_M 7:c1e0593bfc99 86 }
Andrew_M 5:a3a9e0417e04 87 }
Andrew_M 4:6353f829c56c 88 }
Andrew_M 1:a14415de3ad5 89 }
Andrew_M 5:a3a9e0417e04 90