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

[Dúvida] meu programa esta fechando

apos terminar os passos desse video, meu programa esta teoricamente rodando normal, nenhum erro de syntaxe ou algo parecido. porem meu programa dentro do pycharm fecha em questão de um segundo, alguem poderia me ajudar a resolver o proglema?

segue meu codigo:

import pygame

pygame.init()

screen = pygame.display.set_mode((640, 480), 0)

amarelo = (255,255,0)
preto = (0,0,0)

class pacman:
    def __init__(self):
        self.centro_x = 400
        self.centro_y = 300
        self.tamanho = 50
        self.raio = int(self.tamanho / 2)

    def pintar(self, tela):
        #desenhar pacman
        pygame.draw.circle(tela,amarelo,(self.centro_x, self.centro_y),self.raio)
        #desenho da boca
        canto_boca = (self.centro_x, self.centro_y)
        labio_superior = (self.centro_x + self.raio, self.centro_y - self.raio)
        labio_inferior = (self.centro_x + self.raio, self.centro_y)
        pontos = [canto_boca, labio_superior, labio_inferior]
        pygame.draw.polygon(tela,preto,pontos,0)

        olho_x = int(self.centro_x + self.raio / 2)
        olho_y = int(self.centro_y - self.raio / 2)
        olho_raio = int(self.raio / 10)
        pygame.draw.circle(tela,preto,(olho_x, olho_y,), olho_raio, 0)

    if __name__ == " main ":
        pacman = pacman()

        while True:
            # Pintar a tela
            pacman.pintar(screen)
            pygame.display.update()


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

Olá Thiago, tudo bem com você?

Realizando alguns testes e simulações com o código apresentado, foi possível detectar dois pontos de mudanças necessárias no código. O primeiro ponto será no momento em que é utilizado a estrutura condicional if para verificar se o arquivo está sendo executado como programa principal. No código foi verificado se o nome da variável especial __name__ é igual à " main " (sem o duplo underscore) o correto será: "__main__", como abaixo:

if __name__ == "__main__":

O segundo ponto, será realizar a correção da indentação (espaço) do código. A estrutura condicional if __name__ == "__main__": e o laço de repetição while True: estão dentro da classe pacman, desta forma essa parte não serão lidas quando o código for executado, fazendo com que a tela seja iniciada e fechada, sem que o Pacman seja desenhado. Para corrigir peço que siga os passos abaixo.

  • Selecione da linha if __name__ == "__main__": até a linha pygame.display.update() e pressione + uma vez. Assim a estrutura condicional if e o laço while serão retirados de dentro da classe pacman.
  • Neste momento será necessário mover o laço que coleta e verifica os eventos (for e in pygame.event.get():) para dentro do laço while. Selecione da linha while True: até a linha exit() e pressione uma vez.
  • A estrutura do código deverá ficar como apresentada abaixo.
if __name__ == "__main__":
    pacman = pacman()

    while True:
        # Pintar a tela
        pacman.pintar(screen)
        pygame.display.update()


        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                exit()

Após realizar as mudanças descritas acima salve o arquivo e execute-o, verifique se obtém êxito.

Código completo com as mudanças já aplicadas

import pygame

pygame.init()

screen = pygame.display.set_mode((640, 480), 0)

amarelo = (255, 255, 0)
preto = (0, 0, 0)


class pacman:
    def __init__(self):
        self.centro_x = 400
        self.centro_y = 300
        self.tamanho = 50
        self.raio = int(self.tamanho / 2)

    def pintar(self, tela):
        # desenhar pacman
        pygame.draw.circle(tela, amarelo, (self.centro_x, self.centro_y),
                           self.raio)
        # desenho da boca
        canto_boca = (self.centro_x, self.centro_y)
        labio_superior = (self.centro_x + self.raio, self.centro_y - self.raio)
        labio_inferior = (self.centro_x + self.raio, self.centro_y)
        pontos = [canto_boca, labio_superior, labio_inferior]
        pygame.draw.polygon(tela, preto, pontos, 0)

        olho_x = int(self.centro_x + self.raio / 2)
        olho_y = int(self.centro_y - self.raio / 2)
        olho_raio = int(self.raio / 10)
        pygame.draw.circle(tela, preto, (olho_x, olho_y,), olho_raio, 0)


if __name__ == "__main__":
    pacman = pacman()

    while True:
        # Pintar a tela
        pacman.pintar(screen)
        pygame.display.update()

        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                exit()

Espero ter ajudado, fico à disposição em caso de dúvidas.

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!

OBRIGADO!