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 like tailX, tailY to store the positions of the snake’s tail.
  • Game Logic – The main game loop runs in the setupGame() function. It continuously calls draw() to update the game screen, input() to process user input (such as arrow keys), and logic() 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:

  1. Make sure you have a C++ compiler installed on your system, such as MinGW for Windows or use g++ for Linux/macOS.
  2. Create a new C++ source file (e.g., snake_game.cpp) and copy the provided code into it.
  3. Compile the program by running the command g++ snake_game.cpp -o snake_game (for Linux/macOS) or g++ snake_game.cpp (for Windows if using MinGW).
  4. Run the compiled program by typing ./snake_game (Linux/macOS) or snake_game.exe (Windows).
  5. Use the arrow keys to control the snake and try to eat the fruit to increase your score.
© 2025 Learn Programming. All Rights Reserved.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)