Python Pygame函数错误

Python Pygame函数错误,python,function,class,pygame,Python,Function,Class,Pygame,我和我的朋友一起做这个游戏是为了好玩,我试图随机制造一些敌人来繁殖和跟随玩家,但下面是发生的情况: 我的主脚本: #set up import pygame, sys, random, time, math from pygame.locals import * pygame.init() #variables start---------------------------------- niass = "grass_shit.png" #grass image mil = "head.pn

我和我的朋友一起做这个游戏是为了好玩,我试图随机制造一些敌人来繁殖和跟随玩家,但下面是发生的情况:

我的主脚本

#set up
import pygame, sys, random, time, math
from pygame.locals import *
pygame.init()

#variables start----------------------------------
niass = "grass_shit.png" #grass image
mil = "head.png" #player name
ali = "head_2.png" #alien image

x, y = 0, 0 #character position
movex, movey = 0, 0 #how far the character will move
#x is left and right, y is up and down

screen = pygame.display.set_mode((850, 640),0,32) #set screen                       
background = pygame.image.load(niass).convert() #load image to screen

#WE NEED TO MAKE THESE IMAGERS RECTS BEFORE WE CAN MOVE ON
char = pygame.image.load(mil).convert_alpha() #covert player image
ali = pygame.image.load(ali).convert_alpha() #covert alien image

stop = random.randint(1,4)

#variables end------------------------------------

#classes------------------------------------------
class Enemys():
    def enemy():
        z, w = random.randint(10, 480), random.randint(10, 500)
        movez, movew = 0, 0

        if z < x:
            movez =+ 0.20
        elif z > x:
            movez =- 0.20
        if w < y:
            movew =+ 0.20
        elif w > y:
            movew =- 0.20

        w += movew
        z += movez

        screen.blit(ali,(z,w))

#classes------------------------------------------

while True:

    for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
    if event.type==KEYDOWN:    
            if event.key==K_a:
                    movex=-1
            elif event.key==K_d:
                    movex=+1
            elif event.key==K_w:
                    movey=-1
            elif event.key==K_s:
                    movey=+1
    if event.type==KEYUP:
            if event.key==K_a:
                    movex=0
            elif event.key==K_d:
                    movex=0
            elif event.key==K_w:
                    movey=0
            elif event.key==K_s:
                    movey=0

    while stop > 0:
        stop =- 1
        Enemys.enemy()              

    x += movex
    y += movey

    screen.blit(background,(0,0))
    screen.blit(char,(x,y))
    pygame.display.update()
>>> ================================ RESTART ================================
>>> 

Traceback (most recent call last):
  File "/home/claude/Dropbox/BigKahunaBurger/BigKahunaBurger LOOP.py", line 115, in <module>
    Enemys.enemy()
