Francileudo Oliveira
Francileudo Oliveira24/11/2022 08:04
Compartilhe

pygame: concluindo nosso Snake Game

  • #Python

Olá, seja muito bem vindo(a), no artigo anterior desenvolvemos melhor a movimentação da cobra no jogo: https://programacao-descomplicada.blogspot.com/2022/11/pygame-melhorando-movimentacao-da-nossa.html, hoje nós vamos resolver o game over, sendo que quando a cobra encostar em si mesma o usuário perde o jogo.

Reparem que quando a cobra encosta nela mesma o que ocorre é que ela está ocupando a mesma posição duas vezes, sendo que ela já tinha ocupado a posição antes e ela se encontra guardada na nossa lista de posições da cobra.

A lógica é simples, se a cabeça da cobra já estiver na listaCobra ela irá morrer e o jogo recomeça. Para isso primeiro, dentro do nosso laço while, abaixo de tamanho_cobra(lista_cobra), vamos criar uma condicional para verificar se existe alguma outra lista_cabeca que seja idêntica a atual que estamos passando.

if lista_cobra.count(lista_posicaoCabeca) > 1:

  Saindo do nosso while, vamos criar uma variável chamada cobraMorta passando False. Voltando para a nossa condicional anterior, colocaremos True na variável cobraMorta quando ela entrar na condicional, e criamos um laço while que irá rodar enquanto essa variável for True:

if lista_cobra.count(lista_posicaoCabeca) > 1:

  cobraMorta = True

  while cobraMorta:

  Agora, dentro desse while vamos colocar o nosso evento que encerra o jogo e outro que chama uma função que ainda iremos construir para quando o usuário morrer e quiser reiniciar o game, ele clica na tecla x e volta do início ao jogo.

    for event in pygame.event.get():

      if event.type == QUIT:

        pygame.quit()

        exit()

      if event.type == KEYDOWN:

        if event.key == K_x:

          gamePlay()

   Abaixo da função tamanho_cobra, fora do while, vamos criar a função gamePlay(), no qual vamos reiniciar variáveis passadas ao longo das nossas aulas. Primeiro vamos zerar a pontuação, em seguida deixaremos o comprimento da cobra em 5 como estava no começo, faremos a cobra voltar para o começo da tela nas sua posição inicial de jogo. Vamos redefinir a lista_cobra e lista_posicaoCabeca para que elas voltem a ficar vazias. 

A posição da nossa maçã será sorteada novamente e a nossa variável cobraMorta volta a ser False:

def gamePlay():

pontos = 0

tamanho_inicial_cobra = 5

XCobra = largura / 2

YCobra = altura / 2

lista_cobra = []

lista_posicaoCabeca = []

XMaca = randint(40, 600)

YMaca = randint(50, 430)

cobraMorta = False

  Se você rodar o programa vai reparar que o jogo irá travar quando a cobra morrer, isso porque ainda precisamos declarar nossas variáveis dentro da função gamePlay como sendo globais, para isso basta colocar a seguinte linha de código dentro da nossa função:

global pontos, tamanho_inicial_cobra, XCobra, YCobra, lista_cobra, lista_posicaoCabeca, YMaca, XMaca, cobraMorta

  Agora, vamos organizar nossa tela de game over, primeiro vamos voltar para a condicional responsável pela morte da nossa cobra, dentro do while vamos pintar a nossa tela inteira colocando tela.fill((192,192,192)) e no final do while, abaixo do for, colocamos pygame.display.update().

  Acima desse while, vamos organizar uma mensagem de game over para colocar na nossa tela final:

mensagem = "Game Over! Pressione x para começar a jogar novamente"

texto_formatado = fonte.render(mensagem, True, (255, 255, 255))

  Em um dos artigos anteriores falamos sobre texto na tela do jogo: link do artigo 5. Por fim, colocamos tela.blit(texto_formatado, (largura//2, altura//2)) abaixo de pygame.display.update() dentro do while. 

  Ainda precisamos resolver uma coisa, nosso texto não ficou no meio da tela. Para resolver isso, abaixo da nossa variável texto_formatado vamos colocar ret_texto = texto_formatado.get_rect().

  Em cima de tela.blit() vamos passar o centro do nosso texto recebendo o meio da tela dessa forma: ret_texto.center = (largura//2, altura//2). Por fim, em tela.blit() passamos a variável ret_texto como parâmetro:

tela.blit(texto_formatado, ret_texto)

  Para concluir nosso projeto vamos colocar abaixo da nossa condicional de game over as seguintes condicionais que vão cuidar de trazer a cobra de volta para a tela para que ela não ultrapasse a largura e a altura da mesma.

if XCobra > largura:

  XCobra = 0

if XCobra < 0:

  XCobra = largura

if YCobra > altura:

  YCobra = 0

if YCobra < 0:

  YCobra = altura

  Espero que vocês tenham gostado da construção do nosso joguinho, aprendemos muito durante o processo de elaboração dele, seria interessante estudar um pouco mais profundamente essa biblioteca do python futuramente, deixo um abraço para você e até o próximo artigo.

Artigo Original: https://programacao-descomplicada.blogspot.com/2022/11/pygame-concluindo-nosso-snake-game.html

Compartilhe
Comentários (1)
ANTONIO RODRIGUES
ANTONIO RODRIGUES - 24/11/2022 09:26

Que conteúdo bacana, ótimo trabalho <3