как имитировать ходы между игроками, используя циклы while в Python - PullRequest
0 голосов
/ 15 октября 2018

Итак, я делаю простую игру в крестики-нолики, и мне трудно понять, как сделать так, чтобы ходы каждого игрока чередовались.Я попытался использовать два цикла while с логическим значением, которое должно меняться после выполнения каждого цикла.Я не уверен, почему, но это не работает, приводя только к одной итерации каждого цикла while, а затем останавливается.Ниже мой код.Может кто-нибудь помочь мне сказать, как это исправить, чтобы они чередовались, и если есть более простой способ сделать это?

moves = 0
first_player_move = True

while first_player_move is True:
    print("It's the first player's move")
    if ask_for_move("O") is True:
        if 3 <= moves <= 5:
            if check_if_won("O") is True:
                print("The first player won. Congrats! Game over")
                return
            elif moves ==5:
                print("The game ended in a tie.")
                return
            else:
                first_player_move = False
        else:
            moves +=1
            first_player_move = False

    elif ask_for_move("O") is False:
        continue


while first_player_move is False:
    print("It's the second player's move")
    if ask_for_move("X") is True:
        if check_if_won("X") is True:
            print("The second player won. Congrats! Game over")
            return
        else:
            first_player_move = True

    elif ask_for_move("X") is False:
        continue

Для контекста ask_for_move () - это функция, которая принимает символ игрока в качестве аргументаи возвращает True, если они делают правильный ход, и False, если они этого не делают.

1 Ответ

0 голосов
/ 15 октября 2018

Попробуйте поместить оба цикла while в другой цикл, как этот

while True:
   while first_player_move is True:
       # Your stuff here
   while first_player_move is False:
       # More of your stuff

Код является последовательным, поэтому программа выполнит первый цикл while, затем выйдет, выполнит второй цикл while, выйдети затем, поскольку другого кода нет, он выходит из всей программы.Это заставит его так переоценить while утверждения на неопределенный срок

...