Загрузка данных


print("*" * 10, " Игра Крестики-нолики для двух игроков ", "*" * 10)

board = list(range(1, 37))

def draw_board(board):
    print("-" * 43)
    for i in range(6):
        print("|", str(board[0 + i * 6]).center(4), "|", str(board[1 + i * 6]).center(4), "|", str(board[2 + i * 6]).center(4), "|", str(board[3 + i * 6]).center(4), "|", str(board[4 + i * 6]).center(4), "|", str(board[5 + i * 6]).center(4), "|")
        print("-" * 43)

def take_input(player_token):
    valid = False
    while not valid:
        player_answer = input("Куда поставим " + player_token + "? ")
        try:
            player_answer = int(player_answer)
        except:
            print("Некорректный ввод. Вы уверены, что ввели число?")
            continue
        if player_answer >= 1 and player_answer <= 36:
            if str(board[player_answer - 1]) not in "XO":
                board[player_answer - 1] = player_token
                valid = True
            else:
                print("Эта клетка уже занята!")
        else:
            print("Некорректный ввод. Введите число от 1 до 36.")

def check_win(board):
    win_coord = (
        (0,1,2), (1,2,3), (2,3,4), (3,4,5),
        (6,7,8), (7,8,9), (8,9,10), (9,10,11),
        (12,13,14), (13,14,15), (14,15,16), (15,16,17),
        (18,19,20), (19,20,21), (20,21,22), (21,22,23),
        (24,25,26), (25,26,27), (26,27,28), (27,28,29),
        (30,31,32), (31,32,33), (32,33,34), (33,34,35),
        (0,6,12), (6,12,18), (12,18,24), (18,24,30),
        (1,7,13), (7,13,19), (13,19,25), (19,25,31),
        (2,8,14), (8,14,20), (14,20,26), (20,26,32),
        (3,9,15), (9,15,21), (15,21,27), (21,27,33),
        (4,10,16), (10,16,22), (16,22,28), (22,28,34),
        (5,11,17), (11,17,23), (17,23,29), (23,29,35),
        (0,7,14), (1,8,15), (2,9,16), (3,10,17),
        (6,13,20), (7,14,21), (8,15,22), (9,16,23),
        (12,19,26), (13,20,27), (14,21,28), (15,22,29),
        (18,25,32), (19,26,33), (20,27,34), (21,28,35),
        (5,10,15), (4,9,14), (3,8,13), (2,7,12),
        (11,16,21), (10,15,20), (9,14,19), (8,13,18),
        (17,22,27), (16,21,26), (15,20,25), (14,19,24),
        (23,28,33), (22,27,32), (21,26,31), (20,25,30)
    )
    for each in win_coord:
        if board[each[0]] == board[each[1]] == board[each[2]]:
            return board[each[0]]
    return False

def main(board):
    counter = 0
    win = False
    while not win:
        draw_board(board)
        if counter % 2 == 0:
            take_input("X")
        else:
            take_input("O")
        counter += 1
        if counter > 4:
            tmp = check_win(board)
            if tmp:
                print(tmp, "выиграл!")
                win = True
                break
        if counter == 36:
            print("Ничья!")
            break
    draw_board(board)

main(board)

input("Нажмите Enter для выхода!")