print("*" * 10, " Игра Крестики-нолики 5 на 5 для двух игроков ", "*" * 10)
board = list(range(1, 26))
def draw_board(board):
print("-" * 26)
for i in range(5):
print("|", end="")
for j in range(5):
print(f" {board[j + i * 5]:>2} |", end="")
print("\n" + "-" * 26)
def take_input(player_token):
valid = False
while not valid:
player_answer = input(f"Куда поставим {player_token}? ")
try:
player_answer = int(player_answer)
except:
print("Некорректный ввод. Вы уверены, что ввели число?")
continue
if 1 <= player_answer <= 25:
if str(board[player_answer - 1]) not in "XO":
board[player_answer - 1] = player_token
valid = True
else:
print("Эта клетка уже занята!")
else:
print("Некорректный ввод. Введите число от 1 до 25.")
def check_win(board):
win_coord = []
for i in range(5):
win_coord.append(tuple(range(i * 5, i * 5 + 5)))
for i in range(5):
win_coord.append(tuple(range(i, 25, 5)))
win_coord.append((0, 6, 12, 18, 24))
win_coord.append((4, 8, 12, 16, 20))
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 >= 9:
tmp = check_win(board)
if tmp:
print(tmp, "выиграл!")
win = True
break
if counter == 25:
print("Ничья!")
break
draw_board(board)
main(board)
input("Нажмите Enter для выхода!")