XMuli / ChineseChess

Cross-platform and online battle platform game based on Qt: Chinese Chess. Also known as:『Xiangqi』『中国象棋』
https://www.bilibili.com/video/av45509758
GNU General Public License v3.0
718 stars 189 forks source link

feat: refactor isGeneral function for ChessBoard #19

Closed kira-yamatoo closed 3 years ago

kira-yamatoo commented 3 years ago

优化isGeneral()函数,用于判断是否将军 我按照上个思路去做了将死(即本回合方无论如何移动棋子都会被吃掉将军),发现好像任意一个棋子移动后都可能发生变数,所以不能以将军的可移动位置来判断 例如:黑方中炮,红方士象全且未移动过,依照之前的思路将军此时只能向上移动,而移动后的位置依旧会被将军,然而红方直接上士或者上相就无效了将军。所以需要重新构建一下思路

XMuli commented 3 years ago

即本回合方无论如何移动棋子都会被吃掉将军

确实棋子一旦移动就局势就变了。

XMuli commented 3 years ago

先 merge,可以后续再慢慢优化;

kira-yamatoo commented 3 years ago

先 merge,可以后续再慢慢优化;

这块我的需要再想想 将死的判断条件是:本回合方无论如何移动棋子都会被吃掉将军,这个范围还是比较大的 另外的话,我想新增一些image给棋子和棋盘 以及根据chessStep增加步数记录和FEN串

XMuli commented 3 years ago
  1. 可以的, 图片注意版权和大小;可以优先 svg;unsplash.com 里面版权基本没问题,质量也很高;不多多是背景图等。
  2. 想到既然做了悔棋功能; 再用一个 QVector<> 将所有的棋子步骤(包括悔棋)都保存下来,然后设定间隔时间;就可以放(精对弈复现)功能了
XMuli commented 3 years ago

将死的判断条件是:本回合方无论如何移动棋子都会被吃掉将军,这个范围还是比较大的

这个应该还好,比较有限,只设置一步即可(就是设置的人机对战中的 AI 的最后一步骤,你可参考下);当时就是这种思路 给 AI 模拟下棋,进而得出最优解

getAllPossibleMoveStep 略作修改即可,然后击杀的为 “将” ID 为目标,而不是我那种加权的击杀,优选分数大的击杀;然后还有一个 getAllPossibleMoveStepAndNoKill ; https://github.com/xmuli/chinessChess/blob/aa8966ad6b57da41da189b594d63f447a212d0fe/MachineGame.cpp#L83-L109

kira-yamatoo commented 3 years ago

将死的判断条件是:本回合方无论如何移动棋子都会被吃掉将军,这个范围还是比较大的

这个应该还好,比较有限,只设置一步即可(就是设置的人机对战中的 AI 的最后一步骤,你可参考下);当时就是这种思路 给 AI 模拟下棋,进而得出最优解

略作修改即可,然后还有一个 getAllPossibleMoveStepAndNoKill https://github.com/xmuli/chinessChess/blob/aa8966ad6b57da41da189b594d63f447a212d0fe/MachineGame.cpp#L83-L109

好滴

kira-yamatoo commented 3 years ago
  1. 可以的, 图片注意版权和大小;可以优先 svg;unsplash.com 里面版权基本没问题,质量也很高;不多多是背景图等。
  2. 想到既然做了悔棋功能; 再用一个 QVector<> 将所有的棋子步骤(包括悔棋)都保存下来,然后设定间隔时间;就可以放(精对弈复现)功能了

界面上的优化可以先不急,我先做逻辑

XMuli commented 3 years ago

一晃又转点了;第二天了

kira-yamatoo commented 3 years ago

一晃又转点了;第二天了

还有两天才到周末,加油! QQ图片20210917001554

XMuli commented 3 years ago

听会歌,睡觉;晚安