Кнопка продолжения не работает, когда игра приостановлена

#pygame #python-3.6

#pygame #python-3.6

Вопрос:

Я создал игру, в которой вам нужно уворачиваться от объектов. Вы также можете приостановить игру, нажав p. После того, как вы приостановите игру, вы получите выбор, хотите ли вы продолжить или выйти. Для меня кнопка выхода работает, а кнопка продолжения — нет. Там, где написано define unpause(), начинается код для кнопки паузы.

 import time
import random

pygame.init()

display_width = 800
display_height = 600

red = (200,0,0)
orange = (255, 165, 0)
yellow = (255, 242, 0)
green = (0,200,0)
blue = (0,0,255)
indigo = (75, 0, 130)
violet = (238, 130, 238)
black = (0,0,0)
white = (255,255,255)


bright_red = (255,0,0)
bright_green = (0,255,0)


car_width = 86

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Racing Game")
clock = pygame.time.Clock()

carImg = pygame.image.load("download.png")
carImg = pygame.transform.scale(carImg,(100,160))

pause = False

def things_dodged(count):
    font = pygame.font.SysFont(None, 25)
    text = font.render ("Dodged: " str(count), True, black)
    gameDisplay.blit(text,(0,0))

def things(thingx, thingy, thingw, thingh, color):
    pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh])

def car(x,y):
    gameDisplay.blit(carImg, (x,y))

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",100)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update()

    game_loop()

    time.sleep(2000)


def crash():
    message_display ("YOU CRASHED")

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(gameDisplay, ac, (x,y,w,h))
        if click[0] == 1 and action != None:
            if action == "play":
                game_loop()

            elif action == "quit":
                pygame.quit()
                quit()


    else:
        pygame.draw.rect(gameDisplay, ic, (x,y,w,h))

    smallText = pygame.font.Font("freesansbold.ttf",20)
    textSurf, textRect = text_objects(msg, smallText) 
    textRect.center = ( (x (w/2)), (y (h/2)) )
    gameDisplay.blit(textSurf, textRect)

def quitgame():
    pygame.quit()
    quit

def unpause():
    global pause
    pause = False


def paused():
    while paused:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        gameDisplay.fill(white)
        largeText = pygame.font.Font("freesansbold.ttf",100)
        TextSurf, TextRect = text_objects("PAUSED", largeText)
        TextRect.center = ((display_width/2),(display_height/2))
        gameDisplay.blit(TextSurf, TextRect)


        button ("Continue!",150,450,100,50,green,bright_green,unpause)
        button ("Quit!",550,450,100,50,red,bright_red,"quit")





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




def game_intro():
    intro = True
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        gameDisplay.fill(white)
        largeText = pygame.font.Font("freesansbold.ttf",100)
        TextSurf, TextRect = text_objects("Racing Game", largeText)
        TextRect.center = ((display_width/2),(display_height/2))
        gameDisplay.blit(TextSurf, TextRect)


        button ("GO!",150,450,100,50,green,bright_green,"play")
        button ("QUIT!",550,450,100,50,red,bright_red,"quit")





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



def game_loop():
    global pause
    x = (display_width * 0.45)
    y = (display_height * 0.72)

    x_change = 0

    thing_startx = random.randrange(0, display_width)
    thing_starty = -600
    thing_speed = 7
    thing_width = 100
    thing_height = 100

    thingCount = 1

    dodged = 0


    gameExit = False

    while not gameExit:

        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_change = -5
                if event.key == pygame.K_RIGHT:
                    x_change = 5
                if event.key == pygame.K_p:
                    pause = True
                    paused() 

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    x_change = 0

        x  = x_change

        gameDisplay.fill(white)


        things(thing_startx, thing_starty, thing_width, thing_height, black)
        thing_starty  = thing_speed
        car (x,y)
        things_dodged(dodged)

        if x > display_width - car_width or x < -10:
            crash()


        if thing_starty > display_height:
            thing_starty = 0 - thing_height
            thing_startx = random.randrange(0,display_width)
            dodged  = 1
            thing_speed  = 1
            #thing_width  = (dodged * 0.5)


        if y < thing_starty   thing_height:


            if x > thing_startx and x < thing_startx   thing_width or x   car_width > thing_startx and x   car_width < thing_startx   thing_width: 
                crash()

        pygame.display.update()
        clock.tick(100)

game_intro()        
game_loop()
pygame.quit()
quit()

Please try to help. I am saying Thank You in advance for all your guy's help.
  

Ответ №1:

У вас опечатка while paused: в def paused() — это должно быть while pause:

 def paused():
    while pause: # <- pause instead of paused