ELEC2645 (2019/20)
/
ELEC2645_Project_el17oc1
Owen Cavender 201159294
snake.cpp
- Committer:
- el17oc
- Date:
- 2020-05-27
- Revision:
- 5:d716013c6a18
- Parent:
- 3:d17d712c2e45
- Child:
- 6:bf90044188d0
File content as of revision 5:d716013c6a18:
#include "snake.h" Snake::Snake() { } Snake::~Snake() { } void Snake::init (GameEngine &engine) { //WIDTH =84 HEIGHT = 42 //snakebody[0] is initalised may have to initilaise the other 2 og snake parts Vector2D SnakeHead = engine.get_Snakehead(); _length = 2; // how do i initalise _gameover = false; _score = 0; _direction = up; Vector2D S0 = SnakeHead; // Vector2D S1 = engine.get_oldSnakehead(); // Vector2D &Snakehead = {42, 24}; // Vector2D &oldSnakehead = {42, 23}; } void Snake::gameover_true(N5110 &lcd) //taking action if crash has occured { if (_gameover == true) { lcd.clear(); lcd.refresh(); lcd.printString( " Game Over L ", 0, 2 ); lcd.printString ("score: _score ",15, 15); //Need to add button to return to main screen / restart //NEED to return score without ruining structure of lcd.PrintString( "string", x, y) } else { } } void Snake::check_scored(N5110 &lcd, Gamepad &pad, GameEngine &engine) { Vector2D Applepos = engine.get_Applepos(); //need to code clear apple and make sure apple isnt spawning every time if(S0.x == Applepos.x && S0.y == Applepos.y) { lcd.setPixel(Applepos.x, Applepos.y, 0); // Plem:: Wanted to make sure that this didnt clear the pixel of the snake as it passes through it _score++; //by waiting unil the snake has passed through before clearing the old apple however the new apple spawn needs to be ASAP after collection _length = _length++; engine.set_Applepos(lcd); //randomises new values for _apx,_apy and draws on lcd -- draws on next loop-- the position is not needed until we compare it to Snakehead pad.tone(1500.0,0.5); //need to clear apple pad.leds_on(); wait(0.5); pad.leds_off(); } lcd.setPixel(Applepos.x, Applepos.y,1); } int Snake::set_direction(Gamepad &pad) //int type as Directions is an enum { Directions _direction; if (pad.A_pressed()) { _direction = right; } if (pad.B_pressed()) { _direction = left; //check these are orrecrt } if (pad.X_pressed()) { _direction = up; } if (pad.Y_pressed()) { _direction = down; } else { _direction = _direction; } return _direction; } void Snake::move_snakebody(GameEngine &engine, N5110 &lcd) { lcd.refresh(); Vector2D *_snakebody = new Vector2D [_length]; _snakebody[0].x = S0.x; //assign _sb0[0] before changing value _snakebody[0].y = S0.y; //engine.get_oldSnakehead; // _engine.get_oldSnakehead(); while(1) { if (_direction == up) { // /-/ S0.y++; ///// alters Snakehead initial value // Does this code look okay ? returning _direction in previous function and accessing it in this one - _direction should be member function } if (_direction == down) { // Direction should remain after button is pressed - should not just change the snakehead coordinate once S0.y--; } if (_direction == left) { S0.x--; } if (_direction == right) { S0.x++; } lcd.setPixel(S0.x, S0.y, 1); //updates the head position before rendering so when it draws i=1 the 0 position will be new for(int i=1; i<=_length; i++) { //0 being head of snake so snakepos[1]=snakepos[0] which is the head - moving up one place _snakebody[i].x = _snakebody[i-1].x; _snakebody[i].y = _snakebody[i-1].y; //plotting of snake lcd.setPixel(_snakebody->x, _snakebody->y, 1); //pointer used - need to point to x and y //Snake needs to follow itself - low numbers lead the way if((_snakebody[i].x == _snakebody[0].x) && (_snakebody[i].x == _snakebody[0].x)) { // Unsure how to initially define the snake with (3 bits, when score =0) starting position *without* redeclaring Vector2D *snakebody = new Vector2D [_length]; _gameover = true; } } } } void Snake::check_wall_collisions() // Vector2D *&snakebody hopefully this points to values stored in snakebody then can compare to snakehead { if (S0.x == 0 || S0.x == 84 || S0.y == 0 || S0.y == 42) { //how do i access snakehead.headx _gameover = true; } else { _gameover = _gameover; } }