pygame.display.update запускается после pygame.time.wait (1000) - PullRequest
1 голос
/ 16 марта 2019

Я работаю через учебник. Учебное пособие можно найти здесь https://inventwithpython.com/makinggames.pdf

Основной скрипт, на который я ссылаюсь, можно найти здесь. https://inventwithpython.com/memorypuzzle.py

В этой программе есть ошибка, которую я пытался устранить в течение нескольких дней. В основной игровой петле

`

while True: # main game loop
    mouseClicked = False

    DISPLAYSURF.fill(BGCOLOR) # drawing the window
    drawBoard(mainBoard, revealedBoxes)

    for event in pygame.event.get(): # event handling loop
        if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
            pygame.quit()
            sys.exit()
        elif event.type == MOUSEMOTION:
            mousex, mousey = event.pos
        elif event.type == MOUSEBUTTONUP:
            mousex, mousey = event.pos
            mouseClicked = True

    boxx, boxy = getBoxAtPixel(mousex, mousey)
    if boxx != None and boxy != None:
        # The mouse is currently over a box.
        if not revealedBoxes[boxx][boxy]:
            drawHighlightBox(boxx, boxy)
        if not revealedBoxes[boxx][boxy] and mouseClicked:
            revealBoxesAnimation(mainBoard, [(boxx, boxy)])
            revealedBoxes[boxx][boxy] = True # set the box as "revealed"
            if firstSelection == None: # the current box was the first box clicked
                firstSelection = (boxx, boxy)
            else: # the current box was the second box clicked
                # Check if there is a match between the two icons.
                icon1shape, icon1color = getShapeAndColor(mainBoard, firstSelection[0], firstSelection[1])
                icon2shape, icon2color = getShapeAndColor(mainBoard, boxx, boxy)

                if icon1shape != icon2shape or icon1color != icon2color:

                    # Icons don't match. Re-cover up both selections.
                    # I think the problem is here
                    # I think the problem is here

                    pygame.time.wait(1000) # 1000 milliseconds = 1 sec
                    coverBoxesAnimation(mainBoard, [(firstSelection[0], firstSelection[1]), (boxx, boxy)])
                    revealedBoxes[firstSelection[0]][firstSelection[1]] = False
                    revealedBoxes[boxx][boxy] = False
                elif hasWon(revealedBoxes): # check if all pairs found
                    gameWonAnimation(mainBoard)
                    pygame.time.wait(2000)

                    # Reset the board
                    mainBoard = getRandomizedBoard()
                    revealedBoxes = generateRevealedBoxesData(False)

                    # Show the fully unrevealed board for a second.
                    drawBoard(mainBoard, revealedBoxes)
                    pygame.display.update()
                    pygame.time.wait(1000)

                    # Replay the start game animation.
                    startGameAnimation(mainBoard)
                firstSelection = None # reset firstSelection variable

    # Redraw the screen and wait a clock tick.
    pygame.display.update()
    FPSCLOCK.tick(FPS)

` что происходит?

Функция pygame.display.update () покажет вторую выбранную карту, но только на долю секунды.

Поведение, которого я пытаюсь достичь => Поведение, которого я пытаюсь достичь, это когда пользователь нажимает на первую карту, которую он раскрывает сам, а затем, когда пользователь нажимает на вторую карту, которую он раскрывает сам. игра ждет секунду с pygame.time.wait (1000). Это должно раскрыть обе карты за это заданное количество времени, прежде чем цикл продолжит выполняться, и снова закроет обе карты, если они не равны.

Я хотел бы сказать автору, чтобы никто больше не застрял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...