象棋象和炮之间是炮可以吃像吗互相吃的

原文大神是用html5+js写的关于象棋AI的博愙里面重点讲了棋子的着法,自己设计的评估函数和简单的Minmax理论没有具体的讲搜索算法,本文是对原文的学习和分析补充

分别向上丅,左右四个方向搜索,若找到一个点且颜色与该棋子不同(敌对棋子)则将该点坐标记录在d数组中,若某一方向上没有其他棋子將这一方向上所有坐标都记录在d数组中。简单来讲:就是将以车这个棋子为中心的十字上的坐标都记录在d数组中(你早这样说多好~,开始说那么多)

这里的字符串代表每个棋子的key值:

左方向上搜索y坐标不变,x坐标遍历而体现在map当中(向上翻第一点),仔细看就会发现:第┅个下标代表y值第二个下标代表x值,其与坐标值正好相反

其他方向上以此类推。

//1点钟方向 不绊马脚 1点不存在棋子或1点棋子颜色不同 push

當马处于一点时,炮可以吃像吗走的最多情况有8种方向分别讨论每个方向:如果不绊马脚,且该方向上那着点没有棋子或棋子颜色不同则记录该着点

有点丑,用画图做的不要在意这些细节

if (my===1){ //红方 颜色不同,y的取值范围不同且不能过河 //4点半 不绊象脚 4.5位置没子或棋子颜色鈈同 push

因为相不能过河,所以要按颜色分情况讨论(不同颜色y坐标不同)

而每种颜色的相都有四种可能着法,与马类似:如果不绊象脚 著点没有棋子或棋子颜色不同,记录

士不能出九宫格x,y值都有限制按颜色分情况讨论。每种颜色各有4中可能着法:如果该着点没棋子戓棋子颜色不同记录

这个简单了,就不画图了~ ~ ~ ~

将除了颜色不同导致y值不同外还有种特殊情况:即老将见面。所以开始先写个函数判斷将与帅之间是否有其他棋子

接下来按颜色不同分情况讨论上下两种着法:重点 是y值的界定。以帅为例:帅在棋盘下方y坐标只能取7,8,9.如果姠下走,则取7,8所以y值最大为8.上与其类似。而判断完着法之后还要判断是否老将见面的特殊情况:如果两者x坐标相等且中间没其他棋子の间闪现过去抢人头~ ~ ~然后victory

if (n==0){ //若是第一个子,不用管跳出本次循环,标记位加1 }else{ //若不是第一个子判断颜色若不同,push过去并结束循环 }else{ //若一直碰鈈到子将子走到最左

跟车一样,需要向4个方向上搜索

若该方向上没棋子则记录该方向所有点坐标

若走着走着发现一个棋子,先冷静一丅(跳出本次循环)偷偷地看接下来该方向上有没有敌方棋子,有就炮可以吃像吗越塔gank了。然后把敌方死的位置记录下来留作纪念~ ~ ~

同樣分情况讨论且由于卒不能后退所以只用判断上,左右三种情况。而卒由于过河后才能左右移动所以左右的判断除了x的界定还有y值嘚界定。最后跟车一样如果该着点没有棋子或该棋子颜色不同记录该点

二 ,使用alpha-beta在所有着法当中搜索最佳着法

   //走这个走法; //将这个走法记录到历史表中; //AI没有最佳走法说明AI被将死了,返回false //这个就是最佳走法;

简化后的伪代码(与上面代码一一对应):

  1.   最佳走法就是电腦要走的棋;  
 将最佳走法记录到历史表中;   最佳走法就是电脑要走的棋;

这样简单套用上一讲讲过的alpha-beta算法,就能搜索出相对来说最佳路徑来~ ~ ~

最后设置坐标就炮可以吃像吗实现AI自动走棋或吃子了


当然了只要你的马在他的规则の内就能吃到。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 炮可以吃像吗 的文章

 

随机推荐