Я пишу программу, которая имитирует игру на Python, в которой участвуют игрок и компьютер. Программа работает стабильно. Однако при проверке автомат играет очень хаотично, вообще не атакуя и не защищаясь. Если я буду исследовать, я буду использовать для обработки алгоритм minmax. Но я не знаю, как это сделать. Может ли кто-нибудь мне помочь? Мой код Python:
import random
import math
def print_board(board):
for row in board:
print(" | ".join(row))
print("-" * 100)
def check_winner(board, player):
for row in board:
if all([cell == player for cell in row]):
return True
for col in range(15):
if all([board[row][col] == player for row in range(15)]):
return True
if all([board[i][i] == player for i in range(15)]) or all([board[i][2-i] == player for i in range(15)]):
return True
return False
def bot_move(board):
for row in range(15):
for col in range(15):
if board[row][col] == " ":
board[row][col] = "O"
if check_winner(board, "O"):
return (row, col)
board[row][col] = " "
for row in range(15):
for col in range(15):
if board[row][col] == " ":
board[row][col] = "X"
if check_winner(board, "X"):
board[row][col] = "O"
return (row, col)
board[row][col] = " "
while True:
row = random.randint(0, 14)
col = random.randint(0, 14)
if board[row][col] == " ":
return (row, col)
def play_game():
board = [[" " for _ in range(15)] for _ in range(15)]
player = "X"
while True:
print_board(board)
if check_winner(board, "X"):
print("Player X wins!")
break
if check_winner(board, "O"):
print("Player O wins!")
break
if all([cell != " " for row in board for cell in row]):
print("It's a draw!")
break
if player == "X":
row, col = map(int, input("Enter your move (row col): ").split())
if board[row][col] == " ":
board[row][col] = "X"
player = "O"
else:
row, col = bot_move(board)
board[row][col] = "O"
player = "X"
play_game()
Я пишу программу, которая имитирует игру на Python, в которой участвуют игрок и компьютер. Программа работает стабильно. Однако при проверке автомат играет очень хаотично, вообще не атакуя и не защищаясь. Если я буду исследовать, я буду использовать для обработки алгоритм minmax. Но я не знаю, как это сделать. Может ли кто-нибудь мне помочь? Мой код Python: [code]import random import math
def print_board(board): for row in board: print(" | ".join(row)) print("-" * 100)
def check_winner(board, player): for row in board: if all([cell == player for cell in row]): return True for col in range(15): if all([board[row][col] == player for row in range(15)]): return True if all([board[i][i] == player for i in range(15)]) or all([board[i][2-i] == player for i in range(15)]): return True return False
def bot_move(board): for row in range(15): for col in range(15): if board[row][col] == " ": board[row][col] = "O" if check_winner(board, "O"): return (row, col) board[row][col] = " " for row in range(15): for col in range(15): if board[row][col] == " ": board[row][col] = "X" if check_winner(board, "X"): board[row][col] = "O" return (row, col) board[row][col] = " " while True: row = random.randint(0, 14) col = random.randint(0, 14) if board[row][col] == " ": return (row, col) def play_game(): board = [[" " for _ in range(15)] for _ in range(15)] player = "X" while True: print_board(board) if check_winner(board, "X"): print("Player X wins!") break if check_winner(board, "O"): print("Player O wins!") break if all([cell != " " for row in board for cell in row]): print("It's a draw!") break if player == "X": row, col = map(int, input("Enter your move (row col): ").split()) if board[row][col] == " ": board[row][col] = "X" player = "O" else: row, col = bot_move(board) board[row][col] = "O" player = "X"
play_game() [/code] X — игрок, O — компьютер Результат моего кода