Implementação do clássico jogo de tabuleiro Othello (Reversi) com:
- Jogador vs CPU com IA de nível avançado
- Visual moderno: tabuleiro verde com peças circulares gradiente e sombra
- Animação de virada de peça (flip com squish)
- Efeitos sonoros sintetizados por código (sem dependências externas)
| Recurso | Abordagem |
|---|---|
| Lógica do tabuleiro | Board.cs — classe pura C# sem dependências Godot |
| IA | Minimax depth-6 + Alpha-Beta pruning |
| Heurística | Tabela de pesos posicionais + mobilidade + paridade + bônus de canto |
| Animações | Tweens do Godot (flip squish na virada de peça) |
| Sprites | PNGs gerados por código com gradiente radial + sombra |
| Sons | WAVs sintetizados: thud ao colocar, tick ao virar, arpejo de vitória/derrota |
- Você joga com as peças pretas (⬛), a CPU com as brancas (⬜)
- Clique em uma casa destacada em verde para fazer sua jogada
- Uma jogada válida deve capturar ao menos uma peça adversária em qualquer direção
- Vence quem tiver mais peças ao final (tabuleiro cheio ou sem jogadas possíveis)
| Ação | Entrada |
|---|---|
| Jogar | Clique do mouse na casa destacada |
| Reiniciar | R |
src/
├── assets/
│ ├── sprites/
│ │ ├── piece_black.png # Disco preto com gradiente (64×64)
│ │ ├── piece_white.png # Disco branco com gradiente (64×64)
│ │ └── hint.png # Indicador de jogada válida (64×64)
│ └── sounds/
│ ├── place.wav # Som ao colocar peça
│ ├── flip.wav # Som ao virar peça
│ ├── win.wav # Arpejo de vitória
│ └── lose.wav # Arpejo de derrota
├── scenes/
│ ├── Main.tscn # Cena principal com tabuleiro e UI
│ └── Piece.tscn # Nó de peça individual
├── scripts/
│ ├── Board.cs # Lógica pura: estado, jogadas válidas, flips
│ ├── OthelloAI.cs # Minimax + Alpha-Beta + heurística posicional
│ ├── Piece.cs # Nó Godot: sprite + animação de flip
│ └── Main.cs # Orquestração: input, IA, UI, sons
├── OthelloGodot.csproj
└── OthelloGodot.sln
A IA usa Minimax com profundidade 6 e Alpha-Beta pruning para podar ramos impossíveis de melhorar o resultado.
A função de avaliação combina três critérios:
| Critério | Peso | Descrição |
|---|---|---|
| Posicional | alto | Tabela clássica de pesos: cantos valem +100, bordas de canto valem −20 |
| Mobilidade | alto | Diferença proporcional no número de jogadas disponíveis |
| Paridade | cresce no fim | Diferença na contagem de peças (mais relevante nos últimos turnos) |
| Cantos | muito alto | Bônus/penalidade extra de +300 por canto capturado |
| Ferramenta | Versão mínima |
|---|---|
| Godot Engine (Mono) | 4.6 |
| .NET SDK | 8.0 |
# 1. Clone o repositório
git clone https://github.com/<seu-usuario>/othello-godot.git
# 2. Abra o projeto no Godot
# File → Open Project → selecione a pasta src/
# 3. Compile o C#
# Project → Build (Ctrl+B)
# 4. Rode o jogo
# F5MIT — use, modifique e compartilhe à vontade.