繁体   English   中英

如何让我的崩溃功能重新启动我的游戏?

[英]how do I make my crash function restart my game?

所以我一直试图让我的崩溃功能在玩家的直播达到 0 时重新启动我的整个游戏,但它不起作用

https://gyazo.com/3a039c5d9af3a6868c278c39939314cf

正如您从视频中看到的那样,它只会在它达到 0 时重新启动我的生活,而且它会快速显示“您崩溃了”的文本,但我希望它显示一点,然后重新启动我的游戏。 我试过用崩溃函数调用 main_loop 但这不会改变任何东西我也试过把调用崩溃函数的代码放在我的开始屏幕上方,但没有奏效。

这是我为重启游戏功能写的

black = (0,0,0)
def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',25)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((500/2),(500/2))
    window.blit(TextSurf, TextRect)

    pygame.display.update()
    main_loop()
    time.sleep(2)

我的完整代码还写了一个 if state-mate 关于如果我的死亡 < 1 我希望它重新启动我的游戏,但它只会重新启动我的生活

import pygame,time
pygame.init()

#screen
window = pygame.display.set_mode((500,500))

#set name
pygame.display.set_caption("Noobs First Game")

bg = pygame.image.load("leafy_background.jpg")
mad1 = pygame.image.load("MAD1.png")
mad2 = pygame.image.load("MAD2.png")
happy1 = pygame.image.load("happytext1.png")
happy2 = pygame.image.load("happytext2.png")
happy3 = pygame.image.load("happytext3.png")
hapad = pygame.image.load("happymadtext1.png")
end =  pygame.image.load("endtext1.png")
ss1 = pygame.image.load("Coin2.png")
ss1 = pygame.transform.scale(ss1,(ss1.get_width()//12,ss1.get_height()//12))
ss2 = pygame.image.load("HP.png")
ss2 = pygame.transform.scale(ss2,(ss2.get_width()//5,ss2.get_height()//5))

black = (0,0,0)
def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',25)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((500/2),(500/2))
    window.blit(TextSurf, TextRect)

    pygame.display.update()
    main_loop()
    time.sleep(2)


    
    

def crash():
    message_display('You Crashed')
    
class player:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.speed = 6
        self.isJump = False
        self.JumpCount = 10
        self.fall = 0
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("Me1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//8,self.ss1.get_height()//8))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        player_rect = self.ss1.get_rect(center = self.rect.center)  # the player_image << put your image like self.image
        player_rect.centerx += +2 # 10 is just an example
        player_rect.centery += -6# 15 is just an example
        window.blit(self.ss1, player_rect) # change the player_image to your image like self.image


class platform:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("Dirt.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//7,self.ss1.get_height()//7))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        platform_rect = self.ss1.get_rect(center = self.rect.center)  # the player_image << put your image like self.image
        platform_rect.centerx += +2 # 10 is just an example
        platform_rect.centery += -3# 15 is just an example
        window.blit(self.ss1, platform_rect)

class wall:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

    


class spike:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("Spike.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//2,self.ss1.get_height()//3))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        spike_rect = self.ss1.get_rect(center = self.rect.center)  # the player_image << put your image like self.image
        spike_rect.centerx += +10 # 10 is just an example
        spike_rect.centery += -16# 15 is just an example
        window.blit(self.ss1, spike_rect)


class ice:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.speed = 7
        self.ss1 = pygame.image.load("ice.png")
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//1,self.ss1.get_height()//1))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)
       

        
        fall_rect = self.ss1.get_rect(center = self.rect.center)
        fall_rect.centery += 2
        fall_rect.centerx += 1
        window.blit(self.ss1, fall_rect)



class coin:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.ss1 = pygame.image.load("Coin2.png")
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//10,self.ss1.get_height()//10))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        coin_rect  = self.ss1.get_rect(center = self.rect.center)
        coin_rect.centery -= 1
        coin_rect.centerx -= 1
        window.blit(self.ss1,coin_rect)


class recta:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y =y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
    def draw(self):
        self.rect.topleft = (self.x, self.y)

class pike:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("Spike2.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//2,self.ss1.get_height()//3))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        pike_rect = self.ss1.get_rect(center = self.rect.center)  # the player_image << put your image lik self.image
        pike_rect.centerx += +10 # 10 is just an example
        pike_rect.centery += -12# 15 is just an example
        window.blit(self.ss1, pike_rect)


class live:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("HP.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//4,self.ss1.get_height()//4))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        pike_rect = self.ss1.get_rect(center = self.rect.center)  # the player_image << put your image lik self.image
        pike_rect.centerx += -5 # 10 is just an example
        pike_rect.centery += -30# 15 is just an example
        window.blit(self.ss1, pike_rect)       




#draw player
white = (255,255,255) 
player1 = player(0,400,40,40,white)

darkred = (200,0,0)

darkgreen = (0,200,0)

green = (0,255,0)

red = (255,0,0)

black = (0,0,0)

#PLATFORM
platform1 = platform(0,0,400000,30,black)
platform2 = platform(0,470,400000,30,black)

#WALLS
wall1 = wall(0,0,40000,30,black)
wall2 = wall(0,470,40000,30,black)

#SPIKES
spike1 = spike(400,436,15,35,white)
spike2 = spike(200,436,15,35,white)

#ICE
ice1 = ice(13250,70,25,95,white)
ice2 = ice(13300,70,25,95,white)
ice3 = ice(13350,70,25,95,white)
ice4 = ice(13400,70,25,95,white)

#COINS
coin1 = coin(100,200,35,50,white)
coin2 = coin(100,200,35,50,white)

#RECTA
recta1 = recta(13200,0,600,600,white)
recta2 = recta(34000,0,400,600,white)
recta3 = recta(34450,0,400,600,white)
recta4 = recta(43000,0,400,600,white)
recta5 = recta(43450,0,400,600,white)
recta6 = recta(43900,0,400,600,white)
recta7 = recta(44250,0,500,600,white)
recta8 = recta(44800,0,500,600,white)

#SECOND SPIKES
pike1 = pike(799,799,1,1,white)
pike2 = pike(799,799,1,1,white)

live1 = live(43000,350,30,30,white)
live2 = live(900,900,1,1,white)

platforms = [platform1,platform2]
walls = [wall1,wall2]
spikes = [spike1,spike2]
ices = [ice1,ice2,ice3,ice4]
coins = [coin1,coin2]
rectas = [recta1,recta2,recta3,recta4,recta5,recta6,recta7,recta8]
pikes = [pike1,pike2]
lives = [live1,live2]


# MY GAME AND HOW IT LOOKS LIKE
platformGroup = pygame.sprite.Group
level = [
"                                                                                                                                                                                                             ",
"                                                                                                                                                                                                                                                                               ",
"                                                                                                                                                                                                                                                               ",
"                                                                                                                                                                                                                            ",
"                                                                                                                                                                cccc                                                                                                                                                                                                                                                                                                                             c  c                                                                                                                                                                                                                                            psssss               ",
"                                                                                                                                                                c                                                                                                                                                                                                                                                                                                                             c  p  p  pssss                                                                                          p  p  p  p                                                                                                                              p                                                     ",
"                                                                                                               y   y       y   y                                c                                                                                                                              c  c   c                                                                              c     c             y                                                                       c   c  c     p                                                                                                    p                                                                                                                       cccccccccc  p                                               ",
"                                                                                  cc                             c  c  c  c  c                                  cccc                                                                     c   c  c                 c  c   c                                                                                                              p  p  p     c                                                                       c  p  p  p  p  p                                                                 cccccc                    p  p  p  p                                                                                                                          p  p  p  p                                                                                ",                        
"                                                    c  c  c  c                      c                                                            y   y          c                  c   c  c  c        y  y  y                            c   c  c                                            p  p  p  p    c                   y        y      y  y  y          yy   yy         c    p           p  p  p    c            c                            y   y   y             p                 p                                                              cccccc   y             p              p                                                                     y  y  y  y  y                                  p              p                               y   y                           ",
"                             p        y           p  p  p  p  p                ccccccc                         p  p  p  p  p  p  p          p                   c               p   y   y   y                                            ccccc  c               p  p  p  p     c          p   ss ss ss   p                                                                        p                      p  p  p         p                                            c  p                       p                                            p              cccccc              p                    psssss                                                       p                                                 p                    pssss                    p                            ",
"               c  c       p      c    c     k  p                   yyyyyyy          c      yy   yyyy        p                        k   p                      cccc          p                         c  c      yyyyyy    yyyyyyy      c   c  c            p              p          p                   s p    c    c         yyyyy          c   c       c c c c c c       cp                                      p    ss   yyyyyyy   yyyyyyy       c   c         p                             p              y    y    y             p     p    k      cccccc           p                                                           y   y   y   y   y     p                       c             k           p                    yyyyyyyy   yyyyyyy       p                                                              ",
"             s  s  s    p   ssss  c s  s     p    s s s s s s s      c c c        cc     s c  sc  c  s   p      s  s  s  s  s  s  s   p   s s    s   s   s  s  s  s  s  s  p           s   s k  s     s  s  s             s          s   c   c  c     k   p     s s s s s s s s     p     s s s s s s s s       s  s  s  s   k s   c c  s     s  s  s       p cs    s       p      s  s  s  s s s s s s s s s s    p            c c  c  s  c  c   s   s   s   s k  p     s s s s s s s s s s s ss      ccccccc   s    s    s      s  s  s           s  s  s  cccccc   s    p     s s s s s s s s s s s                                  s   s   s   s   s    p           s  s  s  s  s  c  s  s  s  s  s   s   p     sssssssssss                s         s  p                                                             ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss",] 


for iy, row in enumerate(level):
    for ix, col in enumerate(row):
        if col == "p":
            new_platforms = platform(ix*57, iy*41.2, 50,20,(255, 255, 255))
            platforms.append(new_platforms)
for iy, row in enumerate(level):
    for ix, col in enumerate(row):
        if col == "s":
            new_spikes = spike(ix*57, iy*39.7, 15, 35,(255, 255, 255))
            spikes.append(new_spikes)
for iy, row in enumerate(level):
    for ix, col in enumerate(row):
        if col == "c":
            new_coins = coin(ix*57, iy*39.7, 15, 55,(255, 255, 255))
            coins.append(new_coins)
for iy, row in enumerate(level):
    for ix, col in enumerate(row):            
        if col == "y":
            new_pikes = pike(ix*57, iy*39.7, 15, 30,(255, 255, 255))
            pikes.append(new_pikes)

for iy, row in enumerate(level):
    for ix, col in enumerate(row):            
        if col == "k":
            new_lives = live(ix*57, iy*39.7, 30, 30,(255, 255, 255))
            lives.append(new_lives)


fps = (30)
clock = pygame.time.Clock()
    
pause = False

        
#################
def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def button(msg,x,y,w,h,ic,ac,action=None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    #print(click)
    if x+w > mouse[0] > x and y+h > mouse[1] > y:
        pygame.draw.rect(window, ac,(x,y,w,h))

        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(window, ic,(x,y,w,h))

    smallText = pygame.font.SysFont("comicsansms",20)
    textSurf, textRect = text_objects(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    window.blit(textSurf, textRect)

def quitgame():
    pygame.quit()

def unpause():
    global pause
    pause = False
    
def paused():

    largeText = pygame.font.SysFont("comicsansms",115)
    TextSurf, TextRect = text_objects("Paused", largeText)
    TextRect.center = ((500/2),(500/2))
    window.blit(TextSurf, TextRect)
    

    while pause:
        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
                
        

        button("Can Run",100,350,100,50,green,darkgreen,unpause)
        button("Sit",300,350,100,50,red,darkred,quitgame)
        
        pygame.display.update()
        clock.tick(15)


        
    
def game_intro():

    intro = True

    while intro:
        for event in pygame.event.get():
            #print(event)
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        window.fill((255,255,255))
        largeText = pygame.font.Font('freesansbold.ttf',60)
        TextSurf, TextRect = text_objects("ULTIMATE DASH", largeText)
        TextRect.center = ((500/2),(500/2))
        window.blit(TextSurf, TextRect)

        button("Run!",100,350,100,50,green,darkgreen,main_loop)
        button("Sit!",300,350,100,50,red,darkred,quitgame)

        pygame.display.update()
        clock.tick(15)
     
############################################




def main_loop():
    global pause

    
    #redraw
    def redrawwindow():
        window.fill((0,0,0))
        window.blit(bg,(0,0))
        

                    
        

    #draw olayer
        player1.draw()
        for platform in platforms:
            platform.draw()
        for wall in walls:
            wall.draw()
        for ice in ices:
            ice.draw()
        for recta in rectas:
            recta.draw()
        


     # the score draw it on the screen
        window.blit(text,textRect)
        window.blit(talk,talkRect)

        for spike in spikes:
            spike.draw()
        for coin in coins:
            coin.draw()
        for pike in pikes:
            pike.draw()
        for live in lives:
            live.draw()



    #THE FONT AND NAMES
    font  = pygame.font.Font("freesansbold.ttf",30)
    score = 0
    text = font.render(" = "+str(score),True,(0,0,0))
    textRect = text.get_rect()
    textRect.center = ((100,50))


    font  = pygame.font.Font("freesansbold.ttf",30)
    deaths = 5
    talk = font.render(" = "+str(deaths),True,(0,0,0))
    talkRect = talk.get_rect()
    talkRect.center = ((100,90))



    #MAIN LOOP
    run = True
    while run:
        clock.tick(fps)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                
    #     LIVES AND SPIKE
        lstdel = []
        for i,spk in enumerate(spikes):
            if spk.rect.left > 500 or spk.rect.left < 0: continue  # off screen
            if player1.rect.colliderect(spk.rect):
                if deaths > 0:
                    deaths -= 1
                    talk = font.render(" = "+str(deaths),True,(0,0,0))
                    talkRect.center = ((100,90))
                    lstdel.append(i)
        for i in lstdel[::-1]:
            del spikes[i]  #delete from end
      
        lstdel = []
        for i,pk in enumerate(pikes):
            if pk.rect.left > 500 or pk.rect.left < 0: continue  # off screen
            if player1.rect.colliderect(pk.rect):
                if deaths > 0:
                    deaths -= 1
                    talk = font.render(" = "+str(deaths),True,(0,0,0))
                    talkRect.center = ((100,90))
                    lstdel.append(i)
        for i in lstdel[::-1]:
            del pikes[i]  #delete from end
      
        lstdel = []
        for i, lv in enumerate(lives):
            if lv.rect.left > 500 or lv.rect.left < 0: continue  # off screen
            if player1.rect.colliderect(lv.rect):
                if deaths > 0:
                    deaths += 1
                    talk = font.render(" = "+str(deaths),True,(0,0,0))
                    talkRect.center = ((100,90))
                    lstdel.append(i)
        for i in lstdel[::-1]:
            del lives[i]
            
        #ADDING TO COIN +1
        for coin in coins:
            for one in range(len(coins)-1,-1,-1):
                if player1.rect.colliderect(coins[one].rect):
                    del coins[one]
                    score += 1
                    text = font.render(" = "+str(score),True,(0,0,0))
                    textRect.center = ((100,50))

        

        if deaths < 1:
            crash()

            
        #moving keys
        keys = pygame.key.get_pressed()


        player1.x += player1.speed

        if keys[pygame.K_p]:
            pause = True
            paused()

        #WHAT MAKES ICEBURG FALL
        for ice in ices:
            if player1.rect.colliderect(recta1.rect):
                ice.y += 3


            


        
        #WHAT MAKES EVEYTHING NOT FOLLOW THE PLAYER    
        if player1.x > 250:
            player1.x -= player1.speed
            for platform in platforms:
                platform.x -= player1.speed
            for spike in spikes:
                spike.x -= player1.speed
            for ice in ices:
                ice.x -= player1.speed
            for recta in rectas:
                recta.x -= player1.speed
            for pike in pikes:
                pike.x -= player1.speed
            for coin in coins:
                coin.x -= player1.speed
            for live in lives:
                live.x -= player1.speed



         #FALLING   
        if not player1.isJump:
            player1.y += player1.fall
            player1.fall += 1
            player1.isJump = False



                
            #COLLIDE WITH PLATFORM
            collide = False
            for platform in platforms:
                if player1.rect.colliderect(platform.rect):
                    collide = True
                    player1.isJump = False
                    player1.y = platform.rect.top - player1.height + 1
                    if player1.rect.right > platform.rect.left and player1.rect.left < platform.rect.left - player1.width:
                        player1.x = platform.rect.left - player1.width
                    if player1.rect.left < platform.rect.right and player1.rect.right > platform.rect.right + player1.width:
                        player1.x = platform.rect.right
                                  

                #COLLIDE
                if player1.rect.bottom >= 500:
                    collide = True
                    player1.isJump = False
                    player1.JumpCount = 8
                    player1.y = 500 - player1.height

                    
            #KEY FOR SPACEBAR
            if collide:
                if keys[pygame.K_SPACE]:
                    player1.isJump = True
                player1.fall = 0


        #JUMP COUNT
        else:
            if player1.JumpCount >= 0:
                player1.y -= (player1.JumpCount*abs(player1.JumpCount))*0.2
                player1.JumpCount -= 1
            else:
                player1.JumpCount = 10
                player1.isJump = False
            


    #END OF GAME            
        redrawwindow()
        

        # TEXT THAT CORATOR IS SAYING
        if player1.rect.colliderect(recta2):
            window.blit(mad1,(100,170))
            
        if player1.rect.colliderect(recta3):
            window.blit(mad2,(100,170))

        if player1.rect.colliderect(recta4):
            window.blit(happy1,(100,100))

        if player1.rect.colliderect(recta5):
            window.blit(happy2,(100,100))    

        if player1.rect.colliderect(recta6):
            window.blit(happy3,(100,100))

        if player1.rect.colliderect(recta7):
            window.blit(hapad,(100,100))

        if player1.rect.colliderect(recta8):
            window.blit(end,(100,100))

        window.blit(ss1,(30,25))
        
        window.blit(ss2,(-40,-20))
            
        pygame.display.update()
    pygame.quit()
    unpause()
game_intro()
main_loop()



需要做的事情才能重新启动您的游戏。

  • 初始化变量的代码应该放在一个函数中,以便可以调用它来重新启动游戏。
  • 在主循环中,当调用crash时,也应该return退出游戏循环。

请注意,我将文件合并在一起进行测试。

以下是变化......

在 pygame 调用(图像加载)之后:

white=None; player1=None; darkred=None; darkgreen=None; green=None; red=None; black=None; platform1=None; platform2=None; wall1=None; wall2=None; spike1=None; spike2=None
ice1=None; ice2=None; ice3=None; ice4=None; coin1=None; coin2=None; recta1=None; recta2=None; recta3=None; recta4=None; recta5=None; recta6=None; recta7=None; recta8=None
pike1=None; pike2=None; live1=None; live2=None; platforms=None; walls=None; spikes=None; ices=None; coins=None; rectas=None; pikes=None; lives=None; platformGroup=None

black = (0,0,0)
darkred = (200,0,0)
darkgreen = (0,200,0)
green = (0,255,0)
red = (255,0,0)
black = (0,0,0)

直播课后:

def SetupGame():
    global white, player1, darkred, darkgreen, green, red, black, platform1, platform2, wall1, wall2, spike1, spike2
    global ice1, ice2, ice3, ice4, coin1, coin2, recta1, recta2, recta3, recta4, recta5, recta6, recta7, recta8
    global pike1, pike2, live1, live2, platforms, walls, spikes, ices, coins, rectas, pikes, lives, platformGroup 

    #draw player
    white = (255,255,255) 
    player1 = player(0,400,40,40,white)

    .............

    for iy, row in enumerate(level):
        for ix, col in enumerate(row):            
            if col == "k":
                new_lives = live(ix*57, iy*39.7, 30, 30,(255, 255, 255))
                lives.append(new_lives)

在游戏循环中

def main_loop():
    SetupGame()  # initialize variables
    global pause

    ..........

    if deaths < 1:
        crash()
        sleep(2)  # 2 seconds
        return  # restart game

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM