Skip to content

mihnguyen/snake-game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SNAKE GAME - THE DEVELOPMENT IN C++

The player controls a snake that grows longer each time it eats food. The 
game ends if the snake hits a wall or itself. This project is a great way 
to practice:

Data structures like a std::vector to store the snake's body segments

Collision detection (checking if the snake head collides with food, a 
wall, or its own body)

User input handling (changing the snake's direction)

Rendering and updating the game state on the screen
Opens in a new window
Licensed by Google
Mobile iconic retro game concept. Pixel snake on green cell phone screen. 
Classic game vector design.

To get started with a graphical library like SFML, you'll need to download 
it and configure your C++ IDE (like Visual Studio, VS Code, or 
Code::Blocks) to link to the library files. There are many tutorials 
online that can walk you through this process. Remember, the key is to 
start small, build on your knowledge, and enjoy the process!


STEP BY STEP GUIDE
To create a simple Snake game in C++, focusing on the core logic and concepts.

Step 1: Set Up Your Project
Start with a new C++ project in your IDE. You'll need to include the 
<iostream> header for console input/output and potentially <vector> for 
the snake's body, and <conio.h> for non-blocking keyboard input (on 
Windows). You might also need <ctime> and <cstdlib> for generating random 
food positions.

Step 2: Define the Game Elements
You'll need a way to represent the game world.

Game Grid: Use a 2D array or a std::vector of std::vectors to represent 
the game board. For a console game, you can simply print characters to the 
screen to represent the snake, food, and walls.

Snake: The snake's body is the most important data structure. A 
std::vector of pairs or structs is a great choice. Each element in the 
vector will store the (x, y) coordinates of a single body segment. The 
first element is the head, and the last is the tail.

Food: Store the (x, y) coordinates of a single food item.

Step 3: Implement Core Game Logic
This is where the main game loop resides.

Initialize Game State: At the beginning of the game, set up the initial 
positions of the snake (e.g., in the center of the grid) and the food (at 
a random valid location). Also, set the initial direction of movement.

Main Game Loop: The game logic should be inside an infinite loop (while 
(true)). Inside this loop, you will:

Get User Input: Check for a key press to change the snake's direction. 
You'll need a non-blocking function to do this so the game doesn't pause 
while waiting for a key press.

Update Snake Position: Move the snake. This is the core of the game's 
logic. You'll move the head one step in the current direction. The rest of 
the body segments follow the segment in front of them. The easiest way to 
do this is to add a new head at the new position and then remove the last 
segment of the tail. This makes it look like the snake is moving.

Collision Detection:

Wall Collision: Check if the snake's head has moved outside the boundaries 
of the grid. If so, the game is over.

Self-Collision: Check if the snake's head coordinates are the same as any 
of its body segments. If they are, the game is over.

Food Collision: Check if the snake's head is on the same coordinates as 
the food.

If it is, increment the score and don't remove the tail segment. This 
makes the snake grow longer.

Then, generate a new random position for the food.

Render the Game: After each update, clear the console screen and redraw 
the entire game state. Print characters for the snake (# or o), food (@), 
and walls (#). This step is your "rendering and updating the game state."

Step 4: End Game and Scoring
When a collision occurs, break the main game loop. Display the final score 
and a "Game Over" message.

This outline covers the fundamental logic for a console-based Snake game. 
While it doesn't involve complex graphics, mastering these steps will 
provide a solid foundation for understanding game development principles, 
which are transferable to more advanced projects with UI libraries.

About

Repository for snake game in C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages