# cppsnek - A Simple Snake Game in C++ with SFML ![Snake Game Screenshot](img.png) 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 ```bash mkdir build && cd build cmake .. make ``` ### Running ```bash ./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