
Implementação fiel do Tetris clássico com mecânicas modernas:
- 7-bag randomiser — garante que nenhuma peça fique muito tempo sem aparecer
- Ghost piece — mostra onde a peça vai cair
- Hold piece — guarda uma peça para usar depois (tecla
C)
- Next queue — exibe as próximas 3 peças
- Wall kicks SRS — sistema oficial de rotação com 5 testes de colisão
- DAS + ARR — delayed auto-shift e auto-repeat suaves para movimento horizontal
- Lock delay — 0,5 s para reposicionar antes de fixar
- Níveis — velocidade aumenta a cada 10 linhas; tabela de velocidade oficial da Guideline
- Pontuação oficial — Single 100, Double 300, Triple 500, Tetris 800 × nível
| Recurso |
Abordagem |
| Lógica pura |
Board.cs — sem dependências Godot, facilmente testável |
| Peças |
Tetrominoes.cs — formas em matrizes 4×4 + wall kicks SRS |
| Renderização |
Sprites poolados (sem instâncias dinâmicas por frame) |
| Animações |
Flash de linha limpa via _Draw() + alpha overlay |
| Sprites |
8 PNGs 32×32 gerados por código com gradiente + bevel |
| Sons |
6 WAVs sintetizados: move, rotate, lock, clear, level-up, game over |
| Ação |
Teclas |
| Mover esquerda / direita |
← → ou A D |
| Rotacionar CW |
↑ W X |
| Rotacionar CCW |
Z |
| Soft drop |
↓ S |
| Hard drop |
Espaço |
| Hold |
C ou Shift |
| Pausar |
Esc |
| Reiniciar |
R (no game over) |
src/
├── assets/
│ ├── sprites/
│ │ ├── block_I.png # Ciano (32×32, gradiente + bevel)
│ │ ├── block_O.png # Amarelo
│ │ ├── block_T.png # Roxo
│ │ ├── block_S.png # Verde
│ │ ├── block_Z.png # Vermelho
│ │ ├── block_J.png # Azul
│ │ ├── block_L.png # Laranja
│ │ └── block_ghost.png # Translúcido (ghost piece)
│ └── sounds/
│ ├── move.wav # Movimento lateral
│ ├── rotate.wav # Rotação
│ ├── lock.wav # Peça fixada
│ ├── clear.wav # Linha limpa
│ ├── level.wav # Subiu de nível
│ └── gameover.wav # Fim de jogo
├── scenes/
│ └── Main.tscn # Tabuleiro + painel lateral (Hold/Next/Score)
├── scripts/
│ ├── Tetrominoes.cs # Shapes 4×4 das 7 peças + wall kicks SRS
│ ├── Board.cs # Grid 10×20, gravidade, linhas, lock delay
│ └── Main.cs # Loop, input DAS/ARR, rendering poolado, UI
├── TetrisGodot.csproj
└── TetrisGodot.sln
# 1. Clone o repositório
git clone https://github.com/csharpbrasil/tetris-godot.git
# 2. Abra o projeto no Godot
# File → Open Project → selecione a pasta src/
# 3. Compile o C#
# Project → Build (Ctrl+B)
# 4. Jogue!
# F5
| Ação |
Pontos |
| Single (1 linha) |
100 × nível |
| Double (2 linhas) |
300 × nível |
| Triple (3 linhas) |
500 × nível |
| Tetris (4 linhas) |
800 × nível |
| Hard drop |
2 × linhas caídas |
MIT — use, modifique e compartilhe à vontade.