Added boundaries for snake movement

Snake is now limited to a hard-coded boundary. Boundary is planned to be changed to no longer be hard-coded.
This commit is contained in:
TriantaTV 2022-07-26 19:47:08 -05:00
parent 97085dd314
commit 9f90e6fb2f
3 changed files with 28 additions and 10 deletions

View File

@ -20,10 +20,8 @@ bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2)
}
// Move snake head piece
int SnakeMovement()
void Snake::CheckDirection()
{
std::cout << "Test text \n";
int snakeDirection = 0;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
snakeDirection = 1;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
@ -32,7 +30,22 @@ int SnakeMovement()
snakeDirection = 3;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
snakeDirection = 4;
return snakeDirection;
return;
}
// Check snake head for running into boundaries
bool Snake::CheckBoundaries()
{
if (snakeBody.front().getPosition().x == 0 && snakeDirection == 1)
return 1;
if (snakeBody.front().getPosition().y == 0 && snakeDirection == 2)
return 1;
// TODO: Change boundaries to not be hard-coded
if (snakeBody.front().getPosition().y > 675 && snakeDirection == 3)
return 1;
if (snakeBody.front().getPosition().x > 975 && snakeDirection == 4)
return 1;
return 0;
}
sf::Vector2f CalculateNewPosition(int direction, sf::Vector2f position)
@ -56,12 +69,14 @@ void Snake::ExtendSnake()
return;
}
void Snake::MoveSnake(int snakeDirection)
void Snake::MoveSnake()
{
// Create a new deque RectangleShape and pop old
// Todo: Depreciate ExtendSnake and just add a collision test
CheckDirection();
sf::Vector2f newHeadPosition;
newHeadPosition = GetSnakeHeadPosition();
if (!CheckBoundaries())
newHeadPosition = CalculateNewPosition(snakeDirection, newHeadPosition);
sf::RectangleShape newBodyPart(sf::Vector2f(25,25));
newBodyPart.setPosition(newHeadPosition);

View File

@ -22,6 +22,7 @@ class Snake
{
private:
std::deque<sf::RectangleShape> snakeBody;
int snakeDirection = 0;
public:
Snake();
Snake(sf::Vector2f head);
@ -31,7 +32,9 @@ public:
sf::RectangleShape GetSnakeHead();
void DisplaySnake(sf::RenderWindow& window);
void ExtendSnake();
void MoveSnake(int snakeDirection); // Move only head body piece
void MoveSnake(); // Move only head body piece
void CheckDirection();
bool CheckBoundaries();
};

View File

@ -27,7 +27,7 @@ int main()
gameGridVertical = (videoSizeVertical // 25) * 25;
*/
sf::RenderWindow window(sf::VideoMode(videoSizeHorizontal, videoSizeVertical), "SnakePlusPlus");
sf::Time delay = sf::milliseconds(5);
sf::Time delay = sf::milliseconds(100);
int snakeDirection = 0;
Snake Player(sf::Vector2f(25,25));
@ -59,7 +59,7 @@ int main()
snakeDirection = 3;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
snakeDirection = 4;
Player.MoveSnake(snakeDirection);
Player.MoveSnake();
// if (SnakeCollision(snakeHead, snakeFood))
// {
// snakeFoodPosition.x += 25;
@ -69,6 +69,6 @@ int main()
window.draw(snakeFood);
Player.DisplaySnake(window);
window.display();
sf::sleep(delay);
// sf::sleep(delay);
}
}