Pygame跳过方法

2024-05-23 20:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有问题。它直接跳入游戏循环(spel\u slinga,在我的游戏中),不向我显示简介菜单(spel\u intro),当你点击按钮时按钮也不起作用。如果有人能看到我的代码有什么问题,并帮助我修复它,我将是一个快乐的人。 //埃米尔

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("rickgun3.png")
        self.zombie = pygame.image.load("zombie_huvud.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, zombiex, zombiey, zombieb, zombieh):
        """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.zombie, [zombiex, zombiey, zombieb, zombieh])    

class Spel:

    def __init__(self, inst):
        self.inst = inst
        self.pause = False
        self.klocka = pygame.time.Clock()
        self.klick_ljud = pygame.mixer.Sound("klick_ljud.wav")
        self.pause_ljud = pygame.mixer.Sound("paus_skrik.wav")
        self.gameOver_ljud = pygame.mixer.Sound("memo 1.wav")
        self.score_ljud = pygame.mixer.Sound("gunscore.wav")
        self.musik = pygame.mixer.music.load("spelmusik.wav")
        self.intro_bakgrund = pygame.image.load("walking_intro.jpg")
        #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.MOUSEBUTTONDOWN:

                    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()
            self.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", 80)
        TextSurf, TextRect = self.inst.text_föremål("Welcome to the walking dead", 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
        krasch = False
        while not krasch:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    krasch = True

            #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("Stay Alive", 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("Starta", (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("spel_walking.jpg")

        x = random.randrange(0, self.inst.skärm_bredd)
        y = (self.inst.skärm_höjd - 188 )
        #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 = 75
        figur_höjd = 188
        #figurens storlek

        zombie_bredd = 120
        zombie_höjd = 194
        zombie_starty = -600
        zombie_startx = random.randrange(0,self.inst.skärm_bredd)
        zombie_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(zombie_startx, zombie_starty, zombie_bredd, zombie_höjd)
            zombie_starty += zombie_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 zombie_starty > self.inst.skärm_höjd:
                zombie_starty = 0 - zombie_höjd
                zombie_startx = random.randrange(0, self.inst.skärm_bredd-zombie_bredd)
                undvikt +=1
                pygame.mixer.Sound.play(self.score_ljud)
                zombie_fart +=1


            if y < zombie_starty + zombie_höjd and y + zombie_höjd > zombie_starty:
                #regelera vad som gäller för figuren i y-led så att den inte kraschar


                if x >zombie_startx and x < zombie_startx + zombie_bredd or x + figur_bredd > zombie_startx and x + figur_bredd <zombie_startx + zombie_bredd:
                    self.krasch()

            #fixar in bilden                
            pygame.display.update()
            #spelslingans utseende och spelfunktioner





        pygame.display.update()
        self.klocka.tick(30)


def main():
    pygame.init()
    Ins = Inställningar()
    Game = Spel(Ins)
    pygame.display.update()

##    while self.pause:
##            for event in pygame.event.get():
##                if event.type == pygame.QUIT:
##                    pygame.quit()
##                    quit()
    Game.spel_intro()
    Game.spel_slinga()


main()    

Tags: rmselfeventifdefpygamejdsk