71 lines
1.9 KiB
Markdown
71 lines
1.9 KiB
Markdown
# 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`
|
||
|
||
```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 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 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
|