Python __init_;()只接受3个参数(给定1个)?
它要求3个论点,我给了它一个。我该怎么再给它两次,你能解释一下怎么做吗?谢谢Python __init_;()只接受3个参数(给定1个)?,python,arguments,init,Python,Arguments,Init,它要求3个论点,我给了它一个。我该怎么再给它两次,你能解释一下怎么做吗?谢谢 import pygame, random, collisionObjects pygame.init() screen = pygame.display.set_mode((640,480)) class Pirate(pygame.sprite.Sprite): EAST = 0 def __init__(self, screen, dx): self.screen = sc
import pygame, random, collisionObjects
pygame.init()
screen = pygame.display.set_mode((640,480))
class Pirate(pygame.sprite.Sprite):
EAST = 0
def __init__(self, screen, dx):
self.screen = screen
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("king_pirate/running e0000.bmp")
self.image = self.image.convert()
tranColor = self.image.get_at((1, 1))
self.image.set_colorkey(tranColor)
self.rect = self.image.get_rect()
self.rect.inflate_ip(-50, -30)
self.rect.center = (0, random.randrange(30,450))
self.img = []
self.loadPics()
self.frame = 0
self.delay = 4
self.pause = self.delay
self.dx = dx
def update(self):
#set delay
self.pause -= 1
if self.pause <= 0:
self.pause = self.delay
self.frame += 1
if self.frame > 7:
self.frame = 0
self.image = self.img[self.frame]
self.rect.centerx += self.dx
if self.rect.centerx > self.screen.get_width():
self.rect.centerx = 0
self.rect.centery = random.randrange(30,450)
#load pictures
def loadPics(self):
for i in range(8):
imgName = "king_pirate/running e000%d.bmp" % i
tmpImg = pygame.image.load(imgName)
tmpImg.convert()
tranColor = tmpImg.get_at((0, 0))
tmpImg.set_colorkey(tranColor)
self.img.append(tmpImg)
class Pirate2(pygame.sprite.Sprite):
WEST = 0
def __init__(self, screen, dx):
self.screen = screen
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("pirate/running w0000.bmp")
self.image = self.image.convert()
tranColor = self.image.get_at((1, 1))
self.image.set_colorkey(tranColor)
self.rect = self.image.get_rect()
self.rect.inflate_ip(-50, -30)
self.rect.center = (640, random.randrange(20,460))
self.img = []
self.loadPics()
self.frame = 0
self.delay = 4
self.pause = self.delay
self.dx = dx
def update(self):
#set delay
self.pause -= 1
if self.pause <= 0:
self.pause = self.delay
self.frame += 1
if self.frame > 7:
self.frame = 0
self.image = self.img[self.frame]
self.rect.centerx -= self.dx
if self.rect.centerx < 0:
self.rect.centerx = self.screen.get_width()
self.rect.centery = random.randrange(20,460)
#load pictures
def loadPics(self):
for i in range(8):
imgName = "pirate/running w000%d.bmp" % i
tmpImg = pygame.image.load(imgName)
tmpImg.convert()
tranColor = tmpImg.get_at((0, 0))
tmpImg.set_colorkey(tranColor)
self.img.append(tmpImg)
#set up class for gold object,
class Gold(pygame.sprite.Sprite):
def __init__(self, screen, imageFile):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(imageFile)
self.image = self.image.convert()
self.rect = self.image.get_rect()
self.rect.centerx = random.randrange(0, screen.get_width())
self.rect.centery = random.randrange(0, screen.get_height())
#main character class
class Thief(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("thief2.gif")
self.image = self.image.convert()
tranColor = self.image.get_at((1, 1))
self.image.set_colorkey(tranColor)
self.rect = self.image.get_rect()
self.rect.inflate_ip(-15, -10)
self.rect.center = (30, (screen.get_height()-40))
self.dx = 30
self.dy = 30
if not pygame.mixer:
print("problem with sound")
else:
pygame.mixer.init()
self.collectcoin = pygame.mixer.Sound("collectcoin.wav")
self.hit = pygame.mixer.Sound("hit.ogg")
def update(self):
if self.rect.bottom > screen.get_height():
self.rect.centery = (screen.get_height()-40)
elif self.rect.top < 0:
self.rect.centery = 40
elif self.rect.right > screen.get_width():
self.rect.centerx = (screen.get_width()-30)
elif self.rect.left < 0:
self.rect.centerx = 30
#define movements
def moveUp(self):
self.rect.centery -= self.dy
def moveDown(self):
self.rect.centery += self.dy
def moveLeft(self):
self.rect.centerx -= self.dx
def moveRight(self):
self.rect.centerx += self.dx
def reset(self):
self.rect.center = (30, (screen.get_height()-40))
#set up a scoreboard
class Scoreboard(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.lives = 0
self.score = 0
self.font = pygame.font.SysFont("None", 40)
self.number = 0
#with a self updating label
def update(self):
self.text = "Damage: %d %% Gold Taken: %d" % (self.lives, self.score)
self.image = self.font.render(self.text, 1, (199,237,241))
self.rect = self.image.get_rect()
#define the game function
def game():
#set up background
background = pygame.Surface(screen.get_size())
background = pygame.image.load("sand.jpg")
background = pygame.transform.scale(background, screen.get_size())
screen.blit(background, (0, 0))
#initialize pirates & scoreboard sprites
pirate = Pirate()
scoreboard = Scoreboard()
#create two arrays for multiple gold object occurances
#two arrays are used for better distribution on screen
gold1 = []
numberofGold = 16
for i in range(numberofgolds):
oneGold = golds(screen,"gold1.png")
golds1.append(onegold)
for gold in golds1:
gold.rect.centerx = random.randrange(20,620)
gold.rect.centery = random.randrange(20,240)
gold.rect.inflate_ip(-5, -5)
gold2 = []
for i in range(numberofgolds):
onegold = golds(screen,"gold1.png")
golds2.append(onegold)
for gold in golds2:
gold.rect.centerx = random.randrange(20,620)
gold.rect.centery = random.randrange(250,460)
gold.rect.inflate_ip(-5, -5)
totalgolds = ((len(golds1)-1)+(len(golds2)-1))
#initialize gold sprites
goldSprites = pygame.sprite.Group(golds1,
#initialize pirate sprites & instances
pirate1 = pirate1(screen,13)
pirate2 = pirate2(screen,13)
pirate3 = pirate1(screen,11)
pirate4 = pirate2(screen,11)
pirate5 = pirate1(screen,13)
pirateSprites = pygame.sprite.Group(pirate1, pirate2, pirate3, pirate4, pirate5)
#use ordered updates to keep clean appearance
allSprites = pygame.sprite.OrderedUpdates(goldSprites, thief, pirateSprites, scoreboard)
#set up clock & loop
clock = pygame.time.Clock()
keepGoing = True
while keepGoing:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
thief.moveUp()
elif event.key == pygame.K_DOWN:
thief.moveDown()
elif event.key == pygame.K_LEFT:
thief.moveLeft()
elif event.key == pygame.K_RIGHT:
thief.moveRight()
elif event.key == pygame.K_ESCAPE:
keepGoing = False
#check collisions here
hitpirates = pygame.sprite.spritecollide(thief, pirateSprites, False)
hitgold = pygame.sprite.spritecollide(thief, goldSprites, True)
if hitpirates:
thief.hit.play()
scoreboard.lives += 1
if scoreboard.lives >= 100:
keepGoing = False
number = 0
if hitgolds:
thief.collectcoin.play()
scoreboard.score += 1
totalgolds -= 1
if totalgolds <= 0:
keepGoing = False
number = 1
#draw sprites
allSprites.clear(screen, background)
allSprites.update()
allSprites.draw(screen)
pygame.display.flip()
return scoreboard.score
return scoreboard.number
def instructions(score, number):
pygame.display.set_caption("Hunt for Gold!")
background = pygame.Surface(screen.get_size())
background = pygame.image.load("sand.jpg")
background = pygame.transform.scale(background, screen.get_size())
screen.blit(background, (0, 0))
if number == 0:
message = "Sorry try again..."
elif number == 1:
message = "The theif escapes!"
else:
message = "Onto the hunt for gold!"
insFont = pygame.font.SysFont("Calibri", 25)
insLabels = []
instructions = (
"Last score: %d" % score ,
"%s" % message,
"",
"GOLD!",
"Get all the gold before you are "
"obliterated!",
"Use arrow keys to move the thief.",
"Space to start, Esc to quit."
)
for line in instructions:
tempLabel = insFont.render(line, 1 , (0,0,0))
insLabels.append(tempLabel)
#set up homescreen loop
keepGoing = True
clock = pygame.time.Clock()
while keepGoing:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
donePlaying = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
keepGoing = False
donePlaying = False
if event.key == pygame.K_ESCAPE:
keepGoing = False
donePlaying = True
for i in range(len(insLabels)):
screen.blit(insLabels[i], (50, 30*i))
pygame.display.flip()
return donePlaying
#define main function
def main():
donePlaying = False
score = 0
message = ""
while not donePlaying:
donePlaying = instructions(score, message)
if not donePlaying:
score = game()
else:
pygame.quit()
if __name__ == "__main__":
main()
导入pygame、随机、碰撞对象
pygame.init()
screen=pygame.display.set_模式((640480))
海盗类(pygame.sprite.sprite):
东=0
定义初始化(自身、屏幕、dx):
self.screen=屏幕
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“king_pirate/running e0000.bmp”)
self.image=self.image.convert()
tranColor=self.image.get_at((1,1))
self.image.set_colorkey(tranColor)
self.rect=self.image.get_rect()
自校正充气(ip(-50,-30)
self.rect.center=(0,random.randrange(30450))
self.img=[]
self.loadPics()
self.frame=0
self.delay=4
self.pause=self.delay
self.dx=dx
def更新(自我):
#设置延迟
self.pause-=1
如果self.7:
self.frame=0
self.image=self.img[self.frame]
self.rect.centerx+=self.dx
如果self.rect.centerx>self.screen.get_width():
self.rect.centerx=0
self.rect.centery=random.randrange(30450)
#加载图片
def loadPics(自):
对于范围(8)中的i:
imgName=“king_pirate/running e000%d.bmp”%i
tmpImg=pygame.image.load(imgName)
tmpImg.convert()
tranColor=tmpImg.get_at((0,0))
tmpImg.set_颜色键(tranColor)
self.img.append(tmpImg)
类别2(pygame.sprite.sprite):
西=0
定义初始化(自身、屏幕、dx):
self.screen=屏幕
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“海盗/running w0000.bmp”)
self.image=self.image.convert()
tranColor=self.image.get_at((1,1))
self.image.set_colorkey(tranColor)
self.rect=self.image.get_rect()
自校正充气(ip(-50,-30)
self.rect.center=(640,random.randrange(20460))
self.img=[]
self.loadPics()
self.frame=0
self.delay=4
self.pause=self.delay
self.dx=dx
def更新(自我):
#设置延迟
self.pause-=1
如果self.7:
self.frame=0
self.image=self.img[self.frame]
self.rect.centerx-=self.dx
如果self.rect.centerx<0:
self.rect.centerx=self.screen.get_width()
self.rect.centery=random.randrange(20460)
#加载图片
def loadPics(自):
对于范围(8)中的i:
imgName=“盗版/运行w000%d.bmp”%i
tmpImg=pygame.image.load(imgName)
tmpImg.convert()
tranColor=tmpImg.get_at((0,0))
tmpImg.set_颜色键(tranColor)
self.img.append(tmpImg)
#为黄金对象设置类,
类别金牌(pygame.sprite.sprite):
def _;初始化_;(自身、屏幕、图像文件):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(imageFile)
self.image=self.image.convert()
self.rect=self.image.get_rect()
self.rect.centerx=random.randrange(0,screen.get_width())
self.rect.centery=random.randrange(0,screen.get_height())
#主角类
类小偷(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“thief2.gif”)
self.image=self.image.convert()
tranColor=self.image.get_at((1,1))
self.image.set_colorkey(tranColor)
self.rect=self.image.get_rect()
自校正充气仪表板(-15,-10)
self.rect.center=(30,(screen.get_height()-40))
self.dx=30
self.dy=30
如果不是pygame.mixer:
打印(“声音问题”)
其他:
pygame.mixer.init()
self.collectcoin=pygame.mixer.Sound(“collectcoin.wav”)
self.hit=pygame.mixer.Sound(“hit.ogg”)
def更新(自我):
如果self.rect.bottom>screen.get_height():
self.rect.centery=(screen.get_height()-40)
elif self.rect.top<0:
self.rect.centery=40
elif self.rect.right>screen.get_width():
self.rect.centerx=(screen.get_width()-30)
elif self.rect.left<0:
self.rect.centerx=30
#定义运动
def移动(自):
self.rect.centery-=self.dy
def向下移动(自):
self.rect.centery+=self.dy
def左移(自):
self.rect.centerx-=self.dx
def右移动(自身):
self.rect.centerx+=self.dx
def重置(自):
self.rect.center=(30,(screen.get_height()-40))
#设立记分牌
班级记分板(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.lifes=0
self.score=0
self.font=pygame.font.SysFont(“无”,40)
self.number=0
#具有自我更新标签
def更新(自我):
self.text=“伤害:%d%%金币获得:%d%%(self.lifes,self.score)
self.image=self.font.render(self.text,1,(199237241))
self.rect=self.image.get_rect()
#定义游戏功能
def game():
#设置背景
background=pygame.Surface(screen.get_size())
background=pygame.image.load(“sand.jpg”)
background=pygame.transform.scale(背景、屏幕、获取大小())
屏幕光点(背景,(0,0))
#初始化海盗和记分牌精灵
海盗
记分牌
#为多个黄金对象事件创建两个数组
#两个阵列用于更好地在屏幕上分布
gold1=[]
numberofGold=16
对于范围内的i(黄金数量):
oneGold=golds(屏幕,“gold1.png”)
golds1.追加(onegold)
pirate = Pirate()
pirate = Pirate(pygame.display.get_surface(), 60)