Permalänk

pygame-python

Hej!
Undrar om det finns någon som kan hjälpa mig med min kod. Det är så att den bara hoppar spel intro samt skippar visa funktioner.
Och går endast till spel slinga. Skulle uppskata om det fanns någon som kunde se vad det är för fel på koden.
Tack på förhand

import pygame import time import random class Inställningar: def __init__(self): self.skärm_bredd = 800 self.skärm_höjd = 600 self.spelSkärm = pygame.display.set_mode((self.skärm_bredd, self.skärm_höjd)) #skärmen self.svart = (0,0,0) self.vit = (255,255,255) self.röd = (255,0,0) self.ljus_röd = (255,102,102) self.grön = (0,204,0) self.ljus_grön = (153,255,153) #färger self.spelfigur = pygame.image.load("mario1.png") self.bullet = pygame.image.load("bullet_1.png") self.font = pygame.font.SysFont(None, 25) self.mouse = pygame.mouse.get_pos() self.klick = pygame.mouse.get_pressed() def meddelande_skärm(self, text): #meddelande för skärmen, läge,teckensnitt,storlek och font storText = pygame.font.Font("SMB_font.ttf", 155) TextSurf, TextRect = self.text_föremål(text, storText) TextRect.center = ((self.skärm_bredd/2), (self.skärm_höjd/2)) self.spelSkärm.blit(TextSurf, TextRect) pygame.display.update() time.sleep(2) def text_föremål(self, text, font): #Textens färg textYta = font.render(text, True, self.svart) return textYta, textYta.get_rect() def knappar(self, sms, x, y, b, h, över_färg, utan_färg, action=None): #x=x-led #y=y-led #b=bredden #h=höjden #e_färg= färg efter #f_färg= färg före if x+b > self.mouse[0] > x and y+h > self.mouse[1] > y: pygame.draw.rect(self.spelSkärm, utan_färg, (x,y,b,h)) if self.klick [0] == 1 and action != None: action() else: pygame.draw.rect(self.spelSkärm, över_färg, (x,y,b,h)) litenText = pygame.font.Font("SMB_font.ttf", 20) TextSurf, TextRect = self.text_föremål(sms, litenText) TextRect.center = ( (x+(b/2)),(y + (h/2)) ) self.spelSkärm.blit(TextSurf, TextRect) def figur(self, x, y): #figurens läge self.spelSkärm.blit(self.spelfigur,(x,y)) def motståndare(self, bulletx, bullety, bulletb, bulleth): """infogar motståndare bullet och parameter starläge x och y samt motsåndares bredd och höjd""" #bullets = [pygame.image.load("bullet 1.png"), pygame.image.load("bullet 2.png")] self.spelSkärm.blit(self.bullet, [bulletx, bullety, bulletb, bulleth]) class Spel: def __init__(self, inst): self.inst = inst self.pause = False self.klocka = pygame.time.Clock() self.klick_ljud = pygame.mixer.Sound("smb_kick.wav") self.pause_ljud = pygame.mixer.Sound("smb_pause.wav") self.gameOver_ljud = pygame.mixer.Sound("krasch.wav") self.score_ljud = pygame.mixer.Sound("smb_coin.wav") self.musik = pygame.mixer.music.load("smb_medley.wav") self.intro_bakgrund = pygame.image.load("mario2s1.gif") #ljud och musik self.mouse = pygame.mouse.get_pos() self.klick = pygame.mouse.get_pressed() def hinder_undvikt(self, count): #räknar undvikta hinder font = pygame.font.SysFont(None, 25) text = font.render("Undvikt: "+str(count), True, self.inst.svart) self.inst.spelSkärm.blit(text,(0,0)) def time_out(self): #pausar programmet samt möjligheter att att spela vidare eller inte pygame.mixer.Sound.play(self.pause_ljud) pygame.mixer.music.pause() pygame.mixer.Sound.play(self.klick_ljud) #pausar bakgrundsmusik och spelar pauseljudet storText = pygame.font.Font("SMB_font.ttf", 155) TextSurf, TextRect = self.inst.text_föremål("Paused", storText) TextRect.center = ((self.inst.skärm_bredd/2), (self.inst.skärm_höjd/2)) self.inst.spelSkärm.blit(TextSurf, TextRect) #pause lokalisering samt utseende while self.pause: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() #gameDisplay.fill(white) self.inst.knappar("Fortsätt", (self.inst.skärm_bredd/2-60),370,120,50, self.inst.grön, self.inst.ljus_grön, self.time_in()) self.inst.knappar("Avsluta", (self.inst.skärm_bredd/2-60),470,120,50, self.inst.röd, self.inst.ljus_röd, self.avsluta_spel()) #knapparnas utseende samt text pygame.display.update() klocka.tick(15) def time_in(self): #återaktivera spelet self.pause pygame.mixer.music.unpause() pygame.mixer.Sound.play(self.klick_ljud) #self.pause = False def avsluta_spel(self): #avslutar spelet pygame.mixer.Sound.play(self.klick_ljud) pygame.quit() quit() def krasch(self): #Hanterar krasch ljud, text, valmöjligheter pygame.mixer.music.play(-1) pygame.mixer.music.stop() pygame.mixer.Sound.play(self.gameOver_ljud) storText = pygame.font.Font("SMB_font.ttf", 108) TextSurf, TextRect = self.inst.text_föremål("You crashed", storText) TextRect.center = ((self.inst.skärm_bredd/2), (self.inst.skärm_höjd/2)) self.inst.spelSkärm.blit(TextSurf, TextRect) #textens utseeend vid krasch while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() #gameDisplay.fill(white) self.inst.knappar("Nytt spel", (self.inst.skärm_bredd/2-60),350,120,50, self.inst.grön,self.inst.ljus_grön, self.spel_slinga()) self.inst.knappar("Avsluta", (self.inst.skärm_bredd/2-60),450,120,50, self.inst.röd, self.inst.ljus_röd, self.avsluta_spel()) #knappar som dyker upp vid krasch pygame.display.update() self.klocka.tick(15) def spel_intro(self): #hanterar intro-funktionen pygame.mixer.music.play(-1) intro = True while intro: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() self.inst.spelSkärm.blit(self.intro_bakgrund, [0,0]) storText = pygame.font.Font("SMB_font.ttf", 70) TextSurf, TextRect = self.inst.text_föremål("Dodge the bullet", storText) TextRect.center = ((self.inst.skärm_bredd/2), (self.inst.skärm_höjd/2)) self.inst.spelSkärm.blit(TextSurf, TextRect) #intr textens utseende self.inst.knappar("Start", (self.inst.skärm_bredd/2-60),350,120,50, self.inst.grön, self.inst.ljus_grön, self.spel_slinga()) self.inst.knappar("Avsluta", (self.inst.skärm_bredd/2-60),450,120,50, self.inst.röd, self.inst.ljus_röd, self.avsluta_spel()) #knapparnas utseende och uppgift pygame.display.update() self.klocka.tick(15) def spel_slinga(self): #spelslingans utseende och spelfunktioner self.pause pygame.mixer.Sound(self.klick_ljud) pygame.mixer.music.play(-1) spel_bakgrund = pygame.image.load("mario_b.png") x = random.randrange(0, self.inst.skärm_bredd) y = (self.inst.skärm_höjd * 0.78) #avgör spelfigurens startläge x_ändring = 0 y_ändring = 0 #startvärde för ändring av spelfigures läge i x och y figur_bredd = 67 figur_höjd = 132 #figurens storlek bullet_bredd = 63 bullet_höjd = 100 bullet_starty = -600 bullet_startx = random.randrange(0,self.inst.skärm_bredd) bullet_fart = 4 #var hindret startar och storlek undvikt = 0 spelExistens = False while not spelExistens: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x_ändring = -5 if event.key == pygame.K_RIGHT: x_ändring = 5 if event.key == pygame.K_p: self.pause = True self.time_out() if event.key == pygame.K_q: quit() if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: x_ändring = 0 if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: y_ändring = -5 if event.key == pygame.K_DOWN: y_ändring = 5 if event.type == pygame.KEYUP: if event.key == pygame.K_UP or event.key == pygame.K_DOWN: y_ändring = 0 #styr spelfigurens rörelse samt knapp för pausefunktion x += x_ändring y += y_ändring #nya värden för spelfigurens position efter styrning av tangentbordet self.inst.spelSkärm.blit(spel_bakgrund, [0,0]) #bakgrunden först, placerar bakgrund bakom figurerna och anger vad utgår ifrån self.inst.figur(x,y) #figurens värde i x och y-led self.inst.motståndare(bullet_startx, bullet_starty, bullet_bredd, bullet_höjd) bullet_starty += bullet_fart #moståndarens fuktion och startvärde self.hinder_undvikt(undvikt) #hämtar hinder undvikt fuktionen if x > self.inst.skärm_bredd - figur_bredd or x < 0: self.krasch() if y > self.inst.skärm_höjd - figur_höjd or y < 0: self.krasch() if bullet_starty > self.inst.skärm_höjd: bullet_starty = 0 - bullet_höjd bullet_startx = random.randrange(0, self.inst.skärm_bredd) undvikt +=1 pygame.mixer.Sound.play(self.score_ljud) bullet_fart +=1 if y < bullet_starty + bullet_höjd and y + bullet_höjd > bullet_starty: [i]#regelera vad som gäller för figuren i y-led så att den inte kraschar[/i] [color="#008000"][b]if[/b][/color] x [color="#666666"]>[/color] bullet_startx [color="#AA22FF"][b]and[/b][/color] x [color="#666666"]<[/color] bullet_startx [color="#666666"]+[/color] bullet_bredd [color="#AA22FF"][b]or[/b][/color] x [color="#666666"]+[/color] figur_bredd [color="#666666"]>[/color] bullet_startx [color="#AA22FF"][b]and[/b][/color] x [color="#666666"]+[/color] figur_bredd [color="#666666"]<[/color]bullet_startx [color="#666666"]+[/color] bullet_bredd: [color="#008000"]self[/color][color="#666666"].[/color]krasch() [color="#408080"][i]#fixar in bilden [/i][/color] pygame[color="#666666"].[/color]display[color="#666666"].[/color]update() [color="#408080"][i]#spelslingans utseende och spelfunktioner[/i][/color] pygame[color="#666666"].[/color]display[color="#666666"].[/color]update() [color="#008000"]self[/color][color="#666666"].[/color]klocka[color="#666666"].[/color]tick([color="#666666"]30[/color]) [color="#008000"][b]def[/b][/color] [color="#0000FF"]main[/color](): pygame[color="#666666"].[/color]init() Ins [color="#666666"]=[/color] Inställningar() Game [color="#666666"]=[/color] Spel(Ins) pygame[color="#666666"].[/color]display[color="#666666"].[/color]update() Game[color="#666666"].[/color]spel_intro() Game[color="#666666"].[/color]spel_slinga() pygame[color="#666666"].[/color]quit() main() quit()

Redigerar in [code]-taggar så att koden blir läslig. Bjuder på syntax highlighting :-)
Permalänk
Medlem

Skulle chansa på att detta är felet
self.inst.knappar("Start", (self.inst.skärm_bredd/2-60),350,120,50, self.inst.grön, self.inst.ljus_grön, self.spel_slinga())

Det funkar inte som du tror. Du kallar alltid på funktionen self.spel_slinga() när den raden körs. Kolla upp hur man skickar funktioner som argument i python så kan du nog lösa det.

Permalänk

Testade och ändrade det men den skippar ändå att visa menyn , samt använda knapparna funktioner. Programmet läser det men använder inte det.