目录

1 系统需求分析:

1.1游戏简介:

1.2机器下棋史:

1.3研究内容:

1.4编译环境:QT

2 总体设计

2.1系统功能分析:

1.界面表示

2.鼠标点击

3.棋子走法

4.评估函数

5.搜索算法

6.剪枝算法

2.2系统功能模块划分与设计


1 系统需求分析:

1.1游戏简介:

象棋以充满趣味性的游戏形式兴起并延续至今,在近现代则作为体育项目添加了竞技因素,以及作为文化载体被传统中国文化及思想赋予了文化精髓。

象棋是由两人轮流走子,以“将死”对方将(帅)为胜的一种棋类运动,古今中外,象棋都有着广泛的爱好者。在国内,象棋经过近千年的实践,于北宋末定型成近代模式:32枚棋子,有河界的棋盘,将在九宫之中等等。南宋时期,象棋家喻户晓,成为流行极为广泛的棋艺活动。李清照、刘克庄、杨慎、唐寅、郎英等文学家,洪遵、文天祥等政治家,都嗜好下象棋。宫廷设的"棋待诏"中,象棋手占一半以上。

民间有称为"棋师"的专业者和专制象棋子和象棋盘的手工业者。象棋在国外尤其是在东南亚的侨胞和外籍华人中也广泛流传。这些地区和国家近年也都举行象棋比赛,而且都已分别成立了象棋总会或象棋协会。许多海外华侨、华人和港澳同胞把象棋看作是侨胞与祖国联系的桥梁和纽带,把开展象棋活动看作是炎黄后裔对自己民族文化的继承和发扬。

近几十年来,随着贸易和文化交往的不断发展,象棋在英、美、法、加拿大、德国等国家也发展了不少的爱好者。象棋正从它的发源地,经过亚洲,传播到世界各个角落。

1.2机器下棋史

20世纪80年代中期,卡内基梅隆大学的柏林纳开始用专用硬件来实现下棋机,他的成果 HiTech 马上成为最强的机器棋手。  这时来自中国台湾的许峰雄到卡内基梅隆大学计算机系跟随孔祥重读计算机体系结构方向的博士。 许峰雄的室友很快把他拉到 HiTech 项目帮忙设计一个硬件的评估函数,但许峰雄却和柏林纳关系不睦。 在资金有限的情况下,许峰雄和几个研究生利用业余时间快速开发出了 ChipTest,而 ChipTest 立即变成了 HiTech 的竞争对手,并受到柏林纳的打压。 许峰雄在计算机系也变成众矢之的,每次都是靠导师孔祥重的帮忙化险为夷。 ChipTest 的改进版“深思”(Deep Thought)1989年赢得弗雷德金二等奖:成为第一个国际象棋特级大师的机器棋手。随后 HiTech 也加入这个行列。 而此时 IBM 意识到“深思”的商业价值,于是劝说整个团队在毕业后加入 IBM,开发下棋机,把对手锁定为当时的世界冠军俄罗斯特级大师卡斯帕罗夫。 卡斯帕罗夫对机器下棋非常熟悉,他在屡次和机器对决后曾说:机器下棋没有洞见(insight)。 IBM 的外号叫 Big Blue,于是新的项目1996年被命名为“深蓝”(Deep Blue)。 1996年 ACM 年会的闭幕节目是“深蓝”对决卡斯帕罗夫,六局棋。“深蓝”旗开得胜,第一局就赢了老卡,最后还是老卡 4:2 赢得决赛。 此时老卡对“深蓝”刮目相看,他说机器对手不光有洞见,而且有几步简直像“上帝下的”。 第二年“深蓝”和老卡再战,老卡号称要捍卫人类的智力尊严。他赢了第一局,但随后则越来越保守,彻底输给“深蓝”。 1997年5月11日,老卡认输,“深蓝”成了第一位战胜当时世界冠军的机器。事后,卡斯帕罗夫回忆:第二局是关键,机器表现超出他的想象,它经常放弃短期利益,表现出非常拟人的危险。 在“深蓝”赢了卡斯帕罗夫之后,职业棋手并没有因此而改行,他们反而更多地依赖计算机来训练。机器作为教练,反而更快地帮助人类棋手进步。 从来就没有过这么多年轻棋手在年龄很小时就积分这么高,这都得益于计算机教练,因为过去的孩子从来就没有机会能和特级高手比赛。 现在两台个人电脑下棋,人已经看不懂它们在下什么。尽管如此,“深蓝”队员,同样毕业于卡内基梅隆大学的坎普尔仍然不认为机器有智能。 这其实是整个“深蓝”团队的意见,他们都不是人工智能出身,反而和同系的人工智能教授结下梁子。 “深蓝”获胜后,美国人工智能学会(AAAI)曾经组织过一个研讨会,对人工智能启发式搜索做出过杰出贡献的加州大学洛杉矶分校教授科夫曾不满“深蓝”团队的立场。

1.3研究内容

