上周讲了Cocos2d-x 制作跳棋中棋子各种动作的实现以及跳棋AI思想的分 享,这次跟大家分享跳棋胜负判断和AI具体代码实现。
一、 胜负判断
跳棋中当己方所有棋子都填满到正对方所有棋子位置时才算胜利,这样判断输赢的方 式就是遍历跳棋六个角中十个位置的状态是否为其正对方棋子颜色所代表的的数字(在第二步界 面布局中有讲到六种颜色分别用1、2、3、4、5、6来代表)。实现代码如下:
/****************
函数名:isWin
参数:无
返回值:无
作用:判断是否产生结果
****************/
void Game::isWin()
{
if(flag_win != 0)
return;
for(int m = 4;m > 0;m--) //循环遍历一个角的所有棋子位置判断是否已被对方填满
for(int n = 0;n < m;n++)
{
if(lay[17-m][n*2+13-m] != 2)
{
flag_win = -1;
break;
}
}
if(flag_win != -1)
{
flag_win = 2;
return;
}else
flag_win = 0;
for(int m = 4;m > 0;m--) //循环遍历一个角的所有棋子位置判断是否已被对方填满
for(int n = 0;n < m;n++)
{
if(lay[m-1][n*2+13-m] != 1) //判断相应位置是否有不是对面的棋子
{
flag_win = -1; <span style="white-space:pre"> </span>//如果有不是对面的棋子则设置flag_win为0
break;
}
}
if(flag_win != -1)
{
flag_win = 1;
return;
}else
flag_win = 0;
if(chess3.size() > 0)
{
for(int m = 4;m > 0;m--) //循环遍历一个角的所有棋子位置判断是否已被对方填满
for(int n = 0;n < m;n++)
{
if(lay[13+n-m][25-m-n] != 3)
{
flag_win = -1;
break;
}
}
if(flag_win != -1)
{
flag_win = 3;
return;
}else
flag_win = 0;
for(int m = 4;m > 0;m--) //循环遍历一个角的所有棋子位置判断是否已被对方填满
for(int n = 0;n < m;n++)
{
if(lay[n+4][2*m-2-n] != 4)
{
flag_win = -1;
break;
}
}
if(flag_win != -1)
{
flag_win = 4;
return;
}else
flag_win = 0;
for(int m = 4;m &