你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
用Java实现五子棋人机博弈(三)
 

setChess函数有三个参数,前两个参数是将要“落子”的按钮数组的下标,用来实现在相应位置“落子”,第三个参数代表落子方,其中1代表电脑,2代表玩家,用于存储当前棋局。代码实现如下:

   private void setChess(int i,int j,int chessID){

    //落子

    chess[i][j]=chessID; //把落子储存到当前棋局里

    if(chess[i][j]==1){ //电脑落子

       jb[i][j].setIcon(imgA);  

       jb[i][j].setDisabledIcon(imgA); //当按钮不可用时显示的图片,此处代码不可省,下同

    }  

    else if(chess[i][j]==2){ //玩家落子

       jb[i][j].setIcon(imgB);

       jb[i][j].setDisabledIcon(imgB);  

    }  

    jb[i][j].setEnabled(false); //落子后,该按钮变为不可用

    suanf.loadInfo(chess,i,j); //把下棋的相应信息传到suanfa类,后面会讲到

   }

    private final String localUrl=" F:\\qb\\image"; //记录图片根目录

    private final ImageIcon imgA=new ImageIcon(localUrl+"\\whitechess.jpg"); //记录白子路径

    private final ImageIcon imgB=new ImageIcon(localUrl+"\\blackchess.jpg"); //记录黑子路径

afterWin函数是处理赢棋后的工作的,它只有一个参数,即落子方。代码实现如下:

   private void afterWin(int playerID){

    //赢棋后处理

    if(playerID==1){ //电脑赢了

       JPstate.JLinfo.setIcon(imgWin1); //JPstate类是继承了JPanel类的状态类,后面会有介绍,下同

    }

    else if(playerID==2){ //玩家赢了

       JPstate.JLinfo.setIcon(imgWin2);

    }

   }

    private final ImageIcon imgWin1=new ImageIcon(localUrl+"\\shuqi.jpg");

    private final ImageIcon imgWin2=new ImageIcon(localUrl+"\\yingqi.jpg");

读者可以根据自己的想法轻松地改变赢棋处理方式。

4.实现电脑智能

这里,将致力来研究算法的实现。希望所有爱好编程者都能看懂本算法,无论他懂不懂Java语言。因此,本着让读者容易理解的目的,尽量把算法写得细致些,并尽可能地脱离Java语言。

1)基本思路

首先,需要定义权值,以便电脑根据棋盘上某一点在四个方向上的权值之和的大小来判断最佳落子位置。然后,给出权值算法,用于计算棋盘上某一点的利己(利于电脑)与堵敌(不利于玩家)权值之和。最后,就可以用一个循环来遍历整个棋盘以检测最佳权值点了。

2)实现过程

1)为了实现实现人机对战,需要定义一个suanfa类。代码实现如下:

public class suanfa

2)下载棋局的当前信息。

第一步:复制当前棋局。这样做的目的是在实现电脑智能的过程中不影响CBboard中所存储的当前棋局。需要先在suanfa类中定义一个二维数组,具体代码如下:

    private int[][] curChess=new int[Model.MaxlineY][Model.MaxlineX];//用于记录当前的棋局

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089