编写一个字符界面的五子棋人机对战程序,游戏难度中等
时间: 2023-10-13 22:05:02 浏览: 56
为了实现这个五子棋人机对战程序,我们可以分为两个部分:一是游戏逻辑的实现,包括棋盘的绘制、下棋的判断和胜负的判断;二是人机对战的实现,包括人的输入和机器的反应。
以下是一个可能的实现:
```python
import os
# 定义棋盘大小和棋子的类型
BOARD_SIZE = 15
PLAYER_CHESS = 'X'
AI_CHESS = 'O'
# 初始化棋盘
def init_board():
board = [['+' for y in range(BOARD_SIZE)] for x in range(BOARD_SIZE)]
return board
# 绘制棋盘
def draw_board(board):
os.system('cls' if os.name == 'nt' else 'clear') # 清屏操作
print(' ', end='')
for x in range(BOARD_SIZE):
print(chr(x + ord('A')), end=' ')
print()
for i in range(BOARD_SIZE):
print('{:2d}'.format(i+1), end=' ')
for j in range(BOARD_SIZE):
print(board[i][j], end=' ')
print()
# 判断胜负
def check_win(board):
# 判断行
for i in range(BOARD_SIZE):
for j in range(BOARD_SIZE - 4):
if board[i][j] == board[i][j + 1] == board[i][j + 2] == board[i][j + 3] == board[i][j + 4] and board[i][j] != '+':
return board[i][j]
# 判断列
for i in range(BOARD_SIZE - 4):
for j in range(BOARD_SIZE):
if board[i][j] == board[i + 1][j] == board[i + 2][j] == board[i + 3][j] == board[i + 4][j] and board[i][j] != '+':
return board[i][j]
# 判断正对角线
for i in range(BOARD_SIZE - 4):
for j in range(BOARD_SIZE - 4):
if board[i][j] == board[i + 1][j + 1] == board[i + 2][j + 2] == board[i + 3][j + 3] == board[i + 4][j + 4] and board[i][j] != '+':
return board[i][j]
# 判断反对角线
for i in range(BOARD_SIZE - 4):
for j in range(4, BOARD_SIZE):
if board[i][j] == board[i + 1][j - 1] == board[i + 2][j - 2] == board[i + 3][j - 3] == board[i + 4][j - 4] and board[i][j] != '+':
return board[i][j]
# 没有胜者
return None
# 判断当前位置是否可以下棋
def can_put_chess(board, x, y):
return board[x][y] == '+'
# 人下棋
def player_put_chess(board):
while True:
input_str = input('请输入落子位置(A1-O15): ')
try:
x = ord(input_str[0].upper()) - ord('A')
y = int(input_str[1:]) - 1
if x < 0 or x >= BOARD_SIZE or y < 0 or y >= BOARD_SIZE:
print('输入位置不合法,请重新输入!')
continue
if not can_put_chess(board, x, y):
print('当前位置已有棋子,请重新输入!')
continue
board[x][y] = PLAYER_CHESS
return
except Exception:
print('输入格式不合法,请重新输入!')
# 机器下棋
def ai_put_chess(board):
# 简单的AI:随机下棋
import random
while True:
x = random.randint(0, BOARD_SIZE-1)
y = random.randint(0, BOARD_SIZE-1)
if can_put_chess(board, x, y):
board[x][y] = AI_CHESS
return
# 主函数,游戏入口
def main():
board = init_board()
draw_board(board)
turn = 0
while True:
if turn % 2 == 0:
player_put_chess(board)
else:
ai_put_chess(board)
draw_board(board)
winner = check_win(board)
if winner is not None:
if winner == PLAYER_CHESS:
print('恭喜你获胜!')
else:
print('很遗憾,你输了。')
break
turn += 1
if __name__ == '__main__':
main()
```
这个程序的具体实现可能会有细微的差别,但是大体上是这样的。其中,`os.system('cls' if os.name == 'nt' else 'clear')`这一行是为了在不同的操作系统下清屏,因为Windows和Linux的清屏命令不一样。`check_win()`函数使用了一些嵌套的循环来判断胜负,这也是五子棋程序实现的难点之一。对于AI的实现,这里只是使用了一个简单的随机下棋的做法,实际上还可以使用更为复杂的算法来提高游戏难度。