一些容量较小的象棋软件开始出现,如:DOS界面的《通用》、WIN31程序的《中国象棋》等。 与其说人类不能在计算机上下棋,不如说人类没有耐心去玩。等待计算机程序的缓慢搜索。 算法,有时甚至怀疑软件是不是在搜索中死了。 后来,网上出现了真正WINDOWS窗口界面的专业高级象棋软件“棋音”、“象棋世家”、“象棋杖”、“象棋精灵”等。 总而言之,各类下棋软件都有各自的优点,但也有共同的缺点,如:中局判断局势不够智能、无法舍弃棋子、发挥人性化大作等,并且最终游戏中的智力明显低于人脑。 、难以走出残局的必然走法等等。展望未来,棋牌软件已经完成了一波持续上涨的价格,可能会出现逐渐降温的下跌趋势。 主要功能本国际象棋人机博弈系统实现的功能主要包括: 1、棋手选择(人或计算机); 2、人机象棋(人和计算机比赛); 3、后悔与挽回; 4、棋步名称显示(国际象棋)(国际象棋规范名称) 主要工作 1.1 本程序的主要工作 第一部分主要介绍中国象棋游戏发展的背景和意义,国内外象棋软件的发展概况、棋类游戏的设计与研究方法; 第二部分介绍国际象棋博弈的表示方法——走法的生成; 第三部分介绍棋步和游戏程序的实现; 第四部分介绍了系统的实现。
算法设计用short board[256]表示棋盘,非棋盘位置为0,棋盘上没有棋子的位置也为0。使用长度为256的数组,可以用一维数组与两位数数组一样方便。 如果要表示在第三行第四列,就用board[0x34]即可。 算法设计 1.1 遗憾和恢复功能的实现 遗憾和恢复是国际象棋软件中比较基础的功能。 要实现后悔和恢复功能,首先要明确需要保存哪些信息来进行后悔和恢复。 程序中保存了以下信息: 国际象棋游戏表示中定义的棋盘数组; 每个棋子的地图位置; 这里需要特别说明的是,通常国际象棋程序为了程序效率游戏动态,不会保存所有棋子的信息,而只保存上一步。 国际象棋走法信息。 之后,当您对搬迁感到后悔时,您需要取消搬迁; 当你恢复它时,你需要执行移动。 不过,自己编写程序时,首先要考虑程序的可读性和不易出错的情况,其次要考虑到以今天的计算机配置,这个开销对程序的效率基本上不会产生影响。 因此,所有棋子的信息都被保存下来。 算法设计在后悔棋中主要完成以下任务: 1、将棋局数减少一轮; 2、将当前位置信息保存到移动队列中进行恢复; 3. 从走棋队列中删除上一轮的棋局。 信息,恢复到当前情况,然后从队列中删除; 4、将显示招式名称列表框中本轮的招式名称保存到招式名称队列中进行恢复。
然后将其从列表框中删除。 算法设计 (3) 通用检测 通用检测功能的相关函数在check文件夹中。 checkmate.cpp调用check文件夹中的其他函数来检测当前正面(检查边)/当前位置(检查该地方的进攻棋子)这一边是否被检查。 如果返回 true,否则返回 false。 可以使将领的棋子中包含对方的车/对方的马/对方的兵/对方的炮。 另外,还有一条规则,不能检查将军。 因此,将/战车/炮/马/兵五种棋子各编写了一个检测函数,都是由checkmate.cpp中的bool checkmate()调用的。 算法设计AI部分采用自下而上的方法进行设计,包括态势表示/走法生成/态势评估/通用检测/搜索算法。 AI部分代码位于kernel文件夹中。 内核文件夹中的代码组织与AI的结构同构。 表示情况的数据结构和一些其他全局变量在 global.h 中声明,define_global.cpp 中定义了为 .move 文件夹中的移动生成的函数。 一般检测功能在check文件夹中。 位置评估函数位于 eval 文件夹中。 搜索功能位于搜索文件夹中。 每个文件夹下有test.cpp和makefile是相应功能的测试代码。 用户可以在相应的文件夹中运行make,然后执行可执行文件来查看测试结果(makefile是在Linux环境下编写的)并评估算法设计情况。
对具体情况进行评分。 当引擎部分的所有元素都实现后,可以先创建一个Win32控制台项目,然后只需添加一个负责接受用户输入、调用搜索函数、显示搜索结果的.cpp文件,就可以简单地测试引擎了(利用输入走棋的起点坐标和终点坐标来传输用户走棋的信息(同样,程序通过显示计算机走棋的起点坐标和终点坐标来响应)。 比赛时,持有红棋的玩家先走棋,双方轮流走棋,直至决出胜负或平局,游戏结束。 当轮到玩家移动棋子时,将棋子从一个交叉点移动到另一个交叉点,或者吃掉对方的棋子并占据其交叉点,都算作一次走棋。 双方各走一步,称为一轮。 如果一支球队的教练被另一支球队击败,那么该球队就输了。 如何移动各种棋子: 帅(将):帅和将是棋中的领导者,是双方努力的目标。 它只能在“九宫”内移动,可以上、下、左、右,每纵横线只能移动一格。 指挥官和将军不能在同一直线上直接面对面,否则移动的玩家就会失败。 侍(shi):侍(shi)是帅(将军)的贴身侍卫,只能在九宫内走动。 它的路径只能是九宫之内的对角线。 象(Xiang):象(Xiang)的主要作用是保卫和保护自己的将领。 它的移动方法是一次对角移动两个方格,俗称“大象过田”。
象(Xiang)的活动范围仅限于自身在“河界”内的位置,不能越河。 而且,如果它移动的“场”中心有一个棋子,它就不能移动。 这就是俗称的“挡住大象的眼睛”。 Rook:Rook是国际象棋中最强大的。 它可以在水平和垂直线上移动。 只要没有棋子阻挡,移动次数就不受限制。 因此一车可控十七个点,故称“一车十冷点”。 大炮:当大炮没有吃碎片时,它的移动方式与车完全一样。 马:马斜行,即先水平或垂直移动一格,然后再对角斜行,俗称“走马日”。 马一次可移动的选择点可达其周围八个点,故有“八面威严”之说。 如果有其他棋子挡住了去路,马就走不到那里,也就是俗称的“坏马腿”。 Bing(Pawn):在过河之前,Bing(Pawn)只能一步步前进。 过了河后,除了不能后退外,允许他们左右移动,但一次只能移动一步。 了解了以上规则后,就可以玩游戏了。 执行软件后即可进入游戏界面。 总结 2014年2月,我开始写毕业论文。 截至目前,论文已基本完成。 从最初的混乱中国象棋游戏设计,到慢慢进入状态,再到思路逐渐清晰,整个写作过程很难用语言来表达。 经过几个月的努力,紧张而充实的毕业设计终于结束了。 回顾这段时间的经历和感受,我感慨万千。 在这次毕业设计的过程中,我有无数难忘的回忆和收获。
脚踏实地、认真严谨、实事求是,以及不怕困难、坚持不懈、吃苦耐劳的精神,是我在这次设计中最大的收获。 我认为这是对意志的一次磨练,对我实际能力的一次提升,对我今后的学习和工作都有很大的帮助。 这次毕业设计也让我们和同学的关系更进了一步。 同学们互相帮助。 如果有不懂的地方,我们可以一起讨论,听取不同的意见,帮助我们更好地理解知识。 非常感谢。 帮助我的同学。 还要感谢我的导师和专业老师的悉心指导和照顾,使我能够顺利完成毕业论文。 老师们的心血和心血都投入到了我的学习和论文研究工作中。 老师严谨的治学态度、渊博的学识、无私的奉献精神深深地启发了我。 从我尊敬的导师那里,我不仅学到了扎实、广博的专业知识,还学到了做人的道理。 谨向我的恩师表示最衷心的感谢和崇高的敬意。 缺点:该程序进行计算机游戏技术的研究。 在深入研究机器下棋理论的基础上,实现了具有一定棋艺水平的人机下棋程序。 但由于时间限制材质材料,该程序也存在几个不足:第一:对计算机象棋引擎部分没有进一步的探索和研究。 当今国际象棋游戏程序中使用的先进技术和思想,如BitBoard、迭代深化、机器学习等,都没有在程序中涉及。
这在一定程度上影响了程序中下棋引擎的效率。 第二:由于对人工智能算法不熟悉,花费了大量的时间和精力去理解Alpha-Beta搜索算法,导致程序进度缓慢。 这些问题虽然最终得到了解决,但却影响了程序开发的进程。 第三,程序在情况检测和纹理刷新方面仍然存在随机出错的可能性(出错的概率很小)。 参考文献 主要参考文献(资料) [1] 钱守玉,葛敏芳. 中国象棋棋局的计算机辅助分析[J]. 微电子学和计算机。 1987(05) [2]岳金鹏中国象棋游戏设计,冯苏。 博弈树搜索算法在中国象棋中的应用[J]. 计算机系统应用。 2009(09) [3]徐新和,王娇。 中国象棋计算机游戏关键技术分析[J]. 小型微型计算机系统。 2006(06) [4]高强,郭晨。 哈希技术在中国象棋机博弈系统中的应用研究[J]. 科学、技术和工程。 2008(17) [5] 谢国. 中国象棋机博弈数据结构设计与搜索算法研究[D]. 西安理工大学2008\ [6] 董洪安. 计算机五子棋游戏系统的研究与实现[D]. 山东师范大学2005 [7]万毅. 计算机象棋博弈系统的研究与实现[D]. 西南交通大学2006年参考文献8.
YenWu R,Beal D F。快速、内存高效的逆行算法。 ICGA 杂志。 20019.SJ,Chen JC,Hsu SC中国象棋信息..ICGA比赛信息主页。 200410.Hsu TS,Liu PY残局数据库验证。 ICGA 杂志。 2002年运行截图
文章来源:https://max.book118.com/html/2020/0709/8100104073002123.shtm