Skip to content

About

Asteroids em Pygame: projeto do curso Boot.dev, expandido com pontuação, vidas, armas e power-ups.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Asteroids

Clone em Python + Pygame do arcade clássico, começado no curso Build Asteroids using Python and Pygame da Boot.dev e expandido daí em diante.

O curso entrega o esqueleto: loop a 60 FPS, nave, tiros, asteroides que se partem e colisão circular. Este repositório parte desse ponto e vira um jogo que dá para sentar e jogar — com pontuação, vidas, wrap na tela, armas, power-ups e uma tela de instruções antes da partida.

         ▲
        ▲ ▲

Do curso ao jogo

No curso Depois do curso
Nave se move com velocidade constante Aceleração, inércia, arrasto e teto de velocidade
Hitbox circular na nave Hitbox triangular, igual ao desenho
Asteroides perfeitamente redondos Polígonos irregulares (8–13 vértices)
Objetos saem da tela e desaparecem Tudo envolve as bordas (wrap)
Um tiro, um jeito de atirar Pulse, Spread e Rapid
Uma vida, Game Over na hora 3 vidas, respawn com invulnerabilidade
Fundo preto Starfield em assets/background.png
Sem HUD, sem menu Tela de instruções, pausa com H, placar e Game Over

Em cima disso entram explosões em estilhaços, escudo, speed, bombas com pavio e a tela que explica o jogo antes de começar.

Como jogar

Na abertura, leia as instruções e pressione Espaço ou Enter. Durante a partida, H pausa e mostra o mesmo painel.

Controles

Tecla Ação
← → Girar
↑ Acelerar
↓ Retroceder
Espaço Atirar
B Soltar bomba
1 2 3 Pulse / Spread / Rapid
C Ciclar arma
H Abrir ou fechar instruções
R Jogar de novo depois do Game Over
Esc Sair

Armas

  • Pulse — tiro único, cadência padrão
  • Spread — três tiros em leque
  • Rapid — rajada rápida, projéteis menores

Power-ups

Caem às vezes quando um asteroide explode.

  • Escudo (ciano) — enquanto dura, a nave destrói asteroides no contato
  • Speed (amarelo) — mais aceleração e velocidade máxima
  • Bomba (vermelho) — +1 bomba (começa com 2, máximo 5)

A bomba fica no mapa com pavio e explode em área. Asteroides dentro do raio são vaporizados.

Pontuação

Quanto menor a rocha, mais vale — no estilo do arcade original.

Asteroide Pontos
Grande 20
Médio 50
Pequeno 100

Você tem 3 vidas. Ao ser atingido, a nave volta ao centro por 2,5 s sem colidir (pisca). Com o escudo ativo, o impacto destrói o asteroide em vez de gastar uma vida.

Rodando

Python 3.13+ e uv (o projeto já tem pyproject.toml e uv.lock).

uv sync
uv run python main.py

Se o ambiente virtual já existir:

.venv/bin/python main.py

Dependência: pygame==2.6.1.

Testes

SDL_VIDEODRIVER=dummy python -m unittest discover -s tests -v

Cobre wrap na tela, hitbox triangular, pontuação por tamanho, aceleração, armas, power-ups, respawn e a tela de instruções.

Estrutura

asteroids/
├── main.py              # loop, HUD, título e Game Over
├── player.py            # nave, thrust, armas, vidas, bombas
├── asteroid.py          # rochas irregulares + split
├── asteroidfield.py     # spawn nas bordas
├── shot.py              # projéteis com tempo de vida
├── bomb.py              # bomba com pavio
├── powerup.py           # escudo, speed, bomba extra
├── explosion.py         # estilhaços no estilo arcade
├── circleshape.py       # sprite base
├── collision.py         # wrap, círculo e triângulo
├── constants.py         # números do jogo
├── logger.py            # game_state.jsonl / game_events.jsonl
├── assets/background.png
└── tests/

O logger.py veio do fluxo do curso: grava amostras de estado e eventos em JSONL enquanto a partida roda.

Créditos

  • Curso: Build Asteroids using Python and Pygame — Boot.dev, Sarah Schulte
  • Arcade original: Asteroids (Atari, 1979)
  • Extraído daí: pontuação, vidas, wrap, armas, power-ups, bombas, explosões, hitbox triangular, asteroides irregulares, fundo e tela de instruções

About

Asteroids em Pygame: projeto do curso Boot.dev, expandido com pontuação, vidas, armas e power-ups.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages