print("*" * 10, " Игра Крестики-нолики для двух игроков ", "*" * 10)
board = list(range(1,40))
def draw_board(board):
cell_w = 3
sep = "-" * ((cell_w + 3) * 6 + 1) # вычисляет длину линии с учётом разделителей
print(sep)
for i in range(6):
row = board[i*6:(i+1)*6]
# каждая ячейка: пробел, отформатированное значение, пробел
line = "|".join(f" {str(x).center(cell_w)} " for x in row)
print("|" + line + "|")
print(sep)
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 до 9.")
def check_win(board):
win_coord = (
(0, 1, 2, 3), (1, 2, 3, 4), (2, 3, 4, 5), (6, 7, 8, 9), (7, 8, 9, 10), (8, 9, 10, 11),
(12, 13, 14, 15), (13, 14, 15, 16), (14, 15, 16, 17), (18, 19, 20, 21), (19, 20, 21, 22), (20, 21, 22, 23),
(24, 25, 26, 27), (25, 26, 27, 28), (26, 27, 28, 29), (30, 31, 32, 33), (31, 32, 33, 34), (32, 33, 34, 35),
(0, 6, 12, 18), (6, 12, 18, 24), (12, 18, 24, 30), (1, 7, 13, 19), (7, 13, 19, 25), (13, 19, 25, 31),
(2, 8, 14, 20), (8, 14, 20, 26), (14, 20, 26, 32), (3, 9, 15, 21), (9, 15, 21, 27), (15, 21, 27, 33),
(4, 10, 16, 22), (10, 16, 22, 28), (16, 22, 28, 34), (5, 11, 17, 23), (11, 17, 23, 29), (17, 23, 29, 35),
(0, 7, 14, 21), (1, 8, 15, 22), (2, 9, 16, 23), (6, 13, 20, 27), (7, 14, 21, 28), (8, 15, 22, 29),
(12, 19, 26, 33), (13, 20, 27, 34), (14, 21, 28, 35), (3, 8, 13, 18), (4, 9, 14, 19), (5, 10, 15, 20),
(9, 14, 19, 24), (10, 15, 20, 25), (11, 16, 21, 26), (15, 20, 25, 30), (16, 21, 26, 31), (17, 22, 27, 32)
)
for each in win_coord:
if board[each[0]] == board[each[1]] == board[each[2]] == board[each[3]]:
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 == 9:
print("Ничья!")
break
draw_board(board)
main(board)
input("Нажмите Enter для выхода!")