A small, self‑contained Tetris clone written in Go using raylib‑go.
| assets | ||
| engine | ||
| game | ||
| .editorconfig | ||
| .gitignore | ||
| CHANGELOG.md | ||
| cliff.toml | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| tetris.go | ||
Tetris (Go + Raylib)
A small, self‑contained Tetris clone written in Go using raylib‑go.
It features classic gameplay (movement, rotation, line clearing, scoring),
a simple menu and game‑over flow, pixel‑art tiles, and embedded audio — all shipped as a single binary via go:embed.
Features
- Classic Tetris gameplay with 7 tetrominoes
- Next piece preview and line clearing with scoring
- Keyboard controls for movement, rotation, and soft drop
- Simple menu and game‑over screens via a tiny state machine
- Embedded sprites, icon, SFX, and background music (no external files at runtime)
Controls
- Left / Right: Move piece
- Up: Rotate clockwise
- Down (hold): Soft drop (faster fall)
- Enter: Select in menu, restart from game over
- Q: Return to menu from game over
Scoring
Points are awarded per simultaneous line clear using: score = L^2 * 100
where L is the number of lines cleared at once.
- 1 line → 100
- 2 lines → 400
- 3 lines → 900
- 4 lines → 1600
Build and Run
Prerequisites:
- Go (as indicated in
go.mod) - A working C toolchain (required by raylib‑go). On Linux you may need basic X11/ALSA dev packages.
Build
Using make
make
Using go directly:
go build tetris.go
Run
./tetris
Project Structure
tetris.go: Program entrypoint; initializes window, renderer, audio, and the state machine.assets/: Embedded resources (sprites, icon, SFX, music) and a compact tile‑font mapping.engine/: Lightweight helpers for audio, graphics, font/tile rendering, timing, and render context.game/: Core gameplay (grid, shapes, collision, scoring) and state handlers formenu,gameplay, andgameover.
Roadmap
- Line clear animations
- Hard drop and ghost piece
- Level/speed progression and pause
- High score persistence
- Custom key bindings