python - __init__() takes exactly 3 arguments (1 given)? -
it asking 3 arguments , have given one. how give 2 more , explain how well? thanks
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): in range(8): imgname = "king_pirate/running e000%d.bmp" % 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): in range(8): imgname = "pirate/running w000%d.bmp" % tmpimg = pygame.image.load(imgname) tmpimg.convert() trancolor = tmpimg.get_at((0, 0)) tmpimg.set_colorkey(trancolor) self.img.append(tmpimg) #set class 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 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 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 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 game function def game(): #set 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 2 arrays multiple gold object occurances #two arrays used better distribution on screen gold1 = [] numberofgold = 16 in range(numberofgolds): onegold = golds(screen,"gold1.png") golds1.append(onegold) gold in golds1: gold.rect.centerx = random.randrange(20,620) gold.rect.centery = random.randrange(20,240) gold.rect.inflate_ip(-5, -5) gold2 = [] in range(numberofgolds): onegold = golds(screen,"gold1.png") golds2.append(onegold) 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 keep clean appearance allsprites = pygame.sprite.orderedupdates(goldsprites, thief, piratesprites, scoreboard) #set clock & loop clock = pygame.time.clock() keepgoing = true while keepgoing: clock.tick(30) 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 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 hunt gold!" insfont = pygame.font.sysfont("calibri", 25) inslabels = [] instructions = ( "last score: %d" % score , "%s" % message, "", "gold!", "get gold before " "obliterated!", "use arrow keys move thief.", "space start, esc quit." ) line in instructions: templabel = insfont.render(line, 1 , (0,0,0)) inslabels.append(templabel) #set homescreen loop keepgoing = true clock = pygame.time.clock() while keepgoing: clock.tick(30) 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 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()
glancing @ code, line:
pirate = pirate()
your pirate
class expects self
, screen
, dx
. implicitly provide self
.
i can guess @ want, since don't know off bat dx
supposed mean in respect game, @ least avoid error:
pirate = pirate(pygame.display.get_surface(), 60)
Comments
Post a Comment