-4

私は友人と一緒にこのゲームを作成しており、ランダムな量の敵を生成してプレイヤーを追跡しようとしていますが、何が起こるかは次のとおりです。

私の主なスクリプト

#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()

したがって、stop は変数で、乱数を選択し、while True の部分に別の while ループがあり、stop が 0 未満になるまで続きます。while ループでは、敵の関数が実行されますが、気に入りません。 .

エラーは次のとおりです。

>>> ================================ 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)
>>> 
4

1 に答える 1

1

クラスとその使用方法には、少なくとも 2 つの重大な問題があります。などのクラスのインスタンスと呼ばれるものを宣言する必要がありますbadGuy = Enemy()。の定義ではclass Enemy()、呼び出されるパラメーターを持つメンバー関数が必要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.

クラスがいかに便利であるかがわかったので、クラスについてできる限りのことを学んでください。

于 2013-10-18T02:11:55.940 に答える