求助关于一个五子棋的AI
  • 板块学术版
  • 楼主JoeBiden2020
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/2/8 21:35
  • 上次更新2023/10/28 09:22:06
查看原帖
求助关于一个五子棋的AI
432183
JoeBiden2020楼主2022/2/8 21:35

我本身有一个AI思路,就是一个空余格点旁每有 xx 连珠,则其价值增加 x3x^3 ,选择价值最高的点下棋。但是,我发现实际效果中这个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&&pm;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;
}
2022/2/8 21:35
加载中...