1
resposta

[Dúvida] TypeError: Pacman.face() missing 1 required positional argument: 'tela'

Eu passo o screen como argumento, mas ele entende como se eu tivesse passando o self. Tentei bastante mas não identifiquei o erro.

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600), 0)
preto=(0,0,0)
amarelo=(255,255,0)
vermelho=(255,0,0)
velocidade=0.1

class Pacman:
  def __init__(self):
    self.centro_x=400
    self.centro_y = 300
    self.tamanho=100
    self.raio= self.tamanho//2
    self.velocidade_x=velocidade
    self.velocidade_y =velocidade

  def regras(self):
    self.centro_x+=self.velocidade_x
    if self.centro_x+self.raio>800:
      self.velocidade_x=-velocidade
    if self.centro_x-self.raio<0:
      self.velocidade_x=velocidade

    self.centro_y += self.velocidade_y
    if self.centro_y + self.raio > 600:
      self.velocidade_y =-velocidade
    if self.centro_y - self.raio < 0:
      self.velocidade_y =velocidade

  def face(self,tela):
    pygame.draw.circle(tela,vermelho, (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_inferior = (self.centro_x + self.raio, self.centro_y)
    lista_de_pontos=[canto_boca,labio_inferior,labio_superior]
    pygame.draw.polygon(tela, preto, lista_de_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)
    #pygame.display.update()

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

while True:
#  breakpoint()
  Pacman.face(screen)
  pygame.display.update()
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      exit()
1 resposta

Oi Danilo,

eu acredito que é porque vc está chamando como se fosse um método do módulo ao invés de através de um objeto. Instancie um objeto da classe pacman e através dele chame o método face.

\

pcm = Pacman()

while True:
    pcm.face(screen)
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

Rodei seu código aqui e foi Insira aqui a descrição dessa imagem para ajudar na acessibilidade