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'
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'
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!
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!