请给上面程序增加人机对战的功能。
时间: 2024-02-12 21:09:24 浏览: 14
好的,以下是增加人机对战功能的代码:
```python
import numpy as np
import random
# 定义棋盘大小
BOARD_SIZE = 15
# 定义棋子种类
EMPTY = 0
BLACK = 1
WHITE = 2
# 定义胜利条件
WIN_COUNT = 5
# 初始化棋盘
board = np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=int)
# 定义落子函数
def make_move(player, row, col):
board[row][col] = player
# 定义判断胜利函数
def check_win(player):
# 检查行
for row in range(BOARD_SIZE):
for col in range(BOARD_SIZE - WIN_COUNT + 1):
if all(board[row][col+i] == player for i in range(WIN_COUNT)):
return True
# 检查列
for col in range(BOARD_SIZE):
for row in range(BOARD_SIZE - WIN_COUNT + 1):
if all(board[row+i][col] == player for i in range(WIN_COUNT)):
return True
# 检查正对角线
for row in range(BOARD_SIZE - WIN_COUNT + 1):
for col in range(BOARD_SIZE - WIN_COUNT + 1):
if all(board[row+i][col+i] == player for i in range(WIN_COUNT)):
return True
# 检查反对角线
for row in range(WIN_COUNT - 1, BOARD_SIZE):
for col in range(BOARD_SIZE - WIN_COUNT + 1):
if all(board[row-i][col+i] == player for i in range(WIN_COUNT)):
return True
return False
# 定义判断是否平局函数
def check_draw():
return np.count_nonzero(board == EMPTY) == 0
# 定义玩家落子函数
def player_move(player):
while True:
row = int(input("Enter row: "))
col = int(input("Enter col: "))
if board[row][col] == EMPTY:
make_move(player, row, col)
break
else:
print("Invalid move. Try again.")
# 定义电脑落子函数
def computer_move(player):
while True:
row = random.randint(0, BOARD_SIZE - 1)
col = random.randint(0, BOARD_SIZE - 1)
if board[row][col] == EMPTY:
make_move(player, row, col)
break
# 定义主函数
def main():
# 初始化玩家和游戏状态
player = BLACK
game_over = False
# 游戏循环
while not game_over:
# 打印棋盘
print(board)
# 玩家落子
if player == BLACK:
player_move(player)
# 电脑落子
else:
computer_move(player)
# 判断胜利
if check_win(player):
print("Player", player, "wins!")
game_over = True
# 判断平局
elif check_draw():
print("Draw!")
game_over = True
# 切换玩家
player = WHITE if player == BLACK else BLACK
# 运行主函数
if __name__ == '__main__':
main()
```
这个程序增加了 player_move() 和 computer_move() 两个函数,分别用于玩家落子和电脑落子。在游戏循环中,如果当前玩家是黑子,则调用 player_move() 函数输入行号和列号来落子;如果当前玩家是白子,则调用 computer_move() 函数随机生成行号和列号来落子。
这个程序中的电脑落子策略非常简单,只是随机生成行号和列号来落子,所以电脑的水平并不高。如果想要实现更高级的电脑落子策略,可以参考一些五子棋 AI 的算法,比如 alpha-beta 剪枝算法和蒙特卡罗树搜索算法等。