1
0
Fork 0
tetris-go/README.md

1.9 KiB
Raw Blame History

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

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 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

  • Line clear animations
  • Hard drop and ghost piece
  • Level/speed progression and pause
  • High score persistence
  • Custom key bindings