cppsnek - A Simple Snake Game in C++ with SFML

Snake Game Screenshot

Snake in C++17 ; uses SFML ; the snake is on fucking crack ; it moves like a fucking mig21

Features

  • Classic Snake gameplay with grid-based movement
  • Score tracking and milestone celebrations
  • Programmatically generated sound effects (no external audio files needed)
  • Simple pixel-art style graphics
  • Responsive controls (WASD or arrow keys)
  • Adjustable game speed that increases with score
  • Visual grid overlay
  • Pause/resume functionality (Space key)

Technical Details

  • Language: C++17
  • Libraries:
    • SFML 2.5+ (Graphics, Window, System, Audio modules)
  • Pattern: Object-oriented design with separate classes for game logic, rendering, and sound
  • Notable Techniques:
    • Programmatic sound generation
    • Pixel pattern-based sprite creation
    • Vertex arrays for grid rendering
    • State management for game flow

Building the Project

Requirements

  • CMake (version 3.10+)
  • SFML development libraries (libsfml-graphics, libsfml-window, libsfml-system, libsfml-audio)
  • C++17 compatible compiler

Build Steps

mkdir build && cd build
cmake ..
make

Running

./cppsnek

Controls

  • W - Move Up
  • A - Move Left
  • S - Move Down
  • D - Move Right
  • Space - Pause/Resume game

Code Structure

.
├── main.cpp            # Main game implementation
├── CMakeLists.txt      # Build configuration
└── README.md           # This file

Key classes:

  • Game: Main game loop and state management
  • SoundManager: Handles all audio generation and playback
  • NumericSprite: Creates sprites from numeric patterns
  • SnakeSegment: Simple struct for snake body parts

Customization

You can easily modify:

  • Game speed by changing the speed initial value in Game constructor
  • Grid appearance by modifying the createGrid() method
  • Snake and fruit visuals by editing the pattern arrays
  • Sound characteristics in the SoundManager class

Known Issues/Limitations

  • Sound generation is CPU-intensive during initialization
  • No proper game menu or start screen
  • High scores aren't persisted between sessions
  • Theme song generation is currently commented out

Learning Objectives

This project demonstrates:

  1. SFML basics (window management, rendering, input handling)
  2. Game loop implementation
  3. Procedural audio generation
  4. Simple collision detection
  5. State management in games
  6. Object-oriented game design
Description
C++ SFML Snake Learning Repository
Readme 53 KiB
Languages
C++ 96.1%
CMake 3.9%