Jogo Pong Clássico Usando Python e Pygame

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como criar um jogo Pong usando Python e a biblioteca Pygame. Pong é um jogo de arcade clássico para dois jogadores, onde os jogadores controlam raquetes para rebater uma bola um contra o outro.

Para concluir este projeto, você precisará seguir as etapas abaixo. Começaremos criando os arquivos do projeto e configurando a janela do jogo. Em seguida, definiremos as cores e configuraremos as raquetes e a bola. Finalmente, moveremos as raquetes e a bola, lidaremos com as colisões e desenharemos os elementos do jogo.

👀 Pré-visualização

Captura de tela da pré-visualização do jogo Pong

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como criar os arquivos do projeto
  • Como configurar a janela do jogo
  • Como configurar as raquetes e a bola
  • Como configurar as variáveis do jogo
  • Como configurar o loop do jogo
  • Como mover as raquetes
  • Como mover a bola
  • Como lidar com as colisões da bola
  • Como atualizar as pontuações e reiniciar a bola
  • Como lidar com as colisões e o movimento dos power-ups
  • Como desenhar os elementos do jogo
  • Como desenhar a pontuação
  • Como atualizar a tela
  • Como definir os quadros por segundo (FPS)
  • Como sair do jogo

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Usar a biblioteca Pygame para criar uma janela de jogo
  • Configurar e mover objetos do jogo, como raquetes e uma bola
  • Lidar com colisões entre objetos do jogo
  • Atualizar e exibir as pontuações do jogo
  • Definir os quadros por segundo (FPS) para o jogo
  • Sair do jogo corretamente

Criar os Arquivos do Projeto

Crie um arquivo chamado pong_game.py no seu editor de código ou IDE preferido. Este será o arquivo principal onde você escreverá o código para o jogo Pong.

cd ~/project
touch pong_game.py
sudo pip install pygame

Configurar a Janela do Jogo

Dentro do arquivo pong_game.py, importe as bibliotecas necessárias no início do código:

import pygame
import random

Em seguida, inicialize o Pygame chamando pygame.init():

## Inicializar Pygame
pygame.init()

Depois, configure a janela do jogo definindo a largura, altura e quadros por segundo (FPS):

## Configurar a janela do jogo
WIDTH = 800
HEIGHT = 400
FPS = 60

Defina as cores usadas no jogo:

## Definir cores
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
ORANGE = (255, 165, 0)
BACKGROUND_COLOR = (50, 50, 50)

Crie a janela do jogo, defina o título da janela e crie um objeto de relógio para controlar a taxa de quadros:

## Configurar a janela do jogo
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pong Game")
clock = pygame.time.Clock()

Configurar as Raquetes e a Bola

Defina as propriedades das raquetes, como largura, altura, velocidade e cor:

## Set up the paddles
PADDLE_WIDTH = 10
PADDLE_HEIGHT = 60
PADDLE_SPEED = 5
PADDLE_COLOR = WHITE

Crie dois objetos de raquete usando o construtor pygame.Rect() e posicione-os no centro de cada lado da janela do jogo:

paddle1 = pygame.Rect(0, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT)
paddle2 = pygame.Rect(
    WIDTH - PADDLE_WIDTH, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT
)

Configure as propriedades da bola, como largura, altura, velocidade e cor:

## Set up the ball
BALL_WIDTH = 10
BALL_HEIGHT = 10
BALL_SPEED_X = 3
BALL_SPEED_Y = 3
BALL_COLOR = WHITE

Crie um objeto de bola usando o construtor pygame.Rect() e posicione-o no centro da janela do jogo:

ball = pygame.Rect(
    WIDTH / 2 - BALL_WIDTH / 2, HEIGHT / 2 - BALL_HEIGHT / 2, BALL_WIDTH, BALL_HEIGHT
)

Defina a velocidade inicial da bola nas direções x e y aleatoriamente:

ball_speed_x = BALL_SPEED_X * random.choice((1, -1))
ball_speed_y = BALL_SPEED_Y * random.choice((1, -1))

Configure os power-ups, como largura, altura, velocidade e cor:

## Set up the power-ups
POWERUP_WIDTH = 10
POWERUP_HEIGHT = 10
POWERUP_SPEED = 2
POWERUP_COLOR = ORANGE

powerup = pygame.Rect(
    WIDTH / 2 - POWERUP_WIDTH / 2,
    HEIGHT / 2 - POWERUP_HEIGHT / 2,
    POWERUP_WIDTH,
    POWERUP_HEIGHT,
)
powerup_speed_x = POWERUP_SPEED * random.choice((1, -1))
powerup_speed_y = POWERUP_SPEED * random.choice((1, -1))
powerup_active = False

Configurar as Variáveis do Jogo

Configure as variáveis para controlar as pontuações dos jogadores, crie um objeto de fonte do jogo e defina a cor para a exibição da pontuação:

## Configurar as variáveis do jogo
score1 = 0
score2 = 0
game_font = pygame.font.SysFont(None, 48)
SCORE_COLOR = WHITE

Configurar o Loop do Jogo

