网络对弈课程设计说明书Word格式.docx
《网络对弈课程设计说明书Word格式.docx》由会员分享,可在线阅读,更多相关《网络对弈课程设计说明书Word格式.docx(53页珍藏版)》请在冰豆网上搜索。
五子棋有着悠久的历史,五子棋爱好者更是不计其数,但是由于人们工作地点,时间的限制,生活节奏的加快,人们之间的交流越来越少,面对面下五子棋的机会更是少了很多,那种面对面的下棋的方式已经不再适应人们的生活,但网络给了人们一个交流的平台,因此人们开始转向网络五子棋。
网络五子棋有很多优点,通过网络五子棋,对弈双方可以是网络上任意两个五子棋的爱好者,甚至从不认识。
网络五子棋让对弈的范围更加的广泛,让玩家可以与更多的五子棋爱好者切磋棋艺。
所以我此次网络课程设计综合运用《计算机网络》、《JAVA语言程序设计》、《网络编程》等课程知识;
从需求分析入手,系统地掌握计算机网络编程初级技术,独立、合理地完成网络五子棋对弈程序设计任务。
设计目标主要包括:
(1)实现需求分析阶段所要求的服务器端以及客户端的功能。
(2)游戏界面朴素美观。
(3)棋子样式采用传统样式,黑色和白色。
(4)客户端的信息交流完全通过服务器传递完成。
1.2设计任务
完成一个网络五子棋对弈程序设计工作。
根据自身多年来进行网络对弈的经验,以及了解,对网络五子棋对弈的设计进行需求分析。
根根设计目标以及需求分析对五子棋游戏界面总体规划和设计,游戏界面设计好以后进行服务器端和客户端的规划设计,最后进行棋盘以及棋子的设计。
设计阶段要进行服务器端框架设计与业务代码开发,客户端框架设计与业务代码的开发,棋子以及棋盘类的设计开发,规则类的设计开发等。
2需求分析
2.1系统需求
(1)满足客户端连接到服务器的基本要求。
(2)服务器满足记录客户端游戏动作的基本要求。
(3)满足服务器实时获得客户端游戏状态的基本要求。
2.2用户需求
2.2.1服务端需求
(1)可以有一个显示服务器状态的界面,用于记录各个客户端的连接状态。
服务器是用于连接各个客户端的通信,如果独立地创建一个直观的服务器,将有力地显示客户端的每个状态,直观地向用户反应各类信息。
(2)可以支持多人同时在线。
一个服务器能够你能够接受来自其他多个客户端的请求,提供相应的响应服务,是网络对弈的基本要求。
(3)可以显示在线用户的信息。
显示在线用户的信息,比如主机名,IP地址,以及连接断的状态,有利于用户随时监控客户端的通信状态。
(4)不允许玩家同名。
不允许客户端同名即是不允许客户端的端口号相同,如果相同,将会造成游戏登陆用户的管理混乱。
(5)服务器界面节约大方。
服务器是用于监控客户端的连接情况,没用必要做得繁杂,用户只需要直观的状态显示,所以我们的服务器不需要设计太多按钮,只需要有显示服务器状态,关闭服务器,清空列表的按钮,方便用户操作。
2.2.2客户端需求
(1)能够通过主机IP及端口号登陆到服务器。
(2)可以显示当前所有用户。
游戏客户端应设计一个可以显示当前所有在线用户的列表,有助于用户随意选择玩家挑战。
(3)可以从在线用户列表中选择玩家进行挑战。
(4)可以创建以及接受挑战。
(5)如果对方正在与其他玩家对弈,则应给出相应提示。
(6)五子棋规则一定要严密。
其中五子棋游戏的规则如下:
Ø
棋盘,棋子:
a)棋盘为十五路,正中一点为“天元”,周围四点为小星。
b)棋子分黑白两色,黑子113枚,白子112枚,共225枚。
比赛规则:
a)黑先白后,从天元开始落子。
然后执白棋的一方在黑棋周围的交叉点上落子,白第二着棋应布在自己河界的一侧。
此后,执黑方在以天元为中心的25个交叉点的范围内布盘面的第三着棋。
b)最先在横向,竖向,斜向形成连续的相同色五个棋子的一方为胜。
c)黑棋禁手判负,白棋无禁手。
黑棋禁手包括“三三”,“四四”,“长连”。
黑方只能“四三”胜。
所谓禁手,是指黑方一子落下同时形成两个或两个以上的活三,冲四及长连禁手。
长连禁手是指黑方形成六个或六个以上的连续棋子。
d)双方均不能形成五连为和棋。
e)对局中拔子,中途退场均判为负。
f)五连与禁手同时形成,先五为胜。
因黑方已形成五连,故禁手失效,黑方胜。
g)黑方禁手形成时,白方应立即指出禁手点,黑方即负。
若白方继续应子,则黑方禁手不成立。
h)高段位职业比赛的特殊规定:
“三手可交换”:
黑下完第2手,执白者可提出交换。
即执白方变为执黑方。
“五手两打法”:
执黑下第五手时,必须下两手棋,执白者从这两手棋中任选一步。
i)本文所论述的联机五子棋系统就是依照这种方式进行的。
2.2.3技术上可行性分析
对需求分析阶段的结果进行总结,对软件的可行性分析如下:
(1)网络对弈需要两个客户端进行通信,而利用服务器的线程开发,进行中间中介连接正好可以完成。
(2)五子棋的规则虽然严密,但是通过各种情况分析,然后将每个情况分析设计出来。
(3)本系统的设计运行环境只用到MyEclipse的编程软件,无需借用到其它的软件,比较容易实现。
2.3.系统运行环境
系统运行环境:
MyEclipse6.6
3总体设计
3.1系统结构设计
该游戏主要分为服务器端与客户端两部分。
服务器端的功能主要是建立与客户端的连接,监控客户端的连接及断开的状态,接收客户端发送的信息以及向客户端发送信息。
客户端的功能主要是连接服务器端,创建游戏用户,创建游戏,加入游戏,选择玩家挑战,向服务器发送信息,接收服务器端发送来的信息。
其具体的功能模块如图所示:
3.2服务器设计
服务器的设计主要分为服务器主界面,服务器线程,服务器主机面板三个部分。
服务器主界面的设计主要包括界面大小,界面背景,界面上的按钮,比如清空列表,服务器状态,关闭服务器的设计,以及启动对客户端的监听,启动服务器线程。
服务器线程的设计主要包括接受多个客户端的连接,接受客户端信息,向客户端发送信息。
服务器主机面板的设计主要包括客户端信息板的设计,包括板的大小,背景颜色。
3.3客户端设计
客户端的设计主要分为客户端界面,客户端线程两部分。
客户端界面的设计主要包括客户端界面大小,背景颜色,主要按钮:
创建游戏,加入游戏,连接到服务器,放弃游戏,退出游戏的设计以及它们对应事件的处理。
客户端线程的设计主要包括连接到服务器,向服务器发送信息,接受服务器信息的设计以及它们对应的事件处理,比如收到服务器发送来的游戏胜利,信息错误,信息有效等的处理。
其具体功能模块如图所示:
3.4棋类设计
五子棋类的设计主要分为棋盘,棋子,五子棋动作线程,规则四部分。
棋盘的设计主要包括画棋子,捕获下棋事件,画网络棋盘。
棋子的设计包括黑棋以及白旗的设计,其中有大小,颜色,所属棋盘的设计。
五子棋动作线程的设计包括处理捕获下棋信息,发送当前下棋信息,这一部分的设计是五子棋类设计的重点。
规则的设包括取得指定棋子的位置,判断当前棋子是否取得胜利,当前棋子各个方向的判断,当前所要下的棋子是否越界。
4详细设计
4.1服务器
4.1.1服务器主类的设计开发
服务器主类即服务器端的运行类,用户通过运行该类进入服务器的主界面。
其中包括创建服务器端用到的控件以及声明用到的对象引用,完成对控件的初始化:
设置窗体的标题,图标,大小以及可见性,将各个控件添加到各面板的相应位置
FIRServer.java类:
//服务器界面类
publicclassFIRServerextendsFrameimplementsActionListener
{
JButtonclearMsgButton=newJButton("
清空列表"
);
JButtonserverStatusButton=newJButton("
服务器状态"
JButtoncloseServerButton=newJButton("
关闭服务器"
PanelbuttonPanel=newPanel();
ServerMsgPanelserverMsgPanel=newServerMsgPanel();
ServerSocketserverSocket;
HashtableclientDataHash=newHashtable(50);
//将客户端套接口和输出流绑定
HashtableclientNameHash=newHashtable(50);
//将客户端套接口和客户名绑定
HashtablechessPeerHash=newHashtable(50);
//将游戏创建者和游戏加入者绑定
publicFIRServer()
{
super("
Java五子棋服务器"
setBackground(Color.LIGHT_GRAY);
buttonPanel.setLayout(newFlowLayout());
clearMsgButton.setSize(60,25);
buttonPanel.add(clearMsgButton);
clearMsgButton.addActionListener(this);
serverStatusButton.setSize(75,25);
buttonPanel.add(serverStatusButton);
serverStatusButton.addActionListener(this);
closeServerButton.setSize(75,25);
buttonPanel.add(closeServerButton);
closeServerButton.addActionListener(this);
add(serverMsgPanel,BorderLayout.CENTER);
add(buttonPanel,BorderLayout.SOUTH);
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
pack();
setVisible(true);
setSize(400,400);
setResizable(false);
validate();
try
createServer(4331,serverMsgPanel);
}
catch(Exceptione)
e.printStackTrace();
}
//用指定端口和面板创建服务器
publicvoidcreateServer(intport,ServerMsgPanelserverMsgPanel)throwsIOException
SocketclientSocket;
//客户端套接口
longclientAccessNumber=1;
//连接到主机的客户数量
this.serverMsgPanel=serverMsgPanel;
//设定当前主机
serverSocket=newServ