TypeError: unbound method enemy() must be called with Enemys instance as first argument (got nothing instead)
>>> 
#设置
导入pygame、sys、random、time、math
从pygame.locals导入*
pygame.init()
#变量开始----------------------------------
niass=“grass_shit.png”#grass图像
mil=“head.png”#玩家名称
ali=“head_2.png”#外星人图像
x、 y=0,0#字符位置
movex,movey=0,0#角色将移动多远
#x是左和右,y是上和下
screen=pygame.display.set_模式((850640),0,32)#设置屏幕
background=pygame.image.load(niass.convert()#将图像加载到屏幕
#在我们继续之前,我们需要把这些成像仪弄成矩形
char=pygame.image.load(mil.convert_alpha()#隐蔽玩家图像
ali=pygame.image.load(ali).convert_alpha()#隐蔽外星人图像
stop=random.randint(1,4)
#变量结束------------------------------------
#班级------------------------------------------
类Enemys():
定义敌人():
z、 w=random.randint(10480),random.randint(10500)
movez,movew=0,0
如果zx:
movez=-0.20
如果wy:
movew=-0.20
w+=movew
z+=movez
银幕布利特(阿里,(z,w))
#班级------------------------------------------
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
如果event.type==KEYDOWN:
如果event.key==K_a:
movex=-1
elif event.key==K\u d:
movex=+1
elif event.key==K_w:
movey=-1
elif event.key==K_s:
movey=+1
如果event.type==KEYUP:
如果event.key==K_a:
movex=0
elif event.key==K\u d:
movex=0
elif event.key==K_w:
movey=0
elif event.key==K_s:
movey=0
当停止>0时:
停止=-1
敌人
x+=movex
y+=移动
屏幕光点(背景,(0,0))
屏幕光点(字符,(x,y))
pygame.display.update()
因此,stop是变量,选择一个随机数,然后在while-True部分有另一个while循环,它一直持续到stop小于0,在while循环中,敌人函数运行,但它不喜欢它

以下是错误信息

#set up
import pygame, sys, random, time, math
from pygame.locals import *
pygame.init()

#variables start----------------------------------
niass = "grass_shit.png" #grass image
mil = "head.png" #player name
ali = "head_2.png" #alien image

x, y = 0, 0 #character position
movex, movey = 0, 0 #how far the character will move
#x is left and right, y is up and down

screen = pygame.display.set_mode((850, 640),0,32) #set screen                       
background = pygame.image.load(niass).convert() #load image to screen

#WE NEED TO MAKE THESE IMAGERS RECTS BEFORE WE CAN MOVE ON
char = pygame.image.load(mil).convert_alpha() #covert player image
ali = pygame.image.load(ali).convert_alpha() #covert alien image

stop = random.randint(1,4)

#variables end------------------------------------

#classes------------------------------------------
class Enemys():
    def enemy():
        z, w = random.randint(10, 480), random.randint(10, 500)
        movez, movew = 0, 0

        if z < x:
            movez =+ 0.20
        elif z > x:
            movez =- 0.20
        if w < y:
            movew =+ 0.20
        elif w > y:
            movew =- 0.20

        w += movew
        z += movez

        screen.blit(ali,(z,w))

#classes------------------------------------------

while True:

    for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
    if event.type==KEYDOWN:    
            if event.key==K_a:
                    movex=-1
            elif event.key==K_d:
                    movex=+1
            elif event.key==K_w:
                    movey=-1
            elif event.key==K_s:
                    movey=+1
    if event.type==KEYUP:
            if event.key==K_a:
                    movex=0
            elif event.key==K_d:
                    movex=0
            elif event.key==K_w:
                    movey=0
            elif event.key==K_s:
                    movey=0

    while stop > 0:
        stop =- 1
        Enemys.enemy()              

    x += movex
    y += movey

    screen.blit(background,(0,0))
    screen.blit(char,(x,y))
    pygame.display.update()
>>> ================================ RESTART ================================
>>> 

Traceback (most recent call last):
  File "/home/claude/Dropbox/BigKahunaBurger/BigKahunaBurger LOOP.py", line 115, in <module>
    Enemys.enemy()
TypeError: unbound method enemy() must be called with Enemys instance as first argument (got nothing instead)
>>> 
重新启动================================ >>> 回溯(最近一次呼叫最后一次): 文件“/home/claude/Dropbox/BigKahunaBurger/BigKahunaBurger LOOP.py”,第115行,在 敌人 TypeError:必须使用Enemys实例作为第一个参数调用unbound method敌军()方法(但没有得到任何结果) >>>
该类以及如何使用它至少存在两个关键问题。您应该声明称为类实例的内容,例如
badGuy=敌军()
。在
类敌人()
的定义中,应该有一个名为
self
的参数的成员函数(或任何你想调用的参数,只要它是一致的),下面是一个例子:

class Enemy():
    def __init__(self): # self is needed for all methods defined in Enemy
        # set some values that each unique enemy has, like health.
        self.health = 100
        self.damage = 10
    def attack(self, target):
        target.health -= self.damage # when inside the class, use self
现在,在类外,您需要创建一些敌人:

bandit = Enemy()
robber = Enemy()
bandit.attack(robber)
print bandit.health, robber.health # outside the class use the variable name
# bandit is the object's name, enemy is the object's type.

既然你已经看到了类是多么有用,那就去尽你所能地学习它们吧

这段代码显示了我对类(以及一般的OO原则)的用途缺乏理解。很明显,我对类缺乏理解,这就是我寻求帮助的原因。好吧,所以当我创建z和w位置时,我应该使用self吗?@VincentVega相反,这对你并没有帮助,只是为了向你展示你可以轻松学到的东西,并对学习有所贡献。现在不要期望不费吹灰之力就编写自己的类,现在就去读一本关于Python的免费书,