python实现博弈树五子棋
时间: 2023-05-30 20:02:23 浏览: 194
以下是一个简单的Python代码,实现了博弈树五子棋的基本逻辑,包括棋盘的初始化、落子、判断胜负等操作。
```python
import numpy as np
# 棋盘大小
BOARD_SIZE = 15
# 棋子类型
EMPTY = 0
BLACK = 1
WHITE = 2
# 胜利条件
WIN_CONDITION = 5
# 初始化棋盘
board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.int)
# 判断是否胜利
def is_win(player):
for i in range(BOARD_SIZE):
for j in range(BOARD_SIZE):
if board[i][j] == player:
# 水平方向
if j + WIN_CONDITION <= BOARD_SIZE and np.all(board[i][j:j+WIN_CONDITION] == player):
return True
# 垂直方向
if i + WIN_CONDITION <= BOARD_SIZE and np.all(board[i:i+WIN_CONDITION, j] == player):
return True
# 左上到右下方向
if i + WIN_CONDITION <= BOARD_SIZE and j + WIN_CONDITION <= BOARD_SIZE and np.all(np.diag(board[i:i+WIN_CONDITION, j:j+WIN_CONDITION]) == player):
return True
# 右上到左下方向
if i + WIN_CONDITION <= BOARD_SIZE and j - WIN_CONDITION >= -1 and np.all(np.diag(np.fliplr(board[i:i+WIN_CONDITION, j-WIN_CONDITION+1:j+1])) == player):
return True
return False
# 落子
def make_move(player, row, col):
if board[row][col] == EMPTY:
board[row][col] = player
return True
else:
return False
# 打印棋盘
def print_board():
for i in range(BOARD_SIZE):
for j in range(BOARD_SIZE):
if board[i][j] == EMPTY:
print(".", end=" ")
elif board[i][j] == BLACK:
print("X", end=" ")
elif board[i][j] == WHITE:
print("O", end=" ")
print()
# 游戏循环
player = BLACK
while True:
print_board()
row = int(input("请输入行号:"))
col = int(input("请输入列号:"))
if make_move(player, row, col):
if is_win(player):
print_board()
print("player %d win!" % player)
break
player = WHITE if player == BLACK else BLACK
else:
print("该位置已有棋子,请重新输入!")
```
这个代码只是实现了一个简单的人机对战,想要实现更复杂的博弈树算法,需要考虑更多的因素,比如搜索深度、评估函数等等。