请用编写五子棋可以输出胜利棋子的位置坐标的代码横坐标为大写字母,纵坐标为数字
时间: 2024-03-07 09:47:11 浏览: 96
以下是一个简单的五子棋胜利棋子位置坐标输出的实现:
```python
# 定义棋盘大小
ROWS = 15
COLS = 15
# 初始化棋盘
board = [[' ' for j in range(COLS)] for i in range(ROWS)]
# 判断是否有五子连珠的函数
def check_win(row, col, player):
# 水平方向
count = 0
for i in range(col-4, col+1):
if i < 0 or i+4 >= COLS:
continue
if board[row][i:i+5] == [player]*5:
print("胜利者是:", player, ",胜利位置是:", end='')
for j in range(i, i+5):
print(chr(j+ord('A')), row+1, end=' ')
print("\n")
return True
# 垂直方向
count = 0
for i in range(row-4, row+1):
if i < 0 or i+4 >= ROWS:
continue
if [board[i+k][col] for k in range(5)] == [player]*5:
print("胜利者是:", player, ",胜利位置是:", end='')
for j in range(i, i+5):
print(chr(col+ord('A')), j+1, end=' ')
print("\n")
return True
# 对角线方向
count = 0
for i in range(-4, 1):
if row+i < 0 or row+i+4 >= ROWS or col+i < 0 or col+i+4 >= COLS:
continue
if [board[row+i+k][col+i+k] for k in range(5)] == [player]*5:
print("胜利者是:", player, ",胜利位置是:", end='')
for j in range(5):
print(chr(col+i+j+ord('A')), row+i+j+1, end=' ')
print("\n")
return True
# 反对角线方向
count = 0
for i in range(-4, 1):
if row+i < 0 or row+i+4 >= ROWS or col-i < 0 or col-i+4 >= COLS:
continue
if [board[row+i+k][col-i+k] for k in range(5)] == [player]*5:
print("胜利者是:", player, ",胜利位置是:", end='')
for j in range(5):
print(chr(col-i-j+ord('A')), row+i+j+1, end=' ')
print("\n")
return True
return False
# 下棋主程序
def play():
players = ['X', 'O']
current_player_idx = 0
# 每次循环代表一步棋
for step in range(ROWS * COLS):
player = players[current_player_idx]
print("请", player, "落子,输入坐标(例如 A1):")
coordinate = input().strip().upper()
if len(coordinate) != 2 or not coordinate[0].isalpha() or not coordinate[1].isdigit():
print("坐标格式不正确,请重新输入!")
continue
col = ord(coordinate[0]) - ord('A')
row = int(coordinate[1]) - 1
if col < 0 or col >= COLS or row < 0 or row >= ROWS:
print("坐标超出了棋盘范围,请重新输入!")
continue
if board[row][col] != ' ':
print("该位置已经有棋子了,请重新输入!")
continue
board[row][col] = player
if check_win(row, col, player):
return
current_player_idx = 1 - current_player_idx
print("棋盘已满,平局!")
# 开始游戏
play()
```
在这个实现中,我们定义了一个 `check_win` 函数,用来判断是否有五子连珠。该函数接受三个参数:当前落子的行、列坐标和玩家标记。我们先分别判断水平、垂直、对角线和反对角线四个方向上是否有五子连珠,如果有,则在控制台输出胜利者和胜利棋子的位置坐标。注意,我们使用 `ord` 和 `chr` 函数将字母转换为数字和数字转换为字母。
在主程序中,我们首先定义棋盘的大小和一个二维列表来表示棋盘,然后通过循环让两个玩家轮流下棋。每次落子后,我们调用 `check_win` 函数来判断是否有胜者,如果有,则游戏结束。如果棋盘已满,但没有胜者,则宣布平局。
阅读全文