Tênis Espacial: um Pong pelas estrelas

Um jogo estilo Pong ambientado no espaço, feito em Python com PyGame, com áudio sintetizado, IA com dificuldade progressiva e arquitetura modular.

O Início da Ideia

Nas horas vagas, me arrisco a desenvolver uns jogos com PyGame e JavaScript — é o espaço que uso pra sair um pouco da rotina do trabalho e experimentar ideias sem a pressão de um projeto "sério". O Tênis Espacial foi desenvolvido com PyGame e nasceu justamente dessa vontade de revisitar um clássico (o Pong) com uma roupagem diferente: em vez da tela preta com uma linha pontilhada no meio, um cenário espacial com estrelas em paralaxe, planetas e nebulosas passando ao fundo.

A ideia inicial era simples — duas raquetes, uma bola, quem fizer 7 pontos primeiro vence — mas queria que a experiência em si tivesse acabamento: efeitos de brilho neon nas raquetes e na bola, som e feedback visual em cada rebatida, e um adversário controlado por CPU que não fosse nem perfeito demais, nem óbvio demais.

Desenvolvimento

O jogo inteiro começou num único arquivo, que foi crescendo até chegar perto de 1000 linhas concentrando física, desenho, áudio, menu e configuração de janela. Num momento seguinte, refatorei todo esse código numa arquitetura modular, separando cada responsabilidade em seu próprio módulo — o que deixou o projeto muito mais fácil de manter e de evoluir.

Um dos pontos que mais gostei de resolver foi o áudio: o jogo não usa nenhum arquivo de som. Todos os efeitos sonoros são sintetizados matematicamente em tempo real com NumPy — ondas senoidais e quadradas geradas a partir de frequência, duração e um envelope de fade pra evitar estalos — e convertidas em áudio digital na hora, via PyGame.

Também implementei um sistema de resolução adaptável, que detecta o monitor do usuário e recalcula proporcionalmente todos os tamanhos do jogo (raquetes, bola, fontes, velocidades) em vez de simplesmente esticar a imagem — incluindo correção de DPI scaling no Windows e reposicionamento suave dos elementos quando a janela é redimensionada.

Principais pontos de engenharia do projeto:

  • Arquitetura Modular: código dividido por responsabilidade (configuração, estado de janela/escala, áudio, entidades e lógica de jogo), a partir de um arquivo único inicial.
  • Áudio Sintetizado: efeitos sonoros gerados matematicamente em tempo real com NumPy, sem nenhum arquivo de áudio externo.
  • Resolução Adaptável: detecção do monitor e recálculo proporcional de todos os elementos do jogo, com correção de DPI no Windows.
  • IA com Dificuldade Progressiva: adversário com 3 níveis de dificuldade e "erro de mira" proposital, além de velocidade que cresce sutilmente ao longo da partida.
  • Feedback e Acabamento Visual: raquetes e bola com efeito neon em camadas, tremor de tela em rebatidas e pontos, e uma animação de "supernova" na tela de fim de jogo.
  • Itens Especiais: power-ups que alteram o ritmo da partida (raquete maior, bola mais lenta, ponto em dobro).
  • Distribuição: empacotamento em executável standalone com PyInstaller, incluindo ícone customizado, pra rodar sem precisar de Python instalado.

Resultado

O resultado é um Pong espacial completo, com identidade visual e sonora próprias, dois modos de jogo (1 jogador contra CPU ou 2 jogadores localmente) e uma base de código organizada o suficiente pra receber novas features sem dor de cabeça. Mais do que um jogo pronto, o Tênis Espacial virou também um exercício prático de arquitetura de software fora do contexto de trabalho — modularização, separação de responsabilidades e decisões de design que uso no dia a dia, aplicadas num projeto pequeno e divertido.

← Voltar para todos os projetos