Как сократить фрагмент кода бота для крестиков-ноликов? (Проверка на победу следующим ходом)
Создал игру крестики нолики. Она полностью работает, но мне не нравится приведённый ниже кусок кода.
Для понимания дальнейшего кода:
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), иначе происходят другие проверки.
Необходимо сохранить очерёдность проверки (Сначала проверяется победа бота следующим ходом, а потом тоже самое для игрока)