网上存在很多黑白棋的算法,但是最好自己先做然后再去看别人的.
一:玩家操作
根据玩家点击的屏幕坐标转换为棋盘坐标:
- 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;
- }
- }