крестики нолики в консоли на python, помогите доделать поле
Пишу крестики-нолики на двоих в консоли. Поле рисую, ходы делаю, а вот проверить кто выиграл и нарисовать красиво не получается. Сейчас поле — это список из 9 элементов:
board = [" "] * 9
print(board) # выглядит ужасно: [' ', ' ', ' ', ...]
Как нарисовать сетку 3х3 и понять что три в ряд?
2 ответа
Держи рабочую версию на двоих. Поле — список из 9 клеток, игрок вводит номер 1-9.
board = [" "] * 9
def draw():
for i in range(0, 9, 3):
print(f" {board[i]} | {board[i+1]} | {board[i+2]} ")
if i < 6:
print("---+---+---")
wins = [(0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6)]
def winner():
for a, b, c in wins:
if board[a] == board[b] == board[c] != " ":
return board[a]
return None
player = "X"
for turn in range(9):
draw()
pos = int(input(f"Ход {player}, клетка 1-9: ")) - 1
if board[pos] != " ":
print("Занято!")
continue
board[pos] = player
if winner():
draw()
print(f"Победили {player}!")
break
player = "O" if player == "X" else "X"
else:
draw()
print("Ничья!")
Как работает: draw() рисует поле строками по 3 клетки. В wins лежат все 8 выигрышных линий (3 строки, 3 столбца, 2 диагонали). winner() проверяет, не заняты ли три клетки одной линии одним символом. После хода меняем игрока строчкой "O" if player == "X" else "X". Если за 9 ходов никто не выиграл — else у цикла for срабатывает и это ничья.
Как улучшить: добавь простого бота вместо второго игрока — пусть комп ходит в случайную свободную клетку через random.choice.
Совет: выведи рядом подсказку с номерами клеток (как на телефоне), новичкам сразу понятно куда ходить:
print(" 1 | 2 | 3")
print(" 4 | 5 | 6")
print(" 7 | 8 | 9")
И оберни int(input()) в try/except, а то от буквы всё падает.