-
Notifications
You must be signed in to change notification settings - Fork 0
terminal games in Go (public mirror)
kuhree/gg
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
# GG (Go Game Engine) GG is a bunch of classic games written in Go. It's designed to create classic arcade-style games using ASCII characters for rendering. > [!warning] I built this on the side to try and get more familiar with Go. I wouldn't rely on this, but it was a fun project. > I'd estimate ~40% of the code was AI generated (if you can't tell). No tests, no docs, but I may revisit in the future. ## Features - Fixed timestep for core gameplay logic, physics, and collision detection - Support for multiple game states (Main Menu, Gameplay, Pause, Game Over) - Customizable game elements (levels, player, camera, AI enemies, NPCs, obstacles, weapons, power-ups) - Dev mode with extra features like: - Performance metrics (FPS) - Debug information overlay - Entity bounding box visualization - Collision detection visualization - Slow motion and frame-by-frame stepping ## Implemented Games The `examples/` directory contains implementations of classic 2D games, including: 1. Frames - not a game but useful for testing "FPS" 2. Space Invaders 3. Conway's Game of life 4. Breakout* 5. Flappy Bird > \*Not yet implemented ## Project Goals - Implement multiple classic arcade games - Create a full game experience (gameplay loop, start screen, pause functionality, settings, high score/leaderboards etc.) ## Getting Started 1. Clone the repo `git clone git.littlevibe.net/kuhree/gg` 2. Run the app `go run cmd/gg/main.go` ## Usage The game launcher can be used in the following ways: - `gg`: Launch a menu to choose games - `gg [game]`: Launch directly into a specific game - `--debug`: Enable Debug logging - `--overlay`: Enable Debug overlay - `--time`: Target time in FPS - `--fps`: Target fps - `--height,--width`: Target height/width of the render While in game: - Use arrow keys or WASD for movement - Spacebar for primary action (shoot, jump, etc.) - 'P' to pause the game - 'ESC/Q' to pause/quit the current game Developer tools: - '1' to toggle debug information overlay - '2' to toggle performance metrics display - 'F4' to toggle entity bounding box visualization - 'F5' to toggle collision detection visualization - '_' and '+' to increase/decrease level For game-specific controls and instructions, refer to the in-game help menu or the individual game's documentation in the `examples/` directory. ## Architecture The GG (Go Game Engine) project follows a modular architecture designed for maintainability, extensibility, and ease of use. Here's an overview of the project structure: ``` gg/ ├── cmd/ │ └── gg/ │ └── main.go ├── internal/ │ ├── engine/ │ └── utils/ ├── examples/ │ ├── spaceinvaders/ │ │ └── game.go │ └── ... ├── go.mod ├── go.sum └── README ``` ### Key Components 1. **cmd/gg/**: Contains the main application entry point. 2. **internal/**: Houses the core engine components and game-specific code. - **engine/**: Core engine components. - **config/**: Config file management - **core/**: Central game loop, state management, etc. - **events/**: event handling and management - **leaderboard/**: leaderboards file management - **objects/**: Common game objects that can be used across different games. - **render/**: Rendering system for ASCII graphics. - **scenes/**: Scene loading - **utils/**: Utility functions and helpers. 3. **examples/**: Individual game implementations using the engine. ### Adding a New Game To add a new game: 1. Create a new directory under `examples/` with your game's name. 2. Implement your game logic in a `game.go` file within this directory. 3. Use the engine components from the `internal/engine/` package to handle core functionality. 4. Add any game-specific assets to the `assets/` directory. 5. Update the main game launcher in `cmd/gg/main.go` to include your new game. ## License MIT License
About
terminal games in Go (public mirror)