网上存在很多黑白棋的算法,但是最好自己先做然后再去看别人的.
一:玩家 *** 作
根据玩家点击的屏幕坐标转换为棋盘坐标:
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搜索都是以这个为基础而改进的
总结以上是内存溢出为你收集整理的cocos2d-x 3.3 之黑白棋设计 NO.2 搜索全部内容,希望文章能够帮你解决cocos2d-x 3.3 之黑白棋设计 NO.2 搜索所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)