Este guia explica como o projeto "16 Games in C++" está organizado, facilitando a navegação, compreensão e modificação do código.
Visão Geral da Estrutura
O projeto segue uma organização lógica que separa jogos, documentação, scripts e configurações:
16Games-in-Cpp/
├── 01 Tetris/ # Jogo 1: Tetris
├── 02 Doodle Jump/ # Jogo 2: Doodle Jump
├── 03 Arkanoid/ # Jogo 3: Arkanoid
├── ... # Jogos 4-16
├── Writerside/ # Documentação
├── scripts/ # Scripts de automação
├── build/ # Arquivos compilados (gerado)
├── CMakeLists.txt # Configuração de build
├── Makefile # Comandos simplificados
├── setup.sh # Script de configuração
└── README.md # Informações básicas
Estrutura Detalhada
Diretórios dos Jogos
Cada jogo tem sua própria pasta seguindo o padrão NN Nome/:
Estrutura Típica de um Jogo
01 Tetris/
├── main.cpp # Código principal do jogo
├── images/ # Assets visuais
│ ├── tiles.png # Sprites dos blocos
│ ├── background.png # Imagem de fundo
│ └── ...
├── fonts/ # Fontes (quando necessário)
│ └── arial.ttf
└── files/ # Outros recursos (sons, configs)
└── config.txt
Arquivos de Configuração
CMakeLists.txt
O arquivo principal de configuração do sistema de build:
# Configuração básica
cmake_minimum_required(VERSION 3.10)
project(16Games LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
# Função para adicionar jogos automaticamente
function(add_game GAME_NAME GAME_DIR)
# Encontra arquivos fonte
# Configura compilação
# Copia assets
# Cria targets de execução
endfunction()
# Lista de todos os jogos
add_game(tetris "01 Tetris")
add_game(doodle_jump "02 Doodle Jump")
# ... outros jogos
Makefile
Interface simplificada para comandos comuns:
# Comandos básicos
setup: # Configuração inicial
build: # Compilar todos os jogos
clean: # Limpar arquivos temporários
test: # Testar compilação
# Comandos específicos por jogo
build-%: # Compilar jogo específico
run-%: # Executar jogo específico
Diretório de Build
Quando você compila o projeto, é criada a estrutura build/:
scripts/
├── main.sh # Script principal de automação
├── push_remote_repo.sh # Deploy/publicação
└── unzip_writerside.sh # Processamento de documentação
Scripts na Raiz
./
├── setup.sh # Configuração inicial do ambiente
├── fix_games.sh # Correção de problemas comuns
└── test_games.sh # Teste automatizado dos jogos
Exemplo: setup.sh
#!/bin/bash
echo "🎮 Configurando ambiente para 16 Games in C++"
# Verificar dependências
echo "📋 Verificando dependências..."
check_sfml() { ... }
check_cmake() { ... }
# Configurar build
echo "🔨 Configurando projeto..."
mkdir -p build
cd build && cmake ..
# Testar compilação
echo "🎯 Testando compilação..."
make tetris
Documentação
Estrutura do Writerside
Writerside/
├── cfg/ # Configurações do Writerside
├── images/ # Imagens da documentação
├── topics/ # Arquivos de documentação
│ ├── inicio.md # Página inicial
│ ├── system-requirements.md
│ ├── compilation-guide.md
│ ├── tetris.md # Tutorial do Tetris
│ ├── doodle-jump.md # Tutorial do Doodle Jump
│ └── ...
├── gc.tree # Estrutura de navegação
└── writerside.cfg # Configuração principal
Organização de Tópicos
A documentação está organizada hierarquicamente:
Boas Práticas
Organização de Código
Separação de Responsabilidades
Um arquivo main.cpp por jogo
Funções específicas para cada aspecto (input, update, render)
Estruturas de dados bem definidas
Gerenciamento de Recursos
Assets organizados por tipo
Verificação de carregamento de arquivos
Liberação adequada de memória
Configuração Flexível
Constantes para valores importantes
Separação entre lógica e configuração
Facilidade de modificação
Extensibilidade
Para adicionar um novo jogo:
Criar diretório seguindo o padrão NN Nome/
Implementar main.cpp com estrutura padrão
Adicionar assets na pasta images/
Registrar no CMakeLists.txt:
add_game(novo_jogo "17 Novo Jogo")
Atualizar lista no Makefile se necessário
Manutenção
Backup Regular
Versionar código com Git
Backup de assets importantes
Documentar mudanças significativas
Testes Regulares
Verificar compilação de todos os jogos
Testar funcionalidade básica
Validar assets e dependências
Documentação Atualizada
Manter tutoriais sincronizados com código
Documentar mudanças na estrutura
Atualizar guias de instalação
Navegação Eficiente
Comandos de Terminal
# Navegar rapidamente para um jogo
cd "01 Tetris" # Usar aspas por causa do espaço
cd build/games/tetris # Executável compilado
# Encontrar arquivos específicos
find . -name "*.png" # Todas as imagens
find . -name "main.cpp" # Todos os arquivos principais
grep -r "SFML" . # Procurar por SFML no código
Atalhos Úteis
# Aliases para .bashrc ou .zshrc
alias games='cd ~/path/to/16Games-in-Cpp'
alias buildgames='cd ~/path/to/16Games-in-Cpp/build'
alias rungames='cd ~/path/to/16Games-in-Cpp && make run-'
# Funções úteis
runGame() {
cd ~/path/to/16Games-in-Cpp
make run-$1
}
# Uso: runGame tetris
Conclusão
A estrutura do projeto "16 Games in C++" foi projetada para ser:
Intuitiva: Fácil de navegar e entender
Escalável: Fácil de adicionar novos jogos
Mantível: Código e assets bem organizados
Flexível: Suporta diferentes tipos de jogos
Automatizada: Build e deploy simplificados
Compreender essa estrutura é fundamental para:
Modificar jogos existentes
Criar novos jogos
Contribuir para o projeto
Usar como base para outros projetos
Use este guia como referência para navegar eficientemente pelo projeto e aproveitar ao máximo sua organização.