Skip to content

Repository files navigation

⚔️ Intro Battle: O Confronto Final! ⚔️

Cenário de Batalha Épico

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.

🚀 Como rodar

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.py

O projeto usa pygame-ce (fork da comunidade, mesma API do pygame) — em Pythons muito recentes o pygame tradicional ainda pode não ter um instalador pronto, enquanto o pygame-ce já tem.

Sem instalar nada (Linux)

./run.sh

Cria o venv e instala as dependências na primeira vez, e só inicia o jogo nas próximas.

Gerar um executável standalone

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.exe

O 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.

🎮 Controles

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

🖥️ Janela e áudio

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

🛡️ Monte sua equipe

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.

Tela de Seleção de Personagens

Heróis disponíveis (nível 1)

Personagem HP ATK DEF SPD
Priest Priest 85 8 7 4
Paladin Paladin 95 7 9 2
Hunter Hunter 80 10 5 6
Wizard Wizard 75 13 4 3
Rogue 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

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).

Interface de Batalha

Combate

  • 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.

💀 Fim de jogo

  • 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.

🛠️ Estrutura do projeto

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)

🎶 Trilha sonora

Músicas de BoxCat Games, tocadas no menu, na seleção de personagens, na vitória e na derrota.

💖 Créditos

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!

About

Um experimento, aprendizado e momento de aplicação na prática para conhecimentos da linguagem Python.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages