From e8125882003b03a8266d40773da76e8595bc3ab3 Mon Sep 17 00:00:00 2001 From: TriantaTV <56975502+TriantaTV@users.noreply.github.com> Date: Thu, 28 Jul 2022 14:56:54 -0500 Subject: [PATCH] Added snake collision with itself Added snake collision with itself and also changed color to green. --- src/Snake.cpp | 29 ++++++++++++++++++++++++----- src/Snake.h | 1 + 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Snake.cpp b/src/Snake.cpp index 6a9fd9c..b771736 100644 --- a/src/Snake.cpp +++ b/src/Snake.cpp @@ -37,15 +37,15 @@ void Snake::CheckDirection() bool Snake::CheckBoundaries() { if (snakeBody.front().getPosition().x == 0 && snakeDirection == 1) - return 1; + return true; if (snakeBody.front().getPosition().y == 0 && snakeDirection == 2) - return 1; + return true; // TODO: Change boundaries to not be hard-coded if (snakeBody.front().getPosition().y > 675 && snakeDirection == 3) - return 1; + return true; if (snakeBody.front().getPosition().x > 975 && snakeDirection == 4) - return 1; - return 0; + return true; + return false; } // Get a new coordinate position based on snake direction @@ -76,6 +76,12 @@ void Snake::MoveSnake(sf::RectangleShape& snakeFood) newHeadPosition = CalculateNewPosition(snakeDirection, newHeadPosition); sf::RectangleShape newBodyPart(sf::Vector2f(25,25)); newBodyPart.setPosition(newHeadPosition); + if (IsSelfCollision(newBodyPart)) + { + // Do nothing if self collision + return; + } + newBodyPart.setFillColor(sf::Color::Green); snakeBody.push_front(newBodyPart); if (!SnakeCollision(GetSnakeHead(), snakeFood)) snakeBody.pop_back(); @@ -115,6 +121,19 @@ void Snake::DisplaySnake(sf::RenderWindow& window) return; } +// Test for snake self collision +bool Snake::IsSelfCollision(sf::RectangleShape testRectangle) +{ + for (auto it = snakeBody.cbegin(); it != snakeBody.cend(); ++it) + { + if (SnakeCollision(testRectangle, *it)) + { + return true; + } + } + return false; +} + // General constructor for snake class Snake::Snake() { diff --git a/src/Snake.h b/src/Snake.h index 5670fc5..5dc98a8 100644 --- a/src/Snake.h +++ b/src/Snake.h @@ -21,6 +21,7 @@ public: void MoveSnake(sf::RectangleShape& snakeFood); void CheckDirection(); bool CheckBoundaries(); + bool IsSelfCollision(sf::RectangleShape testRectangle); };