Advertisement
Guest User

snake.cpp

a guest
Jan 8th, 2014
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include "snake.hpp"
  2.  
  3. void Snake::MoveDown() {
  4.     CutTail();
  5.     GrowDown();
  6.     UpdateLimbs();
  7. }
  8.  
  9. void Snake::MoveUp() {
  10.     CutTail();
  11.     GrowUp();
  12.     UpdateLimbs();
  13. }
  14.  
  15. void Snake::MoveRight() {
  16.     CutTail();
  17.     GrowRight();
  18.     UpdateLimbs();
  19. }
  20.  
  21. void Snake::MoveLeft() {
  22.     CutTail();
  23.     GrowLeft();
  24.     UpdateLimbs();
  25. }
  26.  
  27. void Snake::GrowTo(unsigned char newPosX, unsigned char newPosY) {
  28.     itHead->cellType = SnakeCellType::body;
  29.     _snakeCell.push_back(SnakeCell(SnakeCellType::head, newPosX, newPosY));
  30. }
  31.  
  32. void Snake::GrowDown() {
  33.     GrowTo(itHead->positionX, (itHead->positionY == SCREEN_HEIGHT - 1) ? (0) : (itHead->positionY + 1));
  34. }
  35.  
  36. void Snake::GrowUp() {
  37.     GrowTo(itHead->positionX, (itHead->positionY == 0) ? (SCREEN_HEIGHT - 1) : (itHead->positionY - 1));
  38. }
  39.  
  40. void Snake::GrowRight() {
  41.     GrowTo((itHead->positionX == SCREEN_WIDTH - 1) ? (0) : (itHead->positionX + 1), itHead->positionY);
  42. }
  43.  
  44. void Snake::GrowLeft() {
  45.     GrowTo((itHead->positionX == 0) ? (SCREEN_WIDTH-1) : (itHead->positionX - 1), itHead->positionY);
  46. }
  47.  
  48. Snake::Snake(unsigned char initPosX, unsigned char initPosY) {
  49.     _snakeCell.push_back(SnakeCell(SnakeCellType::tail, initPosX, initPosY));
  50.     _snakeCell.push_back(SnakeCell(SnakeCellType::head, initPosX + 1, initPosY));
  51.     UpdateHead();
  52.     UpdateTail();
  53. }
  54.  
  55. Snake::Snake() {
  56.  
  57. }
  58.  
  59. unsigned char Snake::GetHeadPosY() {
  60.     return itHead->positionY;
  61. }
  62.  
  63. unsigned char Snake::GetHeadPosX() {
  64.     return itHead->positionX;
  65. }
  66.  
  67. unsigned char Snake::GetTailPosX() {
  68.     return itTail->positionX;
  69. }
  70.  
  71. unsigned char Snake::GetTailPosY() {
  72.     return itTail->positionY;
  73. }
  74.  
  75. unsigned char Snake::GetTailPrePosX() {
  76.     return _preCell.positionX;
  77. }
  78.  
  79. unsigned char Snake::GetTailPrePosY() {
  80.     return _preCell.positionY;
  81. }
  82.  
  83. void Snake::MoveByKeyPressed(ControlKeyCodes keyPressed) {
  84.     switch (keyPressed) {
  85.     case ControlKeyCodes::up:
  86.         MoveUp();
  87.         break;
  88.     case ControlKeyCodes::down:
  89.         MoveDown();
  90.         break;
  91.     case ControlKeyCodes::left:
  92.         MoveLeft();
  93.         break;
  94.     case ControlKeyCodes::right:
  95.         MoveRight();
  96.         break;
  97.     }
  98. }
  99.  
  100. void Snake::UpdateHead() {
  101.     itHead = --_snakeCell.end();
  102.     itHead->cellType = SnakeCellType::head;
  103. }
  104.  
  105. void Snake::UpdateTail() {
  106.     itTail = _snakeCell.begin();
  107.     itTail->cellType = SnakeCellType::tail;
  108. }
  109.  
  110. void Snake::CutTail() {
  111.     _preCell = *itTail;
  112.     _snakeCell.pop_front();
  113.     UpdateTail();
  114. }
  115.  
  116. void Snake::UpdateLimbs() {
  117.     UpdateTail();
  118.     UpdateHead();
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement