【问题标题】:Fish game "NameError" . 'shark' is not defined?鱼游戏“NameError”。 “鲨鱼”没有定义?
【发布时间】:2020-09-20 08:06:19
【问题描述】:

我在 pygame 上做游戏,我遇到了一个问题,我正试图找出我面临的问题。我不知道解决方案。我收到以下错误消息:

我收到以下错误消息:

shark = enemy(-389,410,170,71,-389, 1360) TypeError: enemy() takes no arguments 有谁知道错误在哪里? .

class enemy (object):
    walkRight= [pygame.image.load('shark\R\R1.png').convert()
    pygame.image.load('shark\R\R2.png').convert()
    pygame.image.load('shark\R\R3.png').convert()
    pygame.image.load('shark\R\R4.png').convert()
    pygame.image.load('shark\R\R5.png').convert()
    pygame.image.load('shark\R\R6.png').convert()
    pygame.image.load('shark\R\R7.png').convert()
    pygame.image.load('shark\R\R8.png').convert()
    pygame.image.load('shark\R\R9.png').convert()
    pygame.image.load('shark\R\R10.png').convert()
    pygame.image.load('shark\R\R11.png').convert()
    pygame.image.load('shark\R\R12.png').convert()
    pygame.image.load('shark\R\R13.png').convert()
    pygame.image.load('shark\R\R14.png').convert()
    pygame.image.load('shark\R\R15.png').convert()
    pygame.image.load('shark\R\R16.png').convert()
    pygame.image.load('shark\R\R17.png').convert()
    pygame.image.load('shark\R\R18.png').convert()
    pygame.image.load('shark\R\R19.png').convert()]

walkLeft = [pygame.image.load('shark\L\L1.png').convert()
pygame.image.load('shark\L\L2.png').convert()
pygame.image.load('shark\L\L3.png').convert()
pygame.image.load('shark\L\L4.png').convert()
pygame.image.load('shark\L\L5.png').convert()
pygame.image.load('shark\L\L6.png').convert()
pygame.image.load('shark\L\L7.png').convert()
pygame.image.load('shark\L\L8.png').convert()
pygame.image.load('shark\L\L9.png').convert()
pygame.image.load('shark\L\L10.png').convert()
pygame.image.load('shark\L\L11.png').convert()
pygame.image.load('shark\L\L12.png').convert()
pygame.image.load('shark\L\L13.png').convert()
pygame.image.load('shark\L\L14.png').convert()
pygame.image.load('shark\L\L15.png').convert()
pygame.image.load('shark\L\L16.png').convert()
pygame.image.load('shark\L\L17.png').convert()
pygame.image.load('shark\L\L18.png').convert()
pygame.image.load('shark\L\L19.png').convert()]

def __init__(self, x, y, width, hight, start, end):
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.start = start
    self.end = end
    self.walkCount = 0
    self.vel = 7

