文档介绍:Java大赛黑白棋说明书一、::07年5月5号---:Jbuilder2006二、功能描述本程序可实现三种功能:a、本机两人对战b、人机对战(有一定程度的人工智能,可以选择“计算机执黑”或“计算机执白”)c、网络对战(功能还不完备,不过可以实现在线交互聊天)。下面对这三个模块进行详细说明:游戏主界面如下:本机两人对战:打开游戏主界面后,依次点击菜单“游戏---à重新开局-----à两人对弈”,此时,游戏区显示游戏的初始状态:2白子2黑子以及先走棋方棋子可以放置的位置(以“X”表示),最下方动态显示走完一步棋后各方棋子数、空棋数及下一步轮到哪方走棋。默认黑棋先走棋,两人私下里决定谁当黑方,谁当白方。然后开始走棋,每走一步棋,系统处理“吃棋”情况,并动态修改画面(调用repaint()方法)及底部各方棋子数目信息。(注:走棋时必须在可以放置棋子的地方走棋,否则弹出对话框提示用户“此处不能下子!”)如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。(算法及实现方法后面详细介绍)人机对战打开游戏主界面后,依次点击菜单“游戏---à重新开局-----à计算机执黑或计算机执白”,选择下棋方式。若选择“计算机执黑”,则计算机先走棋,计算机会调用事先编好的搜索方法(详见后面算法部分)决定该棋子放在哪里,然后人每走一次棋,电脑就根据估价函数自动走一步棋,如此循环往复,直到一方棋子被吃完或棋子填满棋盘或两人均无法走棋,游戏中止,棋子多者取胜。同样,中间若有一方无棋可走,则自动把走棋权让给对方,自己停走一轮。网络对战网络对战连接及在线交互聊天界面如下:如果两个人想要联网对战,则必须有一方充当服务器端,一方充当客户端。建立连接流程如下:1、服务器端开启服务:在“ConnectHostIP”后的文本框中输入欲连接的客户端IP,点击右边的“Connect”按钮,此后要求客户端同时打开该程序并输入服务器端IP并点击“Connect”。当两方都点击连接后,在右上角的文本框显示连接状态,若尚未连接,则显示“WaitingforConnect”,若建立连接,则显示“Connecting……”,若出现异常(如网络中断等)则弹出对话框显示“Disconnected“,需重新连接!然后可以在下面的文本区域里写入欲发送的文本,点击“Send“即可发送(类似QQ),在上面的文本域里会显示两人的聊天记录。两人在下棋区域下棋,通过网络功能进行传输(类似管道),则下棋信息同步的显示在联机对战的两台电脑上。若一方要求悔棋,则须征得对方的同意方可。三、类概述本程序有两个类:MainControl类该类主要负责人机对战、Work类这个类主要负责网络对战及其交互四、算法及实现思想描述此程序用的最重要的数据结构就是一个8*8的二维数组matrix,用于存储每一时刻前台64(8*8)个位置的状态(共有3种状态:-1、0、1,-1表示此处放置的事黑子,0表示此处没有棋子,1表示放置的是白子),即每一时刻都由这个程序中的二维数组与前台图形界面上的64个位置一一对应,形成一个映射关系,任何想要了解前台图形界面上各位置状态的方法都可通过访问这个二维数组来实现。还有一个int类型的全局变量nextToGo,用于标示下一步该走棋的是哪一方,分别用-1和1表示黑方和白方,在走棋权的交接时使用nextToGo=(-1)*nextToGo来实现,用于黑棋白旗交替走棋。当刚打开游戏界面时,需要对界面进行初始化,在主界面的构造函数里,已经对一些需要用到的量进行了相应的初始化,其次就是:1、调用ini()方法对程序中所要用到的二维数组进行初始化,程序如下:publicvoidini(){//初始化matrix矩阵LINE_NUM=COLUMN_NUM=8,分别为二维数组的行数与列数for(inti=0;i<LINE_NUM;i++){for(intj=0;j<COLUMN_NUM;j++){if((i==3&&j==3)||(i==4&&j==4)){matrix[i][j]=1;//此处初始时放置白子}elseif((i==3&&j==4)||(i==4&&j==3)){matrix[i][j]=-1;//此处初始时放置黑子}else{matrix[i][j]=0;//其它位置初始时无子}}}}2、调用checkObjects(nextToGo)方法检查下一个要走棋的一方所能到达的所有地方(即目标位置、将要走棋的一方可以放棋的地方),这个方法里边会修改matrix矩阵的值,在能到达