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
Show file tree
Hide file tree
Changes from all commits
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
151 changes: 151 additions & 0 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
@@ -0,0 +1,151 @@
#include <conio.h>
#include <iostream>
#include <windows.h>

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;
}
41 changes: 41 additions & 0 deletions Hungry_Serpent/readme.md
Original file line number Diff line number Diff line change
@@ -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 Hungry_Serpent.cpp

2. Run the compiled program:
```bash
./snake
```

## Requirements

- C++ compiler (e.g., g++)
- Windows OS (for 'conio.h' library)
Loading