- 代码简洁:仅仅使用一百多行代码即实现了**象棋,并具有简单对战功能。
- 性能高效:经测试水平在初学者之上。
- 使用传统象棋表示方法来表示棋子移动。
- 现代竞技象棋有许多复杂的规则,例如不得长将,长吃等,参见2011版象棋规则。本程序仅实现了基本规则,未实现禁手。
- 没有引入随机参数,导致在相同局面下程序总是会有相同的输出。
- 本程序使用的象棋棋子来自Unicode13中的棋类符号,如果你的电脑能正确显示以下几个字符:🩠 🩡 🩢 🩣 🩤 🩦 🩥 🩧 🩨 🩩 🩪 🩫 🩭 🩬,则可以最大程度上利用本程序,否则请在运行程序时设定棋子编码参数
p/piece
为chinese
,即python xiangqi.py -p chinese
或python xiangqi.py --piece chinese
。 - 因为字体关系,有些字体中文字符长度不等于两个英文字符长度,所以显示的棋盘可能没有对其,可以通过设定宽度参数
w/width
来进行调节,即python xiangqi.py -w 2
或python xiangqi.py --width 2
。 - 测试运行环境为Ubuntu20.04,使用系统terminal,字体为Monospace Regular。
如果添加设置参数--pieces chinese
python xiangqi.py -p unicode -w 1
本仓库代码还实现了中文棋盘显示,运行python draw_board.py
即可。同样,如果字体不支持Unicode13, 可修改draw_board.py
第一行为def chinese_chess(mode=''):
。效果如下所示:
如果字体支持Unicode13
如果不支持Unicode13
xiangqi.py
:
- 算法及代码部分,主要借鉴sunfish
- 算法原理介绍:MTD(f)算法
- 子力价值判断及局面判断权重,主要使用了Computer Chinese Chess
draw_board.y
:
- 棋盘绘制,主要参考Unicode chessboard in a terminal
- FEN格式串介绍:象棋百科全书