Protótipo 2D dividido em fases: colete 10 números na Fase 1; a meta cresce em 2 a cada fase. Cada número perde valor durante a queda e pode ficar negativo.
No PowerShell, dentro desta pasta:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python main.pyUse A/D ou as setas para mover. W, seta para cima ou Espaço pula — há dois pulos antes de tocar o chão. Ao concluir uma fase, use Enter ou Espaço para avançar. Pressione Esc para sair; após Game Over, use R, Enter ou Espaço para reiniciar.
main.py: ponto de entrada.game.py: loop, eventos, atualização e desenho.player.py: movimento, gravidade e pulo único.falling_number.py: queda e redução individual dos números.settings.py: constantes visuais e de jogabilidade.high_scores.py: placar local persistente (os 10 melhores resultados).
No Game Over, se o resultado entrar no Top 10, digite três letras para
registrá-lo. O placar mostra pontos, fase e iniciais, e é ordenado por: mais
pontos, maior fase e, persistindo o empate, resultado mais recente. Ele fica em
data/high_scores.json, criada automaticamente ao primeiro registro.
Para este jogo em Pygame, a opção mais direta é gerar uma versão portátil para
Windows e publicar o arquivo .zip no itch.io. O site dá
uma página para o jogo, screenshots, instruções e downloads, sem exigir que o
jogador instale Python.
Na máquina de desenvolvimento, instale o empacotador e crie a versão de distribuição:
python -m pip install pyinstaller
pyinstaller --noconfirm --windowed --name SpaceMiner main.pyEnvie o conteúdo de dist/SpaceMiner/ compactado em .zip. Teste esse .zip
em outra pasta antes de publicar. O ranking atual é local a cada instalação; um
ranking mundial exige um servidor/API para guardar e validar os resultados.
Este repositório já contém a configuração para Pygbag + Supabase + GitHub
Pages. A versão desktop continua igual: execute python main.py. No navegador,
o mesmo main.py usa o loop assíncrono exigido pelo Pygbag e envia o placar à
Edge Function do Supabase.
- Crie um projeto no Supabase.
- No SQL Editor, execute o conteúdo de
supabase/migrations/20260930_create_leaderboard.sql. - Instale a Supabase CLI, entre na sua conta e vincule a pasta ao projeto criado.
- Publique a API com
supabase functions deploy leaderboard. - Em
web_config.py, preenchaSUPABASE_FUNCTION_URLcomhttps://SEU-PROJETO.supabase.co/functions/v1/leaderboardeSUPABASE_PUBLISHABLE_KEYcom a chave publishable mostrada em Settings → API Keys. Essa chave é pública; jamais coloque uma chave secret ouservice_rolenesse arquivo.
A tabela não dá acesso direto ao navegador: apenas a Edge Function pode ler e gravar os resultados. Ela devolve e mantém somente as dez primeiras posições, usando pontos, fase e data como critérios de ordenação.
- Crie um repositório no GitHub e envie este projeto para ele (a branch atual é
master). - No repositório, abra Settings → Pages e selecione GitHub Actions como fonte de publicação.
- Faça push para
master. O workflow.github/workflows/deploy-pages.ymlinstala Pygbag, gerabuild/webe o publica. A aba Actions mostrará a URL final.
Para testar antes do push, instale Pygbag e gere a versão web:
python -m pip install pygbag
python tools/build_web_source.py
python -m pygbag --ume_block=0 .web-sourceAbra o endereço local informado pelo Pygbag no navegador. O diretório build/
é gerado dentro de .web-source/ e não deve ser versionado.
O servidor impede acesso direto ao banco e valida formato, limites e ordenação, mas um navegador ainda pode ser alterado por alguém experiente para enviar uma pontuação falsa. Para um placar competitivo, a evolução correta é enviar o seed e as ações da partida para a API, que reproduz e valida a partida no servidor.
Para evoluir, crie módulos como enemies.py, level.py e ui.py; mantenha o ciclo handle_events → update → draw em game.py.