编写一个字符界面的五子棋人机对战程序。
时间: 2023-10-11 18:09:58 浏览: 37
好的,我可以为您编写一个字符界面的五子棋人机对战程序。以下是程序代码:
```python
import random
BOARD_SIZE = 15
EMPTY = "."
HUMAN = "X"
COMPUTER = "O"
def draw(board):
# 打印棋盘
for y in range(BOARD_SIZE):
print(" ".join([board[x][y] for x in range(BOARD_SIZE)]))
def get_human_move(board):
# 获取人类玩家的下棋位置
while True:
move = input("请输入您的下棋坐标(格式为x,y):")
if "," not in move:
print("输入格式不正确,请重新输入")
continue
x, y = move.split(",")
x = int(x)
y = int(y)
if x < 0 or x >= BOARD_SIZE or y < 0 or y >= BOARD_SIZE:
print("坐标超出范围,请重新输入")
continue
if board[x][y] != EMPTY:
print("该位置已经有棋子了,请重新输入")
continue
return x, y
def get_computer_move(board):
# 获取电脑玩家的下棋位置,这里是随机选择一个空位置
while True:
x = random.randint(0, BOARD_SIZE - 1)
y = random.randint(0, BOARD_SIZE - 1)
if board[x][y] == EMPTY:
return x, y
def check_win(board, player):
# 检查是否有玩家获胜
for x in range(BOARD_SIZE):
for y in range(BOARD_SIZE):
if board[x][y] == player:
if x + 4 < BOARD_SIZE and board[x + 1][y] == player and board[x + 2][y] == player and board[x + 3][
y] == player and board[x + 4][y] == player:
return True
if y + 4 < BOARD_SIZE and board[x][y + 1] == player and board[x][y + 2] == player and board[x][
y + 3] == player and board[x][y + 4] == player:
return True
if x + 4 < BOARD_SIZE and y + 4 < BOARD_SIZE and board[x + 1][y + 1] == player and board[x + 2][
y + 2] == player and board[x + 3][y + 3] == player and board[x + 4][y + 4] == player:
return True
if x + 4 < BOARD_SIZE and y - 4 >= 0 and board[x + 1][y - 1] == player and board[x + 2][
y - 2] == player and board[x + 3][y - 3] == player and board[x + 4][y - 4] == player:
return True
return False
def main():
# 初始化棋盘
board = [[EMPTY for y in range(BOARD_SIZE)] for x in range(BOARD_SIZE)]
winner = None
current_player = HUMAN
# 游戏循环
while winner is None:
draw(board)
if current_player == HUMAN:
x, y = get_human_move(board)
board[x][y] = HUMAN
else:
x, y = get_computer_move(board)
board[x][y] = COMPUTER
if check_win(board, current_player):
winner = current_player
break
if current_player == HUMAN:
current_player = COMPUTER
else:
current_player = HUMAN
draw(board)
print("游戏结束,获胜者是%s" % winner)
if __name__ == '__main__':
main()
```
这个程序中,我们使用了一个二维数组来表示棋盘,使用 "." 表示空位置。下棋时,人类玩家输入坐标,电脑玩家随机选择一个空位置下棋。检查是否有玩家获胜时,我们使用了一个双重循环来遍历棋盘,判断是否存在五个连续的相同棋子。最后,我们通过调用 `draw` 函数来打印棋盘,以及输出获胜者。