class Game:
def __init__(self):
self.board = [[' ' for _ in range(board_size)] for _ in range(board_size)]
self.current_player = 'X'
def is_valid(self, x, y):
return 0 <= x < board_size and 0 <= y < board_size and self.board[x][y] == ' '
def make_move(self, x, y):
if self.is_valid(x, y):
self.board[x][y] = self.current_player
self.current_player = 'O' if self.current_player == 'X' else 'X'
def check_win(self):
检查横向、纵向、斜向胜利条件
for i in range(board_size):
for j in range(board_size):
if self.board[i][j] != ' ':
player = self.board[i][j]
横向
if j + win_condition 1 < board_size and all([self.board[i][k] == player for k in range(j, j + win_condition)]):
return player
纵向
if i + win_condition 1 < board_size and all([self.board[k][j] == player for k in range(i, i + win_condition)]):
return player
斜向(右下)
if i + win_condition 1 < board_size and j + win_condition 1 < board_size and all([self.board[i+k][j+k] == player for k in range(win_condition)]):
return player
斜向(左下)
if i + win_condition 1 < board_size and j win_condition + 1 = 0 and all([self.board[i+k][jk] == player for k in range(win_condition)]):
return player
return None
def minimax(self, depth, is_maximizing):
winner = self.check_win()
if winner == 'X':
return 10 + depth
elif winner == 'O':
return 10 depth
elif all([self.board[i][j] != ' ' for i in range(board_size) for j in range(board_size)]):
return 0
if is_maximizing:
best_score = float('inf')
for i in range(board_size):
for j in range(board_size):
if self.is_valid(i, j):
self.board[i][j] = 'O'
score = self.minimax(depth + 1, False)
self.board[i][j] = ' '
best_score = max(score, best_score)
return best_score
else:
best_score = float('inf')
for i in range(board_size):
for j in range(board_size):
if self.is_valid(i, j):
self.board[i][j] = 'X'
score = self.minimax(depth + 1, True)
self.board[i][j] = ' '
best_score = min(score, best_score)
return best_score
def ai_move(self):
best_score = float('inf')
best_move = None
for i in range(board_size):
for j in range(board_size):
if self.is_valid(i, j):
self.board[i][j] = 'O'
score = self.minimax(0, False)
self.board[i][j] = ' '
if score best_score:
best_score = score
best_move = (i, j)
return best_move
简单测试
game = Game()
while True:
玩家落子
x = int(input(输入x坐标: ))
y = int(input(输入y坐标: ))
if game.is_valid(x, y):
game.make_move(x, y)
winner = game.check_win()
if winner:
print(f玩家{winner}获胜!)
break
AI落子
ai_move = game.ai_move()
if ai_move:
game.make_move(ai_move[0], ai_move[1])
print(fAI落子在{ai_move[0]} {ai_move[1]})
winner = game.check_win()
if winner:
print(fAI获胜!)
break
else:
print(无效落子,请重试。)