一个使用eleeye引擎制作的象棋游戏

游戏介绍

这个游戏是自己使用python3.7配合pygame库写的游戏,由于pygame没有基本的UI组件如:按钮,输入框,文本框之类,这些UI组件都是自己用自己写的类模拟实现。

然后是关于这个象棋的AI的强度,这个AI的强度,我是通过控制它的搜索的时间来控制其强度,搜索时间越长,这个引擎就更加充分的思考,AI就越强,程序中使用的思考时间为15s,基本上普通人已经下不过这个AI了,这个专业引擎还是非常的强大的哈。

关于游戏的界面的实现之类的我就不多做介绍,自己主要想介绍的是这个专业象棋AI引擎是怎么使用的,关于这个引擎的使用,也是我自己通过查阅官网http://www.xqbase.com/league/emulator.htm,通过自己的摸索总结出来的一些简单使用方法,可能会存在一些错误,也请指正。

整个游戏的下载方式如下:
下载链接:https://pan.baidu.com/s/1Vd26mnSIVQ3jvPhRmPMXPA
提取码:kgca
条件允许的话可以用c币下载一下我的程序,支持一下,自己有时需要一些c币,感谢支持哈
https://download.csdn.net/download/Dennis_HAHE/12234576

UCCI协议

本质上我的游戏程序就是使用进程管道和这个AI引擎进行通讯实现,通信的过程中使用的就是UCCI协议,游戏界面负责将棋盘信息翻译成UCCI协议支持的棋盘格式发送给AI引擎,AI引擎思考得出结果后返回给游戏界面进行显示,基本明白了这个UCCI协议,还可以使用其他很多的象棋AI引擎,支持UCCI协议的所有的象棋引擎可以从这里下载:
http://www.xqbase.com/league/enginelist.htm
这里的话我使用的是eleeye象棋对战引擎,关于UCCI协议的介绍可以搜索相关文章的介绍。

eleeye引擎的简单测试

首先直接cmd打开运行eleeye引擎:然后输入"ucci"激活引擎
接着可以试着输入几步下棋的步骤:

    1: position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 12: go time 300000 increment 0 3: position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1 moves h2e24: go time 300000 increment 05: position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1 moves h2e2 h7e76: go time 300000 increment 07: position fen rnbakabnr/9/1c2c4/p1p1C1p1p/9/9/P1P1P1P1P/1C7/9/RNBAKABNR b - - 0 28: go time 300000 increment 09: position fen rnbakabnr/9/1c2c4/p1p1C1p1p/9/9/P1P1P1P1P/1C7/9/RNBAKABNR b - - 0 2 moves d9e810: go time 300000 increment 0

其中第一条奇数编号的命令就是告诉UCCI引擎棋盘的信息,该哪一方下,偶数编号的命令就是告诉UCCI开始搜索结果,搜索的最大时长为30s,如果觉得搜索的时间过长,可以向引擎发送"stop"指令,让引擎提前给出推荐走法。

分析其中一条具体的命令:
position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1

首先这个“rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR”是棋盘棋子的布局信息,具体编码方式可以参考UCCI协议,这里就不介绍了,需要注意的是在对战的过程中,只要双方没有发生吃子,这个局面信息就不用更新,直到发生吃子后,才把这个局面更新为吃子后的局面。

接着是这个“w”表示的引擎站在哪一方进行思考,"w"表示红方,"b"表示黑方,这里同样也需要注意的是,在对战过程中,只要双方没有发生吃子,这个信息也不需要更新,直到发生吃子后才更新。

最后的两个数字“0 1”对于下棋不是很重要,可以在对战的过程不变

还是举上面一连串命令的例子:
1: position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1
游戏引擎:炮二平五
2 : position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1 moves\color{red}{moves}moves h2e2\color{red}{h2e2}h2e2
游戏引擎:炮8平5
3 : position fen rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1 moves\color{red}{moves}moves h2e2\color{red}{h2e2}h2e2 h7e7\color{red}{h7e7}h7e7
游戏引擎:炮五进四【发生了吃子】
4 : position fen rnbakabnr/9/1c2c4/p1p1C1p1p/9/9/P1P1P1P1P/1C7/9/RNBAKABNR b - - 0 2
游戏引擎:士4进5
5 : position fen rnbakabnr/9/1c2c4/p1p1C1p1p/9/9/P1P1P1P1P/1C7/9/RNBAKABNR b - - 0 2 moves\color{red}{moves}moves d9e8\color{red}{d9e8}d9e8

可以看到在第三步后引擎给出的指示,发生了吃子,所以第4步给出的局面信息以及执子方都发生了变化【如上面黑色加粗部分】
然后还需要注意上面红色的附加部分,虽然局面信息没有变化,但是在对战期间双方落子的历史信息还是需要给出的,就是如红色标出的部分,直到发生了吃子,才会将这个落子信息清空。

eleeye引擎返回结果的解读

就以下图中引擎返回的结果为例来解读:
结果返回在上图的红色圈中,bestmove后面跟的就是引擎给出的走法,ponder后跟的是引擎猜测对方可能的走法,这里我的界面程序就只使用了引擎给出的走法就可以了,猜测的走法不知道怎么用,对于AI的强度影响也不会太大

