print("*" * 10, " Игра Крестики-нолики для двух игроков ", "*" * 10)
board = list(range(1,37))
def draw_board(board):
print("-" * 37)
for i in range(6):
print("|", f"{board[0+i*6]:>2}", "|", f"{board[1+i*6]:>2}", "|", f"{board[2+i*6]:>2}", "|", f"{board[3+i*6]:>2}", "|", f"{board[4+i*6]:>2}", "|", f"{board[5+i*6]:>2}", "|")
print("-" * 37)
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 = ()
# Горизонтали по 5
for i in range(0, 36, 6):
for j in range(2):
win_coord += ((i+j, i+j+1, i+j+2, i+j+3, i+j+4),)
# Вертикали по 5
for i in range(6):
for j in range(2):
win_coord += ((i+j*6, i+(j+1)*6, i+(j+2)*6, i+(j+3)*6, i+(j+4)*6),)
# Диагонали по 5
for i in range(2):
for j in range(2):
win_coord += ((i+j*6, i+j*6+7, i+j*6+14, i+j*6+21, i+j*6+28),)
win_coord += ((i+j*6+5, i+j*6+4, i+j*6+3, i+j*6+2, i+j*6+1),)
for each in win_coord:
if board[each[0]] == board[each[1]] == board[each[2]] == board[each[3]] == board[each[4]]:
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 для выхода!")