[Stand-alone Games] PyCChess 中国象棋程序(单机版) 和 Harmless 中国象棋 UCCI 引擎
Tofloor
poster avatar
字甲达宾
deepin
2021-02-16 07:37
Author

# PyCChess 中国象棋程序(单机版) 和 Harmless 中国象棋 UCCI 引擎

2021-2-15 更新

程序命令: 以普通用户,运行 pycchess 即可。


## 1. 简介

- PyCChess 中国象棋程序

- 自带的中国象棋 UCCI 引擎 Harmless (中文名:无害)

程序版本:0.1, 2011-2015

----

程序作者:timebug (2011-2015)

源码地址(GitHub/Gitee/OSCHINA/豆瓣):

 https://github.com/timebug/harmless (in English, 2012-2015)
 https://gitee.com/mirrors/harmless (in English, 2015)
 https://www.oschina.net/p/harmless (in Simplified Chinese, 2015)

写了一个Linux下的中国象棋引擎
 . 
 Author: timebug (2012-02-03)
 .
 Source: https://www.douban.com/group/topic/27206675/ (豆瓣)
 .
 引擎取名为”无害“,最终目标是“基本无害”,旨在帮助象棋新手重新找回自信(笑),
 目前基本框架已经完成,但正如其名,棋力还是很差。在普通机子上,限定每步6秒
 时间的情况下,平均搜索深度在5-8层左右。核心搜索主要采用的是极小窗口搜索,
 并结合了哈希表技术和历史启发;评估函数则相对实现得比较简单,只考虑了棋子
 本身的价值和棋子间的灵活度,虽不靠谱,但基本能用。
 .
 写完已经有一段时间了,由于身边能帮我测试的人有限,所以冒昧发到这里来,
 如果有朋友对此感兴趣,不妨可以拿去玩玩,有任何问题,欢迎前去项目主页吐槽
 反馈。
 .
 引擎部分完全用C语言实现,支持部分UCCI通信协议,并附带了一个简单的图形
 界面,由Python实现。当然,所有代码都是开放的,引擎部分暂时也未采用任何
 协议,且代码风格还算干净,所以,大家可以拿去放心使用随意修改,完全不用
 为此负任何责任。:-)
 .
  * 项目地址:https://github.com/timebug/harmless

----

DEB 打包人:Careone (2021.2.15)

(注:暂只编译/打包 amd64 平台的程序的 DEB 包)

DEB 包下载地址(城通网盘):

- 文件名: pycchess_0.1-1_amd64.deb

- 文件大小: 0.6 M

- https://306t.com/d/30646948-42482335-40c3a2

  (访问密码:6859)

## 2. 打包 DEB 的起因

打包人:Careone

个人作为一个中国象棋爱好者,因机缘巧合,无意中接触到 PyCChess 中国象棋程序,以及其自带的
 UCCI 中国象棋引擎。惊叹之余,觉得这么优秀的本土游戏程序,不应该被埋没、遗忘或荒废。

于是根据程序作者公开的程序源码,编译了 amd64 平台的 Linux 运行程序。
经过调试、图片微调,适当增补了一些文件。运行正常。

为表示对程序作者的敬意和尊重,主程序图标,采用了程序作者主页的图案(一个黑白色调的、类似俄罗斯方块游戏界面的图标)。

#### 注:调整的图片

1. image/select.png (用于标示走动的棋子)

2. image/done.png (用于标示某个棋子,走子之前所在的位置)

3. image/over.png (用于标示“输棋”后的“将/帅”棋子)

## 3. PyCChess 中国象棋程序

一、已实现的功能

- 人机对战。

- 按 [空格键] 重新开始新的棋局。

二、不支持的功能

- 不支持 [悔棋] 操作。

- 无法调节棋力难度。

- 不支持联网对局。

- 不能显示走棋文字(如“炮二平五”)。

- 无法保存、读取走棋记录(不支持主流的中国象棋棋谱文件)。

 


## 4. DEB 包的适配和其它技术细节

