Snake 2025 Game
This project is a simple grid-based snake game using the MLV graphics library. The grid represents a game board with walls, empty spaces, fruits, and a snake. The program displays the grid in a graphical window and waits for user interaction.
Features
- Displays a grid with walls, empty spaces, fruits, and a snake.
- Uses the MLV graphics library for graphical rendering.
- Ensures that blocks outside the grid are displayed as black.
- Allows the user to quit the program by pressing the ESC key.
- Implements a dynamic snake using a linked list for its segments.
- Handles snake movement by updating the head position and shifting all segments accordingly.
- Supports snake growth when eating fruits.
Grid Representation
- The grid is represented as a 2D array of characters:
'w'for walls.' '(space) for empty spaces.'f'for fruits.'s'for the snake.
Snake Representation
- The snake is implemented as a linked list of segments (
Positionstructures), where:- Each segment has
xandycoordinates. - The
nextpointer links to the next segment in the snake.
- Each segment has
- The snake's movement is handled by:
- Adding a new head based on the current direction.
- Shifting all segments to follow the head.
- Removing the tail unless the snake eats a fruit.
Dependencies
- GCC (GNU Compiler Collection)
- MLV (Mini Library for Visualization)
Installation
Installing MLV on Ubuntu
- Update your package list and install the required packages:
sudo apt-get update sudo apt-get install build-essential gcc make libmlv3-dev
Building the Program
- Clone the repository or download the source code.
- Navigate to the directory containing the
Makefile. - Run the following command to build the program:
make
This will compile the source files and create an executable named game in the build directory.
Usage
-
After building the program, run the executable:
./game -
A window will open displaying the grid. Blocks outside the grid will appear black. Use the arrow keys to control the snake. Press the ESC key to close the window.
Game Logic
-
Snake Movement:
- The snake moves in the current direction, updating its head position and shifting all segments.
- If the snake eats a fruit, it grows by adding a new segment without removing the tail.
- If the snake collides with a wall or itself, the game ends.
-
Grid Updates:
- The grid is updated to reflect the snake's new position after each move.
- Fruits are removed from the grid when eaten by the snake.
-
Winning Condition:
- The player wins when all fruits on the grid are collected.
-
Losing Condition:
- The game ends if the snake collides with a wall or itself.
Cleaning Up
To clean up the build files, run:
make clean
This will remove the object files and the executable.
License
This project is licensed under the GPLv3 License. For more details, see GPLv3 License.
Authors
- Alex Frequelin (light_emerald@aostia.com)
Acknowledgments
- Adrien Boussicault and Marc Zipstein for the MLV library.
- ESIEE Paris for the course materials and guidance.