基于java的五子棋游戏设计
2016-12-20关宁
【摘要】在Windows平台下,系统把五子棋游戏作为研究对象,运用java语言设计一款能够实现人机对战的简单游戏。五子棋人机对弈是计算机博弈中的一种。而计算机博弈是人工智能研究的一个重要分支,其中还包括几个重要的搜索算法。只有通过一定的研究,才能实现五子棋的人机对战功能。
【关键词】人工智能;计算机博弈;搜索算法;五子棋
一、研究内容
本游戏是在Windows环境下完成一个简易五子棋游戏的设计。五子棋是人工智能的一个成果之一,它涉及到计算机博弈理论,棋盘表示、走法生成以及搜索算法等知识,最终实现人机对战。
二、五子棋的整体设计介绍
一个好的软件产品,首先是要有一个好的人机界面,也就是说给人的第一感觉是美好的、轻松的。接着是简单明了的操作,界面上按钮够少,令玩家容易上手。
1、人机界面的生成
背景图片的大小要适中,否则后面的一些功能无法显示出来(比如相应的按钮)在创建完成一个基本窗口后,将游戏背景图片和棋盘加载进窗口界面,并加入相应的控制按键,就得到了一个简单的棋盘。
2、按钮功能的实现
Java中的鼠标和键盘事件,使用Mouse Listener接口处理鼠标事件。鼠标事件有5种:按下鼠标键,释放鼠标键,点击鼠标键,鼠标进入和鼠标退出。
三、五子棋的AI算法
在本系统的AI算法里,当玩家下棋时,电脑优先考虑阻止玩家取得胜利,在这个过程中,电脑首先在各个方向进行搜索,寻找其中最优的位置进行下棋,以达到阻止玩家获得胜利的目的。
1、电脑智能下棋
电脑通过打擂计算最佳进攻和防守位置,代码片段如下:
for(int i=0;i< allChesses.length;i++){//通过计算得到防守的最佳位置,因为是防守,所以统计白色
for(int j=0;j<allChesses.length;j++){
if(allChesses[i][j]==null){//对还没有走的空棋格进行统
if(isFirst==true){//第一个为空的空格
row=i;//在棋盘中的位置
col=j;
powerValue=RowPowerValue(allChesses,i,j,Color.white)
+ColPowerValue(allChesses, i, j,Color.white)
+RightBiasPowerValue(allChesses,i,j,Color.white)
+LeftBiasPowerValue(allChesses,i,j,Color.white);//计算当前位置的权值
isFirst=false;//表示第一个位置计算完毕
}
2、游戏胜负的判断
电脑主要是从八个方向来判断哪一方先胜利了,这八个方向是以一个棋子为中心,向四周辐射扩散出去进行搜索判断,这八个方向分别是以该棋子为中心的右斜上、右斜下、左斜上、左斜下、列下、列上、列左和行右。每一个方向都设一个参数count i,初值为1,每判断一次,如果有相同的棋子,则count i的值增加1,如果有五个或五个以上,则该方为胜。代码片段如下:
public boolean checkLeftBias(int row,int col){//检查左斜
int leftBiasUp=checkLeftBiasUp(row, col);//得到左斜上的个数
int leftBiasDown=checkLeftBiasDown(row, col);//得到右斜下的个数
int sum=leftBiasUp+leftBiasDown-1;//在计算过程中多算了一颗棋子,所以要减一颗棋子
if(sum>=5){//已经五子连珠
return true;
}
else{
return false;
}
}
四、结语
人工智能在计算机上实现时,有2种不同的方式。一种是采用传统的编程技术,使系统呈现智能的效果,而不考虑所用方法是否与人或动物机体所用的方法相同。这种方法叫工程学方法(Engineerin gapproach),它已在一些领域内做出了成果,如文字识别、电脑下棋等。另一种是模拟法(Modeling approach),它不仅要看效果,还要求实现方法也和人类或生物机体所用的方法相同或相类似。而我设计的五子棋游戏正是通过第一种方法实现的——工程学方法。了解这些还是远远不够的,最重要的是了解计算机博弈方面相关的搜索算法。由于我对java方面的知识了解的不多,所以也花了很多的时间在学习,可以说是边学边用了。
【参考文献】
[1] 张孝祥. Java就业培训教程[M]. 北京: 清华大学出版社, 2003.
[2] Negnevitsky, M. 人工智能智能系统指南(英文版)[M]. 北京: 机械工业出版社, 2005.
[3] 朱福喜. Java语言基础教程[M]. 北京: 清华大学出版社, 2008.
【作者简介】
关宁(1994—),女,满族,吉林永吉人,西北师范大学在读本科生。