|
|
您的代码片段似乎有语法错误,我为您重新实现一个可直接运行的中国象棋炮移动与隔子吃子逻辑。该代码使用标准9×10棋盘(列0-8,行0-9),并演示了移动和吃子的判断。
- class Chess:
- def __init__(self):
- # 棋盘:9列(0-8) x 10行(0-9),0为空,1红方,-1黑方
- self.board = [[0]*9 for _ in range(10)]
- # 放置示例棋子:红炮在(7,1),黑炮在(3,1),黑卒在(7,4)
- self.board[7][1] = 1 # 红炮
- self.board[3][1] = -1 # 黑炮
- self.board[7][4] = -1 # 黑卒(目标)
-
- def can_cannon_move(self, start, end):
- """判断炮能否从start移动到end"""
- if start == end:
- return False
- sx, sy = start
- ex, ey = end
- # 检查起点是否有己方棋子(此处简化,仅检查非空)
- if self.board[sx][sy] == 0:
- return False
- # 检查终点是否在棋盘内(已隐含)
- # 必须是直线移动(同行或同列)
- if sx != ex and sy != ey:
- return False
- # 同行
- if sx == ex:
- min_y, max_y = sorted([sy, ey])
- # 统计中间棋子个数(不包括起点和终点)
- count = 0
- for y in range(min_y+1, max_y):
- if self.board[sx][y] != 0:
- count += 1
- # 终点为空且中间无棋子 -> 移动
- if count == 0 and self.board[ex][ey] == 0:
- return True
- # 终点有对方棋子且中间恰好一个棋子 -> 吃子
- elif count == 1 and self.board[ex][ey] != 0 and self.board[sx][sy] != self.board[ex][ey]:
- return True
- else:
- return False
- # 同列
- elif sy == ey:
- min_x, max_x = sorted([sx, ex])
- count = 0
- for x in range(min_x+1, max_x):
- if self.board[x][sy] != 0:
- count += 1
- if count == 0 and self.board[ex][ey] == 0:
- return True
- elif count == 1 and self.board[ex][ey] != 0 and self.board[sx][sy] != self.board[ex][ey]:
- return True
- else:
- return False
- return False
- # 测试
- game = Chess()
- print("移动测试(红炮从(7,1)到(7,0)空位):", game.can_cannon_move((7,1), (7,0))) # 应该True
- print("吃子测试(红炮从(7,1)到(7,4)黑卒,中间(7,2)必须有一个棋子):", game.can_cannon_move((7,1), (7,4))) # 中间(7,2)是0,所以False
- # 人为添加一个炮架
- game.board[7][2] = 1 # 一个红方棋子充当炮架
- print("添加炮架后吃子测试:", game.can_cannon_move((7,1), (7,4))) # 应为True
- print("同列移动测试(红炮从(7,1)到(4,1)空位,中间有黑炮在(3,1)):", game.can_cannon_move((7,1), (4,1))) # 中间有黑炮(一个棋子),终点空,所以False
- print("同列吃子测试(红炮从(7,1)到(3,1)黑炮,中间无棋子):", game.can_cannon_move((7,1), (3,1))) # 中间无棋子,不能吃,应为False
复制代码
该代码实现了:
- 炮只能沿直线移动或吃子。
- 移动时中间不能有棋子,终点必须为空。
- 吃子时中间必须有且仅有一个棋子(任何一方),终点必须是对方棋子。
您可以直接运行测试,查看输出结果是否符合预期。如果有其他需求(如完整对弈逻辑),请进一步说明。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|