用python编写一个字符界面的五子棋人机对战程序。
时间: 2023-10-13 22:04:53 浏览: 59
好的,下面是一个简单的字符界面五子棋人机对战程序的Python代码:
```python
import random
# 定义棋盘大小和玩家棋子颜色
SIZE = 15
PLAYER_PIECE = 'X'
COMPUTER_PIECE = 'O'
# 初始化棋盘
board = [['.' for _ in range(SIZE)] for __ in range(SIZE)]
# 打印棋盘
def print_board():
print(' ', end='')
for i in range(SIZE):
print(i, end=' ')
print()
for i in range(SIZE):
print(i, end=' ')
for j in range(SIZE):
print(board[i][j], end=' ')
print()
# 判断棋子是否落在合法位置
def is_valid_move(x, y):
if x < 0 or x >= SIZE or y < 0 or y >= SIZE:
return False
if board[x][y] != '.':
return False
return True
# 判断是否有玩家或电脑获胜
def is_game_over():
# 判断行
for i in range(SIZE):
for j in range(SIZE - 4):
if board[i][j] == PLAYER_PIECE and board[i][j+1] == PLAYER_PIECE and board[i][j+2] == PLAYER_PIECE and board[i][j+3] == PLAYER_PIECE and board[i][j+4] == PLAYER_PIECE:
return PLAYER_PIECE
if board[i][j] == COMPUTER_PIECE and board[i][j+1] == COMPUTER_PIECE and board[i][j+2] == COMPUTER_PIECE and board[i][j+3] == COMPUTER_PIECE and board[i][j+4] == COMPUTER_PIECE:
return COMPUTER_PIECE
# 判断列
for i in range(SIZE - 4):
for j in range(SIZE):
if board[i][j] == PLAYER_PIECE and board[i+1][j] == PLAYER_PIECE and board[i+2][j] == PLAYER_PIECE and board[i+3][j] == PLAYER_PIECE and board[i+4][j] == PLAYER_PIECE:
return PLAYER_PIECE
if board[i][j] == COMPUTER_PIECE and board[i+1][j] == COMPUTER_PIECE and board[i+2][j] == COMPUTER_PIECE and board[i+3][j] == COMPUTER_PIECE and board[i+4][j] == COMPUTER_PIECE:
return COMPUTER_PIECE
# 判断正斜线
for i in range(SIZE - 4):
for j in range(SIZE - 4):
if board[i][j] == PLAYER_PIECE and board[i+1][j+1] == PLAYER_PIECE and board[i+2][j+2] == PLAYER_PIECE and board[i+3][j+3] == PLAYER_PIECE and board[i+4][j+4] == PLAYER_PIECE:
return PLAYER_PIECE
if board[i][j] == COMPUTER_PIECE and board[i+1][j+1] == COMPUTER_PIECE and board[i+2][j+2] == COMPUTER_PIECE and board[i+3][j+3] == COMPUTER_PIECE and board[i+4][j+4] == COMPUTER_PIECE:
return COMPUTER_PIECE
# 判断反斜线
for i in range(SIZE - 4):
for j in range(4, SIZE):
if board[i][j] == PLAYER_PIECE and board[i+1][j-1] == PLAYER_PIECE and board[i+2][j-2] == PLAYER_PIECE and board[i+3][j-3] == PLAYER_PIECE and board[i+4][j-4] == PLAYER_PIECE:
return PLAYER_PIECE
if board[i][j] == COMPUTER_PIECE and board[i+1][j-1] == COMPUTER_PIECE and board[i+2][j-2] == COMPUTER_PIECE and board[i+3][j-3] == COMPUTER_PIECE and board[i+4][j-4] == COMPUTER_PIECE:
return COMPUTER_PIECE
# 判断是否平局
for i in range(SIZE):
for j in range(SIZE):
if board[i][j] == '.':
return None
return 'Tie'
# 玩家下棋
def player_move():
while True:
try:
x, y = map(int, input('Enter your move (row column): ').split())
if is_valid_move(x, y):
board[x][y] = PLAYER_PIECE
return
else:
print('Invalid move, try again.')
except ValueError:
print('Invalid input, try again.')
# 电脑下棋
def computer_move():
while True:
x, y = random.randint(0, SIZE-1), random.randint(0, SIZE-1)
if is_valid_move(x, y):
board[x][y] = COMPUTER_PIECE
return
# 主函数
def main():
print('Welcome to Five in a Row!')
print_board()
while True:
player_move()
print_board()
result = is_game_over()
if result:
if result == PLAYER_PIECE:
print('Congratulations! You win!')
elif result == COMPUTER_PIECE:
print('Sorry, you lose!')
else:
print('Tie!')
break
computer_move()
print('Computer moved:')
print_board()
result = is_game_over()
if result:
if result == PLAYER_PIECE:
print('Congratulations! You win!')
elif result == COMPUTER_PIECE:
print('Sorry, you lose!')
else:
print('Tie!')
break
if __name__ == '__main__':
main()
```
运行程序后,你可以用数字输入你下棋的位置,电脑将随机选择一个合法的位置下棋。棋盘将在每次玩家或电脑下棋后更新。当有一方获胜或棋盘已满时,游戏结束并显示结果。