代码拉取完成,页面将自动刷新
void CFivezq::ChessExpert(CPoint &best)
{
int computer[15][15][4]={0},player[15][15][4]={0}; //应全部初始化为零
int flag[2][2]={0}; //标志数组:标志该空位两端是否到达边界(遇到对方棋子)/遇到空位
int count=0,i,j,k,m;
int x=0,y=0; //(x,y)存储向右搜索时遇到边界/空位/对方棋子时的前一个坐标,向左搜索的起点
for(i=0;i<15;i++) //分析己方棋型
for(j=0;j<15;j++)
{
if(m_board[i][j]==0)
{
m_board[i][j]=m_turn; //假设己方在这一点落子
for(k=1;k<5;k++) //横向--->
{
if(i+k>14){flag[0][0]=1;break;} //横向右遇到边界
if(m_board[i+k][j]==-m_turn){flag[0][0]=1;break;}//横向右遇到对方棋子+***o
if(m_board[i+k][j]==0){flag[0][1]=1;break;} //横向右遇到空位++*++
}
x=i+k-1;
y=j;
for(m=0;m>-5;m--) //横向<---
{
if(x+m<0){flag[1][0]=1;break;} //横向左遇到边界
if(m_board[x+m][y]==m_turn)count++;
if(m_board[x+m][y]==-m_turn){flag[1][0]=1;break;} //横向左遇到对方棋子o***+
if(m_board[x+m][y]==0){flag[1][1]=1;break;} //横向左遇到空位++*++
}
Evaluater(flag,count,computer[i][j][0]);
for(k=1;k<5;k++) //纵向|
{
if(j+k>14){flag[0][0]=1;break;} //纵向下遇到边界
if(m_board[i][j+k]==-m_turn){flag[0][0]=1;break;} //纵向下遇到对方棋子+***o
if(m_board[i][j+k]==0){flag[0][1]=1;break;} //纵向下遇到空位++*++
}
x=i;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(y+m<0){flag[1][0]=1;break;} //纵向上遇到边界
if(m_board[x][y+m]==m_turn)count++;
if(m_board[x][y+m]==-m_turn){flag[1][0]=1;break;} //纵向上遇到对方棋子o***+
if(m_board[x][y+m]==0){flag[1][1]=1;break;} //纵向上遇到空位++*++
}
Evaluater(flag,count,computer[i][j][1]);
for(k=1;k<5;k++) //45°
{
if(i+k>14||j+k>14){flag[0][0]=1;break;} //45°向下遇到边界
if(m_board[i+k][j+k]==-m_turn){flag[0][0]=1;break;} //45°向下遇到对方棋子+***o
if(m_board[i+k][j+k]==0){flag[0][1]=1;break;} //45°向下遇到空位++*++
}
x=i+k-1;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(x+m<0||y+m<0){flag[1][0]=1;break;} //45°向上遇到边界
if(m_board[x+m][y+m]==m_turn)count++;
if(m_board[x+m][y+m]==-m_turn){flag[1][0]=1;break;} //45°向上遇到对方棋子o***+
if(m_board[x+m][y+m]==0){flag[1][1]=1;break;} //45°向上遇到空位++*++
}
Evaluater(flag,count,computer[i][j][2]);
for(k=1;k<5;k++) //135°
{
if(i-k<0||j+k>14){flag[0][0]=1;break;} //135°向下遇到边界
if(m_board[i-k][j+k]==-m_turn){flag[0][0]=1;break;} //135°向下遇到对方棋子+***o
if(m_board[i-k][j+k]==0){flag[0][1]=1;break;} //135°向下遇到空位++*++
}
x=i-k+1;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(x-m>14||y+m<0){flag[1][0]=1;break;} //135°向上遇到边界
if(m_board[x-m][y+m]==m_turn)count++;
if(m_board[x-m][y+m]==-m_turn){flag[1][0]=1;break;} //135°向上遇到对方棋子o***+
if(m_board[x-m][y+m]==0){flag[1][1]=1;break;} //135°向上遇到空位++*++
}
Evaluater(flag,count,computer[i][j][3]);
m_board[i][j]=0;
}
}
for(i=0;i<15;i++) //分析对方棋型
for(j=0;j<15;j++)
{
if(m_board[i][j]==0)
{
m_board[i][j]=-m_turn; //假设对方在这一点落子
for(k=1;k<5;k++) //横向--->
{
if(i+k>14){flag[0][0]=1;break;} //横向右遇到边界
if(m_board[i+k][j]==m_turn){flag[0][0]=1;break;}//横向右遇到对方棋子+***o
if(m_board[i+k][j]==0){flag[0][1]=1;break;} //横向右遇到空位++*++
}
x=i+k-1;
y=j;
for(m=0;m>-5;m--) //横向<---
{
if(x+m<0){flag[1][0]=1;break;} //横向左遇到边界
if(m_board[x+m][y]==-m_turn)count++;
if(m_board[x+m][y]==m_turn){flag[1][0]=1;break;} //横向左遇到对方棋子o***+
if(m_board[x+m][y]==0){flag[1][1]=1;break;} //横向左遇到空位++*++
}
Evaluater(flag,count,player[i][j][0]);
for(k=1;k<5;k++) //纵向|
{
if(j+k>14){flag[0][0]=1;break;} //纵向下遇到边界
if(m_board[i][j+k]==m_turn){flag[0][0]=1;break;} //纵向下遇到对方棋子+***o
if(m_board[i][j+k]==0){flag[0][1]=1;break;} //纵向下遇到空位++*++
}
x=i;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(y+m<0){flag[1][0]=1;break;} //纵向上遇到边界
if(m_board[x][y+m]==-m_turn)count++;
if(m_board[x][y+m]==m_turn){flag[1][0]=1;break;} //纵向上遇到对方棋子o***+
if(m_board[x][y+m]==0){flag[1][1]=1;break;} //纵向上遇到空位++*++
}
Evaluater(flag,count,player[i][j][1]);
for(k=1;k<5;k++) //45°
{
if(i+k>14||j+k>14){flag[0][0]=1;break;} //45°向下遇到边界
if(m_board[i+k][j+k]==m_turn){flag[0][0]=1;break;} //45°向下遇到对方棋子+***o
if(m_board[i+k][j+k]==0){flag[0][1]=1;break;} //45°向下遇到空位++*++
}
x=i+k-1;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(x+m<0||y+m<0){flag[1][0]=1;break;} //45°向上遇到边界
if(m_board[x+m][y+m]==-m_turn)count++;
if(m_board[x+m][y+m]==m_turn){flag[1][0]=1;break;} //45°向上遇到对方棋子o***+
if(m_board[x+m][y+m]==0){flag[1][1]=1;break;} //45°向上遇到空位++*++
}
Evaluater(flag,count,player[i][j][2]);
for(k=1;k<5;k++) //135°
{
if(i-k<0||j+k>14){flag[0][0]=1;break;} //135°向下遇到边界
if(m_board[i-k][j+k]==m_turn){flag[0][0]=1;break;} //135°向下遇到对方棋子+***o
if(m_board[i-k][j+k]==0){flag[0][1]=1;break;} //135°向下遇到空位++*++
}
x=i-k+1;
y=j+k-1;
for(m=0;m>-5;m--)
{
if(x-m>14||y+m<0){flag[1][0]=1;break;} //135°向上遇到边界
if(m_board[x-m][y+m]==-m_turn)count++;
if(m_board[x-m][y+m]==m_turn){flag[1][0]=1;break;} //135°向上遇到对方棋子o***+
if(m_board[x-m][y+m]==0){flag[1][1]=1;break;} //135°向上遇到空位++*++
}
Evaluater(flag,count,player[i][j][3]);
m_board[i][j]=0;
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。