Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
snake.cpp
00001 #include "snake.h" 00002 #include "bodyPiece.h" 00003 #include <list> 00004 #include "ledCube.h" 00005 00006 // Constructor 00007 snake::snake(char startRow, char startCol) 00008 { 00009 bodyPiece head = bodyPiece(); 00010 head.currRow = startRow; 00011 head.currCol = startCol; 00012 snakeBody.push_back(head); 00013 bodySize = 1; 00014 movementDirection = START_DIRECTION; 00015 movementSpeed = START_SPEED; 00016 } 00017 00018 // Movement method for the snake, will update LEDs and snake's body 00019 char snake::move(char newHeadRow, char newHeadCol, ledCube *cube) 00020 { 00021 00022 // Variables to hold the bodyPiece's X and Y positions on the grid 00023 char prevRow, prevCol, tempRow, tempCol; 00024 00025 // Store the snake's head into the iterator 00026 std::list<bodyPiece>::iterator it=snakeBody.begin(); 00027 // Save the head's current Row and Col position 00028 prevRow = (*it).currRow; 00029 prevCol = (*it).currCol; 00030 // Update the head to the new Row and Col 00031 (*it).currRow = newHeadRow; 00032 (*it).currCol = newHeadCol; 00033 (*cube).turnOffLed(prevRow, prevCol, 0); 00034 (*cube).turnOnLed((*it).currRow, (*it).currCol, 0); 00035 char bodyCount = 1; 00036 // Check to see if we are at the tail with this while loop 00037 while(bodyCount < bodySize) { 00038 // Move to the next bodyPiece 00039 it++; 00040 bodyCount++; 00041 // Store the previous piece's location in the current piece 00042 tempRow = (*it).currRow; 00043 (*it).currRow = prevRow; 00044 tempCol = (*it).currCol; 00045 (*it).currCol = prevCol; 00046 prevRow = tempRow; 00047 prevCol = tempCol; 00048 // Check to see if the head has collided with this bodyPiece 00049 if(snakeBody.front().currRow == prevRow && snakeBody.front().currCol == prevCol) { 00050 return 1; 00051 } 00052 if(prevRow < 5 && prevCol < 5) { 00053 (*cube).turnOffLed(prevRow, prevCol, 0); 00054 } 00055 (*cube).turnOnLed((*it).currRow, (*it).currCol, 0); 00056 } 00057 return 0; 00058 } 00059 00060 // Checks the current movement direction and decided where to move the snake head next 00061 // Will return 1 if out of bounds or if the head has hit a bodyPiece, 0 if still in the boundaries 00062 char snake::moveSnake(ledCube *cube) 00063 { 00064 bodyPiece head = snakeBody.front(); 00065 char ret = 0; 00066 switch(movementDirection) { 00067 case Down: 00068 if(head.currCol+1 > NUM_COLS) { 00069 ret = 1; 00070 } else { 00071 ret = move(head.currRow, head.currCol+1, cube); 00072 } 00073 break; 00074 case Up: 00075 if(head.currCol-1 < 0) { 00076 ret = 1; 00077 } else { 00078 ret = move(head.currRow, head.currCol-1, cube); 00079 } 00080 break; 00081 case Left: 00082 if(head.currRow-1 < 0) { 00083 ret = 1; 00084 } else { 00085 ret = move(head.currRow-1, head.currCol, cube); 00086 } 00087 break; 00088 case Right: 00089 if(head.currRow+1 > NUM_ROWS) { 00090 ret = 1; 00091 } else { 00092 ret = move(head.currRow+1, head.currCol, cube); 00093 } 00094 } 00095 return ret; 00096 } 00097 00098 // Adds a new piece on to snake's tail 00099 void snake::addPiece() 00100 { 00101 bodyPiece b; 00102 snakeBody.push_back(b); 00103 bodySize++; 00104 printf("piece added + bodySize: %d\n", bodySize); 00105 } 00106 00107 bool snake::isEating(char foodRow, char foodCol) 00108 { 00109 if(snakeBody.front().currRow == foodRow && snakeBody.front().currCol == foodCol) { 00110 addPiece(); 00111 return 1; 00112 } else { 00113 return 0; 00114 } 00115 } 00116 00117 // Constructor for the food class 00118 food::food(char row, char col) 00119 { 00120 currRow = row; 00121 currCol = col; 00122 } 00123 00124 // Moves food to a new row and column 00125 void food::moveFood(char row, char col) 00126 { 00127 currRow = row; 00128 currCol = col; 00129 } 00130
Generated on Wed Jul 13 2022 02:48:01 by
1.7.2