Jogo de tabuleiro estratรฉgico refatorado com arquitetura profissional e design patterns enterprise.
| Aspecto | Original | Refatorado |
|---|---|---|
| Arquivos | 1 arquivo (main.cpp) | 15+ arquivos organizados |
| Linhas | 1255 linhas monolรญticas | ~200 linhas por arquivo |
| Arquitetura | Procedural | MVC + State Pattern |
| OOP | Nรฃo usa | Classes + Encapsulamento |
| Cรณdigo Duplicado | 100+ linhas if-else | std::map (1 linha) |
| Variรกveis Globais | 50+ variรกveis | 0 globais |
| Design Patterns | Nenhum | 4 patterns |
| Memory Management | Manual | RAII + Smart Pointers |
| Testabilidade | Impossรญvel | Alta (separaรงรฃo clara) |
| Manutenibilidade | Baixa | Alta (SOLID) |
Antes (100+ linhas):
int conversorParaTabuleiroX(int fimX, int fimY){
int convertidoX;
if(fimX == 501 && fimY == 299)convertidoX = 0;
if(fimX == 360 && fimY == 299)convertidoX = 1;
if(fimX == 430 && fimY == 369)convertidoX = 1;
// ... 97 linhas de if/else
}Depois (estrutura de dados):
Position screenToBoard(const Position& screenPos) const {
auto it = screenToBoard_.find(screenPos);
return (it != screenToBoard_.end()) ? it->second : Position(-1, -1);
}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UI Layer (Views) โ
โ MainMenuState โ GamePlayState โ VictoryState โ etc. โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Application Layer (Controllers) โ
โ GameEngine (State Manager) โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Domain Layer (Business Logic) โ
โ GameBoard โ Player โ Piece โ Position โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Infrastructure Layer (Utilities) โ
โ BoardCoordinates โ UIComponents โ FileManager โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Gerencia diferentes telas do jogo de forma elegante.
class GameState {
public:
virtual void enter() = 0;
virtual void update(float dt) = 0;
virtual void render() = 0;
virtual void handleInput() = 0;
};
// 7 estados diferentes, zero if-else
- MainMenuState
- PlayerSetupState (x2)
- GamePlayState
- VictoryState
- RulesState
- HistoryState
- CreditsStateCoordenadas do tabuleiro (substituindo 100+ linhas).
class BoardCoordinates {
static BoardCoordinates& getInstance();
private:
std::map<Position, Position> screenToBoard_;
std::map<Position, Position> boardToScreen_;
};- Model: GameBoard, Player, Piece
- View: GameState classes
- Controller: GameEngine
class Position {
// Immutable, comparable, hashable
bool operator==(const Position& other) const;
bool operator<(const Position& other) const;
};queah-refactored/
โโโ include/ # Headers (domain model)
โ โโโ Position.hpp # Value Object
โ โโโ Piece.hpp # Entity
โ โโโ Player.hpp # Entity
โ โโโ GameBoard.hpp # Aggregate Root
โ โโโ BoardCoordinates.hpp # Singleton
โ โโโ GameState.hpp # State Pattern
โ โโโ GameEngine.hpp # Controller
โ โโโ UIComponents.hpp # Reusable UI
โ
โโโ src/
โ โโโ core/ # Domain logic
โ โ โโโ GameBoard.cpp
โ โ โโโ Player.cpp
โ โ โโโ Piece.cpp
โ โ
โ โโโ ui/ # View layer
โ โ โโโ MainMenuState.cpp
โ โ โโโ PlayerSetupState.cpp
โ โ โโโ GamePlayState.cpp
โ โ โโโ VictoryState.cpp
โ โ โโโ ...
โ โ
โ โโโ utils/ # Infrastructure
โ โ โโโ FileManager.cpp
โ โ โโโ BoardCoordinates.cpp
โ โ
โ โโโ main.cpp # Entry point (20 lines!)
โ
โโโ assets/ # Images, textures
โโโ docs/ # Documentation
โ โโโ ARCHITECTURE.md
โ โโโ DESIGN_PATTERNS.md
โ โโโ REFACTORING_GUIDE.md
โ
โโโ CMakeLists.txt # Build system
โโโ README.md
โ
Encapsulation - Dados privados, mรฉtodos pรบblicos
โ
Inheritance - GameState hierarchy
โ
Polymorphism - Virtual methods
โ
Composition - GameEngine has Players
โ
S - Single Responsibility (cada classe uma responsabilidade)
โ
O - Open/Closed (extensรญvel via heranรงa)
โ
L - Liskov Substitution (GameState subclasses)
โ
I - Interface Segregation (interfaces mรญnimas)
โ
D - Dependency Inversion (depende de abstraรงรตes)
โ
std::unique_ptr - Ownership exclusivo
โ
std::shared_ptr - Ownership compartilhado
โ
std::map - Associative containers
โ
std::vector - Dynamic arrays
โ
RAII - Resource Acquisition Is Initialization
โ
Const correctness
โ
Move semantics
- C++17 compiler (GCC 7+, Clang 5+, MSVC 2017+)
- CMake 3.15+
- Raylib 5.0+
# Clone
git clone <repo>
cd queah-refactored
# Build
mkdir build && cd build
cmake ..
make
# Run
./queah- Objetivo: Capturar peรงas do oponente atรฉ nรฃo restar nenhuma
- Movimento: Mover uma casa em qualquer direรงรฃo
- Captura: Pular sobre peรงa adversรกria (movimento de 2 casas)
- Reposiรงรฃo: Apรณs captura, oponente repรตe uma peรงa reserva (enquanto tiver)
- Mouse: Selecionar e mover peรงas
- Click: Interagir com menus
| Arquivo | Original | Refatorado |
|---|---|---|
| main.cpp | 150+ | < 5 |
| Funรงรตes mรฉdias | 50+ | < 10 |
- Original: Alto (tudo em um arquivo)
- Refatorado: Baixo (dependรชncias claras)
- Original: Baixa (mistura tudo)
- Refatorado: Alta (cada classe uma responsabilidade)
"Refatorei um jogo de tabuleiro de 1255 linhas monolรญticas em uma arquitetura profissional usando State Pattern, MVC, e Modern C++17. Eliminei 100+ linhas de cรณdigo duplicado usando std::map, implementei SOLID principles, e separei responsabilidades em 15+ arquivos modulares. O resultado: cรณdigo 10x mais manutenรญvel, testรกvel e escalรกvel."
- ARCHITECTURE.md - Decisรตes arquiteturais
- DESIGN_PATTERNS.md - Patterns explicados
- REFACTORING_GUIDE.md - Processo de refatoraรงรฃo
- API.md - Referรชncia das classes
Este projeto demonstra:
- Refatoraรงรฃo de Legacy Code - Transformar cรณdigo tรฉcnico em arquitetura limpa
- Design Patterns - State, Singleton, MVC, Value Object
- Modern C++ - Smart pointers, STL, RAII, move semantics
- SOLID Principles - Cรณdigo extensรญvel e manutenรญvel
- Clean Architecture - Separaรงรฃo em camadas
- Documentation - Cรณdigo auto-documentado
Skills demonstradas:
- โ C++ Advanced (C++17)
- โ Object-Oriented Design
- โ Design Patterns
- โ Software Architecture
- โ Clean Code
- โ Refactoring
- โ SOLID Principles
Nรญvel: Pleno/Sรชnior
Impacto: โญโญโญโญโญ
MIT License
Jogo Original: Arthur Soares, Yami Nascimento, Yasmim Passos, Anderson Santos, Matheus Santiago, Savio Lourenco, Wallace Barreto
Refatoraรงรฃo Arquitetural: Demonstraรงรฃo de arquitetura profissional C++