Introduction
The Snake game is one of the most iconic video games ever created. It’s simple, yet challenging, and can be programmed using various languages. In this tutorial, we will create the classic Snake game using the C++ programming language. The objective is to help you learn how to handle game logic, movement, and user input in C++ while creating a fun, interactive game.
Objective
In this tutorial, we will write a program that simulates the classic Snake game. The game will feature a snake that grows longer as it eats food, and the game ends if the snake collides with itself or the wall. By the end of this guide, you will have a basic understanding of how to implement games in C++.
Code for the Snake Game in C++
#include #include #include using namespace std; bool gameOver; const int width = 20; const int height = 17; int x, y, fruitX, fruitY, score; int tailX[100], tailY[100]; int nTail; enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN}; eDirection 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"); 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 << "#"; if (i == y && j == x) cout << "O"; else if (i == fruitY && j == fruitX) cout << "F"; else { bool print = false; for (int k = 0; k < nTail; k++) { if (tailX[k] == j && tailY[k] == i) { cout << "o"; print = true; } } if (!print) cout << " "; } if (j == width - 1) cout << "#"; } 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++; } } void setupGame() { setup(); while (!gameOver) { draw(); input(); logic(); Sleep(10); } } int main() { setupGame(); return 0; }
Program Explanation
Here’s a breakdown of the structure of the Snake game program:
- Variables – We use variables like
x
,y
to track the position of the snake’s head,fruitX
,fruitY
for the position of the fruit, and arrays liketailX
,tailY
to store the positions of the snake’s tail. - Game Logic – The main game loop runs in the
setupGame()
function. It continuously callsdraw()
to update the game screen,input()
to process user input (such as arrow keys), andlogic()
to move the snake and check for collisions with walls or the snake’s own tail. - Input Handling – We use the
_kbhit()
function to detect if a key has been pressed and then use the corresponding switch case to update the direction of the snake. - Game Over – The game ends when the snake collides with its tail, or the player presses ‘x’ to quit.
How to Run the Program
Follow these steps to run the Snake game program:
- Make sure you have a C++ compiler installed on your system, such as MinGW for Windows or use g++ for Linux/macOS.
- Create a new C++ source file (e.g.,
snake_game.cpp
) and copy the provided code into it. - Compile the program by running the command
g++ snake_game.cpp -o snake_game
(for Linux/macOS) org++ snake_game.cpp
(for Windows if using MinGW). - Run the compiled program by typing
./snake_game
(Linux/macOS) orsnake_game.exe
(Windows). - Use the arrow keys to control the snake and try to eat the fruit to increase your score.