Почему Pygame не продолжается до l oop? - PullRequest
2 голосов
/ 24 апреля 2020

Я делаю игру, и когда я хочу, чтобы go через l oop нормально, она не работает.

он проходит через l oop, но по какой-то причине он возвращается, а не начинается заново. Когда я добавляю оператор continue, кнопка просто исчезает.

Почему оператор continue не работает должным образом?

Вот мой код:

import pygame
pygame.init()

clock = pygame.time.Clock()

screen = pygame.display.set_mode((400, 300))
pygame.font.init()
done = False

bro = True
x = 100

y = 100
#button1 = pygame.draw.rect(screen, (0, 0, 255), (200, 200, 30, 30))

    #if check <= pos - (w/2) and check >= 
pygame.display.set_caption("Auto Maze!")
donk = False
while not done:
    for event in pygame.event.get():

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

        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse = event.pos
            try:
                assert button1.collidepoint(mouse)
            except AssertionError:
                pass
            except NameError:
                pass
            else:
                donk = True

    pressed = pygame.key.get_pressed()

    if pressed[pygame.K_w]:
        y -= 5
    elif pressed[pygame.K_s]:
        y += 5
    elif pressed[pygame.K_a]:
        x -= 5
    elif pressed[pygame.K_d]:
        x += 5
    screen.fill((0, 0, 0))

    """try:
        assert player.colliderect(wall1)
    except AssertionError:
        pass
    except NameError:
        pass
    else:
        death_screen = pygame.display.set_mode((400, 300))
        button1 = pygame.draw.rect(death_screen, (0, 0, 255), (200, 200, 30, 30))
        if donk:
            break"""
    player = pygame.draw.rect(screen, (0, 255, 0), (x, y, 60, 60))
    wall1 = pygame.draw.rect(screen, (255, 0, 0), (300, 0, 100, 300))    


    if player.colliderect(wall1):
        death_screen = pygame.display.set_mode((400, 300))
        myfont = pygame.font.SysFont("Comic Sans MS", 10)

        button1 = pygame.draw.rect(death_screen, (0, 0, 255), (175, 100, 60, 30))
        text = myfont.render("Try Again", False, (255, 0, 0))

        screen.blit(text, (175, 100))

        if donk:
            screen = pygame.display.set_mode((400, 300))
    clock.tick(60)
    pygame.display.flip()

quit()

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Добавьте gameover к вашему приложению:

gameover = False:

Делайте разные вещи в приложении l oop, в зависимости от состояния gameover:

while not done:
    # [...]

    if not gameover:
        # draw game scene
        # [...]

    else:
        # draw gamover scene (button)
        # [...]

Установите состояние gameover, если игрок сталкивается:

gameover = player.colliderect(wall1)

Сброс позиции игрока, если нажата кнопка продолжения:

if event.type == pygame.MOUSEBUTTONDOWN:
    if gameover:
        if button1.collidepoint(event.pos):
            gameover = False
            x, y = 100, 100

См. Пример:

enter image description here

import pygame
pygame.init()

clock = pygame.time.Clock()

screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Auto Maze!")

pygame.font.init()
myfont = pygame.font.SysFont("Comic Sans MS", 10)

x, y = 100, 100

gameover = False
done = False
while not done:
    for event in pygame.event.get():

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

        if event.type == pygame.MOUSEBUTTONDOWN:
            if gameover:
                if button1.collidepoint(event.pos):
                    gameover = False
                    x, y = 100, 100

    screen.fill((0, 0, 0))

    if not gameover:
        pressed = pygame.key.get_pressed()

        if pressed[pygame.K_w]:
            y -= 5
        elif pressed[pygame.K_s]:
            y += 5
        elif pressed[pygame.K_a]:
            x -= 5
        elif pressed[pygame.K_d]:
            x += 5

        player = pygame.draw.rect(screen, (0, 255, 0), (x, y, 60, 60))
        wall1 = pygame.draw.rect(screen, (255, 0, 0), (300, 0, 100, 300))    
        gameover = player.colliderect(wall1)

    else:

        button1 = pygame.draw.rect(screen, (0, 0, 255), (175, 100, 60, 30))
        text = myfont.render("Try Again", False, (255, 0, 0))
        screen.blit(text, (175, 100))

    pygame.display.flip()
    clock.tick(60)

quit()
1 голос
/ 24 апреля 2020

Это то же самое, что и ваш код, но только что очищено. Надеюсь, это решит вашу проблему

import pygame
pygame.init()

clock = pygame.time.Clock()

screen = pygame.display.set_mode((400, 300))
pygame.font.init()
done = False
mouse = None
click = False
state = "main"
myfont = pygame.font.SysFont("Comic Sans MS", 10)

player = pygame.Rect(100,100,60,60)
wall1 = pygame.Rect(300, 0, 100, 300)
button1 = pygame.Rect(175, 100, 60, 30)

pygame.display.set_caption("Auto Maze!")



while not done:
    click = False
    for event in pygame.event.get():

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

        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse = event.pos
            click = True

    screen.fill((0, 0, 0))

    if state == "main":

        pressed = pygame.key.get_pressed()

        if pressed[pygame.K_w]:
            player.y -= 5
        elif pressed[pygame.K_s]:
            player.y += 5
        elif pressed[pygame.K_a]:
            player.x -= 5
        elif pressed[pygame.K_d]:
            player.x += 5

        #draw player and wall
        pygame.draw.rect(screen, (0, 255, 0), player)
        pygame.draw.rect(screen, (255, 0, 0), wall1)    


        if player.colliderect(wall1):
            state = "death"
    else:

        pygame.draw.rect(screen, (0, 0, 255), button1)
        text = myfont.render("Try Again", False, (255, 0, 0))

        screen.blit(text, (175, 100))
        if click:
            if button1.collidepoint(mouse):
                state = "main"
                player.x = 100
                player.y = 100

    clock.tick(60)
    pygame.display.flip()

quit()
...