readme.md

img.png
This commit is contained in:
rattatwinko
2025-05-18 15:14:29 +02:00
parent cb87b266b4
commit 8c08a0a4b7
2 changed files with 98 additions and 0 deletions

BIN
img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

98
readme.md Normal file
View File

@@ -0,0 +1,98 @@
# 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