[Python] How to create a pause button in Pygame?

Discussão em 'Python' iniciado por Stack, Maio 9, 2025.

  1. Stack

    Stack Membro Participativo

    I've been trying to make a game, and everything in there works so far except that the pause button , that when pressed the button P should pause and when pressed S should continue. I kinda understand the problem such that once in enters the while loop in the main code it wont get out. I tried putting the pause function inside the while loop. Please do help or provide tips to fix if possible thank you.

    import pygame

    # Colors
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    Blue = (2,55,55)



    def recursive_draw(x, y, width, height):
    """ Recursive rectangle function. """
    pygame.draw.rect(screen, WHITE,
    [x, y, width, height],
    1)
    speed = [10,0]
    rect_change_x = 10
    rect_change_y = 10




    # Is the rectangle wide enough to draw again?
    if (width > 25):
    # Scale down
    x += width * .1
    y += height * .1
    width *= .8
    height *= .8


    # Recursively draw again
    recursive_draw(x, y, width, height)

    def recursive_draw2(x, y, width, height):
    """ Recursive rectangle function. """
    pygame.draw.rect(screen, Blue,
    [x, y, width, height],
    1)
    speed = [10,0]
    rect_change_x = 10
    rect_change_y = 10




    # Is the rectangle wide enough to draw again?
    if (width > 25):
    x += width * .1
    y += height * .1
    width *= .8
    height *= .8



    # Recursively draw again
    recursive_draw2(x, y, width, height)
    def paused():
    screen.fill(black)

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


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

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

    #gameDisplay.fill(white)


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

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


    pygame.init()
    #rectanglelist = [big()]
    # Set the height and width of the screen
    size = [700, 500]
    screen = pygame.display.set_mode(size)

    pygame.display.set_caption("My Game")

    # Loop until the user clicks the close button.
    done = False

    # Used to manage how fast the screen updates
    clock = pygame.time.Clock()
    black=(0,0,0)

    end_it=False
    time = 100

    USEREVENT = 0

    pygame.time.set_timer(USEREVENT+1, 10)
    milliseconds = 0
    seconds = 0
    start_it = False
    while (end_it==False):
    screen.fill(black)
    myfont=pygame.font.SysFont("Britannic Bold", 40)
    nlabel=myfont.render("Welcome to "+ " Jet shooter ", 1, (255, 0, 0))
    label=myfont.render("Click on the mouse to start ", 1, (255, 0, 0))
    for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:
    end_it=True

    screen.blit(nlabel,(200, 100))
    screen.blit(label, (170,300))
    pygame.display.flip()

    while (start_it==False):

    screen.fill(black)
    myfont2=pygame.font.SysFont("Britannic Bold", 40)
    label2=myfont2.render("Ready?", 1, (255, 0, 0))
    screen.blit(label2, (300,250))
    pygame.display.flip()
    pygame.time.wait(3000)
    start_it = True
    fall = False
    while (fall==False):
    nlist = [3,2,1]
    for i in (nlist):


    screen.fill(black)
    n = str(i)
    myfont3=pygame.font.SysFont("Britannic Bold", 40)
    score = myfont3.render(n,1,(255,0,0))
    screen.blit((score), (350,250))
    pygame.display.flip()
    pygame.time.wait(1000)
    screen.fill(black)
    myfont4=pygame.font.SysFont("Britannic Bold", 40)
    label4=myfont3.render("GOOO!!!", 1, (255, 0, 0))
    screen.blit(label4, (300,250))
    pygame.display.flip()
    pygame.time.wait (1000)

    fall = True
    pause = 0
    b = 0

    # -------- Main Program Loop -----------
    while not done:
    for event in pygame.event.get():

    if event.type == pygame.KEYUP:
    if event.key==K_p:
    pause=True
    if pause == True:
    screen.fill(black)
    font=pygame.font.SysFont("Britannic Bold", 40)
    nlabelBB=myfont.render("Pause", 1, (255, 0, 0))
    screen.blit(nlabelBB,(200, 100))
    pygame.display.flip()



    # Set the screen background
    screen.fill(BLACK)
    flip = 1
    a = 0

    # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT


    recursive_draw(0, 0, 700, 500)


    recursive_draw2(35,25, 625, 450)
    **###I TRIED TO PUT THE PAUSE GAME HERE AND IF PRESSED P PAUSE AND S CONTINUE
    while a == 0 :


    if flip == 1 :
    recursive_draw(35,25,625,450)
    recursive_draw2(0, 0, 700, 500)

    flip = flip + 1
    pygame.display.flip()
    if event.type == pygame.KEYUP:
    if event.key==K_p:
    a = 1
    screen.fill(black)
    font=pygame.font.SysFont("Britannic Bold", 40)
    nlabelBB=myfont.render("Pause", 1, (255, 0, 0))
    screen.blit(nlabelBB,(200, 100))
    pygame.display.flip()
    if event.key==K_s:
    a = 0





    if flip == 2 :
    recursive_draw(0, 0, 700, 500)
    recursive_draw2(35, 25, 625, 450)

    flip = flip - 1
    pygame.display.flip()
    if event.type == pygame.KEYUP:
    if event.key==K_p:
    a = 1
    screen.fill(black)
    font=pygame.font.SysFont("Britannic Bold", 40)
    nlabelBB=myfont.render("Pause", 1, (255, 0, 0))
    screen.blit(nlabelBB,(200, 100))
    pygame.display.flip()
    if event.key==K_s:
    a = 0**

    if event.type == pygame.QUIT:
    done = True





    # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT

    # Go ahead and update the screen with what we've drawn.
    pygame.display.flip()

    # Limit to 60 frames per second
    clock.tick(20)

    # Be IDLE friendly. If you forget this line, the program will 'hang'
    # on exit.
    pygame.quit()

    Continue reading...

Compartilhe esta Página