Tic Tac Toe Turn изменить с пигам - PullRequest
0 голосов
/ 27 апреля 2019

Итак, у меня есть этот код в главном цикле игры, кажется, что все идет как задумано, кроме смены хода, я не уверен, в чем проблема, я застрял в этом в течение 2 дней и не могу понять это вот ссылка на полный скрипт на тот случай, если кто-нибудь захочет проверить, не сделал ли я что-то не так в самих функциях https://github.com/AmrBinBashir/Tic-Tac-Toe-Pygame:

run = True
while run:
    draw_board_onetime(board_boxes, win)
    make_board(board_boxes)
    board = [" "] * 10
    game_on = True
    while game_on:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            if event.type == pygame.MOUSEMOTION:
                pos = pygame.mouse.get_pos()
                for box in board_boxes:
                    if box.is_hover(pos):
                        box.hovered = True
                        box.draw(win)
                    else:
                        box.hovered = False
                        box.draw(win)
            turn = "player1"
            if turn == "player1":
                if event.type == pygame.MOUSEBUTTONDOWN:
                    pos = pygame.mouse.get_pos()
                    for i in range(1, 10):
                        if board_boxes[i].is_hover(pos):
                            board_boxes[i].text = x_marker
                            board[i] = x_marker
                            print(board)
                            if check_win(board, x_marker):
                                game_on = False  # WIN
                            else:
                                if full_board_check(board):
                                    game_on = False  # TIE
                                else:
                                    turn = "player2"
            else:
                if event.type == pygame.MOUSEBUTTONDOWN:
                    pos = pygame.mouse.get_pos()
                    for i in range(1, 10):
                        if board_boxes[i].is_hover(pos):
                            board_boxes[i].text = o_marker
                            board[i] = o_marker
                            print(board)
                            if check_win(board, o_marker):
                                game_on = False  # WIN
                            else:
                                if full_board_check(board):
                                    game_on = False  # TIE
                                else:
                                    turn = "player1"

        pygame.display.update()
    sys.exit()
sys.exit()

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019

Я не совсем уверен в вашем коде (сам его не выполнил), но уверен, что переопределил

turn = "player1"
#will always slip into:
        if turn == "player1":

Переместите настройку «player1» куда-нибудь еще в вашем коде, например, глобальная переменная для тестирования. Прямо сейчас кажется, что даже если вы установите «player2», оно все равно будет перезаписано при следующем запуске.


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

Например, логические значения можно легко перевернуть как player = not player (переключение между True для P1 и False для P2).

Целые числа можно легко увеличивать, например player_id += 1 (что становится удобным для настольной игры с 3 или более игроками).

0 голосов
/ 28 апреля 2019

Решение, если кто-то видит это в функции, просто перемещая переменную поворота за пределы цикла game_on, чтобы она не могла быть переопределена в каждом цикле

run = True
while run:
    draw_board_onetime(board_boxes, win)
    make_board(board_boxes)
    board = [" "] * 10
    game_on = True
    turn = 'player1'
    while game_on:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            if event.type == pygame.MOUSEMOTION:
                pos = pygame.mouse.get_pos()
                for box in board_boxes:
                    if box.is_hover(pos):
                        box.hovered = True
                        box.draw(win)
                    else:
                        box.hovered = False
                        box.draw(win)

            if turn == "player1":
                if event.type == pygame.MOUSEBUTTONDOWN:
                    pos = pygame.mouse.get_pos()
                    for i in range(1, 10):
                        if board_boxes[i].is_hover(pos):
                            board_boxes[i].text = x_marker
                            board[i] = x_marker
                            print(board)
                            if check_win(board, x_marker):
                                game_on = False  # WIN
                            else:
                                if full_board_check(board):
                                    game_on = False  # TIE
                                else:
                                    turn = "player2"
            else:
                if event.type == pygame.MOUSEBUTTONDOWN:
                    pos = pygame.mouse.get_pos()
                    for i in range(1, 10):
                        if board_boxes[i].is_hover(pos):
                            board_boxes[i].text = o_marker
                            board[i] = o_marker
                            print(board)
                            if check_win(board, o_marker):
                                game_on = False  # WIN
                            else:
                                if full_board_check(board):
                                    game_on = False  # TIE
                                else:
                                    turn = "player1"

        pygame.display.update()
    sys.exit()
sys.exit()
...