1
0
Fork 0
tetris-go/README.md

71 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tetris (Go + Raylib)
A small, selfcontained Tetris clone written in Go using raylibgo.
It features classic gameplay (movement, rotation, line clearing, scoring),
a simple menu and gameover flow, pixelart 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 gameover 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 raylibgo). On Linux you may need basic X11/ALSA dev packages.
### Build
Using `make`
```sh
make
```
Using go directly:
```sh
go build tetris.go
```
### Run
```sh
./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 tilefont mapping.
- `engine/`: Lightweight helpers for audio, graphics, font/tile rendering, timing, and render context.
- `game/`: Core gameplay (grid, shapes, collision, scoring) and state handlers for `menu`, `gameplay`, and `gameover`.
## Roadmap
- [x] Line clear animations
- [ ] Hard drop and ghost piece
- [ ] Level/speed progression and pause
- [ ] High score persistence
- [ ] Custom key bindings