From 165e5312058b905c266af9c2d4485728279662ba Mon Sep 17 00:00:00 2001 From: TriantaTV <56975502+TriantaTV@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:40:45 -0500 Subject: [PATCH 1/4] Split into separate files and added planning Snake is now planned to use a deque for location of body. Split snake into separate file outside of main. --- src/Snake.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/Snake.h | 30 ++++++++++++++++++++++++++++ src/main.cpp | 31 ++++++++++++++++------------- 3 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 src/Snake.cpp create mode 100644 src/Snake.h diff --git a/src/Snake.cpp b/src/Snake.cpp new file mode 100644 index 0000000..b0fba5b --- /dev/null +++ b/src/Snake.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +#include "Snake.h" +using namespace std; + +bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2) +{ + sf::Vector2f object1Position = object1.getPosition(); + sf::Vector2f object2Position = object2.getPosition(); + if (object1Position.x != object2Position.x) + return 0; + if (object1Position.y != object2Position.y) + return 0; + + return 1; + +} + +void SnakeMovement(sf::Keyboard keyboard) +{ + /* + if (keyboard.pressed(Left)) + snakeHead.moveleft(); + + if (keyboard.pressed(Right)) + snakeHead.moveRight(); + if (keyboard.pressed(Down)) + snakeHead.moveDown(); + if (keyboard.pressed(Up)) + snakeHead.moveUp(); + if (!snakeHead.isTouchingFood()) + snakeQueue.pop(); + + */ + return; +} + +void Snake::ExtendSnake(sf::Vector2f newLocation) +{ + /* + snakeBody.push_back(newLocation); + */ + return; +} + +void Snake::MoveSnake() +{ + /* + head.snakeBody() + */ + return; +} +SnakeNode::SnakeNode(); +SnakeNode::SnakeNode(sf::Vector2f addBodyPiece); diff --git a/src/Snake.h b/src/Snake.h new file mode 100644 index 0000000..5c9e4c5 --- /dev/null +++ b/src/Snake.h @@ -0,0 +1,30 @@ +//Snake.h +#ifndef SNAKE_H +#define SNAKE_H +#include + +bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2); +void SnakeMovement(sf::Keyboard keyboard); + +class SnakeNode +{ +private: + // sf::RectangleShape snakeBody(sf::Vector2f(25,25)); + sf::Vector2f snakeBodyLocation; + SnakeNode* next; +public: + SnakeNode(); + SnakeNode(sf::Vector2f addBodyPiece); +}; + +class Snake +{ +private: + std::deque snakeBody; +public: + void ExtendSnake(sf::Vector2f newLocation); + void MoveSnake(); +}; + + +#endif diff --git a/src/main.cpp b/src/main.cpp index f7e00db..12f7310 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,22 @@ #include #include #include +#include "Snake.h" using namespace std; -bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2); + +/* + + TODO: Work on snake body + Add ability for body to extend when eating food + + Turn snake body into queue + Each piece of queue has coordinates + If head touches food, just add to queue, don't pop + +*/ + + int main() { @@ -30,6 +43,9 @@ int main() } sf::Vector2f snakeHeadPosition = snakeHead.getPosition(); sf::Vector2f snakeFoodPosition = snakeFood.getPosition(); + // TODO: Split Movement into separate function + // Add boundaries + // Add movement until boundaries if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) snakeHeadPosition.x -= 25; if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) @@ -52,16 +68,3 @@ int main() sf::sleep(delay); } } - -bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2) -{ - sf::Vector2f object1Position = object1.getPosition(); - sf::Vector2f object2Position = object2.getPosition(); - if (object1Position.x != object2Position.x) - return 0; - if (object1Position.y != object2Position.y) - return 0; - - return 1; - -} From c7263dfc1f44957bd549cc699ad6467308e6410d Mon Sep 17 00:00:00 2001 From: TriantaTV <56975502+TriantaTV@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:43:42 -0500 Subject: [PATCH 2/4] SnakeNode is now depreciated due to swapping to a deque --- src/Snake.cpp | 4 ++-- src/Snake.h | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Snake.cpp b/src/Snake.cpp index b0fba5b..c9df30a 100644 --- a/src/Snake.cpp +++ b/src/Snake.cpp @@ -51,5 +51,5 @@ void Snake::MoveSnake() */ return; } -SnakeNode::SnakeNode(); -SnakeNode::SnakeNode(sf::Vector2f addBodyPiece); +// SnakeNode::SnakeNode(); +// SnakeNode::SnakeNode(sf::Vector2f addBodyPiece); diff --git a/src/Snake.h b/src/Snake.h index 5c9e4c5..0dc52d6 100644 --- a/src/Snake.h +++ b/src/Snake.h @@ -6,16 +6,16 @@ bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2); void SnakeMovement(sf::Keyboard keyboard); -class SnakeNode -{ -private: - // sf::RectangleShape snakeBody(sf::Vector2f(25,25)); - sf::Vector2f snakeBodyLocation; - SnakeNode* next; -public: - SnakeNode(); - SnakeNode(sf::Vector2f addBodyPiece); -}; +// class SnakeNode +// { +// private: +// // sf::RectangleShape snakeBody(sf::Vector2f(25,25)); +// sf::Vector2f snakeBodyLocation; +// SnakeNode* next; +// public: +// SnakeNode(); +// SnakeNode(sf::Vector2f addBodyPiece); +// }; class Snake { From 3d8dcf23acfb2c5d66f3fc15cb634f5deec8bfda Mon Sep 17 00:00:00 2001 From: TriantaTV <56975502+TriantaTV@users.noreply.github.com> Date: Mon, 25 Jul 2022 16:06:06 -0500 Subject: [PATCH 3/4] Deque swapped to hold sf::RectangleShape Deque swapped to hold sf::RectangleShape and will allow for holding a deque for each snake body piece. Snake class can create functions to get necessary tests through deque. --- src/Snake.cpp | 6 +++++- src/Snake.h | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Snake.cpp b/src/Snake.cpp index c9df30a..8e127ba 100644 --- a/src/Snake.cpp +++ b/src/Snake.cpp @@ -4,8 +4,11 @@ #include "Snake.h" using namespace std; +// Test for collision between two objects bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2) { + // Hack for getting a temporary collision + // Collision only tested for origin corrordinate sf::Vector2f object1Position = object1.getPosition(); sf::Vector2f object2Position = object2.getPosition(); if (object1Position.x != object2Position.x) @@ -17,6 +20,7 @@ bool SnakeCollision(sf::RectangleShape object1, sf::RectangleShape object2) } +// Move snake head piece void SnakeMovement(sf::Keyboard keyboard) { /* @@ -36,7 +40,7 @@ void SnakeMovement(sf::Keyboard keyboard) return; } -void Snake::ExtendSnake(sf::Vector2f newLocation) +void Snake::ExtendSnake() { /* snakeBody.push_back(newLocation); diff --git a/src/Snake.h b/src/Snake.h index 0dc52d6..7299cfd 100644 --- a/src/Snake.h +++ b/src/Snake.h @@ -20,10 +20,12 @@ void SnakeMovement(sf::Keyboard keyboard); class Snake { private: - std::deque snakeBody; + std::deque snakeBody; public: - void ExtendSnake(sf::Vector2f newLocation); - void MoveSnake(); + // Instead of popping like in MoveSnake() + // Simply add to deque + void ExtendSnake(); + void MoveSnake(); // Move only head body piece }; From c03b16f0e9bd5ad17a8b80d7b29feb03c28b9eed Mon Sep 17 00:00:00 2001 From: TriantaTV <56975502+TriantaTV@users.noreply.github.com> Date: Mon, 25 Jul 2022 16:12:11 -0500 Subject: [PATCH 4/4] Laid groundwork for creating a snake body Laid groundwork for creating a snake body. Implementation should be added and working next push. --- src/Snake.cpp | 20 ++++++++++---------- src/Snake.h | 1 + 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Snake.cpp b/src/Snake.cpp index 8e127ba..fb5821e 100644 --- a/src/Snake.cpp +++ b/src/Snake.cpp @@ -26,33 +26,33 @@ void SnakeMovement(sf::Keyboard keyboard) /* if (keyboard.pressed(Left)) snakeHead.moveleft(); - if (keyboard.pressed(Right)) snakeHead.moveRight(); if (keyboard.pressed(Down)) snakeHead.moveDown(); if (keyboard.pressed(Up)) snakeHead.moveUp(); - if (!snakeHead.isTouchingFood()) - snakeQueue.pop(); - */ return; } void Snake::ExtendSnake() { - /* - snakeBody.push_back(newLocation); - */ + // Create a new deque RectangleShape without popping old return; } void Snake::MoveSnake() { - /* - head.snakeBody() - */ + // Create a new deque RectangleShape and pop old + // Todo: Depreciate ExtendSnake and just add a collision test + return; +} + +Snake::Snake() +{ + // Possibly unnecessary + // The big 3 could be used to create a fresh game state return; } // SnakeNode::SnakeNode(); diff --git a/src/Snake.h b/src/Snake.h index 7299cfd..8bf2632 100644 --- a/src/Snake.h +++ b/src/Snake.h @@ -21,6 +21,7 @@ class Snake { private: std::deque snakeBody; + Snake(); public: // Instead of popping like in MoveSnake() // Simply add to deque