[以前的文章,重新发布]
网上存在很多黑白棋的算法,但是最好自己先做然后再去看别人的.
一:玩家操作
根据玩家点击的屏幕坐标转换为棋盘坐标:
Point Game::locationcon(int col,int row)
{
Point point;
point.x=(int)(col-50)/60;
point.y=(int)(row-50)/60;
return point;
}
返回的参数是一个Point,这样更方便,但是需要强制转换成int型
二:开始搜索
根据这个棋盘坐标开始向八个方向寻找是否能下:set_could(int turn,int dian_col,int dian_row)
以下是其中一小段代码:
if(set_serch(turn,23,dian_col,dian_row))
{
chess[dian_col][dian_row]->shang=1;
flag=1;
}
三:单向搜索
serch函数的定义是set_serch(int turn,int dir,int col,int row)
这个函数的作用是根据dir来单向搜索:int dir;//23-上 21-下 12-左 32-右 13-上左 33-上右 11-下左 31-下右
//十位代表x轴,个位代表y轴,最后-2代表+1或者-1
int x,y;//方向变量
x=dir/10-2;
y=dir%10-2;
这样三步就能根据dir来计算出是向上或向右寻找
四:具体搜索步骤
for(;
i<=9 && i>=0 && j<=9 && j>=0;
i+=x,j+=y)
{
if(chess[i][j]->qi_type == turn*(-1))
{
int ii=i+x;
int jj=j+y;
for(;
ii<=9 && ii>=0 && jj<=9 && jj>=0;
ii+=x,jj+=y)
{
if(chess[ii][jj]->qi_type == turn)
{
return true;
}
if(chess[ii][jj]->qi_type == 0)
{
return false;
}
}
return false;
}
if(chess[i][j]->qi_type == turn )
{
return false;
}
if(chess[i][j]->qi_type == 0)
{
return false;
}
}
在这之前需要先判断此次搜索是否刚开始就出界.
之后的绘图搜索,AI搜索都是以这个为基础而改进的