A collection of classic arcade games including Snake, Tetris, Arkanoid, and Pac-Man
Project description
Game Collection
A collection of classic arcade games including Snake, Tetris, Arkanoid, and Pac-Man, built with Python and Pygame.
Features
- Snake: Classic snake game with growing mechanics
- Tetris: Block-stacking puzzle game with line clearing
- Arkanoid: Breakout-style game with paddle and ball physics
- Pac-Man: Maze navigation game with dots and ghosts
Installation
From Source
# Clone the repository
git clone <repository-url>
cd game-collection
# Install in development mode
pip install -e .
# Or install with development dependencies
pip install -e ".[dev]"
From PyPI
# Standard installation
pip install game-collection
# If you have permission issues on Windows:
pip install game-collection --no-deps --user
Windows Installation
If you encounter permission errors with pygame on Windows, use the automated installer:
# Run the installer
install_game.bat
# Or manual installation
pip install game-collection --no-deps --user
Usage
Command Line
After installation, you can run the game collection using:
# Using the entry point (if PATH is configured)
game-collection
# Using Python module (always works)
python -m game
# Using local file (for development)
python main.py
Troubleshooting
If the game-collection command is not found:
- Windows: Run
setup_path.batas administrator - Alternative: Always use
python -m game - See: Windows Installation Guide for detailed solutions
Development
# Run the game
make run
# Run tests
make test-unit
# Run tests with coverage
make test-cov
# Check code quality
make quality
# Build executable
make build
# Setup pre-commit hooks
make pre-commit-install
# Run pre-commit on all files
make pre-commit-run
# Check readiness for PyPI publication
make publish-check
# Publish to TestPyPI (for testing)
make publish-test
# Publish to PyPI (requires API token)
make publish
Debug Features
The game includes a debug overlay that can be toggled during gameplay:
- F1: Toggle debug overlay on/off
- F2: Reset FPS history
- F3: Toggle fullscreen mode
The debug overlay shows:
- Real-time FPS and FPS history
- Current game and state
- Mouse position
- Currently pressed keys
- Performance statistics
Configuration
The game uses a configuration system that stores settings in platform-appropriate directories:
- Windows:
%APPDATA%/GameCollection/ - macOS:
~/Library/Application Support/GameCollection/ - Linux:
~/.local/share/GameCollection/
Configuration Files
config.json: Game settings, controls, audio, and difficulty levelsscores.json: High scores for all games
Configuration Options
The configuration includes:
- Display: Resolution, fullscreen mode, FPS
- Controls: Key mappings for each game
- Game Settings: Speed, grid size, lives, etc.
- Audio: Volume levels and enable/disable
- Difficulty: Easy, Normal, Hard presets
Development
Project Structure
src/
├── game/
│ ├── __init__.py
│ ├── __main__.py # Entry point
│ ├── main.py # Main game loop
│ ├── config.py # Configuration management
│ ├── config.json # Default configuration
│ ├── games/ # Game implementations
│ │ ├── base.py # Base game class
│ │ ├── logic.py # Pure game logic functions
│ │ ├── snake.py # Snake game
│ │ ├── tetris.py # Tetris game
│ │ ├── arkanoid.py # Arkanoid game
│ │ └── pacman.py # Pac-Man game
│ └── ui/ # User interface
│ ├── menu.py # Main menu
│ └── scores.py # Score management
tests/ # Unit tests
docs/ # Documentation
Testing
The project includes comprehensive unit tests for all game logic:
# Run all tests
python -m pytest tests/
# Run specific test file
python -m pytest tests/test_tetris_logic.py
# Run with coverage
python -m pytest tests/ --cov=src/game/games --cov-report=html
Code Quality
The project uses modern Python tooling:
- Ruff: Fast linting and formatting
- MyPy: Static type checking
- Pytest: Testing framework
- Appdirs: Platform-appropriate data directories
Building Executables
# Build with PyInstaller
make build
# Or manually
pyinstaller --onefile --windowed --name GameCollection src/game/__main__.py
Requirements
- Python 3.10+
- Pygame 2.5.0+
- Appdirs 1.4.4+ (for data directory management)
Development Requirements
- Ruff 0.1.0+ (linting and formatting)
- MyPy 1.8.0+ (type checking)
- Pytest 7.4.0+ (testing)
- PyInstaller 5.13.0+ (executable building)
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run the quality checks:
make quality - Submit a pull request
License
MIT License - see LICENSE file for details.
Changelog
See CHANGELOG.md for a detailed list of changes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file game_collection-1.1.12.tar.gz.
File metadata
- Download URL: game_collection-1.1.12.tar.gz
- Upload date:
- Size: 42.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d4bb385842b59cbaf987e28550267c53308456026dc0bec04ab3c0f40bed336
|
|
| MD5 |
c310382d1107daed7564f23d5e7e6c34
|
|
| BLAKE2b-256 |
284f64fb5d7c0ea0cafe2d19c8390a37d5b9ec1799773f34c0e66e72e1a7e807
|
File details
Details for the file game_collection-1.1.12-py3-none-any.whl.
File metadata
- Download URL: game_collection-1.1.12-py3-none-any.whl
- Upload date:
- Size: 44.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f1e85cb1afd21db532582e09193e8932ec22144b98e09e1da18ed0866ddd4d5
|
|
| MD5 |
3a61819e61adb822f0afaf13620600eb
|
|
| BLAKE2b-256 |
b436274a0fc32ee40b7ae8688b25acae89ac10783827338bf3ea1ec8b402d7e5
|