我的代码有问题。它会直接跳到游戏循环(spel_slinga,在我的游戏中)并且不会向我显示介绍菜单(spel_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()