Jogo da Cobrinha com Python e Pygame

PythonBeginner
Pratique Agora

Introdução

Este projeto irá guiá-lo através do processo de criação de um jogo da cobrinha usando Python e a biblioteca Pygame. O jogo terá uma janela de jogo, uma cobra, um power-up (bônus) e uma pontuação. A cobra se moverá pela janela do jogo e comerá o power-up. Quando a cobra comer o power-up, o comprimento da cobra será aumentado em um. A pontuação será exibida na tela.

👀 Pré-visualização

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

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como criar uma janela de jogo usando Pygame
  • Como lidar com a entrada do usuário para controlar o movimento da cobra
  • Como criar e atualizar a posição da cobra
  • Como desenhar a cobra e o power-up na tela
  • Como detectar colisões entre a cobra e o power-up
  • Como manter o controle da pontuação
  • Como exibir a pontuação na tela

🏆 Conquistas

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

  • Usar Pygame para criar uma janela de jogo gráfica
  • Lidar com a entrada do usuário para controlar o jogo
  • Criar e atualizar objetos do jogo
  • Detectar colisões em um jogo
  • Exibir e atualizar a pontuação do jogo

Criar os arquivos do projeto

Crie um novo arquivo chamado snake_game.py e abra-o em um editor de código.

cd ~/project
touch snake_game.py
sudo pip install pygame
✨ Verificar Solução e Praticar

Importar os módulos necessários

No arquivo snake_game.py, importe os módulos pygame e random:

import pygame
import random
✨ Verificar Solução e Praticar

Inicializar Pygame

Após importar os módulos, inicialize o Pygame:

pygame.init()
✨ Verificar Solução e Praticar

Configurar a janela do jogo

Defina a largura (width), altura (height) e quadros por segundo (FPS - frames per second) da janela do jogo:

WIDTH = 800
HEIGHT = 600
FPS = 10
✨ Verificar Solução e Praticar

Definir cores

Defina as cores usadas no jogo:

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BACKGROUND_COLOR = (50, 50, 50)
✨ Verificar Solução e Praticar

Configurar a janela do jogo

Configure a janela do jogo com a largura (width) e altura (height) definidas:

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()

No código acima, pygame.display.set_mode() é usado para inicializar a tela com a largura e altura especificadas. pygame.display.set_caption() é usado para definir o título da janela do jogo. pygame.time.Clock() é usado para controlar o tempo no jogo.

✨ Verificar Solução e Praticar

Configurar a cobra

Defina o tamanho do bloco (block size) e a velocidade da cobra:

snake_block_size = 20
snake_speed = 5

Definimos o tamanho do bloco como 20 e a velocidade como 5. Isso significa que a cobra se moverá 5 pixels de cada vez.

✨ Verificar Solução e Praticar

Configurar as variáveis do jogo

Defina os estilos de fonte (font styles) e os tamanhos de fonte (font sizes) para exibir a pontuação (score):

font_style = pygame.font.SysFont(None, 50)
score_font = pygame.font.SysFont(None, 35)
✨ Verificar Solução e Praticar

Configurar o power-up

Defina o tamanho do bloco (block size) do power-up:

powerup_block_size = 20
✨ Verificar Solução e Praticar

Definir funções

Defina as seguintes funções:

draw_snake(snake_block_size, snake_list)

Esta função desenha a cobra na tela:

def draw_snake(snake_block_size, snake_list):
    for x in snake_list:
        pygame.draw.rect(
            screen, GREEN, [x[0], x[1], snake_block_size, snake_block_size]
        )

No código acima, pygame.draw.rect() é usado para desenhar um retângulo na tela. O primeiro parâmetro é a tela, o segundo parâmetro é a cor e o terceiro parâmetro é a posição e o tamanho do retângulo.

draw_powerup(powerup_x, powerup_y)

Esta função desenha o power-up na tela:

def draw_powerup(powerup_x, powerup_y):
    pygame.draw.rect(
        screen, RED, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
    )

No código acima, pygame.draw.rect() é usado para desenhar um retângulo na tela. O primeiro parâmetro é a tela, o segundo parâmetro é a cor e o terceiro parâmetro é a posição e o tamanho do retângulo.

display_score(score)

Esta função exibe a pontuação na tela:

def display_score(score):
    value = score_font.render("Score: " + str(score), True, WHITE)
    screen.blit(value, [10, 10])

No código acima, score_font.render() é usado para renderizar a pontuação na tela. O primeiro parâmetro é o texto a ser exibido, o segundo parâmetro é o anti-aliasing e o terceiro parâmetro é a cor do texto. screen.blit() é usado para desenhar o texto na tela. O primeiro parâmetro é o texto a ser exibido e o segundo parâmetro é a posição do texto.

game_loop()

Esta função contém o loop principal do jogo:

def game_loop():
    ## Game loop code goes here
✨ Verificar Solução e Praticar

Completar o código do loop do jogo

Complete a função game_loop() adicionando a lógica do jogo dentro do loop while.

def game_loop():
    game_over = False
    game_close = False

    ## Configurar a posição inicial da cobra
    x1 = WIDTH / 2
    y1 = HEIGHT / 2
    x1_change = 0
    y1_change = 0

    ## Configurar o corpo da cobra
    snake_list = []
    snake_length = 1

    ## Configurar o power-up
    powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
    powerup_y = round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20

    ## Configurar o loop do jogo
    while not game_over:
        while game_close:
            screen.fill(BACKGROUND_COLOR)
            message = font_style.render("Press SPACE to play again", True, YELLOW)
            screen.blit(message, [WIDTH / 2 - 200, HEIGHT / 2 - 50])
            pygame.display.flip()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = True
                    game_close = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        game_loop()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block_size
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block_size
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block_size
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block_size
                    x1_change = 0

        if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
            game_close = True

        x1 += x1_change
        y1 += y1_change
        screen.fill(BACKGROUND_COLOR)
        pygame.draw.rect(
            screen, BLUE, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
        )

        snake_head = []
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)
        if len(snake_list) > snake_length:
            del snake_list[0]

        for x in snake_list[:-1]:
            if x == snake_head:
                game_close = True

        draw_snake(snake_block_size, snake_list)
        display_score(snake_length - 1)

        pygame.display.flip()

        if x1 == powerup_x and y1 == powerup_y:
            powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
            powerup_y = (
                round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
            )
            snake_length += 1

        clock.tick(snake_speed)

    pygame.quit()

No código acima, pygame.QUIT é usado para sair do jogo. pygame.KEYDOWN é usado para verificar se uma tecla foi pressionada. pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP e pygame.K_DOWN são usados para verificar se as setas para a esquerda, direita, cima e baixo foram pressionadas, respectivamente. pygame.draw.rect() é usado para desenhar um retângulo na tela. O primeiro parâmetro é a tela, o segundo parâmetro é a cor e o terceiro parâmetro é a posição e o tamanho do retângulo. pygame.display.flip() é usado para atualizar a tela. pygame.time.Clock() é usado para rastrear o tempo no jogo. pygame.time.Clock.tick() é usado para definir o FPS do jogo.

✨ Verificar Solução e Praticar

Executar o jogo

Adicione o seguinte ao final do arquivo para executar o jogo:

game_loop()
pygame.quit()

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

python snake_game.py
Snake game running command
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você criou com sucesso um jogo da cobrinha usando Python e a biblioteca Pygame. Neste projeto, você aprendeu como configurar a janela do jogo, definir cores, desenhar a cobra e o power-up, exibir a pontuação e implementar a lógica do jogo. Agora você pode executar o jogo e se divertir jogando.