计算机象棋循序渐进
 
象棋百科全书网 (webmaster@xqbase.com) 20084
 
  本连载将分六个阶段来论述一个计算机象棋顺序从无到有、从弱智到智慧的历程,对应“象棋小巫师”树模顺序的各个版本:
  0.1版:引见制造象棋图形界面的要领;
  0.2版:引见中国象棋划定礼貌的完成;
  0.3版:引见以Alpha-Beta搜索为根蒂基本的一些盘算机博弈基本智能算法;
  0.4版:引见Zobrist校验码、一次又一次局势剖断以及消退水平线效应的种种手艺,进一步提升顺序的智能;
  0.5版:引见置换表手艺和走法递次优化窍门,使一个象棋顺序的手艺架构趋于完整;
  0.6版:引见战胜搜索不稳固性的要领、残局库、走子随机性等如虎添翼的手艺。
  本连载破费的文字不多,重点的手艺只是点到为止,而在树模顺序里则有详实的注释。关于一些手艺细节,可参阅象棋百科全书网盘算机博弈专栏关于国际象棋顺序设想的系列译文:
    /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(未选中)
}
 
  那末,怎样把一枚棋子画在棋盘上呢?现实上只需用BitBltTransparentBlt两个函数就够了,历程以下:
  (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 * 256mv 象征走法,mv % 256 就是肇端格子的编号,mv / 256 就是目的格子的编号。走完一步棋后,一般会把该走法赋值给变量 mvLast,并把 mvLast % 256 mvLast / 256 这两个格子都做上符号,这样就能够清晰地发现用户或计算机适才走的一步棋了。
  • 上一篇
  • 下一篇 计算机象棋循序渐进():掌握象棋划定礼貌
  • 返 回 象棋百科全书——盘算机博弈
  • www.xqbase.com