Как сократить фрагмент кода бота для крестиков-ноликов? (Проверка на победу следующим ходом)

Создал игру крестики нолики. Она полностью работает, но мне не нравится приведённый ниже кусок кода.

Для понимания дальнейшего кода:

void - символ, который считается не занятой ячейкой

void = ' '

board - Игровое поле - список из 9 void элементов

board = [void for _ in range(9)]

win_coord - При каком расположении происходит победа

win_coord = ((0, 1, 2), (3, 4, 5), (6, 7, 8),
             (0, 3, 6), (1, 4, 7), (2, 5, 8),
             (0, 4, 8), (2, 4, 6))

bot_turn/player_turn - Кто ходит за крестики/нолики

bot_turn = 'X'
player_turn = 'O'

Код, который нужно сократить:

        for win in win_coord:
            if board[win[0]] == board[win[1]] == self.bot_turn and board[win[2]] == void:
                return win[2]
            elif board[win[1]] == board[win[2]] == self.bot_turn and board[win[0]] == void:
                return win[0]
            elif board[win[0]] == board[win[2]] == self.bot_turn and board[win[1]] == void:
                return win[1]

        for win in win_coord:
            if board[win[0]] == board[win[1]] == self.__player_turn and board[win[2]] == void:
                return win[2]
            elif board[win[1]] == board[win[2]] == self.__player_turn and board[win[0]] == void:
                return win[0]
            elif board[win[0]] == board[win[2]] == self.__player_turn and board[win[1]] == void:
                return win[1]

Это фрагмент кода бота, который возвращает номер ячейки в board. Ячейка возвращается только если 2 другие заняты (bot_turn/player_turn), а третья пустая (void), иначе происходят другие проверки.

Необходимо сохранить очерёдность проверки (Сначала проверяется победа бота следующим ходом, а потом тоже самое для игрока)


Ответы (0 шт):