本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:
利用分数代表每个位置的重要程度, 越重要的位置的分数值会越高, 当电脑下棋时会先将电 脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高, 那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。
具体的分数值赋值如下:
分数
电脑
玩家
活二
60
50
半活二
40
35
死二
10
10
半死二
10
10
活三
950
700
半活三
900
650
死三
100
100
半死三
100
100
活四
6000
3500
半活四
5000
3000
死四
4000
800
半死四
3600
750
活五
20000
15000
半活五
10000
3300
死五
20000
15000
半死五
10000
3300
解释一下其中的活,半活,死,半死:
活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。
半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。
死:代表几个子是相连的, 中间没有空格,但有一端紧挨着对方的棋子或有一端正好在
棋盘的边界。
半死:代表几个子不是相连的, 几个子中间有一个空格, 而且一端紧挨着对方的棋子或
有一端正好在棋盘的边界。
每个位置的分数的计算方式是各个方向的分数相加, 最后找出电脑棋型和玩家棋型的分
数的最高的位置为电脑的下棋点下棋。
具体的代码如下:
public void qixi ng(){
for ( int i=0;i<17;i++){
for ( int j=0;j<17;j++){
if (qipan [i+1][j+1]==0){ // 说明此处没有棋子
qix in gPC [i][j]=
heiheng(i,j,2)+heishu(i,j,2)+heizuoxie(i,j,2)+heiyouxie(i,j,2);
qixingPlayer [i][j] =
heiheng(i,j,1)+heishu(i,j,1)+heizuoxie(i,j,1)+heiyouxie(i,j,1);
} else {
qixingPC [i][j] = 0; qixingPlayer [i][j] = 0;
} }
// 算出黑子横方向的棋型数值
public int heiheng( int hang, int lie, int num){
int k = 0; // 记录空白处的个数
int count = 1; // 记录可以形成几连
int n = hang+1; // 对应棋盘的行
int m = lie+1; // 对应棋盘的列
qipan [n][m-1]==0)
boolean left = false ; // 判断左边是否有黑子 boolean liveLeft = false ; // 判断左边是活还是死 boolean liveRight = false ; // 判断右边是活还是死
while (( qipan [n][m-1]!=-1)&&( qipan [n][m-1]==num|| ){
if ( qipan [n][m-1]==0&&k<1){ // 第一个空白 if ( qipan [n][m-2]!=num){ liveLeft = true ; break ;
}
k++;
m--;
} else if ( qipan [n][m-1]==num){ // 黑子 left = true ;
m--;
} else { // 第二个空白 liveLeft = true ; break ;
}
}
if (!left){
k = 0;
m = lie+1;
}
while (( qipan [n][m+1]!=-1)&&(
qipan [n][m+1]==num||
qipan [n][m+1]==0)
){
int t = qipan [n][m+1];
if (m==lie){
count++;
m++; continue ;
}
if (t==0&&k<1){ // 第一个空白
if ( qipan [n][m+2]!=num){ liveRight = true ; break ;
}
k++;
m++;
} else if (t==0&&k>0){ // 第二个空白 liveRight = true ; break ;
} e
五子棋人机对战代码资料 来自淘豆网m.daumloan.com转载请标明出处.