def draw(self, surface):
    self.move()
    if self.walkCount +1 >=57:
        self.walkCount = 0

        if self.vel > 0:
            surface.blit(pygame.transform.scale(self.walkRight[self.walkCount//3,], (self.width, self.height)),(self.x, self.y))
            self.walkCount +=1

    else:
        surface.blit(pygame.transform.scale(self.walkLeft[self.walkCount//3,], (self.width, self.height)),(self.x, self.y))
        self.walkCount += 1

def move(self):
    if self.vel > 0:
        if self.x < self.end + self.vel:
            self.x += self.vel
        else:
            self.vel = self.vel * -1
            self.x += self.vel
            self.walkCount = 0


def redrawwindow():
    global fish
    surface.blit (poisson, (0,0))
    fish.draw(surface)
    shark.draw(surface)
    shark1.draw(surface)
    shark2.draw(surface)
    shark3.draw(surface)
    global vie


if(shark.vel > 0 and fish.x < shark.x + shark.width and fish.x>=shark.x and fish.y <= shark.y + shark.height and fish.y >= shark.y):
   vie= vie-1

   fish = player(0, 0, 64, 64)

elif(shark.vel < 0 and  fish.x+fish.width > shark.x and fish.x<=shark.x and fish.y<= shark.y + shark.height and fish.y>= shark.y):
    vie= vie-1
    fish = player(0, 0, 64, 64)

if vie ==0:
    print ("Game Over")

pygame.display.update()

 #mainloop
fish = player(300,410,64,64)
shark= enemy(-389,410,170,71,-389, 1360)
shark1= enemy(900,180, 170,71 ,-120, 1360)
shark2= enemy(600,300, 170,71 ,-300, 1360)
shark3= enemy(300,550, 170,71 ,-500, 1360)`

我收到另一个错误:

鲨鱼 = 敌人(-389,410,170,71,-389, 1360) TypeError:enemy() 没有参数

有谁知道错误在哪里?

【问题讨论】:

  • 请重新格式化您的问题以将代码编写为实际代码。使用界面顶部的括号。
  • 错误提示 shark 未定义。在您包含的代码中,我看不到您这样做的任何地方。我看到了fish = player(...),但我在任何地方都没有看到shark = ...。也不是 Shark1、Shark2 或 Shark3,尽管您在 redrawwindow() 中使用它们。
  • 我把敌人的所有代码都放好了,大家可以看到

标签: python pygame pycharm computer-science undefined-reference


【解决方案1】:

这些行:

 #mainloop
fish = player(300,410,64,64)
shark= enemy(-389,410,170,71,-389, 1360)
shark1= enemy(900,180, 170,71 ,-120, 1360)
shark2= enemy(600,300, 170,71 ,-300, 1360)
shark3= enemy(300,550, 170,71 ,-500, 1360)

您分配/定义这些不同对象的位置位于程序的末尾。那是在您尝试在上面的行中使用它们之后。

您更早需要这些行,可能就在 def redrawwindow(): 之前就可以了。

还有两件事。我不确定这是否是复制粘贴问题,但是您在敌人类中的缩进是错误的。 此外,我很确定您希望所有这些负载都成为列表分配的一部分。像这样:

walkRight= [pygame.image.load('shark\R\R1.png').convert(),
    pygame.image.load('shark\R\R2.png').convert(),
    pygame.image.load('shark\R\R3.png').convert(),
    pygame.image.load('shark\R\R4.png').convert(),
    pygame.image.load('shark\R\R5.png').convert(),
    pygame.image.load('shark\R\R6.png').convert(),
    pygame.image.load('shark\R\R7.png').convert(),
    pygame.image.load('shark\R\R8.png').convert(),
    pygame.image.load('shark\R\R9.png').convert(),
    pygame.image.load('shark\R\R10.png').convert(),
    pygame.image.load('shark\R\R11.png').convert(),
    pygame.image.load('shark\R\R12.png').convert(),
    pygame.image.load('shark\R\R13.png').convert(),
    pygame.image.load('shark\R\R14.png').convert(),
    pygame.image.load('shark\R\R15.png').convert(),
    pygame.image.load('shark\R\R16.png').convert(),
    pygame.image.load('shark\R\R17.png').convert(),
    pygame.image.load('shark\R\R18.png').convert(),
    pygame.image.load('shark\R\R19.png').convert()]

walkLeft =  pygame.image.load('shark\L\L1.png').convert(),
    pygame.image.load('shark\L\L2.png').convert(),
    pygame.image.load('shark\L\L3.png').convert(),
    pygame.image.load('shark\L\L4.png').convert(),
    pygame.image.load('shark\L\L5.png').convert(),
    pygame.image.load('shark\L\L6.png').convert(),
    pygame.image.load('shark\L\L7.png').convert(),
    pygame.image.load('shark\L\L8.png').convert(),
    pygame.image.load('shark\L\L9.png').convert(),
    pygame.image.load('shark\L\L10.png').convert(),
    pygame.image.load('shark\L\L11.png').convert(),
    pygame.image.load('shark\L\L12.png').convert(),
    pygame.image.load('shark\L\L13.png').convert(),
    pygame.image.load('shark\L\L14.png').convert(),
    pygame.image.load('shark\L\L15.png').convert(),
    pygame.image.load('shark\L\L16.png').convert(),
    pygame.image.load('shark\L\L17.png').convert(),
    pygame.image.load('shark\L\L18.png').convert(),
    pygame.image.load('shark\L\L19.png').convert()]

不只是加载然后丢弃结果。

【讨论】:

  • 哦,是的,非常感谢,我没有注意到它。但是现在当我更改它时,还有另一个错误。我为什么要删除参数或者我应该删除什么。 Traceback(最近一次调用最后一次):shark=enemy(-389,410,170,71,-389,1360) TypeError:enemy() 没有参数
  • @YaraBeheiry 这可能是因为您的缩进不正确。正如我所说,您在敌人类中的缩进似乎是错误的。似乎 __init__()、draw() 和 move() 都被淘汰了,因此不是敌人类的一部分。如果 __init__() 不是该类的一部分,它将使用 object 基类中的默认 __init__()。对象类的 __init__() 不带参数。那很可能是你的问题。修复缩进,它可能会起作用。
  • 我改变了它,它给了我同样的错误。我改成这样: def __init__(): def draw(): def move(): 我不明白为什么
  • @YaraBeheiry 您可以编辑您的问题以包含您的新代码吗?不要替换旧代码,只是在末尾添加一条评论,如 EDIT 包括更新的代码,然后粘贴新代码?为确保它正确显示,请确保在粘贴代码后将其全部突出显示,然后通过单击编辑窗口顶部的{} 按钮将其标记为代码块。然后仔细检查格式和缩进是否符合您的预期。同时复制并粘贴它给出的完整错误消息。
猜你喜欢
  • 2014-04-02
  • 2023-04-11
  • 1970-01-01
  • 2013-12-29
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多