Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hungry Serpent Snake Game in CPP #3

Merged
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Update Hungry_Serpent.cpp
  • Loading branch information
AnilKumarTeegala committed Oct 29, 2023
commit fc5b6dcd9f972cf414ad5efebef12783dd4cadc0
262 changes: 123 additions & 139 deletions Hungry_Serpent/Hungry_Serpent.cpp
AnilKumarTeegala marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <iostream>
#include <conio.h>
#include <iostream>
#include <windows.h>

using namespace std;
Expand All @@ -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;
}
Loading