From 10361b36754e209894242210a51a8f631373c4b2 Mon Sep 17 00:00:00 2001 From: Anil Kumar Teegala <34655912+AnilKumarTeegala@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:05:14 +0530 Subject: [PATCH 1/4] Added Hungry_Serpent source file --- Hungry_Serpent/Hungry_Serpent.cpp | 167 ++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 Hungry_Serpent/Hungry_Serpent.cpp diff --git a/Hungry_Serpent/Hungry_Serpent.cpp b/Hungry_Serpent/Hungry_Serpent.cpp new file mode 100644 index 0000000..6e01905 --- /dev/null +++ b/Hungry_Serpent/Hungry_Serpent.cpp @@ -0,0 +1,167 @@ +#include +#include +#include + +using namespace std; + +bool gameover; +const int width = 20; +const int height = 10; +int x, y, fruitX, fruitY, score; +int tailX[100], tailY[100]; +int nTail; +enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN }; +eDirecton dir; + +void Setup() +{ + gameover = false; + dir = STOP; + x = width / 2; + y = height / 2; + fruitX = rand() % width; + fruitY = rand() % height; + score = 0; +} + +void Draw() +{ + system("cls"); // Clear the console window + + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; + + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + if (j == 0) + cout << "#"; // Left wall + if (i == y && j == x) + cout << "O"; // Snake's head + else if (i == fruitY && j == fruitX) + cout << "F"; // Fruit + else + { + bool print = false; + for (int k = 0; k < nTail; k++) + { + if (tailX[k] == j && tailY[k] == i) + { + cout << "o"; // Snake's tail + print = true; + } + } + if (!print) + cout << " "; + } + + if (j == width - 1) + cout << "#"; // Right wall + } + cout << endl; + } + + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; + + cout << "Score:" << score << endl; +} + +void Input() +{ + if (_kbhit()) + { + switch (_getch()) + { + case 'a': + dir = LEFT; + break; + case 'd': + dir = RIGHT; + break; + case 'w': + dir = UP; + break; + case 's': + dir = DOWN; + break; + case 'x': + gameover = true; + break; + } + } +} + +void Logic() +{ + int prevX = tailX[0]; + int prevY = tailY[0]; + int prev2X, prev2Y; + tailX[0] = x; + tailY[0] = y; + for (int i = 1; i < nTail; i++) + { + prev2X = tailX[i]; + prev2Y = tailY[i]; + tailX[i] = prevX; + tailY[i] = prevY; + prevX = prev2X; + prevY = prev2Y; + } + + switch (dir) + { + case LEFT: + x--; + break; + case RIGHT: + x++; + break; + case UP: + y--; + break; + case DOWN: + y++; + break; + default: + break; + } + + if (x >= width) + x = 0; + else if (x < 0) + x = width - 1; + + if (y >= height) + y = 0; + else if (y < 0) + y = height - 1; + + for (int i = 0; i < nTail; i++) + if (tailX[i] == x && tailY[i] == y) + gameover = true; + + if (x == fruitX && y == fruitY) + { + score += 10; + fruitX = rand() % width; + fruitY = rand() % height; + nTail++; + } +} + +int main() +{ + Setup(); + while (!gameover) + { + Draw(); + Input(); + Logic(); + Sleep(10); // Add a slight delay to control the speed of the game + } + return 0; +} From 8b3eac580460018c156ab898a898e4e3ae7d8ac4 Mon Sep 17 00:00:00 2001 From: Anil Kumar Teegala <34655912+AnilKumarTeegala@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:06:41 +0530 Subject: [PATCH 2/4] Added README.md file --- Hungry_Serpent/readme.md | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Hungry_Serpent/readme.md diff --git a/Hungry_Serpent/readme.md b/Hungry_Serpent/readme.md new file mode 100644 index 0000000..9fc3323 --- /dev/null +++ b/Hungry_Serpent/readme.md @@ -0,0 +1,41 @@ +# Hungry Serpent Game + +Welcome to the Snake Game implemented in C++! This classic arcade game allows you to control a snake as it moves around the screen, eating food and growing longer with each meal. Be careful not to collide with the walls or yourself! + +## How to Play + +### Controls + +- **'a'**: Move the snake left +- **'d'**: Move the snake right +- **'w'**: Move the snake up +- **'s'**: Move the snake down +- **'x'**: Quit the game + +### Objective + +- Eat the 'F' (fruit) to grow your snake. +- Avoid running into the walls or the snake's own tail, as it will result in game over. + +### Scoring + +- Each 'F' eaten increases your score by 10 points. +- The game speed may increase as your score grows, making it more challenging. + +## Compiling and Running + +To compile and run the game, follow these steps: + +1. Compile the code using a C++ compiler like g++: + ```bash + g++ -o snake snake.cpp + +2. Run the compiled program: + ```bash + ./snake + ``` + +## Requirements + +- C++ compiler (e.g., g++) +- Windows OS (for 'conio.h' library) From 7b4e2f0977401458bdc2981f4209ce4dbad752fa Mon Sep 17 00:00:00 2001 From: Anil Kumar Teegala <34655912+AnilKumarTeegala@users.noreply.github.com> Date: Sun, 29 Oct 2023 20:12:14 +0530 Subject: [PATCH 3/4] Update readme.md --- Hungry_Serpent/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hungry_Serpent/readme.md b/Hungry_Serpent/readme.md index 9fc3323..4dfc44f 100644 --- a/Hungry_Serpent/readme.md +++ b/Hungry_Serpent/readme.md @@ -28,7 +28,7 @@ To compile and run the game, follow these steps: 1. Compile the code using a C++ compiler like g++: ```bash - g++ -o snake snake.cpp + g++ -o snake Hungry_Serpent.cpp 2. Run the compiled program: ```bash From fc5b6dcd9f972cf414ad5efebef12783dd4cadc0 Mon Sep 17 00:00:00 2001 From: Anil Kumar Teegala <34655912+AnilKumarTeegala@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:27:49 +0530 Subject: [PATCH 4/4] Update Hungry_Serpent.cpp --- Hungry_Serpent/Hungry_Serpent.cpp | 262 ++++++++++++++---------------- 1 file changed, 123 insertions(+), 139 deletions(-) diff --git a/Hungry_Serpent/Hungry_Serpent.cpp b/Hungry_Serpent/Hungry_Serpent.cpp index 6e01905..122a9e5 100644 --- a/Hungry_Serpent/Hungry_Serpent.cpp +++ b/Hungry_Serpent/Hungry_Serpent.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include using namespace std; @@ -13,155 +13,139 @@ int nTail; enum eDirecton { STOP = 0, LEFT, RIGHT, UP, DOWN }; eDirecton dir; -void Setup() -{ - gameover = false; - dir = STOP; - x = width / 2; - y = height / 2; - fruitX = rand() % width; - fruitY = rand() % height; - score = 0; +void Setup() { + gameover = false; + dir = STOP; + x = width / 2; + y = height / 2; + fruitX = rand() % width; + fruitY = rand() % height; + score = 0; } -void Draw() -{ - system("cls"); // Clear the console window - - for (int i = 0; i < width + 2; i++) - cout << "#"; - cout << endl; - - for (int i = 0; i < height; i++) - { - for (int j = 0; j < width; j++) - { - if (j == 0) - cout << "#"; // Left wall - if (i == y && j == x) - cout << "O"; // Snake's head - else if (i == fruitY && j == fruitX) - cout << "F"; // Fruit - else - { - bool print = false; - for (int k = 0; k < nTail; k++) - { - if (tailX[k] == j && tailY[k] == i) - { - cout << "o"; // Snake's tail - print = true; - } - } - if (!print) - cout << " "; - } - - if (j == width - 1) - cout << "#"; // Right wall +void Draw() { + system("cls"); // Clear the console window + + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; + + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + if (j == 0) + cout << "#"; // Left wall + if (i == y && j == x) + cout << "O"; // Snake's head + else if (i == fruitY && j == fruitX) + cout << "F"; // Fruit + else { + bool print = false; + for (int k = 0; k < nTail; k++) { + if (tailX[k] == j && tailY[k] == i) { + cout << "o"; // Snake's tail + print = true; + } } - cout << endl; - } + if (!print) + cout << " "; + } - for (int i = 0; i < width + 2; i++) - cout << "#"; + if (j == width - 1) + cout << "#"; // Right wall + } cout << endl; + } - cout << "Score:" << score << endl; -} + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; -void Input() -{ - if (_kbhit()) - { - switch (_getch()) - { - case 'a': - dir = LEFT; - break; - case 'd': - dir = RIGHT; - break; - case 'w': - dir = UP; - break; - case 's': - dir = DOWN; - break; - case 'x': - gameover = true; - break; - } - } + cout << "Score:" << score << endl; } -void Logic() -{ - int prevX = tailX[0]; - int prevY = tailY[0]; - int prev2X, prev2Y; - tailX[0] = x; - tailY[0] = y; - for (int i = 1; i < nTail; i++) - { - prev2X = tailX[i]; - prev2Y = tailY[i]; - tailX[i] = prevX; - tailY[i] = prevY; - prevX = prev2X; - prevY = prev2Y; - } - - switch (dir) - { - case LEFT: - x--; - break; - case RIGHT: - x++; - break; - case UP: - y--; - break; - case DOWN: - y++; - break; - default: - break; +void Input() { + if (_kbhit()) { + switch (_getch()) { + case 'a': + dir = LEFT; + break; + case 'd': + dir = RIGHT; + break; + case 'w': + dir = UP; + break; + case 's': + dir = DOWN; + break; + case 'x': + gameover = true; + break; } + } +} - if (x >= width) - x = 0; - else if (x < 0) - x = width - 1; - - if (y >= height) - y = 0; - else if (y < 0) - y = height - 1; - - for (int i = 0; i < nTail; i++) - if (tailX[i] == x && tailY[i] == y) - gameover = true; - - if (x == fruitX && y == fruitY) - { - score += 10; - fruitX = rand() % width; - fruitY = rand() % height; - nTail++; - } +void Logic() { + int prevX = tailX[0]; + int prevY = tailY[0]; + int prev2X, prev2Y; + tailX[0] = x; + tailY[0] = y; + for (int i = 1; i < nTail; i++) { + prev2X = tailX[i]; + prev2Y = tailY[i]; + tailX[i] = prevX; + tailY[i] = prevY; + prevX = prev2X; + prevY = prev2Y; + } + + switch (dir) { + case LEFT: + x--; + break; + case RIGHT: + x++; + break; + case UP: + y--; + break; + case DOWN: + y++; + break; + default: + break; + } + + if (x >= width) + x = 0; + else if (x < 0) + x = width - 1; + + if (y >= height) + y = 0; + else if (y < 0) + y = height - 1; + + for (int i = 0; i < nTail; i++) + if (tailX[i] == x && tailY[i] == y) + gameover = true; + + if (x == fruitX && y == fruitY) { + score += 10; + fruitX = rand() % width; + fruitY = rand() % height; + nTail++; + } } -int main() -{ - Setup(); - while (!gameover) - { - Draw(); - Input(); - Logic(); - Sleep(10); // Add a slight delay to control the speed of the game - } - return 0; +int main() { + Setup(); + while (!gameover) { + Draw(); + Input(); + Logic(); + Sleep(10); // Add a slight delay to control the speed of the game + } + return 0; }