国际象棋插件的生产过程

电脑杂谈  发布时间:2020-03-31 15:13:26  来源:网络整理

手机版象棋巫师_新中国象棋手机版_中国象棋手机版

大家好,我很久没见过薛了,呵呵,发表了最新的研究成果: 一种更通用的国际象棋插件生产过程,以换取观看斯诺和关心我的每个人. 至于国际象棋力量的水平,因为是直接调用国际象棋旋风的引擎,水平,哈哈!

我首先在这里声明,我只是向大家解释和讨论学习知识,因此该软件本身不适合发布,源代码也是如此!感兴趣的人可以自己参考研究. 我一直很胆小,不想承担任何法律责任. 呵呵!

问题的根源:

最近我输了很多棋,然后我想偷懒找以前的QQ Free Chess King. 不幸的是,QQ国际象棋已更新,我无法识别!提示: 找不到窗口. 我认为这很简单. 既然找不到窗口,我就让您找到它?因此,直接进行分析,OD分析加上PEDIY,让它找到窗口手柄,在狂喜中单击它,提示: 请确认游戏是否开始!继续的分析和结论: 我可以得到它来获得窗户把手,但是零件的大小和颜色已经改变. 如果要使其起作用,除非您逐一检查每个点的坐标和颜色值! !! !!

汗水出来了!这不如编写自己的方便!

思想(以下是对QQ Free Chess King的引用和改进):

1. 如何使作品自己动起来?

这是很的问题,包括我的第一个想法. 有很多方法可以解决此问题. 我使用一种非常简单的方法,只发送鼠标消息. (尚未针对其他拖动式国际象棋进行过测试. )在与棋盘相对应的窗口WM_LBUTTONDOWN / WM_LBUTTONUP上发送与鼠标单击相对应的消息. 传输棋子相对于窗口的坐标信息.

2. 如何定位棋子的坐标?

手机版象棋巫师_中国象棋手机版_新中国象棋手机版

嘿,这很容易,您自己划线吗? pDC->行(intx,inty);获取窗口句柄和设备环境后,您想做什么?设置与电路板颜色不同的线,慢慢接近电路板,使测试线与电路板完全重合,然后测试零件.

3. 如何测试作品?

这是最关键的部分,它是插件操作的核心技术. 简而言之,它是屏幕色彩的选择! (通过对QQ Free Chess King的分析获得,希望消息来源作者在看到它后不会感到惊讶. 这是技术共享. )我认为QQ Free Chess做得很好:

每张棋子的11个点(当然,您也可以自己定义),顶部的3个点,中间的5个点和底部的3个点,正好符合件是圆的. 通常,两个相同子代的11个点必须相等,即红色汽车1 =红色汽车2,红色马1 =红色马2,依此类推.

附件37780

4. 如何调用引擎?

这也是插件的核心部分. 有了它,该插件可以拥有自己的“思想”,确定如何去做,以及应该去哪一个!我建议,如果您有兴趣,可以参考UCI(通用国际象棋接口)国际象棋通用引擎协议和Fen表示国际象棋游戏的方法. 我们使用中国象棋. 为什么要学习UCI?因为中国象棋引擎协议UCCI是对UCI的改进,因此属于UCI的子集.

哦,制作一个插件并不容易!国际象棋旋风的引擎使用UCI协议进行通信. 这匹马和那匹马将用字母表示,而棋盘将用a字符串表示:

rnbakabnr / 9 / 1c5c1 / p1p1p1p1p / 9/9 / P1P1P1P1P / 1C5C1 / 9 / RNBAKABNR

中国象棋手机版_新中国象棋手机版_手机版象棋巫师

这代表一个棋盘,所有棋子都没有移动. (大写表示红色,小写表示黑色

以下命令来自国际象棋旋风(仅适用于国际象棋旋风):

uci //初始引擎显示引擎版本的作者和其他内容

ucinewgame //重新启动新情境引擎将不会返回任何内容

isready //检查引擎是否准备就绪. 引擎返回readyok表示已准备就绪.

position //设置引擎的当前位置信息. 引擎将不会返回任何内容.

godepth //思维的深度,深度越高,下象棋就越坚固,但它耗时更多.

//引擎将不断返回思考信息的步骤…..曲线移动.... bestmove….

停止//停止思考并立即给出最佳动作!

新中国象棋手机版_中国象棋手机版_手机版象棋巫师

退出//退出引擎

引擎使用bestmove方法提供最佳移动. 我的方法是建立一个匿名双管道,使用一个线程监视引擎信息,然后使用另一个线程控制棋盘扫描和其他信息.

5. 如何扫描棋盘?

使用两个字符的数组保存棋盘上所有交叉点的棋子,扫描每个交叉点的11个像素的颜色值以存储布局,如果没有子项则为NULL. 第一步中国象棋手机版,两个数据都用相同的象棋面孔数据初始化. 无论您是否转弯,都尝试走路! (如果您不应该自己走,那么您将不会成功)这是电路板扫描线程的工作:

连续扫描棋盘以比较当前棋盘表面阵列是否与先前棋盘表面相同. 如果不同,也会进行分析:

a在不同位置只能有两个点,一个点在移动之后是空的,另一个点是充满棋子的点.

b如果存在三个以上的不同点,则不执行任何操作并继续扫描(当木板被其他窗口挡住时,三个或三个以上的点将不相等)

如果出现情况a,则需要进一步判断这是否是您自己的举动,如果是您自己的举动,请继续扫描,否则请直接执行举动!

6. 如何判断你是否是小孩?

手机版象棋巫师_中国象棋手机版_新中国象棋手机版

嘿,这种方法也更经典. 扫描对手棋盘线上的三向九宫格,即将军所在宫殿的位置,找出对手是红色将军还是黑色将军,从而可以确定自己是红色或黑色. 扫描棋盘进行比较时,如果它已经找到与该棋盘相同的孩子,则忽略它并继续扫描,否则请指引该孩子!

7. 如何使棋子彼此自动配对?

尽管国际象棋旋风的引擎非常强大中国象棋手机版,但水平已经达到水平,但是存在一个问题: 当对手完全“将死”时,引擎将不会指挥对手的将军或指挥官吃掉它,你需要自己弄清楚!编写函数并进行判断: (每次引擎思考时,都必须首先确定当前情况是否可以杀死对手,如果这样,则直接将死亡指向对手,否则继续让引擎思考)

1. 为了比较对手将军之间的水平线和垂直线,如果有任何典当挡住了它们,您将无法吃掉它们,否则您将直接命令对手的将军们来吃!

2. 为了进行支比较,如果对手将军之间的水平线和垂直线之间只有一个棋子,并且如果有一个棋子,则他们可以吃掉另一位将军的将军,否则他们不能吃.

3. 对于马匹,比较八个R方向是否可以到达对手的将军位置,以及马匹在马匹的顶部,底部,左侧和右侧是否有障碍物.

4. 对于士兵或兵,您是否比较正面和左侧和右侧是否已经到达对手将军的位置(在后方没有判断力,士兵不能后退,向后看的士兵!),如果因此,直接吃掉对手!

8. 如何普遍使用?

使用与QQ Chess King相同的原理来表示XML中的棋子,但已对其进行了改进: 每个节点和相关属性都显示在窗口列表中(下图是其中的一部分):

附件37781

其中P是主窗口,C是子窗口. 如果存在具有相同类名和标题的同级窗口,请使用B进行指示. “”表示标题或类名称为空. 这样,仅通过修改XML外部文件而无需修改源软件程序就可以相对容易地实现通用性.

附件37782


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-158982-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...