🚀 Criando um Jogo de Nave em Python com Pygame ( vou melhorar e testar)
🚀 Criando um Jogo de Nave em Python com Pygame ( vou melhorar e testar)
Hoje eu vou mostrar como funciona o código do nosso jogo Space Shooter, desenvolvido em Python usando a biblioteca Pygame.
Primeiro importamos as bibliotecas:
import pygame
import random
Depois iniciamos o Pygame:
pygame.init()
E configuramos a tela:
tamanho_tela = (800, 600)
tela = pygame.display.set_mode(tamanho_tela)
pygame.display.set_caption("Space Shooter")
Aqui criamos uma janela de 800x600 pixels.
Definimos cores em RGB:
BRANCO = (255, 255, 255)
PRETO = (0, 0, 0)
VERDE = (0, 255, 0)
VERMELHO = (255, 0, 0)
AMARELO = (255, 255, 0)
Carregamos o fundo:
fundo = pygame.image.load("fundo estrelado.jpg")
fundo = pygame.transform.scale(fundo, (800, 600))
Isso deixa o jogo com visual espacial 🔥
Criamos a classe Nave, que representa o jogador:
class Nave:
Ela possui:
Uma imagem
Um retângulo (rect) para colisão
Velocidade
Função de movimento
Função de desenho na tela
Movimentação:
def mover(self, esquerda, direita, cima, baixo):
Ela verifica se as teclas estão pressionadas e move a nave dentro dos limites da tela.
class Missil:
Cada vez que o jogador aperta ESPAÇO, um míssil é criado:
mísseis.append(Missil(jogador.rect.centerx, jogador.rect.top))
O míssil:
Sobe na tela
Some quando sai da tela
Detecta colisão com inimigos
class Inimigo:
Os inimigos:
Nascem em posição aleatória no topo
Desc em direção ao jogador
São recriados quando destruídos
self.rect.center = (random.randint(50, 750), random.randint(-100, -50))
Isso faz cada inimigo surgir em lugar diferente.
Colisão com míssil:
if misseis.rect.colliderect(inimigo.rect):
Colisão com jogador:
if jogador.rect.colliderect(inimigo.rect):
Aqui usamos o sistema de retângulos do Pygame para detectar impacto.
Variáveis principais:
pontos = 0
vidas = 3
Cada inimigo destruído = +10 pontos
Cada colisão = -1 vida
Se vidas <= 0 → Game Over
O coração do jogo é:
while not fim_jogo:
Dentro dele temos:
Captura de eventos (teclado)
Movimentação
Colisões
Atualização da tela
Controle de FPS (60 FPS)
clock.tick(60)
Com esse jogo você aprende:
✅ Programação orientada a objetos
✅ Trabalhar com classes
✅ Sistema de colisão
✅ Manipulação de imagens
✅ Sons no jogo
✅ Controle de FPS
✅ Lógica de game loop
Agora é só copiar e testar 👇
import pygame
import random
# Inicializando o pygame
pygame.init()
# Configurações da tela
tamanho_tela = (800, 600)
tela = pygame.display.set_mode(tamanho_tela)
pygame.display.set_caption("Space Shooter")
# Cores
BRANCO = (255, 255, 255)
PRETO = (0, 0, 0)
VERDE = (0, 255, 0)
VERMELHO = (255, 0, 0)
AMARELO = (255, 255, 0)
# Carregar a imagem de fundo
fundo = pygame.image.load("fundo estrelado.jpg") # Coloque o caminho da sua imagem de fundo
fundo = pygame.transform.scale(fundo, (800, 600)) # Ajuste para o tamanho da tela (800x600)
# Carregar sons
pygame.mixer.init() # Inicializa o mixer de som
som_disparo = pygame.mixer.Sound("sond/tiro 6.mp3") # Som do disparo
som_colisao_inimigo = pygame.mixer.Sound("sond/bola colidindo com o bloco.mp3") # Som da colisão com inimigo
som_colisao_jogador = pygame.mixer.Sound("sond/colisão 4.mp3") # Som da colisão com o jogador
# Carregar imagem da nave inimiga
try:
nave_inimiga_img = pygame.image.load("nave_alfa__1_-removebg-preview.png") # Coloque o caminho da sua imagem de nave inimiga
nave_inimiga_img = pygame.transform.scale(nave_inimiga_img, (50, 50)) # Ajuste para o tamanho correto
except pygame.error as e:
print(f"Erro ao carregar imagem da nave inimiga: {e}")
exit()
# Classe da nave do jogador
class Nave:
def __init__(self):
self.imagem = pygame.image.load("nave_alfa (2).png") # Coloque o caminho da sua imagem de nave
self.rect = self.imagem.get_rect()
self.rect.center = (400, 550) # Inicia no centro inferior da tela
self.velocidade = 30
def mover(self, esquerda, direita, cima, baixo) :
if esquerda and self.rect.left > 0:
self.rect.x -= self.velocidade
if direita and self.rect.right < 800:
self.rect.x += self.velocidade
if cima and self.rect.top > 0:
self.rect.y -= self.velocidade
if baixo and self.rect.bottom < 600:
self.rect.y += self.velocidade
def desenhar(self):
tela.blit(self.imagem, self.rect)
# Classe do míssil
class Missil:
def __init__(self, x, y, tipo="normal"):
self.rect = pygame.Rect(x, y, 5, 15)
self.velocidade = 7
self.tipo = tipo
def mover(self):
self.rect.y -= self.velocidade
if self.tipo == "rapido":
self.velocidade = 10 # Aumenta a velocidade para o power-up de mísseis rápidos
elif self.tipo == "grande":
self.rect.width = 10 # Torna o míssil maior (power-up de mísseis maiores)
if self.rect.bottom < 0:
return False
return True
def desenhar(self):
pygame.draw.rect(tela, VERMELHO, self.rect)
# Classe do inimigo
class Inimigo:
def __init__(self):
self.imagem = nave_inimiga_img # Usando a imagem carregada para a nave inimiga
self.rect = self.imagem.get_rect()
self.rect.center = (random.randint(50, 750), random.randint(-100, -50)) # Posição aleatória no topo
self.velocidade = 2
def mover(self):
self.rect.y += self.velocidade
def desenhar(self):
tela.blit(self.imagem, self.rect)
# Função para criar inimigos com base na fase
def criar_inimigos(fase):
inimigos = [Inimigo() for _ in range(5 + fase)] # A cada fase, adicionamos mais inimigos
return inimigos
# Função principal do jogo
def jogo():
# Criando objetos
jogador = Nave()
mísseis = []
fase = 1 # Começa na fase 1
inimigos = criar_inimigos(fase)
powerups = []
# Variáveis de controle
clock = pygame.time.Clock()
pontos = 0
vidas = 3
fim_jogo = False
# Loop principal do jogo
while not fim_jogo:
tela.fill(PRETO)
# Desenhar o fundo
tela.blit(fundo, (0, 0)) # Coloca a imagem de fundo na tela
# Movimentos do jogador
esquerda = direita = cima = baixo = False
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
fim_jogo = True
if evento.type == pygame.KEYDOWN:
if evento.key == pygame.K_LEFT:
esquerda = True
if evento.key == pygame.K_RIGHT:
direita = True
if evento.key == pygame.K_UP:
cima = True
if evento.key == pygame.K_DOWN:
baixo = True
if evento.key == pygame.K_SPACE:
mísseis.append(Missil(jogador.rect.centerx, jogador.rect.top))
som_disparo.play() # Toca o som do disparo
# Mover a nave
jogador.mover(esquerda, direita, cima, baixo)
# Mover mísseis
for misseis in mísseis[:]:
if not misseis.mover():
mísseis.remove(misseis)
# Mover inimigos
for inimigo in inimigos:
inimigo.mover()
if inimigo.rect.top > 600:
inimigos.remove(inimigo)
inimigos.append(Inimigo()) # Aumenta a quantidade de inimigos com a fase
# Verificar colisão com os mísseis
for misseis in mísseis:
if misseis.rect.colliderect(inimigo.rect):
mísseis.remove(misseis)
inimigos.remove(inimigo)
inimigos.append(Inimigo())
pontos += 10
som_colisao_inimigo.play() # Toca o som da colisão com inimigo
# Verificar colisão com o jogador
if jogador.rect.colliderect(inimigo.rect):
vidas -= 1
inimigos.remove(inimigo)
inimigos.append(Inimigo())
som_colisao_jogador.play() # Toca o som da colisão com o jogador
if vidas <= 0:
fim_jogo = True
# Desenhar tudo
jogador.desenhar()
for misseis in mísseis:
misseis.desenhar()
for inimigo in inimigos:
inimigo.desenhar()
# Exibir informações
fonte = pygame.font.SysFont("arial", 30)
texto_pontos = fonte.render(f"Pontos: {pontos}", True, BRANCO)
tela.blit(texto_pontos, (10, 10))
texto_vidas = fonte.render(f"Vidas: {vidas}", True, BRANCO)
tela.blit(texto_vidas, (700, 10))
# Atualizar a tela
pygame.display.flip()
clock.tick(60) # 60 FPS
pygame.quit()
# Iniciar o jogo
jogo()
Programar é resolver problemas — e mudar realidades
Você pode evoluir esse projeto adicionando:
Sistema de fases
Chefão (Boss)
Power-ups
Barra de vida
Menu inicial
Tela de Game Over personalizada
Ranking de pontuação
O mercado de tecnologia é um dos que mais cresce no mundo, e a demanda por profissionais qualificados é gigantesca. Estima-se que o Brasil precisará de mais de 700 mil profissionais de TI até 2025, segundo estudos do setor.
Para jovens de baixa renda, esse número representa uma janela de oportunidades.
Com o conhecimento certo, um notebook e acesso à internet, é possível conquistar empregos remotos, freelas e até criar startups. A programação derruba barreiras geográficas, permitindo que talentos de comunidades periféricas atinjam empresas globais.
💻 CÓDIGO PROFISSIONAL ATUALIZADO
Aqui está a versão melhorada para a galera copiar e colar 👇
import pygame
import random
pygame.init()
pygame.mixer.init()
# ================= CONFIGURAÇÕES =================
LARGURA = 800
ALTURA = 600
FPS = 60
tela = pygame.display.set_mode((LARGURA, ALTURA))
pygame.display.set_caption("Space Shooter 2.0")
BRANCO = (255,255,255)
PRETO = (0,0,0)
VERMELHO = (255,0,0)
fundo = pygame.image.load("fundo estrelado.jpg")
fundo = pygame.transform.scale(fundo, (LARGURA, ALTURA))
som_tiro = pygame.mixer.Sound("sond/tiro 6.mp3")
som_explosao = pygame.mixer.Sound("sond/bola colidindo com o bloco.mp3")
som_dano = pygame.mixer.Sound("sond/colisão 4.mp3")
clock = pygame.time.Clock()
fonte = pygame.font.SysFont("arial", 28)
# ================= CLASSES =================
class Nave:
def __init__(self):
self.imagem = pygame.image.load("nave_alfa (2).png")
self.rect = self.imagem.get_rect(center=(LARGURA//2, ALTURA-60))
self.velocidade = 7
def mover(self, teclas):
if teclas[pygame.K_LEFT] and self.rect.left > 0:
self.rect.x -= self.velocidade
if teclas[pygame.K_RIGHT] and self.rect.right < LARGURA:
self.rect.x += self.velocidade
if teclas[pygame.K_UP] and self.rect.top > 0:
self.rect.y -= self.velocidade
if teclas[pygame.K_DOWN] and self.rect.bottom < ALTURA:
self.rect.y += self.velocidade
def desenhar(self):
tela.blit(self.imagem, self.rect)
class Missil:
def __init__(self, x, y):
self.rect = pygame.Rect(x, y, 5, 15)
self.velocidade = 10
def mover(self):
self.rect.y -= self.velocidade
return self.rect.bottom > 0
def desenhar(self):
pygame.draw.rect(tela, VERMELHO, self.rect)
class Inimigo:
def __init__(self, velocidade):
self.imagem = pygame.image.load("nave_alfa__1_-removebg-preview.png")
self.imagem = pygame.transform.scale(self.imagem, (50,50))
self.rect = self.imagem.get_rect(
center=(random.randint(50, LARGURA-50), random.randint(-150, -50))
)
self.velocidade = velocidade
def mover(self):
self.rect.y += self.velocidade
def desenhar(self):
tela.blit(self.imagem, self.rect)
# ================= FUNÇÃO PRINCIPAL =================
def jogo():
jogador = Nave()
misseis = []
fase = 1
pontos = 0
vidas = 3
inimigos = [Inimigo(2)]
rodando = True
while rodando:
clock.tick(FPS)
tela.blit(fundo, (0,0))
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
rodando = False
if evento.type == pygame.KEYDOWN:
if evento.key == pygame.K_SPACE:
misseis.append(Missil(jogador.rect.centerx, jogador.rect.top))
som_tiro.play()
teclas = pygame.key.get_pressed()
jogador.mover(teclas)
# ================= FASE PROGRESSIVA =================
nova_fase = pontos // 100 + 1
if nova_fase > fase:
fase = nova_fase
inimigos.append(Inimigo(2 + fase))
# ================= ATUALIZA MÍSSEIS =================
for missil in misseis[:]:
if not missil.mover():
misseis.remove(missil)
# ================= ATUALIZA INIMIGOS =================
for inimigo in inimigos[:]:
inimigo.mover()
if inimigo.rect.top > ALTURA:
inimigos.remove(inimigo)
inimigos.append(Inimigo(2 + fase))
for missil in misseis[:]:
if missil.rect.colliderect(inimigo.rect):
misseis.remove(missil)
inimigos.remove(inimigo)
inimigos.append(Inimigo(2 + fase))
pontos += 10
som_explosao.play()
break
if jogador.rect.colliderect(inimigo.rect):
inimigos.remove(inimigo)
inimigos.append(Inimigo(2 + fase))
vidas -= 1
som_dano.play()
if vidas <= 0:
rodando = False
# ================= DESENHAR =================
jogador.desenhar()
for missil in misseis:
missil.desenhar()
for inimigo in inimigos:
inimigo.desenhar()
tela.blit(fonte.render(f"Pontos: {pontos}", True, BRANCO), (10,10))
tela.blit(fonte.render(f"Vidas: {vidas}", True, BRANCO), (650,10))
tela.blit(fonte.render(f"Fase: {fase}", True, BRANCO), (350,10))
pygame.display.flip()
pygame.quit()
jogo()
A programação é muito mais do que uma profissão: é um caminho de libertação e desenvolvimento pessoal. Ela oferece ferramentas para criar o novo, questionar o velho e redesenhar o futuro.
Na Academy Code, acreditamos que o futuro da tecnologia é o futuro da inclusão — e cada jovem que aprende a programar é uma nova linha de código na transformação do mundo.
💡 “Quando um jovem aprende a programar, ele não apenas muda o código de um software — ele reprograma a própria história.”