首页 计算机象棋博弈电脑象棋循序渐进(连载)(一) 从图形界面做起

计算机象棋博弈电脑象棋循序渐进(连载)(一) 从图形界面做起

举报
开通vip

计算机象棋博弈电脑象棋循序渐进(连载)(一) 从图形界面做起 电脑象棋循序渐进   象棋百科全书网 (webmaster@xqbase.com) 2008年4月     本连载将分六个阶段来阐述一个电脑象棋程序从无到有、从弱智到聪明的过程,对应“象棋小巫师”示范程序的各个版本:   0.1版:介绍制作象棋图形界面的方法;   0.2版:介绍中国象棋规则的实现;   0.3版:介绍以Alpha-Beta搜索为基础的一些计算机博弈基本智能算法;   0.4版:介绍Zobrist校验码、重复局面判断以及消除水平线效应的各种技术,进一步提高程序的智能...

计算机象棋博弈电脑象棋循序渐进(连载)(一) 从图形界面做起
电脑象棋循序渐进   象棋百科全书网 (webmaster@xqbase.com) 2008年4月     本连载将分六个阶段来阐述一个电脑象棋程序从无到有、从弱智到聪明的过程,对应“象棋小巫师”示范程序的各个版本:   0.1版:介绍制作象棋图形界面的方法;   0.2版:介绍中国象棋规则的实现;   0.3版:介绍以Alpha-Beta搜索为基础的一些计算机博弈基本智能算法;   0.4版:介绍Zobrist校验码、重复局面判断以及消除水平线效应的各种技术,进一步提高程序的智能;   0.5版:介绍置换表技术和走法顺序优化技巧,使一个象棋程序的技术架构趋于完整;   0.6版:介绍克服搜索不稳定性的方法、开局库、走子随机性等锦上添花的技术。   本连载花费的文字不多,关键的技术只是点到为止,而在示范程序里则有详尽的注释。关于一些技术细节,可参阅象棋百科全书网计算机博弈专栏关于国际象棋程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的系列译文:     http://www.xqbase.com/computer.htm   (一) 从图形界面做起     与本文配套的示范程序是“象棋小巫师”0.1版,程序清单是:   (1) XQWL01.CPP——C++源程序;   (2) XQWLIGHT.RC——资源描述文件;   (3) RESOURCE.H——资源符号定义文件;   (4) RES目录——图标、图片、声音等资源。     为了使更多的程序设计师对这个话题感兴趣,我们选用了最常用的程序开发工具——Microsoft Visual C++,它适合编写Windows下的任何应用程序。为了让程序尽可能简洁,我们不使用任何第三方的控件和库,取而代之的是大量的Win32 API函数。   象棋程序是让人跟电脑下棋的,所以图形界面必不可少。我们选取了开源程序《象棋巫师》中的素材——一张520x576大小的棋盘图片和几张56x56大小的棋子图片,拼凑在一起便可组成一副不太难看的棋具。       仅仅把棋盘和棋子画到窗口上是不够的,图形界面的另一个作用是让用户走棋。走棋的操作应该是非常简单的——用鼠标点击一枚棋子,该棋子就被选中(上面有个标记),用户想让这枚棋子走到哪个位置,就用鼠标点击哪个位置。因此,操作过程可分为两状态:   A. 让用户选子的状态:只能点击自己的子;   B. 让用户落子的状态:如果点击自己的子,那么被选中的子改变了;如果点击对方的子或空格处,那么可以走这步棋。       这样,鼠标点击事件(WM_LBUTTONDOWN消息)的处理过程就可以写成:   if (点击自己的子) {  把点击的子选中; // 进入状态B(已选中) } else if (已经有子选中) {  可以走这步棋(刚才选中位置->现在点击的位置); // 进入状态A(未选中) }     那么,如何把一枚棋子画在棋盘上呢?实际上只要用BitBlt和TransparentBlt两个函数就够了,过程如下:   (1) 把原来位置的棋子用棋盘图案覆盖掉(用BitBlt函数);   (2) 在该位置贴上棋子的图案,由于棋子图案是透明的,所以要用TransparentBlt函数;   (3) 如果这枚棋子是选中的,那么再在该位置贴上选中的图案(再用一次TransparentBlt函数)。     在象棋小巫师中,所有在棋盘上的棋子都放在数组 ucpcSquares[256] 中(长度256的好处将在后面介绍),数组指标代表格子的编号,匈牙利标记 uc 表示每个元素占用一个字节,pc 表示棋子标识。棋子标识的含义如下:   A. 0表示空格(没有棋子);   B. 8~14依次表示红方的帅、仕、相、马、车、炮和兵;   C. 16~22依次表示黑方的将、士、象、马、车、炮和卒。   这样做的好处是判断棋子的颜色非常简单——(pc & 8) != 0 表示红方的棋子,(pc & 16) != 0 表示黑方的棋子。     在象棋小巫师中,选中的棋子用变量 sqSelected 表示,sq 代表格子的编号。判断棋子 ucpcSquares[sq] 是否被选中,只需要判断 sq 与 sqSelected 是否相等即可。sqSelected == 0 表示没有棋子被选中。   在象棋小巫师中,一个走法只用一个数子表示,即 mv = sqSrc + sqDst * 256,mv 代表走法,mv % 256 就是起始格子的编号,mv / 256 就是目标格子的编号。走完一步棋后,通常会把该走法赋值给变量 mvLast,并把 mvLast % 256 和 mvLast / 256 这两个格子都做上标记,这样就能清晰地看到用户或电脑刚才走的一步棋了。 PAGE 2
本文档为【计算机象棋博弈电脑象棋循序渐进(连载)(一) 从图形界面做起】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_959092
暂无简介~
格式:doc
大小:382KB
软件:Word
页数:0
分类:互联网
上传时间:2018-09-09
浏览量:17