人工智能的基本思考方法是穷举法,即通过对所有可能的招法的演化结果进行比较,最后选择出一个最好的招法。这种比较一定是越深越好。我们知道,平日里象棋水平越高的人,能够对战局演化看得越远,比如看到五步棋。计算机也一样,走出一个棋子后,便生成一个“局面”;在这个新的局面下,又有38种可能的棋子走法,无论选择其中哪一种,都会再次生成一个更新的局面。每一次考虑一个棋子的走法时,如果将所有这些变化列起来,就会形成一棵“树”,主干上有38个分支,每个分支上再有38个分支,依此类推,共有120层(中国象棋一般可以走120步)。这就是“博弈树”。计算机要做的就是比较最后一层的结果,选择其中一个最好的结果,然后逆推,找到本局面最好的一个走法。

1.4编译环境QT

2 总体设计

2.1系统功能分析

1.界面表示

2.鼠标点击

3.棋子走法

4.评估函数

5.搜索算法

6.剪枝算法

2.2系统功能模块划分与设计

C++ QT开发人机象棋(大纲)相关推荐

  1. C++与Qt开发人机象棋(第二部分)

    C++与Qt开发人机象棋(第二部分) 项目目录 文件名->(包含)类名1->(包含)类名2 ChessBy ChessBy.pro Headers Board.h – – – Source ...

  2. C++ QT开发人机象棋(搜索算法)

    使用极大极小值算法,在满足电脑下棋的时候自己的局势能够获得最大权值的情况下判断在当前局势下的玩家的最小的权值,这样能够保证算法最优. 先从一个故事说起,比如说现在有有一个小偷偷了一些物品,小明看到后跟 ...

  3. C++ QT开发人机象棋(界面表示)

    目录 1.1界面表示: 1.1.1棋盘表示: 1.1.2.棋子表示: 2.1界面表示: 2.1.1棋盘绘制 一:作用 二:执行时间 2.1.2棋子绘制 1.1界面表示: 1.1.1棋盘表示: 使用十条 ...

  4. C++ 与Qt开发人机象棋(第一部分)

    MyWidget.h //Hearders #include <QWidget> #include "MyWidget.h" #include <QPushbut ...

  5. C++ QT开发人机象棋(鼠标点击)

    鼠标点击棋子,棋子能够进行相应的操作. mouseReleaseEvent(QMouseEvent *ev) 鼠标点击了以后,我们要知道鼠标点击的这个棋子的横纵坐标和这一点的棋子的id,这个时候需要调 ...

  6. C++ QT开发人机象棋(评估函数)

     每个棋子在当前点的所有可能走的情况用一个容器存储起来,根据搜索的层数输出相应的权值. 在搜索到最底层的时候进行权值的判断,判断的最终结果为棋盘上面的黑棋的棋子分减去棋盘上面的红棋的棋子分. long ...

  7. C++ QT开发人机象棋(剪枝算法)

    改变singleGame()里面的_level的值为5的话,程序就会崩溃,很显然由于最大值最小值算法遍历整个棋盘几层的话时间复杂度十分的高,为了优化程序我们就应该减少程序的运行量,那么也就有了剪枝算法 ...

  8. 使用Qt开发中国象棋(一):概述

    最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法.基于这些,自己 ...

  9. 使用Qt开发中国象棋(三):走棋着法列表

    在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些.着法列表显示了每一步的走棋.下图是着 ...

最新文章

  1. 【收藏】spring boot+websocket+echarts 后台推送数据用echarts展示
  2. MySQL中的多表插入更新与MS-SQL的对比
  3. jQuery实现右上角点击后滑下来的竖向菜单
  4. Qt_共享内存(QSharedMemory)未完成
  5. 洛谷——P1897 电梯里的爱情(两种解法:普通方法、桶排序方法)
  6. java css文件预处理_浅谈 CSS 预处理器: 为什么要使用预处理器?
  7. 锁相环环路滤波器计算公式_锁相环和射频振荡器简介
  8. SVM多分类算法-一对一
  9. xml引用xsd文件规则
  10. 企业绩效考核管理制度
  11. 腾讯云即时通讯im之获取userSig
  12. 数据库系统的主要组成部分
  13. python换照片底色_详解Python给照片换底色(蓝底换红底)
  14. 骑士cms任意代码执行(CVE-2020-35339)
  15. 原型链上的__proto__和protoptype
  16. 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——加密解密
  17. django天天生鲜项目
  18. TCP/IP实现(九) 插口I/O
  19. AIGC困局与Web3破圈之道
  20. 出行服务+AI —— 一次模拟的创业

热门文章

  1. import java.io后报错_用JSP+JAVABEAN实现一个根据圆半径求圆面积、圆周长的功能:为什么我的老出错啊错误:...
  2. 疯壳AI开源无人机PWM(电机控制)
  3. http请求头中的host是什么意思
  4. 2022校招已开启,学生党必备之什么是秋招和春招!
  5. 计算机机房内宜配置灭火器,GB/T 9361-2011_计算机场地安全要求(8页)-原创力文档...
  6. 牛客网刷题记录 || 结构体和类
  7. Java集合(二二): LinkedList源码剖析
  8. python计算存款复利计算器_分享下自己写的计算余额宝上复利的代码,网上的复利计算器无法满足需求...
  9. 这里是凌晨4点半的合肥
  10. [N9H30]在例程中使用printf导致程序无法运行