电脑象棋 电脑象棋-简介,电脑象棋-审局函数

电脑象棋,是指人工智能象棋对弈软件。电脑象棋软件的制作,分成开局、中盘、残局三个部分,各自有不同的算法,开局主要以储存的开局棋谱为本,中盘与残局则运用审局函数和对局树的计算,但残局必须考虑特例的计算。2006年最好的电脑象棋软件,已可以和顶尖棋士相抗衡。

象棋电脑_电脑象棋 -简介


电脑象棋

一般来说,象棋划分成开局、中盘、残局三个阶段,在制作电脑象棋时,这三个阶段的演算法也会不同,开局阶段大多以资料库储存开局棋谱,下棋时就由资料库查询得知下一手,当然啦,棋局不可能储存无限多,当局势发展超出资料库范围,就进入了中盘。

如果不要求棋力很高,或是初次制作电脑象棋,中盘和残局可以不用细分,用同样的演算法就行了,一般来说程序中一定会有个审局函数和一个对局树,这也是这篇文章的重点,当进入残局阶段,因为象棋的残局有许多特例,通常电脑象棋会特别为这些特例建立一个残局资料库和特殊的演算法,这里先不讨论。

象棋电脑_电脑象棋 -审局函数

评估盘面形势

审局函数是作用在于评估盘面的敌我形势,玩过象棋大师2的人就会知道,在对奕中画面会有个数字随盘势而变化,那就是审局函数算出来的值,电脑透过这个值可以判断目前的局势。审局函数判断棋力的依据,主要根据下列三项:

子力

子力是评做局势最简单的方法,高手让对手双马或一车来平衡棋力,就是最好的说明,我们可以看看前人怎么来设计,应该特别注意的是,象棋的规则胜负在于吃掉对方的主帅,所以将(帅)的值应大于所以其余子力的总和。


图表

位置

在象棋的开局里,对局双方通常会尽速的将车马炮移到重要位置上,尤其是车一定要抢住要线,可见位置对局势的影响。在为位置评分时,可以为每个不同的棋子设计一个二维阵列,用以记录棋盘上每个点的重要性,下面以马(?)为例。


图表

灵活度

在象棋里,每一种棋子都有它自己的限制,如果在下棋的过程中,让棋子限制变很多,将会使棋子的能力降低,所以在评估局势时,棋子的灵活度也是考虑的重点。

象棋电脑_电脑象棋 -对局树

下象棋时,棋力越高的人,就能看到越远的着手,一个能看到十三步以后着手的人,比一个只能看到五步着手的人棋力肯定是要高。在电脑象棋里,使用对局树来达到往前看的能力。如下图是对局树的一个范例。


图表

当建好对局树之后,再用广度搜寻或深度搜寻将最佳着手找出来,在象棋比赛里会有时间限制,所以通常会以广度搜寻先搜寻到某个深度之后,再针对几个重要着手做深度搜寻。要特别注意的是,审局函数设计越精准棋力固然会越高,但是,越精准的审局函数也会计算越久,因为对局树每个结点都要呼叫审局函数一次,如果审局函数计算太久,在有限时间内,对局树就不能建立太多层,这将影响到电脑的棋力,如何在两者间取得一个平衡,就要靠经验了。

因为象棋的变化很多,如果所有可能着手都要建立对局树,那么对局树将会非常庞大,所以又有各种演算法被发展出来,用来修减对局树,将不必要的着手先修减掉,目前最常用的当属Alpha-Beta修减法,其演算法就留给各位网友自行查阅相关论文了。

象棋电脑_电脑象棋 -从图形界面做起

与本文配套的示范程序是“象棋小巫师”0.1版,程序清单是:

(1)XQWL01.CPP――C++源程序;

(2)XQWLIGHT.RC――资源描述文件;

(3)RESOURCE.H――资源符号定义文件;

(4)RES目录――图标、图片、声音等资源。

为了使更多的程序设计师对这个话题感兴趣,我们选用了最常用的程序开发工具――MicrosoftVisualC++,它适合编写Windows下的任何应用程序。为了让程序尽可能简洁,我们不使用任何第三方的控件和库,取而代之的是大量的Win32API函数。

象棋程序是让人跟电脑下棋的,所以图形界面必不可少。我们选取了开源程序《象棋巫师》中的素材――一张520x576大小的棋盘图片和几张56x56大小的棋子图片,拼凑在一起便可组成一副不太难看的棋具。


图表

这样,鼠标点击事件(WM_LBUTTONDOWN消息)的处理过程就可以写成:

if(点击自己的子){
把点击的子选中;//进入状态B(已选中)
}elseif(已经有子选中){
可以走这步棋(刚才选中位置->现在点击的位置);//进入状态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这两个格子都做上标记,这样就能清晰地看到用户或电脑刚才走的一步棋了。

电脑象棋 电脑象棋-简介,电脑象棋-审局函数

象棋电脑_电脑象棋 -大事纪

1988,宏

  

爱华网本文地址 » http://www.aihuau.com/a/8103260103/34347.html

更多阅读

世界知名品牌电脑散热风扇厂商简介 散热器十大知名品牌

  世界知名品牌电脑散热风扇厂商简介  一、NMB风扇  日本美蓓亚(MINEBEA)集团在世界17个国家拥有40个生产基地和约70个销售基地,主要产品有各种滚珠轴承以及各种小型微电机(风扇,步进马达),FDD部件,PC键盘等电子机器零部件,提供给世界

与电脑下象棋 人与电脑象棋游戏

与电脑下象棋是在 1993年。数学系的一个朋友对我说,他们系的计算机里装了一个象棋软件,棋走的相当不错,出着速度极快,几乎是没有思索,着法凶狠,系里没人能下得过,希望我去过过招。一听说和电脑下棋,我来了精神头,当即就去了。朋友帮助我把

宝贝电脑简介 万达宝贝王简介

产品信息-简介早学好品牌宝贝电脑——是由国内外幼儿教育专家团队,根据3-7岁宝宝成长智力发育的特点进行开发的新一代幼儿早教电子产品。早学好品牌宝贝电脑通过寓教于乐、玩中学、学中玩的方法,让孩子在游戏中、自主动手时获取知识

电脑游戏 电脑游戏-简介,电脑游戏-发展历史

电脑游戏(Personal computer games, Computer games 或 PC games)是指在电子计算机上运行的游戏软件。这种软件是一种具有娱乐功能的电脑软件。电脑游戏产业与电脑硬件、电脑软件、互联网的发展联系甚密。电脑游戏为游戏参与者提供了

声明:《电脑象棋 电脑象棋-简介,电脑象棋-审局函数》为网友烦恼的帥气风分享!如侵犯到您的合法权益请联系我们删除