我本身有一个AI思路,就是一个空余格点旁每有 x 连珠,则其价值增加 x3 ,选择价值最高的点下棋。但是,我发现实际效果中这个AI非常的蠢,自己连四个了居然不会连成五个,想请教一下dalao们,是代码(只有30多行)还是思路错了。
board[][] 中 0,1,2 分别代表该格点空白,AI,玩家 。点权即为对该坐标运行下列三个函数的返回值之和。
int GetLineValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt1=0,cnt2=0,pt=board[x-1][y],pm=board[x+1][y];
for(int i=x-1;i>=1;i--){
if(board[i][y]==pt)cnt1++;
else break;
}
if(pt==0)cnt1=0;
for(int i=x+1;i<=mSize;i--){
if(board[i][y]==pm)cnt2++;
else break;
}
if(pm==0)cnt2=0;
return (int)pow(cnt1,3)+pow(cnt1,3);
}
int GetColValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt1=0,cnt2=0,pt=board[x][y-1],pm=board[x][y+1];
for(int i=y-1;i>=1;i--){
if(board[i][i]==pt)cnt1++;
else break;
}
if(pt==0)cnt1=0;
for(int i=y+1;i<=mSize;i--){
if(board[x][i]==pm)cnt2++;
else break;
}
if(pm==0)cnt2=0;
return (int)pow(cnt1,3)+pow(cnt1,3);
}
int GetFalValue(int x,int y){
if(board[x][y]!=0)return -114514;
int cnt=0,pt=board[x+1][y+1],pm=board[x-1][y-1],pq=board[x+1][y-1],ps=board[x-1][y+1];
for(int i=1;board[x+i][y+i]==pt&&x+i<=mSize&&y+i<=mSize&&pt;i++)cnt++;
for(int i=1;board[x-i][y-i]==pm&&x-i>0&&y-i>0&±i++)cnt++;
for(int i=1;board[x+i][y-i]==pm&&x+i<=mSize&&y-i>0&&pq;i++)cnt++;
for(int i=1;board[x-i][y+i]==pm&&x-i>0&&y+i<=mSize&&ps;i++)cnt++;
return cnt*cnt*cnt;
}