You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prolog开发AI国际象棋时车、象可行走法谓词实现问题

Prolog国际象棋滑动棋子(车/主教)移动实现方案

核心逻辑抽象:车和主教属于滑动类棋子,走法逻辑可复用「固定方向步进+路径遮挡判断+吃子校验」的通用框架,无需重复编码。

前置修正:现有兵逻辑bug修复

原有黑兵吃子逻辑存在两处笔误:两个吃子分支均错误写为NewCol is Col-1,且吃子校验错误匹配己方棋子,修正后代码如下:

opposite(white, black).
opposite(black, white).

%% 修正后的黑兵吃子逻辑
movement(Board,piece(black,pawn,Col,Row),piece(black,pawn,NewCol,NewRow)):-
    NewCol is Col-1,
    NewRow is Row-1,
    in_boundaries(NewCol,NewRow),
    opposite(black, OppColor),
    member(piece(OppColor,_,NewCol,NewRow),Board).
movement(Board,piece(black,pawn,Col,Row),piece(black,pawn,NewCol,NewRow)):-
    NewCol is Col+1,
    NewRow is Row-1,
    in_boundaries(NewCol,NewRow),
    opposite(black, OppColor),
    member(piece(OppColor,_,NewCol,NewRow),Board).

通用滑动逻辑实现

新增通用步进谓词,处理路径生成、遮挡判断、吃子逻辑:

% 滑动步进取值:当前坐标、步进增量、棋盘、己方颜色、棋子类型、合法目标棋子
% 分支1:单步进后合法(空位/可吃对方棋子)
slide_step(Col, Row, DCol, DRow, Board, MyColor, Type, piece(MyColor, Type, NextC, NextR)) :-
    NextC is Col + DCol,
    NextR is Row + DRow,
    in_boundaries(NextC, NextR),
    (   nonmember(piece(_, _, NextC, NextR), Board)
    ;   opposite(MyColor, OppColor),
        member(piece(OppColor, _, NextC, NextR), Board)
    ).
% 分支2:单步进后为空,可继续向同方向滑动,递归生成更远位置
slide_step(Col, Row, DCol, DRow, Board, MyColor, Type, Target) :-
    NextC is Col + DCol,
    NextR is Row + DRow,
    in_boundaries(NextC, NextR),
    nonmember(piece(_, _, NextC, NextR), Board),
    slide_step(NextC, NextR, DCol, DRow, Board, MyColor, Type, Target).

车(Rook)移动逻辑

车支持上下左右四个方向滑动,直接调用通用滑动逻辑即可:

movement(Board, piece(MyColor, rook, Col, Row), Target) :-
    % 四个移动方向:(列增量, 行增量)
    member((DCol, DRow), [(0,1), (0,-1), (1,0), (-1,0)]),
    slide_step(Col, Row, DCol, DRow, Board, MyColor, rook, Target).

主教(Bishop)移动逻辑

主教支持四个对角线方向滑动:

movement(Board, piece(MyColor, bishop, Col, Row), Target) :-
    % 四个对角线移动方向
    member((DCol, DRow), [(1,1), (1,-1), (-1,1), (-1,-1)]),
    slide_step(Col, Row, DCol, DRow, Board, MyColor, bishop, Target).

后续扩展提示

后续实现皇后逻辑时,仅需要将车和主教的方向合并传入slide_step即可,无需额外编写逻辑。


内容的提问来源于stack exchange,提问作者avihaiB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:04