ELEC2645 (2019/20)
/
ELEC2645_Project_el17oc1
Owen Cavender 201159294
snake.cpp
- Committer:
- el17oc
- Date:
- 2020-05-28
- Revision:
- 6:bf90044188d0
- Parent:
- 5:d716013c6a18
- Child:
- 7:0ce806455ef1
File content as of revision 6:bf90044188d0:
#include "snake.h" Snake::Snake() { } Snake::~Snake() { } void Snake::init() { _x0 = 48; _x1 = 48; _x2 = 48; _x3 = 48; _y0 = 20; _y1 = 19; _y2 = 18; _y3 = 17; // Vector2D SK0 {_x0, _y0}; // Vector2D SK1 {_x1, _y1}; //Vector2D SK2 {_x2, _y2}; //Vector2D SK3 {_x3, _y3}; _gameover = false; _score = 0; _direction = up; // Vector2D *_snakebody = new Vector2D [_length]; } void Snake::check_score(N5110 &lcd, Gamepad &pad, Apple &apple, Timer &timer) { Vector2D Apos = apple.get_Applepos(lcd); // printf("apple coordinate =, %d , %d",Apos.x, Apos.y); //need to code clear apple and make sure apple isnt spawning every time if((_x0 == Apos.x) && (_y0 == Apos.y)) { lcd.setPixel(Apos.x, Apos.y, 0); // Plem:: Wanted to make sure that this didnt clear the pixel of the snake as it passes through it _score++; timer.reset(); //by waiting unil the snake has passed through before clearing the old apple however the new apple spawn needs to be ASAP after collection //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.refresh(); } } void Snake::check_collisions() //code where it hits itself { if (_x0 == 0 ||_x0 == 84 || _y0 == 0 || _y1 == 42) { //how do i access snakehead.headx _gameover = true; } else { _gameover = _gameover; } } void Snake::render(N5110 &lcd, Apple &apple) { Vector2D Apos = apple.get_Applepos(lcd); lcd.setPixel(Apos.x, Apos.y,1); lcd.drawRect(0, 0, 84, 42, FILL_TRANSPARENT); lcd.setPixel(_x0, _y0,1); lcd.setPixel(_x1, _y1,1); lcd.setPixel(_x2, _y2,1); lcd.setPixel(_x3, _y3,1); // lcd.printString(" &d ",0,0, _display_time); } void Snake::get_position(Gamepad &pad) { Directions direction = _direction; if(direction != left) { if (pad.A_pressed()) { _direction = right; } } if(direction != right) { if (pad.B_pressed()) { _direction = left; } //check these are orrecrt } if(direction != down) { if (pad.X_pressed()) { _direction = up; } } if(direction != up) { if (pad.Y_pressed()) { _direction = down; } else { _direction = direction; } if (_direction == up) { // /-/ _x3 = _x2; _y3 = _y2; _x2 = _x1; _y2 = _y1; _x1 = _x0; _y1 = _y0; _x0 = _x0; _y0 = _y0 + 1; ///// 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) { _x3 = _x2; _y3 = _y2; _x2 = _x1; _y2 = _y1; _x1 = _x0; _y1 = _y0; _x0 = _x0; _y0 = _y0 - 1; } if (_direction == left) { _x3 = _x2; _y3 = _y2; _x2 = _x1; _y2 = _y1; _x1 = _x0; _y1 = _y0; _x0 = _x0 - 1; _y0 = _y0; } if (_direction == right) { _x3 = _x2; _y3 = _y2; _x2 = _x1; _y2 = _y1; _x1 = _x0; _y1 = _y0; _x0 = _x0 + 1; _y0 = _y0; } } } //MAKE WALL CLASS // MAIN MENU DIFFERENT DIFFUCLTIES CHANGING fps //DRAW RECTANGLE - SHRINK // CHANE SHAPE AFTER CERTAIN SCORE --- SET UP TIMER //NOTES - maybe make 2 player - joystick is player 2 void Snake::get_LEDs(Gamepad &pad) { pad.leds_off(); if (_x0 >= 42 && _y0 >= 24) { // top right led on pad.led(4, 1); } // topleft led on if (_x0 <= 42 && _y0 >=24) { // top right led on pad.led(1, 1); } //bottom left if (_x0 <=42 && _y0 <= 24) { pad.led(3,1); } //bottom right if (_x0 >= 42 && _y0 <= 24) { // top right led on pad.led(6, 1); } } void Snake::get_timer(Timer &timer) { _realtime = timer.read(); _display_time = (Reset_value - _realtime); if(_realtime == Reset_value) { _gameover = true; } if (0 <= _score && _score < 10) { Reset_value = 12; } if (10 <= _score && _score < 15) { Reset_value = 10; } if (15 <= _score && _score < 20) { Reset_value = 8; } else { Reset_value = 6; } } bool Snake::get_gameover() { return _gameover; } int Snake::get_score() { return _score; } void Snake::print_scores(N5110 &lcd) { int score = _score; char buffer1[14]; sprintf(buffer1,"%2d",score); lcd.printString(buffer1,WIDTH/2 - 3,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits char buffer2[14]; } void Snake::print_display_time(N5110 &lcd) { int countdown = _realtime; char buffer1[14]; sprintf(buffer1,"%2d",countdown); lcd.printString(buffer1,WIDTH/2,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits char buffer2[14]; }