这是个五子棋人机对弈的核心代码,看不懂啊,求解释
大神先帮我看下下面的代码是不是用的http://www.mscto.com/vcpp/2009021434894.html里的算法?貌似是。
主要帮我看懂计算机如何思考的就行了,目前我能看懂的是nsew分别代表北南东西,五子棋的四个方向,关键是看不懂作者
//se-defend或者//nw-attack的注释是什么意思。
先谢谢大神了!
CPoint CTryDoc::ComputerThink2()
{
CPoint point;
int max1=0,max2=0,max_x,max_y;
int sco1_nesw[15][15];
int sco1_ns[15][15];
int sco1_nwse[15][15];
int sco1_we[15][15];
int sco2_nesw[15][15];
int sco2_ns[15][15];
int sco2_nwse[15][15];
int sco2_we[15][15];
int i,j,m,n,k1,k2;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
sco1_nesw[i][j]=0;
sco1_ns[i][j]=0;
sco1_nwse[i][j]=0;
sco1_we[i][j]=0;
sco2_nesw[i][j]=0;
sco2_ns[i][j]=0;
sco2_nwse[i][j]=0;
sco2_we[i][j]=0;
sco_nesw[i][j]=0;
sco_ns[i][j]=0;
sco_nwse[i][j]=0;
sco_we[i][j]=0;
sco[i][j]=0;
direction1[i][j]=0;
direction2[i][j]=0;
direction[i][j]=0;
}
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
///////////////////////////////////////////nwse////////////////////////////////////
isadded=FALSE;
if(condition[i][j]==EMPTY) //se-defend
{
for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==PEOPLE;m++,n++,k1++)
{
sco1_nwse[i][j]+=5;
direction1[i][j]++;
}
while(m<15&&n<15&&condition[m][n]==EMPTY)
{
if(isadded==FALSE)
{
sco1_nwse[i][j]+=2;
isadded=TRUE;
}
k1++;
m++;
n++;
}
}
isadded=FALSE;
if(condition[i][j]==EMPTY) //nw-defend
{
for(m=i-1,n=j-1,k2=0;m>=i-5&&m>=0&&n>=0&&condition[m][n]==PEOPLE;m--,n--,k2++)
{
sco1_nwse[i][j]+=5;
direction1[i][j]++;
}
while(m>=0&&n>=0&&condition[m][n]==EMPTY)
{
if(isadded=FALSE)
{
sco1_nwse[i][j]+=2;
isadded=TRUE;
}
k2++;
m--;
n--;
}
}
if(k1+k2<4) sco1_nwse[i][j]=0;
isadded=FALSE;
if(condition[i][j]==EMPTY) //se-attack
{
for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==COMPUTER;m++,n++,k1++)
{
sco2_nwse[i][j]+=5;
direction2[i][j]++;
}
while(m<15&&n<15&&condition[m][n]==EMPTY)
{
if(isadded==FALSE)
{
sco2_nwse[i][j]+=2;
isadded=TRUE;
}
k1++;
m++;
n++;
}
}