关于eleeye引擎使用的注意事项

首先关于eleeye的思考的界面,站在eleeye思考的角度,红方是在棋盘的上方,黑方是在棋盘的下方,而且引擎默认是执红,如果想让引擎执黑,可以自己在设计界面程序的时候搞一个坐标的映射,把界面的黑棋映射为引擎视角中的红棋。

游戏使用eleeye引擎的思想就是用进程管道模拟上面手动用cmd来操作引擎,具体详见代码

关于程序的使用教程

程序的使用详见代码中的README,其中关于AI的使用方面由于自己的时间有限,使用的时候稍微有点麻烦,需要开启一个服务器,还有两个main.py窗口,而程序中虽然后单人模式下的人机对战,但是那个AI使用的是自己写的Alpha-beta剪枝算法,很菜。

关于程序代码阅读提示

由于本人代码只是为了完成课程作业写的,所以很多地方没有注释,写的不是很好,有点乱,需要看这个AI引擎怎么用的就只需要仔细看看这个 hyperAI.py 这个模块,其他地方都没有很大看的必要。

一个使用ELEEYE超强AI引擎的中国象棋游戏相关推荐

  1. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

  2. 朋友写的一个中国象棋游戏,JAVA代码

    朋友写的一个中国象棋游戏,JAVA代码.有兴趣的可以这里下载:中国象棋下载 (1)地址,不知现在还能下否....中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说 ...

  3. 设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)

    设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal():设计ChessPiece的具体实现类(如车,马,帅等),这些类能够根据自身特点实现不 ...

  4. C++900行代码实现中国象棋游戏规则以及相关功能

    本文章通过C++中的900行代码实现中国象棋游戏以及相关功能,主要的内容如下: 1.设置未进入游戏前的主页面: 2.绘制棋盘(如果有刚好尺寸的图片也可直接加载),包括棋盘网格,炮与兵的特殊标记绘制: ...

  5. 中国象棋游戏Chess(3) - 实现走棋规则

    棋盘的绘制和走棋参看博文:中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制,中国象棋游戏Chess(2) - 走棋 现在重新整理之前写的代码,并且对于每个棋子的走棋规则都进行了限制,不像之前那 ...

  6. 【180928】中国象棋游戏源码

    一.源码特点     采用c#winform编的象棋游戏,不带人工智能,棋子可以正常的行动,但功能上还有待完善 二.功能介绍     本源码是一个中国象棋游戏源码,由于没有人工智能,所以只能自己跟自己 ...

  7. 基于Java+Swing实现中国象棋游戏

    基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...

  8. 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现

    基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...

  9. Qt终极教程——用Qt编程实现中国象棋游戏(提供源代码和程序编译运行教程)

    Qt终极教程--用Qt编程实现中国象棋游戏 目录 Qt终极教程--用Qt编程实现中国象棋游戏 简介 运行可执行程序体验象棋游戏 Qt 安装 源代码的编译.运行与调试 生成预编译的可执行程序 简介 本文 ...

最新文章

  1. windows获取文件夹下所有文件名的方法
  2. 分享一些书籍,方方面面,很多值得一读
  3. 大数据 清华 覃征_清华大学人工智能研究院大数据智能研究中心揭牌,喊你来参与...
  4. Unix系统编程()main函数的命令行参数
  5. SM37作业条目的存储表
  6. linux io 分析,Linux 下的I/O性能分析 iotop
  7. 应行家算法_一些行家技巧和窍门
  8. 《python网络数据采集》读后感 第六章:读取文档
  9. 华中师范大学邮箱matlab,18春[华中师范大学]华师《Matlab基础与应用》在线作业1(100分)...
  10. 狂奔的瑞幸咖啡讲了一个好故事 但还缺失一种 “感觉”
  11. 在线火星文转换器工具
  12. linux ape,linux把ape+cue格式转换成flac,同时保留曲目信息转载
  13. camera 驱动 raw bayer isp
  14. PLC、PAC、PC-Based、软PLC傻傻分不清
  15. SpringMVC使用websocke
  16. python的self使用
  17. Opera下载最新版本地址
  18. 中国铁路信息化行业规划布局及投投资可行性分析报告2022-2028年版
  19. 外卖:争夺饥饿用餐者的战争
  20. 鸿蒙5G的营业执照,华为继“鸿蒙”商标后注册“5G”商标

热门文章

  1. pyqt5多窗口之间转换调用--比较好的一个模板
  2. element-ui dialog z-index 递增问题
  3. 【转】29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?
  4. Java程序员面试笔试真题库——猿媛之家PDF文件免费下载
  5. 基于多向梯度局部对比度的红外弱小目标检测算法(MDWCM)解析及代码(2021年IEEE GRSL 论文)
  6. 神舟战神笔记本fn键调屏幕亮度失灵
  7. JavaScript的eval()方法的使用
  8. Java(二)分支循环、数组、字符串、方法
  9. 计算机模拟方法棒影图,棒影图实验报告.doc
  10. 中文简繁体互转时的语义识别AI