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

Argumento

Olá, estava fazendo as aulas de python onde é recriado o jogo do pacman, porém na parte de CAPTURAR EVENTOS o código da erro, e eu não tenho ideia do que se pode significar isso exatamente, o código está dentro de um laço 'WHILE'

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas
solução!

Olá Amanda, tudo bem com você?

Com base apenas na analise da imagem postada, é 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

Compreendi, agradeço, segue o código:

import pygame

pygame.init()

screen = pygame.display.set_mode((800, 600), 0)

AMARELO = (255, 255, 0)
PRETO = (0, 0, 0)
VELOCIDADE = 1

class PACMAN:
    def __init__(self):
        self.linha = 1
        self.coluna = 1
        self.centro_x = 400
        self.centro_y = 300
        self.tamanho = 800 // 30
        self.vel_x = 0
        self.vel_y = 0
        self.raio = self.tamanho // 2

    def calcular_regras(self):
        self.coluna = self.coluna + self.vel_x  #será desenhado um pixel a direita
        self.linha = self.linha + self.vel_y
        self.centro_x = int(self.coluna * self.tamanho + self.raio)
        self.centro_y = int(self.linha * self.tamanho + self.raio)

      comentário >  '''if self.centro_x + self.raio > 800:
            self.vel_x = -1
        if self.centro_x - self.raio < 0:
            self.vel_x = 1
        if self.centro_y + self.raio > 600:
            self.vel_y = -1
        if self.centro_y - self.raio < 0:
            self.vel_y = 1'''

    def processar_event(self, ev):
        for e in ev:
            if e.type == pygame.KEYDOWN:
                if e.key == pygame.K_RIGHT:
                    self.vel_x = VELOCIDADE
                elif e.key == pygame.K_LEFT:
                    self.vel_x = -VELOCIDADE
                elif e.key == pygame.K_UP:
                    self.vel_y = -VELOCIDADE
                elif e.key == pygame.K_DOWN:
                    self.vel_y = VELOCIDADE
            elif e.type == pygame.KEYUP:
                if e.key == pygame.K_RIGHT:
                    self.vel_x = 0
                elif e.key == pygame.K_LEFT:
                    self.vel_x = 0
                elif e.key == pygame.K_UP:
                    self.vel_y = 0
                elif e.key == pygame.K_DOWN:
                    self.vel_y = 0

    def processar_eventos_mouse(self, ev):
        delay = 1000
        for e in ev:
            if e.type == pygame.MOUSEMOTION:
                mouse_x, mouse_y = e.pos
                self.coluna = (mouse_x - self.centro_x) / delay
                self.linha = (mouse_y - self.centro_y) / delay

    def pintar(self, tela):
        #Desenhar o corpo do PACMAN
        pygame.draw.circle(tela, AMARELO, (self.centro_x, self.centro_y), self.raio, 0)

        #Desenho da boca do PACMAN
        canto_boca = (self.centro_x, self.centro_y)
        labio_superior = (self.centro_x + self.raio, self.centro_y - self.raio)
        labio_infeior = (self.centro_x + self.raio, self.centro_y)
        pontos = [canto_boca, labio_superior, labio_infeior]

        pygame.draw.polygon(tela, PRETO, pontos, 0)

        #Olho do PACMAN
        olho_x = int(self.centro_x + self.raio / 3)
        olho_y = int(self.centro_y - self.raio * 0.70)
        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:
        #1º Calculas as regras
        pacman.calcular_regras()


        #2º Pintar a tela
        screen.fill((PRETO))
        pacman.pintar(screen)
        pygame.display.update()
        pygame.time.delay(100)

        #3º Captura os eventos.
        ev = pygame.event.get()
        for e in ev:
            if e.type == pygame.QUIT:
                exit()
        PACMAN.processar_event(ev)

Olá Amanda, tudo bem com você?

