Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Pacman com Python e Pygame: cenário e ator

Olá, boa noite, estou com problema na Primeira movimentação, quanto a bolinha sai da posição 10 e volta pois o comando está para ser -= 1 quando o x > 640, assim que volta quando era para chocar na posição x < 0, acontece um bug e fica a listra amarela na tela, e não acontece colisão, nem passa direto depois do x < 0!

3 respostas

Olá Weber, tudo bem com você?

Com base apenas na descrição da execução do código, é incerto dizer em qual ou quais pontos do código será necessário realizar correções.

Peço que o compartilhe em formato textual nessa postagem o código completo que está sendo executado, para ser efetuado os devidos testes, assim, poderei te auxiliar assertivamente.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Fico no aguardo e à disposição

Olá felippe, tudo certo, meu código de execução na hora do bug é:

import pygame

AMARELO = (255, 255, 0)
PRETO = (0, 0, 0)
VELOCIDADE = 1
pygame.init()

tela = pygame.display.set_mode((640, 480), 0)
x = 10
vel_x = VELOCIDADE
while True:
    # Calcula as regras
    x += vel_x
    if x > 640:
        vel_x = -VELOCIDADE
        if x < 0:
            vel_x = VELOCIDADE

    # Pinta
    tela.fill(PRETO)
    pygame.draw.circle(tela, AMARELO, (int(x), 240), 30, 0)
    pygame.display.update()

    #Eventos
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            exit()
solução!

Oii Weber.

Agradeço o retorno enviando o código que você esta executando. Analisando e realizando testes com o código enviado, o bug descrito não foi apresentado durante as execuções e testes do código. No código enviado, ao iniciar o jogo, a bolinha sai da esquerda, toca a borda direita e retorna para a esquerda até sair da tela.

O comportamento que descrevi está relacionado a um erro de indentação (espaço) no código. A estrutura condicional que verifica se a bola tocou a borda esquerda, if x < 0: está dentro da estrutura condicional que verifica se a bola tocou a borda direita, if x > 640:, dessa forma não ocorre a verificação se a bola tocou a borda esquerda, fazendo com que ela permaneça em movimento contínuo para a esquerda.

Peço que realize a correção da indentação do código e realize uma nova tentativa de execução, basta seguir os passos apresentados abaixo.

  • No laço while selecione da linha if x < 0: a linha vel_x = VELOCIDADE e pressione uma vez + . O laço while deverá ficar como apresentado abaixo:

      while True:
          # Calcula as regras
          x += vel_x
          if x > 640:
              vel_x = -VELOCIDADE
          if x < 0:
              vel_x = VELOCIDADE
    
          # Pinta
          tela.fill(PRETO)
          pygame.draw.circle(tela, AMARELO, (int(x), 240), 30, 0)
          pygame.display.update()
    
          #Eventos
          for e in pygame.event.get():
              if e.type == pygame.QUIT:
                  exit()
  • Salve o arquivo e realize uma nova execução do código, verifique o comportamento apresentado pela bolinha

  • Recomendo que continuidade na implementação do código, seguindo a aula: Primeira movimentação a partir do minuto 6:50

  • No GIF abaixo é apresentado a execução do código

    GIF contendo a execução do código apresentado acima.

Peço que verifique o ponto apresentado acima e realize uma nova execução do código.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!