研究了三款中国象棋开源软件,它们分别是用JS写的网页游戏,用java写的桌面游戏,用java写的安卓App。
以下分别简称为网页游戏、桌面游戏、安卓游戏。
从棋力来说,从强到弱,依次是:桌面游戏 -->网页—>安卓。
桌面游戏最强,是因为它用的评估函数要复杂得多。它在传统的棋子分、位置分上,还加上了组合分,局面分,动态分。比如缺象怕炮,缺仕怕马,双兵连合加分等,都有很好的体现。
网页游戏比安卓游戏强,是因为它有读取棋谱的功能,尽管原始的棋谱量很少,就一个几K文件。
网页游戏在外观上更好处理,代码更简洁,原作者注释也写得最详实。
本人对这三个游戏,都有自己的改进。
桌面游戏,本人增加了两项功能:1.保存和读取文件,不但能保存当前局面,还有能保存每步走法的文件。原作者代码用来保存文件的名字是固定的,还只能保存当前局面,而且每次要保存,都会覆盖原先的文件。2.点击象棋后,会有标注走棋位置。原代码有相应图片,但是没有用上。
网页游戏,本人增加了电脑互弈选项。
安卓游戏把原先的32位APP,变成了兼容64位的APP.
总结:
1.中国象棋软件必须先搞清楚基本的设计理念。棋盘是位棋盘,处理起来才方便快捷。
2.算法很深。递归调用,Alpah、Beta剪裁,克服水平线效应等,每一个都不好理解。代码也特别长,参数特别多,需要考虑的情况非常多。算法还有深度和时间的限制,这体现在你选什么样的难度,对应的深度层级和时间长短。
3.棋规最难写。一般的吃子,能不能走子,这些简单的规则是没有问题的。有问题的是判断长捉、重复局面。这三个开源软件,写得都不尽如人意。还有那些更复杂一点的棋规,根本就不知道如何写。
4.要改动还是很难的。尤其是与那些收费软件,还有那些能联网对弈的软件比,在功能上太单薄了。
5.棋力与棋谱的关系。棋谱能节省时间,能提高深度,特别是残局阶段。我觉得这是与收费软件比,最大的区别。不过,我研究的这三款象棋软件的棋力,是明显强于天天象棋电脑的棋力的。有人用ChatGPT写了中国象软件,那棋力是非常非常的弱,我基本上都能赢。而这三款软件,要赢还是相当困难的。我觉得AlphaGo之类的,也是靠无数的博弈,自动建立和更新大量棋谱的。当然,我没有研究过,猜测罢了。
6.继续努力,兴趣驱动。这些都是冷门项目,没有利益,早有巨头。
中国象棋开源软件对比研究(1)
于 2024-04-11 23:05:26 首次发布