Agradeço o retorno. O erro apresentado TypeError: PACMAN.processar_event() missing 1 required positional argument: 'eventos', está sendo levantado devido à chamada do método processar_event está sendo chamado com a palavra PACMAN (maiúsculo) se referindo a classe e não em pacman (minúsculo) que se refere ao objeto.

Peço que na última linha do código troque a chamada do método processar_event, deixando como apresentada abaixo:

pacman.processar_event(ev)

Lembre-se que, antes de realizar uma nova execução do código, será necessário remover os comentários efetuados no método calcular_regras.

Código completo com as mudanças aplicadas

import pygame

pygame.init()

screen = pygame.display.set_mode((800, 600), 0)

AMARELO = (255, 255, 0)
PRETO = (0, 0, 0)
VELOCIDADE = 1

class PACMAN:
    def __init__(self):
        self.linha = 1
        self.coluna = 1
        self.centro_x = 400
        self.centro_y = 300
        self.tamanho = 800 // 30
        self.vel_x = 0
        self.vel_y = 0
        self.raio = self.tamanho // 2

    def calcular_regras(self):
        self.coluna = self.coluna + self.vel_x  #será desenhado um pixel a direita
        self.linha = self.linha + self.vel_y
        self.centro_x = int(self.coluna * self.tamanho + self.raio)
        self.centro_y = int(self.linha * self.tamanho + self.raio)

        if self.centro_x + self.raio > 800:
            self.vel_x = -1
        if self.centro_x - self.raio < 0:
            self.vel_x = 1
        if self.centro_y + self.raio > 600:
            self.vel_y = -1
        if self.centro_y - self.raio < 0:
            self.vel_y = 1

    def processar_event(self, eventos):
        for e in ev:
            if e.type == pygame.KEYDOWN:
                if e.key == pygame.K_RIGHT:
                    self.vel_x = VELOCIDADE
                elif e.key == pygame.K_LEFT:
                    self.vel_x = -VELOCIDADE
                elif e.key == pygame.K_UP:
                    self.vel_y = -VELOCIDADE
                elif e.key == pygame.K_DOWN:
                    self.vel_y = VELOCIDADE
            elif e.type == pygame.KEYUP:
                if e.key == pygame.K_RIGHT:
                    self.vel_x = 0
                elif e.key == pygame.K_LEFT:
                    self.vel_x = 0
                elif e.key == pygame.K_UP:
                    self.vel_y = 0
                elif e.key == pygame.K_DOWN:
                    self.vel_y = 0

    def processar_eventos_mouse(self, ev):
        delay = 1000
        for e in ev:
            if e.type == pygame.MOUSEMOTION:
                mouse_x, mouse_y = e.pos
                self.coluna = (mouse_x - self.centro_x) / delay
                self.linha = (mouse_y - self.centro_y) / delay

    def pintar(self, tela):
        #Desenhar o corpo do PACMAN
        pygame.draw.circle(tela, AMARELO, (self.centro_x, self.centro_y), self.raio, 0)

        #Desenho da boca do PACMAN
        canto_boca = (self.centro_x, self.centro_y)
        labio_superior = (self.centro_x + self.raio, self.centro_y - self.raio)
        labio_infeior = (self.centro_x + self.raio, self.centro_y)
        pontos = [canto_boca, labio_superior, labio_infeior]

        pygame.draw.polygon(tela, PRETO, pontos, 0)

        #Olho do PACMAN
        olho_x = int(self.centro_x + self.raio / 3)
        olho_y = int(self.centro_y - self.raio * 0.70)
        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:
        #1º Calculas as regras
        pacman.calcular_regras()


        #2º Pintar a tela
        screen.fill((PRETO))
        pacman.pintar(screen)
        pygame.display.update()
        pygame.time.delay(100)

        #3º Captura os eventos.
        ev = pygame.event.get()
        for e in ev:
            if e.type == pygame.QUIT:
                exit()
        pacman.processar_event(ev)

Peço que verifique os pontos listados acima, salve o arquivo após a mudança e execute-o.

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!