摘 要 本文介绍在NeatBeans IDE 5.0环境中开发五子棋人机对战版的过程,并且对人机博弈的基础算法进行了详细的探讨。
关键词 NeatBeans;五子棋;人机博弈;Java;算法
一、引言
五子棋是一款非常经典的小游戏,相信大多数人都玩过,其中的博弈算法很多文章都有过专门的介绍,不过大都比较深,而且没有完整的实现过程。笔者经过几天的摸索,终于在NeatBeans环境中用Java语言实现该游戏。现在把整个实现过程写出来,供广大编程爱好者参考。
二、设计思路
“五子棋人机博弈”——顾名思义,就是玩家与电脑下棋,因此需要考虑如下几个方面:
(1)棋盘与棋子的实现:要实现五子棋,首先要有玩五子棋的平台,即画出棋盘与棋子。
(2)计算机博弈算法的实现:玩家落子后,计算机要根据当前的棋局寻找最佳落子点,并落子。这是本游戏的实现关键,本文将会重点介绍。
(3)输赢的判断:一个游戏无论好与坏,最后都要分出胜负,因此如何判断输赢也是要重点讨论的问题。
三、具体设计
首先,打开NeatBeans并新建一个项目,选择“常规”——“ Java应用程序”,项目命名为“chess5”。
1.创建公共模块
我们创建公共模块是为了存放公共常量与公共变量。代码如下:
public class Model {
public static final int MaxlineX=15; //棋盘的横线数
public static final int MaxlineY=15; //棋盘的竖线数
}
2.创建顶层容器
创建顶层容器是为了实现软件模块化,把软件分成棋盘、状态、控制等,再用顶层容器去包含它们。
新建一个JFrame窗体,命名为Chessboard.java。然后把其它模块加进来,代码实现如下:
public Chessboard() {
initComponents(); //系统给出
add(cbBoard); //加入棋盘面板
cbBoard.setBounds(10,10,450,450);
add(jpState); //加入状态面板
jpState.setBounds(470,40,150,300);
}
private CBboard cbBoard=new CBboard(); //新建棋盘
public JPstate jpState=new JPstate(); //新建状态
3.棋盘与棋子的实现
采用15*15的棋盘,即棋盘由15条横线与15条竖线拼成,共15*15个下棋点。
新建一个JPanel窗体,取名CBboard.java,然后用Graphics类的drawLine(x1,y1,x2,y2)函数在面板上画棋盘。代码实现如下:
protected void paintComponent(Graphics g){
//画棋盘
int w=(int)CBboard.this.getWidth(); //得到棋盘的宽度
int h=(int)CBboard.this.getHeight(); //得到棋盘的高度
g.setColor(Color.red);// 用红色线画棋盘
for(int i=boardlineX;i<=w-boardlineX;i+=((w-boardlineX*2)/( Model.MaxlineY -1))) //画竖线
g.drawLine(i,boardlineY,i,h-boardlineY-6);
for(int j=boardlineY;j<=h-boardlineY;j+=((h-boardlineY*2)/( Model.MaxlineX-1))) //画横线
g.drawLine(boardlineX,j,w-boardlineX-6,j);
}
private final int boardlineX=12; //边界宽度
private final int boardlineY=12; //边界高度
|