ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun May 06 20:17:50 2018 +0000
Revision:
8:9d01fd4a63ad
Parent:
7:c1e0593bfc99
Child:
11:b25874e7efe4
Started basic framework for a main menu, non functional. Menu has it's own class

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