java五子棋人机对战的一段代码帮我具体分析下是怎么运算的!

public class Evaluate{
int max_x,max_y,max;
public void evaluate(int shape[][][]){
int i=0,j=0;
for(i=0;i<19;i++)
for(j=0;j<19;j++){
switch(shape[i][j][0]) {
case 5:
shape[i][j][4]=200;
break;
case 4:
switch(shape[i][j][1]){
case 4:
shape[i][j][4]=150+shape[i][j][2]+shape[i][j][3];
break;
case 3:
shape[i][j][4]=100+shape[i][j][2]+shape[i][j][3];
break;
default:
shape[i][j][4]=50+shape[i][j][2]+shape[i][j][3];
}
break;
case 3:
switch(shape[i][j][1]){
case 3:
shape[i][j][4]=75+shape[i][j][2]+shape[i][j][3];
break;
default:
shape[i][j][4]=20+shape[i][j][2]+shape[i][j][3];
}
break;
case 2:
shape[i][j][4]=10+shape[i][j][1]+shape[i][j][2] +shape[i][j][3];
break;
case 1:
shape[i][j][4]=shape[i][j][0]+shape[i][j][1]+shape[i][j][2]+shape[i][j][3];
default : shape[i][j][4]=0;
}
}
int x=0,y=0;
max=0;
for(x=0;x<19;x++)
for(y=0;y<19;y++)
if(max<shape[x][y][4]){
max=shape[x][y][4];
max_x=x;max_y=y;}
}
}
这应该是一段计算连子权重的代码,请帮我分析下具体是怎么计算的,还有最后那一段代码是什么意思

shape是三维数组,前两维是位置,第三维开始,0-3放着4个方向的连着的同颜色子的数目(个人估计应该排序过),4放着评估值
下面的一堆循环是这样的:
如果已经有5个连一起,评估值为最高(200),跳出
如果是4个,则看下一个连着的棋子数,4个150分,3个100分,其他50分
如果是3个,则看下一个连着的棋子数,3个75分,其他20分
如果是2个,10分
如果是1个,0分

最后的循环是找出评估值最高的位置
max_x,max_y放这个位置,max是放评估值

个人认为这样的评估算法下电脑AI不会很高
因为情况分太粗
温馨提示:内容为网友见解,仅供参考
无其他回答

java五子棋人机对战的一段代码帮我具体分析下是怎么运算的!
如果已经有5个连一起,评估值为最高(200),跳出 如果是4个,则看下一个连着的棋子数,4个150分,3个100分,其他50分 如果是3个,则看下一个连着的棋子数,3个75分,其他20分 如果是2个,10分 如果是1个,0分 最后的循环是找出评估值最高的位置 max_x,max_y放这个位置,max是放评估值...

...java实现五子棋程序 可以实现人人对战 人机对战 简单功能 悔棋 认输...
我的五子棋程序选择通常用到的15行*15列棋盘,可以开二维数组PositionFlag = new int[15][15],PositionFlag[i][j]为0表示(i,j)点尚无棋,为1表示(i,j)点是人的棋子,为2表示(i,j)点是机器的棋子。之所以选择二维数组,主要原因有两点: 1.本程序需要频繁随机访问15*15的交叉点,对应查询该点状态以及改变...

求一个简单的JAVA五子棋代码!! 网上复制的别来了!
String youxia = "";

急求Java五子棋代码。。。要绝对的原创(可以加分)
statusText.setText("黑棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待白棋下子..."); } else if(chessColorWin==-1) { chessWhiteWin++; statusText.setText("白棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待黑棋下子..."); } } public void getLocation(in...

求五子棋人机对战算法
我们主要讨论五子棋的核心算法,即:人工智能部分,而其他像图形显示、键盘鼠标控制等,因较为简单,所 以就不作过多介绍了。我们看到本程序由六个基本功能模块构成,各模块的具体分析如下:(1)初始化:首先,建立盘面数组Table[15][15]、对战双方的棋型表Computer[15][15][4]和Player[15][15][...

求一个五子棋人机对战c语言算法 主要是电脑不知道怎么下棋,设计的是...
x::merge(left1, l2)else{ reverse_pairs += l1.length y::merge(l1, left2)} } valn = l.length \/ 2 if(n == 0)return l else{ val(l1, l2) = l.splitAt(n)merge(msort(cmp)(l1), msort(cmp)(l2))} } println(msort((x:Int, y:Int) => x<y)(List(5, 4, 3, ...

求教高手 C++语言五子棋人机对战部分,AI怎么写
这是我写的,你可以参考一下。希望对你有所帮助!void CMyView::over(CPoint point){ \/\/获取鼠标指向数组位置,即中心位置 int x=(point.x-30)\/20;int y=(point.y-30)\/20;\/\/计算开始判断的坐标 xx,yy int xx,yy;if(x<4)xx=0;else xx=x-4;if(y<4)yy=0;else yy=y-4;int i...

求一原创的c语言五子棋代码(会查重),要求人机对战,输入坐标对战即可...
\/\/棋盘初始化函数 \/\/Chessboard棋盘数组,ln=棋盘大小,成功返回Chessboard,不成功NULL void init_Chessboard(char Chessboard[][7], int ln){ if ((Chessboard != NULL) && (ln>0)){ int i = 0, j = 0;for (i = 0; i<ln; ++i){ for (j = 0; j<ln; ++j){ Chessboard[i][...

哪位大侠能提供具体的五子棋人机对战程序设计思路?具体一点,谢啦!
我们有一个学长是这样子做的:遍历每一行,列,斜,看到敌方有3个的堵,没三个的,连接自己最长的那条线 当然,你要复杂的设计思路网上可以自己找,什么贪婪算法,剪枝,算法优化等的,你自己研究了

怎样实现五子棋人机对战的代码……
所以难得地方,就在于棋力的衡量,我五子棋没什么研究,不过我知道,专业的五子棋软件都是自带定式库的。。这个你个人是不可能实现了,象征性的做个定式表就行了,弄上常见的像什么活三、死三之类的。然后难度就在于怎么对搜索加速了,我觉得至少也得递归七八层吧。。。具体算法就不知道了,反正肯定不...

相似回答