Как сделать кусок кода ждать несколько секунд - PullRequest
0 голосов
/ 01 ноября 2019

В моем проекте мини-мага, когда юнит на шахматной доске либо ранен, либо убит, квадрат, на котором юнит будет выделен соответственно желтого или красного цвета.

Как только это произойдет, янужно дождаться следующего щелчка игрока, чтобы контур исчез (что означает, очевидно, перерисовать шахматную доску и все юниты в текущей позиции).

Хочу, чтобы я искал, значит перерисоватьвсе до щелчка следующего игрока (на данный момент только для желтого контура / раненого юнита).

Самое простое, что я придумал, это заставить игру ждать с помощью time.sleep (), а затем перерисовать все(в том же фрагменте кода), поэтому я просто вставляю time.sleep (3) сразу после функции highlight_yellow (square_on) и перед оператором, который изменяет состояние игры.

enter image description here

Ну, я не знаю почему, но по какой-то причине это работает (ждет 3 секунды и перерисовывает все), за исключением отображения желтого контурад.

Может кто-нибудь сказать мне, что я делаю не так?

Мой основной цикл следующий:

# main loop
while 1:

    # event loop
    for event in pygame.event.get():
        if event.type is pygame.QUIT:
            sys.exit()

        # mouse click handling
        if event.type == pygame.MOUSEBUTTONDOWN:
            new_position = pygame.mouse.get_pos()

            # unit not selected
            if game_state is 'no unit selected':
                if cancel_yellow_square:
                    draw_chessboard()
                    for white_unit in white_army:
                        white_unit.draw_unit()
                    for black_unit in black_army:
                        black_unit.draw_unit()
                    cancel_yellow_square = False
                if cancel_red_square:
                    selected_unit.set_unit_position(selected_unit.new_position[0], selected_unit.new_position[1])
                    selected_unit = None
                    draw_chessboard()
                    for white_unit in white_army:
                        white_unit.draw_unit()
                    for black_unit in black_army:
                        black_unit.draw_unit()
                    cancel_red_square = False

                if turn is 'white army':
                    for white_unit in white_army:
                        if white_unit.square_on.collidepoint(new_position[0], new_position[1]):
                            selected_unit = white_unit
                            game_state = 'unit selected'
                            print(str(game_state) + ', this unit is a white ' + str(selected_unit.get_condition()) +
                                  ' ' + str(selected_unit.kind))

                elif turn is 'black army':
                    for black_unit in black_army:
                        if black_unit.square_on.collidepoint(new_position[0], new_position[1]):
                            selected_unit = black_unit
                            game_state = 'unit selected'
                            print(str(game_state) + ', this unit is a black ' + str(selected_unit.get_condition()) +
                                  ' ' + str(selected_unit.kind))

            elif game_state == 'unit selected':
                if turn is 'white army':
                    current_position = selected_unit.square_on
                    if not current_position.collidepoint(new_position[0], new_position[1]):
                        if is_legal_move(selected_unit) and white_unit_collision():
                            print('this square is occupied by a friendly white unit, therefore the move is not allowed.'
                                  ' choose another square')
                        elif is_legal_move(selected_unit) and black_unit_collision():
                            for black_unit in black_army:
                                if black_unit.get_unit_position() == selected_unit.new_position:
                                    if black_unit.get_condition() == 'fresh':
                                        game_state = 'enemy unit wounded'
                                        print('black unit wounded')
                                    elif black_unit.get_condition() == 'wounded':
                                        game_state = 'enemy unit killed'
                                        print('black unit killed')
                        elif not is_legal_move(selected_unit):
                            print('move not allowed for this unit')
                        elif is_legal_move(selected_unit):
                            game_state = 'unit movement allowed'
                            turn = 'black army'
                    else:
                        print('this unit has been deselected, select a unit')
                        game_state = 'no unit selected'
                        current_position = selected_unit.get_unit_position()
                        new_position = selected_unit.get_unit_position()
                        selected_unit.set_unit_position(new_position[0], new_position[1])

                elif turn is 'black army':
                    current_position = selected_unit.square_on
                    if not current_position.collidepoint(new_position[0], new_position[1]):
                        if is_legal_move(selected_unit) and black_unit_collision():
                            print('this square is occupied by a friendly black unit, therefore the move is not allowed.'
                                  ' choose another square')
                        elif is_legal_move(selected_unit) and white_unit_collision():
                            for white_unit in white_army:
                                if white_unit.get_unit_position() == selected_unit.new_position:
                                    if white_unit.get_condition() == 'fresh':
                                        game_state = 'enemy unit wounded'
                                        print('black unit wounded')
                                    elif white_unit.get_condition() == 'wounded':
                                        game_state = 'enemy unit killed'
                                        print('white unit killed')
                        elif not is_legal_move(selected_unit):
                            print('move not allowed for this unit')
                        elif is_legal_move(selected_unit):
                            game_state = 'unit movement allowed'
                            turn = 'white army'

                    else:
                        print('this unit has been deselected, select a unit')
                        game_state = 'no unit selected'
                        current_position = selected_unit.get_unit_position()
                        new_position = selected_unit.get_unit_position()
                        selected_unit.set_unit_position(new_position[0], new_position[1])

    # application loop

    # highlight square
    if game_state == 'unit selected':
        highlight_green(selected_unit.square_on)
        highlight_possible_moves()

    # move unit
    if game_state == 'unit movement allowed':
        selected_unit.set_unit_position(selected_unit.new_position[0], selected_unit.new_position[1])
        game_state = 'no unit selected'
        print('---' + str(turn).upper() + ', IS YOUR TURN---')
        selected_unit = None

    # enemy wounded
    if game_state == 'enemy unit wounded':
        print(selected_unit.new_position)
        if turn == 'white army':
            for black_unit in black_army:
                if black_unit.get_unit_position() == selected_unit.new_position:
                    black_unit.set_condition('wounded')
                    print('this unit has been ' + str(black_unit.get_condition()))
        elif turn == 'black army':
            for white_unit in white_army:
                if white_unit.get_unit_position() == selected_unit.new_position:
                    white_unit.set_condition('wounded')
                    print('this unit has been ' + str(white_unit.get_condition()))
        square_on = selected_unit.new_position[0], selected_unit.new_position[1], 100, 100
        highlight_yellow(square_on)
        time.sleep(3)
        draw_chessboard()
        for white_unit in white_army:
            white_unit.draw_unit()
        for black_unit in black_army:
            black_unit.draw_unit()
        if turn == 'white army':
            turn = 'black army'
        elif turn == 'black army':
            turn = 'white army'
        game_state = 'no unit selected'
        cancel_yellow_square = True
        print('---' + str(turn).upper() + ', IS YOUR TURN---')
        selected_unit = None

    # enemy killed
    if game_state == 'enemy unit killed':
        print(selected_unit.new_position)
        if turn == 'white army':
            for black_unit in black_army:
                if black_unit.get_unit_position() == selected_unit.new_position:
                    black_unit.set_condition('killed')
                    black_army.remove(black_unit)
                    print('this unit has been ' + str(black_unit.get_condition()))
        elif turn == 'black army':
            for white_unit in white_army:
                if white_unit.get_unit_position() == selected_unit.new_position:
                    white_unit.set_condition('killed')
                    white_army.remove(white_unit)
                    print('this unit has been ' + str(white_unit.get_condition()))
        square_on = selected_unit.new_position[0], selected_unit.new_position[1], 100, 100
        highlight_red(square_on)
        if turn == 'white army':
            turn = 'black army'
        elif turn == 'black army':
            turn = 'white army'
        game_state = 'no unit selected'
        cancel_red_square = True
        print('---' + str(turn).upper() + ', IS YOUR TURN---')

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