Crie seu Jogo da Cobrinha em Python com Turtle: Tutorial Completo!

Se você é fã do clássico jogo da cobrinha, este artigo certamente despertará seu interesse.

Aqui, vou guiá-lo na criação de um jogo da cobra simples, acessível até mesmo para quem está começando a programar em Python.

Existem várias formas de desenvolver este jogo, incluindo o uso da biblioteca PyGame, uma ferramenta popular para criação de jogos em Python.

Outra abordagem é utilizar a biblioteca `turtle`, que já vem instalada com o Python e oferece uma tela virtual para desenhar formas e imagens.

Neste artigo, optaremos pela biblioteca `turtle` para construir nosso jogo da cobrinha, que é ideal para iniciantes, especialmente aqueles que estão começando a programar em Python.

Além da biblioteca `turtle`, utilizaremos mais dois módulos:

  • Módulo `time`: para controlar o tempo decorrido entre os movimentos da cobra.
  • Módulo `random`: para gerar números aleatórios em Python.

Você precisará de um editor de texto à sua escolha. Neste artigo, usarei o VSCode. Além disso, certifique-se de ter o Python 3 instalado em sua máquina. Você também pode usar um compilador online, como o etechpt.com.

Prepare-se para se divertir!

Como funciona o jogo da cobrinha

O objetivo do jogo é alcançar a maior pontuação possível, controlando a cobra para coletar os alimentos que aparecem na tela.

O jogador controla a cobra usando as teclas direcionais, que correspondem à direção em que a cobra está se movendo. Se a cobra colidir com uma parede ou com seu próprio corpo, o jogo termina.

Para criar este jogo, seguiremos os seguintes passos:

  • Importar os módulos necessários (turtle, time e random).
  • Criar a tela do jogo usando o módulo turtle.
  • Definir as teclas para controlar a direção da cobra.
  • Implementar a lógica do jogo.

Crie um arquivo chamado `snakegame.py` e adicione o código de implementação.

Importando os módulos

Nesta etapa, importaremos os módulos `turtle`, `time` e `random`, que já estão incluídos no Python. Também definiremos valores iniciais para a pontuação do jogador, a maior pontuação já alcançada e o tempo de atraso entre os movimentos. O módulo `time` será usado para calcular este atraso.

Adicione o seguinte código ao seu arquivo `snakegame.py`:

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Criando a tela do jogo

O módulo `turtle` nos permitirá criar a tela virtual onde o jogo será exibido. Nesta tela, desenharemos a cobra, a comida e a pontuação do jogador.

Adicione o seguinte código ao seu arquivo Python:

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice(['triangle','circle'])
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

O código acima inicia a tela do turtle, define o título e a cor de fundo. Em seguida, define o tamanho da janela e desenha a cobra na tela virtual.

O método `penup()` levanta a caneta da tartaruga, evitando que uma linha seja desenhada enquanto ela se move. O método `goto(x,y)` move a tartaruga para uma posição absoluta na tela.

Depois, criamos a comida que a cobra irá coletar. Exibiremos a pontuação do jogador e a maior pontuação já alcançada. Usamos o método `pen.write()` para isso. O `hideturtle()` esconde o ícone da tartaruga da tela.

É importante adicionar `turtle.mainloop()` no final do código para que a tela permaneça visível para o usuário interagir com ela.

Execute o arquivo e você deverá ver a seguinte saída:

Configurando as teclas de direção para a cobra

Aqui, configuraremos as teclas que guiarão a direção da cobra na tela. Usaremos ‘L’ para esquerda, ‘R’ para direita, ‘U’ para cima e ‘D’ para baixo. Implementaremos essas direções usando uma função que será chamada quando o jogador pressionar as teclas.

Adicione o seguinte código:

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

A função `move()` define o movimento da cobra em um valor de coordenada específico.

A função `listen()` captura eventos e chama as funções que movem a cobra em uma direção específica quando o jogador pressiona uma tecla.

A implementação da lógica do jogo da cobrinha

Agora que temos as bases do jogo, precisamos fazer o jogo funcionar em tempo real.

Isso envolverá:

  • Aumentar o tamanho da cobra toda vez que ela coleta comida, usando uma cor diferente.
  • Aumentar a pontuação do jogador a cada comida coletada e acompanhar a maior pontuação.
  • Impedir que a cobra colida com a parede ou com seu próprio corpo.
  • Reiniciar o jogo quando a cobra colidir.
  • Zerar a pontuação do jogador ao reiniciar, mantendo a maior pontuação na tela.

Adicione o seguinte código ao seu arquivo Python:

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    if snake.distance(snake_food) < 20:
        coord_x = random.randint(-270, 270)
        coord_y = random.randint(-270, 270)
        snake_food.goto(coord_x, coord_y)

        # Adding segment
        added_segment = turtle.Turtle()
        added_segment.speed(0)
        added_segment.shape("square")
        added_segment.color("white")
        added_segment.penup()
        segments.append(added_segment)
        delay_time -= 0.001
        player_score += 5

        if player_score > highest_score:
            highest_score = player_score
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    time.sleep(delay_time)

turtle.mainloop()

No código acima, definimos uma posição aleatória para a comida na tela. Cada vez que a cobra coleta a comida, um novo segmento é adicionado ao seu corpo, na cor branca para diferenciá-lo.

A comida é posicionada em um local aleatório dentro dos limites da tela. A pontuação do jogador aumenta em 5 cada vez que a cobra coleta a comida. Se a cobra colidir, a pontuação é zerada, mas a maior pontuação é mantida na tela.

Execute o arquivo e veja como sua tela do turtle deve aparecer:

Conclusão 🐍

A biblioteca `turtle` é uma ferramenta divertida e acessível para criar o jogo da cobrinha, como vimos neste artigo. Você também pode implementar o mesmo jogo usando a biblioteca PyGame. Você pode consultar o Tutorial PyGame aqui para ver outras formas de criar o jogo.

Você também pode experimentar criar um jogo de adivinhação de números em Python, ou aprender a obter dados JSON com Python.
Divirta-se programando!