{"id":28917936,"url":"https://github.com/mallory-scotton/arcade","last_synced_at":"2026-05-11T07:06:12.787Z","repository":{"id":297038061,"uuid":"995436131","full_name":"mallory-scotton/arcade","owner":"mallory-scotton","description":"🕹️ Retro gaming platform with dynamic library loading for games and graphics. Built as a 2nd-year EPITECH project","archived":false,"fork":false,"pushed_at":"2025-06-03T14:18:50.000Z","size":84753,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-22T01:02:44.431Z","etag":null,"topics":["arcade","audio-processing","cpp","epitech","games","joystick","libcaca","ncurses","nibbler","opengl","pacman","retrogaming","sdl2","sfml","shared-library","wiimote"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mallory-scotton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-03T13:30:03.000Z","updated_at":"2025-06-10T21:57:46.000Z","dependencies_parsed_at":"2025-06-04T00:42:53.058Z","dependency_job_id":null,"html_url":"https://github.com/mallory-scotton/arcade","commit_stats":null,"previous_names":["mallory-scotton/arcade"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mallory-scotton/arcade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mallory-scotton%2Farcade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mallory-scotton%2Farcade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mallory-scotton%2Farcade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mallory-scotton%2Farcade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mallory-scotton","download_url":"https://codeload.github.com/mallory-scotton/arcade/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mallory-scotton%2Farcade/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273355640,"owners_count":25090825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arcade","audio-processing","cpp","epitech","games","joystick","libcaca","ncurses","nibbler","opengl","pacman","retrogaming","sdl2","sfml","shared-library","wiimote"],"created_at":"2025-06-22T01:02:47.732Z","updated_at":"2026-05-11T07:06:07.757Z","avatar_url":"https://github.com/mallory-scotton.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🕹️ ARCADE - A Retro Gaming Platform\n\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md)\n[![Build Status](https://img.shields.io/badge/build-passing-green.svg)]()\n[![C++](https://img.shields.io/badge/language-C++-blue.svg)]()\n\nA modular retro gaming platform that lets users choose games to play and keeps track of player scores. Built with a dynamic library architecture for maximum extensibility.\n\n## 📋 Project Overview\n\nArcade is a sophisticated gaming platform designed with modularity and extensibility at its core. The platform dynamically loads graphics libraries and games at runtime, allowing for seamless integration of new content without recompilation. This architecture ensures that the main program remains independent of specific graphics implementations while providing a rich gaming experience.\n\n### Key Characteristics\n- **Dynamic Library Architecture**: Games and graphics backends are loaded as shared libraries (.so files)\n- **Runtime Flexibility**: Switch between different graphics backends and games without restarting\n- **Score Management**: Persistent tracking of player scores across sessions\n- **Cross-Platform Support**: Multiple graphics backends for different environments\n- **Retro Gaming Focus**: Classic games like Pac-Man, Snake, and Nibbler\n\n## ✨ Features\n\n### 🎮 Gaming Experience\n- Multiple classic arcade games (Pac-Man, Snake, Nibbler)\n- Real-time score tracking and leaderboards\n- Smooth gameplay with consistent frame rates\n- Audio support with game-specific sound effects\n- Joystick and gamepad support (including Wii Remote)\n\n### 🖥️ Graphics Backends\n- **SFML**: High-performance 2D graphics with audio\n- **SDL2**: Cross-platform multimedia library\n- **OpenGL**: Hardware-accelerated 3D graphics\n- **NCurses**: Terminal-based interface\n- **LibCaca**: ASCII art graphics library\n\n### 🏗️ Architecture\n- Plugin-based architecture with dynamic loading\n- Event-driven communication system\n- Modular design for easy extension\n- Memory-safe library management\n- Robust error handling and recovery\n\n## 🖼️ Gallery\n\n![](./screenshots/arcade.gif)\n\n![](./screenshots/player-input.png)\n\n![](./screenshots/nibbler.png)\n\n![](./screenshots/nibbler2.png)\n\n![](./screenshots/pacman.png)\n\n![](./screenshots/pacman2.png)\n\n![](./screenshots/pacman-ascii.png)\n\n*Note: Screenshots and visual gallery can be found in the `screenshots/` directory*\n\n## 🚀 Installation\n\n### Prerequisites\n- **Compiler**: GCC 9.0+ or Clang 10.0+ with C++17 support\n- **Build System**: Make\n- **Graphics Libraries**: \n  - SFML 2.5+\n  - SDL2 2.0+\n  - OpenGL 3.3+\n  - NCurses 6.0+\n  - LibCaca 0.99+\n\n### Ubuntu/Debian\n```bash\nsudo apt update\nsudo apt install build-essential libsfml-dev libsdl2-dev libgl1-mesa-dev libncurses5-dev libcaca-dev\n```\n\n### Fedora/CentOS\n```bash\nsudo dnf install gcc-c++ make SFML-devel SDL2-devel mesa-libGL-devel ncurses-devel libcaca-devel\n```\n\n### Arch Linux\n```bash\nsudo pacman -S gcc make sfml sdl2 mesa ncurses libcaca\n```\n\n## 🔧 Build Instructions\n\n### Quick Build\n```bash\n# Clone the repository\ngit clone \u003crepository-url\u003e\ncd arcade\n\n# Build everything (core + all libraries)\nmake\n\n# Clean build artifacts\nmake clean\n\n# Full clean (including libraries)\nmake fclean\n\n# Rebuild everything\nmake re\n```\n\n### Advanced Build Options\n```bash\n# Build only the core arcade binary\nmake arcade\n\n# Build specific graphics backend\nmake lib/arcade_sfml.so\n\n# Build specific game\nmake lib/arcade_pacman.so\n\n# Build with debug symbols\nmake DEBUG=1\n\n# Build with verbose output\nmake VERBOSE=1\n```\n\n### Build Output\nAfter successful compilation, you'll find:\n- `arcade`: Main executable in the root directory\n- `lib/*.so`: Shared libraries for games and graphics backends\n- `build/`: Compiled object files and intermediate artifacts\n\n## 🎯 Usage\n\n### Basic Usage\n```bash\n# Start with default graphics library\n./arcade lib/arcade_sfml.so\n\n# Start with specific graphics backend\n./arcade lib/arcade_sdl2.so\n\n# Display help\n./arcade --help\n```\n\n### In-Game Controls\n- **Arrow Keys**: Navigation and movement\n- **Space**: Select/Action\n- **Escape**: Return to menu/Exit\n- **Enter**: Confirm selection\n- **R**: Restart game\n- **Tab**: Switch graphics backend (runtime)\n\n### Game Selection\n1. Launch the arcade with your preferred graphics backend\n2. Use arrow keys to navigate the game menu\n3. Press Space or Enter to select a game\n4. Enjoy playing! Scores are automatically tracked\n\n## 🏛️ Architecture\n\n### Core Components\n\n```\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│   Main.cpp      │    │     Core.hpp     │    │   Library.hpp   │\n│   Entry Point   │────│  Game Loop \u0026     │────│  Dynamic Loader │\n│                 │    │  State Mgmt      │    │                 │\n└─────────────────┘    └──────────────────┘    └─────────────────┘\n         │                       │                       │\n         └───────────────────────┼───────────────────────┘\n                                 │\n         ┌───────────────────────┼───────────────────────┐\n         │                       │                       │\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│  IGameModule    │    │     API.hpp      │    │ IGraphicsModule │\n│   Interface     │    │  Event System    │    │   Interface     │\n│                 │    │                  │    │                 │\n└─────────────────┘    └──────────────────┘    └─────────────────┘\n```\n\n### Dynamic Library System\nThe platform uses a sophisticated library loading mechanism:\n\n1. **Library Discovery**: Automatic detection of available `.so` files\n2. **Symbol Resolution**: Dynamic binding of `CreateArcadeObject` functions\n3. **Type Safety**: Template-based object creation with proper typing\n4. **Memory Management**: RAII-based cleanup with `std::shared_ptr`\n5. **Error Handling**: Comprehensive error reporting with `DLError` exceptions\n\n### Event System\n- **Channel-based Events**: Separate channels for Core, Graphics, and Game events\n- **Type-safe Communication**: Strongly typed event parameters\n- **Asynchronous Processing**: Non-blocking event handling\n- **Event Filtering**: Selective event subscription based on channels\n\n## 📦 Dependencies\n\n### Core Dependencies\n| Library | Version | Purpose |\n|---------|---------|---------|\n| **Standard C++** | C++17+ | Core language features |\n| **POSIX** | - | Dynamic library loading (`dlopen`, `dlsym`) |\n\n### Graphics Backend Dependencies\n| Backend | Dependencies | Description |\n|---------|-------------|-------------|\n| **SFML** | libsfml-dev 2.5+ | Simple and Fast Multimedia Library |\n| **SDL2** | libsdl2-dev 2.0+ | Cross-platform multimedia library |\n| **OpenGL** | libgl1-mesa-dev | Hardware-accelerated graphics |\n| **NCurses** | libncurses5-dev | Terminal-based interface |\n| **LibCaca** | libcaca-dev | ASCII art graphics |\n\n### Audio Dependencies\n| Component | Library | Purpose |\n|-----------|---------|---------|\n| **Audio Engine** | miniaudio | Cross-platform audio playback |\n| **Sound Effects** | Built-in | Game-specific audio assets |\n\n### Optional Dependencies\n- **Joystick Support**: Linux input subsystem\n- **Wii Remote**: Bluetooth libraries for gamepad support\n\n## 🤝 Contributing\n\nWe welcome contributions! Please read our [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n### Development Setup\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Follow our coding conventions (see `doc/documentation.md`)\n4. Test your changes thoroughly\n5. Submit a pull request\n\n### Adding New Games\nSee the detailed guide in our [documentation](doc/documentation.md#adding-a-new-game) for implementing new games that follow the `IGameModule` interface.\n\n### Adding Graphics Backends\nInstructions for implementing new graphics backends can be found in our [documentation](doc/documentation.md#adding-a-new-graphical-backend).\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.\n\n## 👥 Authors\n\n- **Mallory SCOTTON** - Core Architecture \u0026 Game Development\n- **Hugo CATHELAIN** - Graphics Backends \u0026 Audio System  \n- **Nathan FIEVET** - Library Management \u0026 Platform Integration\n\nSee [AUTHORS.md](AUTHORS.md) for detailed contribution information.\n\n## 🔍 Additional Resources\n\n- 📖 **[Complete Documentation](doc/documentation.pdf)** - Comprehensive technical documentation\n\n## 📫 Contact\n\nFor questions or feedback, reach out at: `mscotton.pro@gmail.com`\n\n---\n\n*Built with ❤️ for retro gaming enthusiasts*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmallory-scotton%2Farcade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmallory-scotton%2Farcade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmallory-scotton%2Farcade/lists"}