这是一款专门为练习五子棋习题(有禁手)而开发的应用,其最大的特色是开放、免费且无广告。该应用除了内置的三手胜等常见习题集外,还支持用户通过外部文件导入自定义的习题集。
本应用纯粹是因为女儿和自己玩乐的需要但市面上又没有好用的应用情况下,作为资深程序员的我一有不爽就自己抽空开发的。女儿作为首个玩家试用了应用的内测版本并提出了好几个很棒的改进意见,我都一一采纳了。文章最后附有应用下载链接。
一、导入格式说明
应用本身的使用是不需要帮助的也不应该有帮助,如果需要帮助的话就说明应用的UI设计得不自然。此处只对外部导入的习题集文件的格式予以说明。
习题集文件的数据内容采用主流的JSON格式,是一个二维字符串数组。最外层数组的每个元素是一个一维字符串数组,表示一道习题。一维字符串数组的每个字符串元素表示一个棋子的坐标和颜色,格式为“XY,C”。
其中X是横坐标,用大写字母表示,范围是A~O。Y是纵坐标,用数字表示,范围是1~15。C是颜色,只有黑色和白色,分别用1和2表示。
下面给出一个简单的例子方便理解。导入的习题集文件的文件名为“例子习题集.json”,其中json后缀是必需的。该习题集包含2道习题,第1道习题有3颗黑棋和2颗白棋,第2道习题有2颗黑棋和2颗白棋。
[
["F10,1", "H10,2", "G9,1","I9,2", "J9,1"],
["H6,2", "I6,1", "J6,1", "K6,2"]
]
二、习题答案链接
习题的详细解答请查阅如下网盘共享的PDF文件。
链接:百度网盘 请输入提取码
提取码:fa2v
三、开发背景介绍
本应用的开发包含三个部分, UI前端、AI算法和扫描工具。
1)UI前端
使用Kotlin语言以及Jetpack Compose UI库开发,主要就是写Composable函数,显示棋盘、棋子和一些按钮,响应用户的点击和滑动操作,以及保存和恢复数据。Jetpack Compose确实可大幅减少代码量,使UI前端的代码量只有不到一千行。
2)AI算法
搜索了网上已有的五子棋算法开源库后,最后选择了郝天一在2019年开源的SlowRenju(GitHub - wind23/SlowRenju ),该C++算法库的棋力很强,在国际大赛中能排名前5。但我针对本应用是用于做题的特殊需求,对该算法库做了一个简单的JNI层封装,方便UI前端Kotlin代码的调用。封装函数中将搜索节点数量和搜索深度做了限制,以便能较快响应玩家的落子。经过测试一些三手胜的经典习题,基本够用。
3)扫描工具
如何获得三手胜习题库的JSON数据呢?看着书手工一题一题地录入显然不符合程序员的原则。好在有强大的开源计算机视觉库OpenCV,基于这个库只用300行C+&#