Crie uma variável booleana running e defina-a como True para iniciar o loop do jogo:

## Configurar o loop do jogo
running = True
while running:

Dentro do loop do jogo, trate os eventos iterando pelos eventos que ocorreram:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

Mover as Raquetes

Dentro do loop do jogo, verifique a entrada do teclado para mover as raquetes:

    ## Mover as raquetes
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and paddle1.y > 0:
        paddle1.y -= PADDLE_SPEED
    if keys[pygame.K_s] and paddle1.y < HEIGHT - PADDLE_HEIGHT:
        paddle1.y += PADDLE_SPEED
    if keys[pygame.K_UP] and paddle2.y > 0:
        paddle2.y -= PADDLE_SPEED
    if keys[pygame.K_DOWN] and paddle2.y < HEIGHT - PADDLE_HEIGHT:
        paddle2.y += PADDLE_SPEED

Mover a Bola

Dentro do loop do jogo, atualize a posição da bola:

    ## Mover a bola
    ball.x += ball_speed_x
    ball.y += ball_speed_y

Lidar com as Colisões da Bola

Dentro do loop do jogo, lide com as colisões da bola com as raquetes e as paredes:

    ## Colisão da bola com as raquetes
    if ball.colliderect(paddle1) or ball.colliderect(paddle2):
        ball_speed_x *= -1

    ## Colisão da bola com as paredes
    if ball.y > HEIGHT - BALL_HEIGHT or ball.y < 0:
        ball_speed_y *= -1

Atualizar Pontuações e Reiniciar a Bola

Dentro do loop do jogo, atualize as pontuações e reinicie a bola quando ela ultrapassar a raquete:

    ## Aumentar a pontuação e reiniciar a bola
    if ball.x < 0:
        score2 += 1
        ball.center = (WIDTH / 2, HEIGHT / 2)
        ball_speed_x *= random.choice((1, -1))
        ball_speed_y *= random.choice((1, -1))
    if ball.x > WIDTH:
        score1 += 1
        ball.center = (WIDTH / 2, HEIGHT / 2)
        ball_speed_x *= random.choice((1, -1))
        ball_speed_y *= random.choice((1, -1))

Lidar com Colisões e Movimento de Power-ups

Dentro do loop do jogo, lide com as colisões do power-up com as raquetes e mova o power-up:

    ## Colisão do power-up com as raquetes
    if powerup.colliderect(paddle1) or powerup.colliderect(paddle2):
        powerup_active = True
        powerup.x = WIDTH / 2 - POWERUP_WIDTH / 2
        powerup.y = HEIGHT / 2 - POWERUP_HEIGHT / 2

    ## Movimento do power-up
    if powerup_active:
        powerup.x += powerup_speed_x
        powerup.y += powerup_speed_y

        if powerup.x > WIDTH - POWERUP_WIDTH or powerup.x < 0:
            powerup_speed_x *= -1
        if powerup.y > HEIGHT - POWERUP_HEIGHT or powerup.y < 0:
            powerup_speed_y *= -1

Desenhar os Elementos do Jogo

Dentro do loop do jogo, desenhe as raquetes, a bola, o power-up e a pontuação na janela do jogo:

    ## Desenhar os elementos do jogo
    screen.fill(BACKGROUND_COLOR)
    pygame.draw.rect(screen, PADDLE_COLOR, paddle1)
    pygame.draw.rect(screen, PADDLE_COLOR, paddle2)
    pygame.draw.ellipse(screen, BALL_COLOR, ball)
    pygame.draw.rect(screen, POWERUP_COLOR, powerup)

Desenhar a Pontuação

Dentro do loop do jogo, desenhe as pontuações no centro superior da janela do jogo:

    ## Desenhar a pontuação
    score_text = game_font.render(f"{score1} : {score2}", True, SCORE_COLOR)
    screen.blit(score_text, (WIDTH / 2 - score_text.get_width() / 2, 10))

Atualizar a Exibição

Dentro do loop do jogo, atualize a exibição para mostrar as mudanças:

    ## Update the display
    pygame.display.flip()

Definir o FPS

Dentro do loop do jogo, defina a taxa de quadros (frame rate) para controlar a velocidade do jogo:

    ## Set the FPS
    clock.tick(FPS)

Sair do Jogo

Após o loop do jogo, adicione a seguinte linha para sair do Pygame quando o jogo terminar:

## Quit the game
pygame.quit()

Mude para a área de trabalho (Desktop) e execute o projeto usando o seguinte comando:

python pong_game.py

Agora, você pode jogar o jogo Pong usando as setas do teclado e as teclas W e S.

Pong game screenshot

Resumo

Parabéns! Você concluiu o projeto passo a passo sobre a criação de um jogo Pong usando Python e Pygame. Você aprendeu como configurar a janela do jogo, definir as propriedades das raquetes e da bola, lidar com eventos do jogo, mover as raquetes e a bola, lidar com colisões e desenhar os elementos do jogo. Experimente diferentes modificações para adicionar seus próprios aprimoramentos ao jogo e divirta-se jogando!

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar