网上存在很多黑白棋的算法,但是最好自己先做然后再去看别人的.
一:玩家操作
根据玩家点击的屏幕坐标转换为棋盘坐标:
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; } }在这之前需要先判断此次搜索是否刚开始就出界.