Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "snake.hpp"
- void Snake::MoveDown() {
- CutTail();
- GrowDown();
- UpdateLimbs();
- }
- void Snake::MoveUp() {
- CutTail();
- GrowUp();
- UpdateLimbs();
- }
- void Snake::MoveRight() {
- CutTail();
- GrowRight();
- UpdateLimbs();
- }
- void Snake::MoveLeft() {
- CutTail();
- GrowLeft();
- UpdateLimbs();
- }
- void Snake::GrowTo(unsigned char newPosX, unsigned char newPosY) {
- itHead->cellType = SnakeCellType::body;
- _snakeCell.push_back(SnakeCell(SnakeCellType::head, newPosX, newPosY));
- }
- void Snake::GrowDown() {
- GrowTo(itHead->positionX, (itHead->positionY == SCREEN_HEIGHT - 1) ? (0) : (itHead->positionY + 1));
- }
- void Snake::GrowUp() {
- GrowTo(itHead->positionX, (itHead->positionY == 0) ? (SCREEN_HEIGHT - 1) : (itHead->positionY - 1));
- }
- void Snake::GrowRight() {
- GrowTo((itHead->positionX == SCREEN_WIDTH - 1) ? (0) : (itHead->positionX + 1), itHead->positionY);
- }
- void Snake::GrowLeft() {
- GrowTo((itHead->positionX == 0) ? (SCREEN_WIDTH-1) : (itHead->positionX - 1), itHead->positionY);
- }
- Snake::Snake(unsigned char initPosX, unsigned char initPosY) {
- _snakeCell.push_back(SnakeCell(SnakeCellType::tail, initPosX, initPosY));
- _snakeCell.push_back(SnakeCell(SnakeCellType::head, initPosX + 1, initPosY));
- UpdateHead();
- UpdateTail();
- }
- Snake::Snake() {
- }
- unsigned char Snake::GetHeadPosY() {
- return itHead->positionY;
- }
- unsigned char Snake::GetHeadPosX() {
- return itHead->positionX;
- }
- unsigned char Snake::GetTailPosX() {
- return itTail->positionX;
- }
- unsigned char Snake::GetTailPosY() {
- return itTail->positionY;
- }
- unsigned char Snake::GetTailPrePosX() {
- return _preCell.positionX;
- }
- unsigned char Snake::GetTailPrePosY() {
- return _preCell.positionY;
- }
- void Snake::MoveByKeyPressed(ControlKeyCodes keyPressed) {
- switch (keyPressed) {
- case ControlKeyCodes::up:
- MoveUp();
- break;
- case ControlKeyCodes::down:
- MoveDown();
- break;
- case ControlKeyCodes::left:
- MoveLeft();
- break;
- case ControlKeyCodes::right:
- MoveRight();
- break;
- }
- }
- void Snake::UpdateHead() {
- itHead = --_snakeCell.end();
- itHead->cellType = SnakeCellType::head;
- }
- void Snake::UpdateTail() {
- itTail = _snakeCell.begin();
- itTail->cellType = SnakeCellType::tail;
- }
- void Snake::CutTail() {
- _preCell = *itTail;
- _snakeCell.pop_front();
- UpdateTail();
- }
- void Snake::UpdateLimbs() {
- UpdateTail();
- UpdateHead();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement