Prepare-se, herói! O destino do reino está em suas mãos neste RPG de turnos clássico. Intro Battle nasceu como um trabalho computacional (veja docs/Trabalho_Computacional_IntroBattle.pdf) e cresceu para um jogo completo: janela adaptável, modos de exibição, controle de áudio, animações de personagens, uma campanha com fases e progressão, e personagens que sobem de nível.
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.pyO projeto usa
pygame-ce(fork da comunidade, mesma API dopygame) — em Pythons muito recentes opygametradicional ainda pode não ter um instalador pronto, enquanto opygame-cejá tem.
./run.shCria o venv e instala as dependências na primeira vez, e só inicia o jogo nas próximas.
Empacota o jogo (com todos os assets) num único arquivo, sem precisar de Python instalado em quem só vai jogar:
./build.sh # Linux -> dist/IntroBattle
build.bat # Windows -> dist\IntroBattle.exeO PyInstaller não compila cruzado: rode build.bat no Windows pra gerar o .exe, e build.sh no Linux/Mac pra gerar o binário correspondente — cada um só produz o executável da própria plataforma.
| Tecla | Ação |
|---|---|
| Setas | Mover o cursor / ajustar valores |
Z |
Confirmar / selecionar |
X |
Voltar / cancelar |
ESC |
Pausar (durante a batalha) |
F11 |
Alternar tela cheia rapidamente |
O jogo é desenhado numa resolução lógica fixa de 1024×768 e escalado para qualquer tamanho de janela, mantendo a proporção (faixas pretas quando necessário) — redimensione a janela livremente. No menu Configurações (acessível pelo Menu Principal ou pausando uma batalha com ESC) dá pra ajustar:
- Modo de exibição: Janela / Tela cheia / Sem bordas
- Volume da música e Volume de efeitos
- Mudo
No Menu Principal escolha Novo Jogo (ou Continuar, se já houver uma campanha salva) e monte seu grupo de 3 heróis entre os 5 disponíveis. Z seleciona/desmarca, e ao escolher o terceiro a batalha começa.
| Personagem | HP | ATK | DEF | SPD |
|---|---|---|---|---|
Priest ![]() |
85 | 8 | 7 | 4 |
Paladin ![]() |
95 | 7 | 9 | 2 |
Hunter ![]() |
80 | 10 | 5 | 6 |
Wizard ![]() |
75 | 13 | 4 | 3 |
Rogue ![]() |
78 | 12 | 3 | 6 |
- HP: vida — chegar a 0 tira o personagem da batalha.
- ATK: base do dano causado.
- DEF: reduz o dano recebido (dobra ao usar Defender).
- SPD: define a ordem dos turnos — mais rápido age primeiro.
Cada classe sobe de nível ganhando XP ao vencer fases (o nível fica salvo mesmo que a campanha seja perdida e reiniciada), o que concede pontos de atributo — não há crescimento automático. Distribua-os livremente entre HP/ATQ/DEF/VEL na tela Atributos do Menu Principal, pra qualquer um dos 5 heróis, a qualquer momento.
A campanha tem 5 fases fixas, com dificuldade crescente. Nas 4 primeiras, os inimigos são sorteados a cada tentativa entre os 7 personagens do jogo (incluindo os que também são jogáveis); a fase final é sempre o necromante e sua criação, do enunciado original do trabalho. Vencer uma fase cura e revive toda a equipe, mostra um resumo de XP/level-up e libera a próxima; perder reinicia a campanha (os níveis dos personagens continuam valendo).
- Turnos por velocidade: cada personagem age na sua vez, dos mais rápidos aos mais lentos; quem está derrotado não age.
- Ações: Atacar (dano =
ataque × 50 / (50 + defesa efetiva do alvo)), Defender (dobra a própria defesa até o início do seu próximo turno), Item (usa uma poção pra curar um aliado — a equipe começa a campanha com 3) ou Habilidade — uma especial única por herói, usável uma vez por batalha: Wizard (Bola de Fogo, atinge todos os inimigos), Priest (Cura Divina), Paladin (Proteção, defende por um aliado), Hunter (Tiro Certeiro, ignora defesa) e Rogue (Golpe Sombrio, mais dano quanto menor o HP do alvo). - Animações: idle, investida no ataque, tremor ao levar dano, postura defensiva, cura e desmaio ao ser derrotado — tudo animado por código em cima do sprite de cada personagem (sem spritesheets). Quem está na vez dá um passo à frente, rumo ao centro da arena.
- O nome da fase aparece num banner no topo; "Turno de X" e o destaque do alvo mirado ficam junto do próprio personagem; o menu de ações fica numa barra fina no rodapé, com nome/nível/HP de cada personagem (herói ou inimigo) acima dele.
- Vitória na fase final: campanha concluída.
- Derrota: a equipe caiu — a campanha reinicia da fase 1, mas o nível conquistado por cada personagem permanece.
main.py # ponto de entrada (só cria e roda o App)
introbattle/
app.py # laço principal e máquina de estados de telas
config.py # caminhos, constantes visuais, keybinds, balanceamento
settings.py # preferências (janela/áudio), salvas em saves/settings.json
save_data.py # progresso da campanha e nível/XP por classe, saves/save.json
resources.py # cache de imagens/fontes
audio.py # música/efeitos, volume, mudo
input.py # teclas físicas -> ações nomeadas
animation.py # animações proceduais (Animator)
entities/ # Character (stats/XP/dano) + roster (dados dos 7 personagens)
battle/ # tela de batalha, turnos, IA inimiga, HUD
stages/ # definição das fases da campanha
ui/ # menus (principal, config., seleção, créditos, pausa...)
assets/ # imagens, áudio e fonte
docs/ # PDF original do enunciado do trabalho
screenshots/ # imagens usadas neste README
saves/ # settings.json / save.json (gerados em runtime, fora do git)
Músicas de BoxCat Games, tocadas no menu, na seleção de personagens, na vitória e na derrota.
Veja o menu Créditos no jogo (ou assets/credits.txt) para a lista completa de quem fez as artes, o desenvolvimento e a documentação do projeto original.
Desenvolvido com pygame-ce e muito carinho!







