五子棋项目的实现人机对战类的具体设计

Posted fly0512

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五子棋项目的实现人机对战类的具体设计相关的知识,希望对你有一定的参考价值。

在之前描述了博弈树算法的思想,现在则是关键类的设计实现。在具体的过程中我们先要设计一个遍历棋型算法,来遍历整个棋盘中的各种棋型

技术分享图片

 

通过最后返回值的不同,来确定不同的棋型

技术分享图片

当中有评估函数对当前的棋型进行打分。再选取局部最优的几个落子点作为下一步扩展的节点。

//bwf 棋色 0:黑棋 1:白棋
//return 选出来的节点坐标
private int[][] getBests(int bwf) {//传过来的还是颜色

int i_min=(x_min==0 ? x_min:x_min-1);//x为真则是b值否则就是c值
int j_min=(y_min==0 ? y_min:y_min-1);
int i_max=(x_max==15 ? x_max:x_max+1);
int j_max=(y_max==15 ? y_max:y_max+1);
int n = 0;
int type_1,type_2;
int[][] rt = new int[(i_max-i_min) * (j_max-j_min)][3];//确定一个数组的大小
for ( int i = i_min; i < i_max; i++)
for (int j = j_min; j < j_max; j++)//循环的形式遍历周围最大最小值的位置
if (isChessOn[i][j] == 2) {
type_1 = getType(i, j, bwf);
type_2 = getType(i, j, 1 - bwf);
if(able_flag && bwf==0 && (type_1 == 20 || type_1 == 21 || type_1 == 22)) // 禁手棋位置,不记录
continue;
rt[n][0] = i;
rt[n][1] = j;
rt[n][2] = getMark(type_1) + getMark(type_2);
n++;
}
// 对二维数组排序
Arrays.sort(rt, new ArrComparator());
int size = weight > n? n:weight;
int[][] bests = new int[size][3];
System.arraycopy(rt, 0, bests, 0, size);
return bests;
}

 




























以上是关于五子棋项目的实现人机对战类的具体设计的主要内容,如果未能解决你的问题,请参考以下文章

Android 蓝牙对战五子棋项目实现(含人机对战功能)

AI人机对战五子棋游戏Python(pygame)+AI并实现软件输出

QT vs2017《五子棋》人机对战项目

C语言实现五子棋三子棋人机对战,包含电脑人工智能对战(可攻可守)(非标题党)

五子棋人机对战

python实现五子棋-人机对战/人人对战(动图演示+源码分享)