4.1 主程序和游戏图片(如棋子、棋盘)、游戏走棋声音,位于以下目录:

  - usr/local/share/pycchess/ (游戏主目录)

  - usr/local/share/pycchess/cchess.py (主程序)

  - usr/local/share/pycchess/*.py (附加程序)

  - usr/local/share/pycchess/image/*.png (棋子、棋盘图片)

  - usr/local/share/pycchess/sounds/*.WAV (音效文件)

4.2 用户启动 pycchess 程序时,会在当前用户目录下,

自动创建游戏目录 ~/.pycchess/

并创建相关游戏数据的符号链接到这个目录下。

  走棋时,程序会在 harmless 引擎程序所在的目录,

  自动生成一个 harmless.log 文件,用于记录引擎输出。

  (如果 harmless 程序所在目录无法创建或修改 harmless.log 文件,

则主程序 PyCChess 在走完第一个回合后,会报错并退出游戏、自动关闭程序。)

## 5. XBoard 调用 harmless 引擎的测试结果

经测试,暂无法在 XBoard 程序中,正常调用 harmless 中国象棋引擎(UCCI 协议)。

- 测试环境:Debian 10.8 amd64, XBoard 4.9.1

- 调用指令:xboard @xq -fcp maxqi -scp harmless

- 中国象棋引擎文件位置:/usr/local/games/harmless

- 报错内容:严重错误:写入第二个象棋程序时出错:断开的管道

- 附、增补的 XBoard 相关图标/引擎配置文件:

  - usr/share/games/harmless/harmless.rc

  - usr/share/games/plugins/logos/harmless.png

  - usr/share/games/plugins/xboard/harmless.eng

## 6. XBoard 调用 UCCI 协议中国象棋引擎的指令参考

- 用法1:

  xboard -variant xiangqi -fcp maxqi -scp "uci2wb -x harmless"

- 用法2:

  xboard @xq -fcp maxqi -scp "uci2wb -x harmless"

- 用法3:

  xboard @xq -fcp maxqi -scp {uci2wb -x harmless}

- 用法4:

  xboard @xq -uxiAdapter {uci2wb -%variant "%scp" "%sd"} -fcp maxqi -scp harmless -sUCCI

Reply Favorite View the author
All Replies
SamLukeYes
deepin
2021-02-16 07:46
#1

软件包不应该把文件放进 /usr/local 吧

Reply View the author
海天鹰
deepin
2021-02-16 19:51
#2

尊重作者应该注明出处。

Reply View the author
lcw0268
deepin
2021-02-17 08:19
#3

地板支持板凳说法。

原作者公开的源码地址?

Reply View the author
字甲达宾
deepin
2021-02-20 15:17
#4
海天鹰

尊重作者应该注明出处。

感谢楼下各位的关注和提醒!

因发贴时操作失误,之前源码 GitHub 网址漏发。现已补上。

 

注:

1. 在 DEB 包的 Debian/control 和  doc/copyright 两个文件中,实际已记录源码 GitHub 地址。

2. 网页搜索 pycchess 或者 harmless ,也可以很方便地找到 源码 GitHub 地址

(友情提示:别用 百度搜索。百度搜索 的结果是 插了广告的,前面会有十个左右无效网址

用微软必应搜索 https://cn.bing.com 比较靠谱,很直接就显示

harmless 的 GitHub 和 OSCHINA 主页)

-----

Source: https://github.com/timebug/harmless (in English, 2012-2015)
 https://gitee.com/mirrors/harmless (in English, 2015)
 https://www.oschina.net/p/harmless (in Simplified Chinese, 2015)


 写了一个Linux下的中国象棋引擎
 .
 Author: timebug (2012-02-03)
 .
 Source: https://www.douban.com/group/topic/27206675/ (豆瓣)
 .
 引擎取名为”无害“,最终目标是“基本无害”,旨在帮助象棋新手重新找回自信(笑),
 目前基本框架已经完成,但正如其名,棋力还是很差。在普通机子上,限定每步6秒
 时间的情况下,平均搜索深度在5-8层左右。核心搜索主要采用的是极小窗口搜索,
 并结合了哈希表技术和历史启发;评估函数则相对实现得比较简单,只考虑了棋子
 本身的价值和棋子间的灵活度,虽不靠谱,但基本能用。
 .
 写完已经有一段时间了,由于身边能帮我测试的人有限,所以冒昧发到这里来,
 如果有朋友对此感兴趣,不妨可以拿去玩玩,有任何问题,欢迎前去项目主页吐槽
 反馈。
 .
 引擎部分完全用C语言实现,支持部分UCCI通信协议,并附带了一个简单的图形
 界面,由Python实现。当然,所有代码都是开放的,引擎部分暂时也未采用任何
 协议,且代码风格还算干净,所以,大家可以拿去放心使用随意修改,完全不用
 为此负任何责任。:-)
 .
  * 项目地址:https://github.com/timebug/harmless

-----

Reply View the author
字甲达宾
deepin
2021-02-20 15:20
#5
SamLukeYes

软件包不应该把文件放进 /usr/local 吧

关于文件目录结构位置:

 

1*. 按 debian 打包规则:非 debian 官方包,目录位置一般是 /usr/local/share/pycchess/

2. 按 debian 打包规则: debian 官方包,目录位置则是 /usr/share/pycchess/

3. 按 RPM 系 规则,或者商业软件:目录位置一般是 /opt/pycchess/

4. 按 Deepin/UOS 打包规则:目录位置一般是 /opt/apps/com.timebug.pycchess/

5. 按 spark-store 星火商店 打包规则:目录位置一般是 /opt/durapps/pycchess/

 

Reply View the author
SamLukeYes
deepin
2021-02-20 15:53
#6
字甲达宾

关于文件目录结构位置:

 

1*. 按 debian 打包规则:非 debian 官方包,目录位置一般是 /usr/local/share/pycchess/

2. 按 debian 打包规则: debian 官方包,目录位置则是 /usr/share/pycchess/

3. 按 RPM 系 规则,或者商业软件:目录位置一般是 /opt/pycchess/

4. 按 Deepin/UOS 打包规则:目录位置一般是 /opt/apps/com.timebug.pycchess/

5. 按 spark-store 星火商店 打包规则:目录位置一般是 /opt/durapps/pycchess/

 

https://www.debian.org/doc/manuals/maint-guide/modify.en.html#destdir

我去翻了一下 debian 的文档,理解跟你不太一样。所谓的“第三方软件”,应该是以非 deb 形式分发的软件。根据 FHS 标准,/usr/local 应该是为避免本地安装的软件和正规的软件包相冲突而设置的。如果 deb 包把软件装进 /usr/local 了,那你自己编译而没有打包的版本往哪装呢?

Reply View the author
字甲达宾
deepin
2021-02-21 14:59
#7
SamLukeYes

https://www.debian.org/doc/manuals/maint-guide/modify.en.html#destdir

我去翻了一下 debian 的文档,理解跟你不太一样。所谓的“第三方软件”,应该是以非 deb 形式分发的软件。根据 FHS 标准,/usr/local 应该是为避免本地安装的软件和正规的软件包相冲突而设置的。如果 deb 包把软件装进 /usr/local 了,那你自己编译而没有打包的版本往哪装呢?

欢迎技术交流。

 

最初确定主目录位置的时候,也考虑过是否加 local 子目录的问题。

* 不加 local/ 的好处,至少在 lintian 检查时,可以减少很多 报错信息。

也参考了一些其它 DEB 软件包的做法,在未被 debian 官方收录前,也常放在 local/ 下,以示区分和告知:

* 这并不是一个 debian 官方包。并未进行严格的测试和验证。可能存在一些兼容性方面,或者不确定的异常或风险。

 

你提供的链接,认真又看了一下,应该是针对 DM 或者 DD 开发者的规范指导,用于约束 DEB 提交 、上传的 DEB 质量。

---

后续新版本 DEB 打包时(可能是一个月以后,或者更晚些时候的事了),会调整文件位置,去掉 local/ 子目录。

 

 

Reply View the author