中国象棋网络对战
软件设计说明书
吴刚
学号:201242238
12级信息工程2班
2014年12月10号
1绪论........................................................................错误!未定义书签。
1.1项目开发的背景及意义........................................................................错误!未定义书签。
1.2研究现状及发展趋势............................................................................错误!未定义书签。
1.3研究目标................................................................................................错误!未定义书签。2可行性研究..............................................................................................2
2.1技术可行性............................................................................................错误!未定义书签。
2.1.1使用JAVA技术的优点....................................................................................................3
2.1.2ECLIPSE简介...................................................................................................................3
2.2经济可行性............................................................................................错误!未定义书签。
2.3社会可行性..............................................................................................................................43需求分析及总体设计..............................................................................4
3.1需求分析...................................................................................................................................4
3.2总体设计...................................................................................................................................4
3.2.1总体结构设计................................................................................................................4
3.2.2棋子棋盘的设计............................................................................................................5
3.2.3服务器界面....................................................................................................................6
3.3类图说明...................................................................................................................................64详细设计..................................................................................................7
4.1程序流程设计...........................................................................................................................7
4.2网络连接设计...........................................................................................................................9
4.3功能设计...................................................................................................................................9
4.4界面设计.................................................................................................................................12
4.5走棋和吃棋规则设计.............................................................................................................135系统测试与总结....................................................................................14
5.1系统测试.................................................................................................................................14
5.1.1系统功能测试................................................................................................................14
5.1.2网络并发压力测试........................................................................................................16
5.2总结与展望.............................................................................................................................17
软件设计说明书
【摘要】随着社会的发展,科学技术不断提高,人们的娱乐活动不断增加,中国象棋作为中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。开发中国象棋游戏软件,推广我们传统的象棋文化。本文通过运用java语言、软件工程的知识,参考网上一些文献资料的设计思路,开发出中国象棋对弈游戏系统,程序实现了选择玩家进行挑战、悔棋、和棋、认输、聊天等功能。通过对系统进行详细的需求分析,设计出了系统的逻辑模型,并且对各个功能进行了详细的分析,并对该程序的功能进行了测试与总结。
【关键词】java、中国象棋、对弈、游戏
1绪论
1.1项目开发的背景及意义
随着电子信息技术的不断发展以及网络技术的普及,网络能提供多样、便捷的服务,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展非常迅猛,它凭借健康、方便、益智、互动性强等诸多优点,成为大众休闲娱乐的首选。
作为中华民族的悠久文化代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋不仅能丰富人们文化生活,陶冶情操,而且有助于开发智力,启迪思维,培养人的品格。弈棋可磨练意志,锤炼品质,塑造性格,陶冶情操,中国象棋是中国文化的缩影,是中华民族智慧的反映。中国象棋的规则的复杂性是社会复杂性在中国象棋游戏中的一个反映。
通过java技术开发中国象棋游戏系统,以便于与时俱进,将中国象棋运用于计算机等电子设备,实现中国象棋对弈系统,为象棋在网络应用平台提供多人对弈。
1.2研究现状及发展趋势
象棋游戏软件现在有腾讯象棋、JJ象棋、象棋巫师等游戏软件;腾讯象棋和JJ象棋是网络对弈游戏。
现在的棋牌类游戏有很多,有很多游资对战平台的网络对弈软件;如腾讯QQ象棋、JJ象棋就是网络对弈象棋。但将传统的益智游戏在计算机领域推广还处于萌芽阶段。棋牌类游戏将向多平台、智能化方向发展。
1.3研究目标
此项目主要应用于中国象棋对弈软件,本文针对的是双人联网对弈,能够运用该软件进行象棋对弈。实现对弈、悔棋、和棋、认输、聊天等功能。
2可行性研究
可行性研究的目的,就是以最小的代价、在尽量短的时间内确定问题是否能够被解决。因此,必须客观的分析问题,找到主要的可能解决法,然后从系统逻辑模型出发,分析若干
种主要的解法,研究每种解法的可行性,从而最终确定这项工程的可行性。
2.1技术可行性
Java是SunMicrosystem公司开发的编程语言,java语言具有高效性、通用性、平台移植性和安全性等特点。运用Eclipse软件进行编写,并运行编译执行。
2.1.1使用java技术的优点
Java是非常新的一种语言,具有面向对象、分布式、解释执行、体系结构中立、可移植、多线程、以及动态性等特点。和其他编程语言相比,它有很多优点。使用Java语言的主要优点体现在以下几个方面:
(1)灵活性
Java语言是非常灵活的,它支持部署和开发环境中的各种变化。因为Java是在面向对象的基础平台上构建的,故其很容易对基本的语言进行扩展和发布。
(2)厂商的广泛支持
采用Java有一个非常重要的原因,就是受到了厂商的广泛支持。Java不仅仅只有一个主要的供应商,有许多公司都生产、支持Java产品。
(3)用户的广泛支持
Java语言具有良好的用户基础,它们并不局限于某一个特定的公司。在Internet上,有许多资源以及Java示例代码。另外,Java程序员还可以使用许多免费软件或共享软件和许多应用程序代码。
(4)平台独立性
Java源代码和运行时的文件与操作系统无关,可以支持多个操作系统。因此,在Windows环境中创建并编译Java类文件,无需任何修改就可以将其部署到Linux环境中。Java的这种特性,也称为可移植性,这一点使得Java开发更加方便,对于那些需要一个特定操作系统、又需要支持其他操作系统的企业来说是非常重要。
2.1.2Eclipse简介
Eclipse是一个基于Java的可扩展开发平台。它本身只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),该组件主要是针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。Eclipse这样功能完整且成熟的开发环境,大部分的开发掌握在IBM手中,但是有一部份是由eclipse.org的软件联盟主导。Eclipse使用开放原始码许可书,即用公共公众许可书CommonPublicLicense(CPL)作为授权方式,设计上是可以容许商业利益的。CPL可以容许Eclipse和其它开放原始码软件合组时,能够用更加严谨的许可书散布软件,可以用于商业途径。CPL经过OpenSoftwareInitiative(OSI)认证,其内容符合开放原始码授权的需求。
2.2经济可行性
经济可行性分析是指进行成本与效益的核算分析,从经济角度判断开发该系统的预期经济效益能否超过它的开发成本。当系统开发人员接受开发任务时,首要研究开发任务,判断是否具有简单明确合理可行的解决办法。其实,有许多不可能在预期的规模内解决的问题,如果某些问题无法很好的解决,那么花费在该项工程上的任何时间、资源和经费都是浪费的。因此可行性分析必不可少。该系统的开发运用Java开发环境Eclipse来完成,
参考图书及网上相关资料,由自己独立开发完成,在经济方面成本可自己承担,具有一定的经济可行性。
2.3社会可行性
随着计算机科技的发展,个人计算机的普及,越来越多的人们接触并使用计算机,现今普通人也能熟练地使用计算机,并习惯使用计算机通过网络进行学习工作和娱乐活动,这样更有利于人力资源的有效利用。而且该程序的简单易用,使得人们能够使用该程序进行对弈。
3需求分析及总体设计
3.1需求分析
该程序需要实现象棋游戏的以下几个基本功能:
(1)开始游戏/重新开始:开始一局新的象棋对弈;
(2)连接/断开:以自己设定的昵称连接服务器或者断开服务器;
(3)挑战:选择在线玩家,向玩家发出挑战;
(4)接受挑战/拒绝挑战:接受玩家的挑战请求或者拒绝玩家的挑战请求;
(5)悔棋:将棋子返回到之前所处的位置;
(6)求和和认输:将双方协商棋局为和棋,或一方认输结束棋局;
(7)退出:退出本程序;
(8)提示:显示出象棋的走棋;
(9)聊天:跟对弈玩家进行文字聊天。
3.2总体设计
3.2.1总体结构设计
中国象棋软件的总体结构层次方框图如图3.1
所示。
图3.1层次方框图
软件分客户端和服务端,客户端是程序的主体,包含游戏界面的各个部分,有信息显示区和各种功能按钮设计。在客户端里面需要定义走棋和吃棋的规则。服务端主要用来处理玩家之间信息的交互,以及各个玩家在服务端的代理线程的开辟和管理。界面比较简单,左半部分显示玩家列表,右半部分是功能区,能选择开启和关闭服务器。
3.2.2棋子棋盘的设计
打开客户端后显示的棋盘界面如图3.2
所示。
图3.2棋盘界面
棋盘区是行棋主界面,能根据不同角色的玩家来布置不一样的界面,图为红棋的界面,黑棋的界面则为黑子在下面,红子在上面。
信息区可以分三小块,第一小块主要是状态信息显示,能显示服务器的ip地址,系统默认给出服务器ip为127.0.0.1,这个可以在连接服务器的时候根据服务器的情况指定。本机ip显示本机在局域网内的ip地址,这是通过java自带的类的方法实现的,端口号显示与服务器连接的端口号。昵称和角色还有对方玩家显示用户的昵称和在游戏中是黑棋还是红棋,对方玩家显示的是对方玩家的昵称。状态显示信息用来给用户提示,在没有连接或者没有开始游戏的时候显示一条欢迎语句,当在走棋的时候会闪烁提示用户是黑棋走棋还是红棋走棋。第二小块区域是连接服务器时的一些选项。能指定服务ip,服务端口,可以设置在游戏中的昵称,这里默认通过java自带的类获取本地主机名作为昵称,用户可以自己取名。连接和断开按钮控制与服务器的连接和断开。在线玩家这个下拉列表用来显示当前在线玩家,并且能选择其中某个玩家进行挑战。第三部分,是选项按钮,有新游戏(和棋),用来向对方提出和棋。退出按钮退出系统,接受挑战和拒绝挑战用来接受和拒绝玩家提出的挑战请求。悔棋和认输用来悔棋和认输,悔棋和新游戏只是在玩家获得行棋权利的时候才有效。且新游戏、悔棋都要经过对方玩家同意才能行。聊天功能允许玩家在已经连接上服务器,并且已经有对方玩家的情况下和对方玩家进行聊天。
3.2.3服务器界面
运行服务端后显示的服务端界面如图3.3
所示。
图3.3服务端界面
在线用户列表区用来显示当前在线用户的昵称和ip。服务ip指定服务器的ip,这一项是不允许用户手动输入的,通过java自带的类来获取主机ip作为服务ip。服务端口指定服务器的端口号,这一项用户可以自己设定,但需要在合法范围内,即0-65535,且2端口未被占用才能成功打开服务器。否则会有错误提示。在线用户数用来实时显示当前在线玩家数目。连接和断开按钮用来控制服务器的开启和关闭状态。
3.3类图说明
该程序所包含的类如图3.4所示。
软件区别服务端和客户端分两个包,在服务端这个包里面有三个源文件:Server.java、ServerThread.java、ServerAgentThread.java。Server.java主要用来定义服务器的主界面,并给按钮添加事件监听。ServerThread.java用来监听用户的接入,当用户接入后为用户开辟在服务端的代理线程。ServerAgentThread.java是用户在服务端的代理线程,用来处理用户发来的一些消息,完成对应用户的各种请求。
客户端包里面包含两个源文件:Chess.java、ChessAgentThread.java。Chess.java主要用来创建用户界面,添加各种事件监听,以及完成事件监听,并定义了游戏规则。ClientAgentThread.java是客户端在本地的与服务器端相对应的本地代理线程,客户端就是通过它来与服务端的代理线程进行通信,完成本地的各种信息发送和请求。它也是本地用户从服务端获取信息的途径。服务器端用户的代理线程将信息发送回来,ClientAgentThread接收到信息后,对信息进行判断做出处理,实现系统的主要功能。
所以说,在整个系统中,ClientAgentThread和ServerAgentThread是关键部分,系统的主要功能都是这两部分来完成的,正式通过这样的机制才完成了系统需要的功能。
图3.4类图
4详细设计
4.1程序流程设计
程序的主体流程图如图4.1.1和4.1.2所示。
系统的主要流程如以下两个流程图所示,客户端需要连接服务器后才可以正常实现需要的各种功能,所以整个对于整个系统运行,服务端首先需要开启。客户端连接上服务器后,服务器会将在线玩家列表发送给客户端,客户端在本地更新,然后客户端选择想要挑战的玩家,向玩家提出挑战,等待玩家的同意,对方玩家同意后游戏开始,在玩家自己行棋的时候玩家有权限执行走棋、悔棋、和棋、认输等功能,在整个对弈过程中玩家之间可以进行文字聊天。对于玩家的每一步走棋,系统会用一个集合来记录棋子移动的信息,以备悔棋的时候调用,实现悔棋。玩家执行相应的行为后,系统会将信息发送到服务器,服务器根据消息的开头的特定的标记对消息类型进行判断,并调用相应的方法来处理,并给对方玩家发送消息,对方玩家收到消息后,根据消息类型实现本地相应行为的执行,这样就实现了消息和状态的同步了。
图4.1.1
客户端程序流程图
图4.1.2服务端程序流程图
4.2网络连接设计
中国象棋网络对战系统是局域网通信软件,主要的通信模式如下图4.2
所示。
图4.2系统通信模式图
系统通过使用java程序设计语言自带的socket套接字实现通信。Socket套接字连接需要提供ip和端口号,所以根据本系统的通信模式是无法利用socket让两个对等的客户端之间实现真正的意义上的直接通信,基于这些考虑,最终决定使用代理线程来实现客户之间的通信。通过代理线程概念的引入,相当于把不同地方的客户端集中到一起一样,本系统的通信模式的设计就是把它们都用代理线程的形式集中到了服务端,然后代理线程之间相互调用,执行各个方法,实现通信了。
4.3功能设计
系统通信功能和棋子移动在其他版块单独介绍。
(1)玩家在线列表获取
在服务端,设置一个存放代理线程的集合类对象,每个新用户登录后,把用户的线程添加到线程集合中,用户在服务端的代理线程以用户昵称命名用以唯一标识,这也是为什么不允许用户名重名的原因。当用户连接上服务器后,服务器端用户服务代理线程遍历整个服务端的线程集合,得到各个线程的名字并将它们组织成字符串加上特定开头,发送给自己的客户。在客户端设置一个集合类对象用来存放玩家昵称,当客户端得到服务器发来的在线玩家列表是,客户端代理线程根据这个字符串的特定开头能识别出收到的是玩家列表,用字符串处理方法处理得到的字符串,还原得到用户昵称,并将它们存放到存放玩家昵称的集合中,然后用这个集合内容来更新在线玩家下拉列表,这样实现了玩家在线列表的实时获取。
(2)连接/断开
在客户端主界面的右边,玩家可以手动指定服务器ip和服务端口号,并设置一个在整个网络中唯一的昵称用来连接服务器。在用户设置好正确的ip和端口后,用户名没有重名的情况下,用户点击连接按钮,立即为用户创建客户代理线程以后与服务器的信息交互都交给客户端代理线程。并且客户代理线程的构造函数马上连接服务器,在服务器端注册本客户
端,以获得服务代理线程。服务端收到客户注册请求后先暂时分配无名服务代理线程,然后判断是否重名,重名则让无名代理线程返回给客户重名提示,接着关闭这个无名代理线程。若不重名,把用户昵称设为无名代理线程的名字,并把这个代理线程加入线程集合,注册成功。服务器让线程集合里的所有线程给自己的客户端返回用户上线提示和新的在线用户列表
客户端点击断开连接后,客户端代理线程向服务代理线程发离线请求,服务端代理线程收到后,关闭这条代理线程,并将它移出线程集合,并让线程集合里所有的线程给自己的客户端返回该用户的离线提示和最新的在线玩家列表。
(3)挑战:选择在线玩家,向玩家发出挑战;
客户端从在线列表中选中某个昵称后,点击挑战,程序会将该用户的tiaoZhanZhe变量设为选中的玩家昵称,并将请求挑战的特定标记字符和玩家昵称组成字符串发给服务代理线程。服务代理收到后找到这个昵称的用户的服务端代理线程,让它将请求挑战的消息加上发出发出挑战的玩家的昵称返回给它的客户端,这样被挑战的玩家的客户端代理线程就收到了挑战请求,客户端代理线程会判断一下tiaoZhanZhe这个变量是否是空值,若非空,返回给服务代理线程玩家正忙,服务代理线程会让提出挑战的玩家的服务代理线程返回玩家正忙的消息。若为空,则弹窗显示收到的挑战请求,这时被挑战者可以单击接受挑战或拒绝挑战按钮来相应对方的请求。并通过服务代理线程告知对方。若同意,则双方开始游戏,且分别将tiaoZhanZhe变量设为对方的昵称。拒绝则不开始游戏,且提出挑战的玩家将先前的tiaoZhanZhe变量的赋值行为取消,设为null
。整个流程图如下
玩家请求挑战流程图
(4)悔棋/求和:将棋子返回到之前所处的位置/双方协商棋局为和棋,重新开始;
玩家在轮到自己走棋的时候有请求悔棋和提和的权利,但需要对方玩家同意。
玩家点击悔棋或重新开始按钮后,程序将悔棋或重新开始的特定标识加上tiaoZhanZhe
变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的悔棋或提和消息,tiaoZhanZhe这个玩家收到后弹出选择框,玩家选择同意还是拒绝,玩家点击同意,则悔棋一步或者开始新游戏,且提出悔棋或者和棋的玩家收到消息,并也悔棋一步或重新开始新游戏,悔棋或者提和完成。若玩
家拒绝,则通过服务代理线程返回给提出悔棋或和棋的玩家拒绝消息。流程图如下。
悔棋/提和流程图
(5)认输:一方认输结束棋局;
玩家在游戏过程中可以随时点击认输按钮提出认输。
玩家点击认输按钮后,程序将悔认输特定标识加上tiaoZhanZhe变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的认输消息,tiaoZhanZhe这个玩家收到后弹出消息框,显示对方玩家认输的信息。这时候程序设定双方都不能再走棋,认输完成。
(6)聊天:跟对弈玩家进行文字聊天。
玩家在游戏过程中可以随时进行文字聊天。
玩家在聊天文本区输入内容后点击发送按钮后,程序将得到输入内容加上tiaoZhanZhe变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的消息,tiaoZhanZhe这个玩家收到后弹出消息框,显示对方玩家的消息。这样实现了聊天。
(7)走棋/吃棋
玩家棋子状态发生变化后程序给服务端服务代理线程发送棋子的编号、X坐标、Y坐标、棋子是否可见四项内容。
棋子状态发生变化后,程序先给服务代理线程发送棋子移动的特定标识加tiaoZhanZhe构成的字符串,服务代理线程收到后调用相应的方法,等待用户这边发送棋子编号、X坐标、Y坐标、棋子是否可见四项内容,然后服务端服务代理线程找到tiaoZhanZhe的服务代理线
程,让它按同样的方式,先发棋子移动标识,客户代理线程收到后调用相应方法等待服务代理线程发送棋子编号、X坐标、Y坐标、棋子是否可见四项内容,然后客户代理线程更新本
地相应棋子的状态,这样实现了走棋、吃棋。流程图如下。
走棋/吃棋流程图
4.4界面设计
对于人机交互性强的象棋对弈系统,界面的设计必不可少,也是决定系统质量的重要指标。本系统客户端和服务端都设计有界面,服务端界面比较简单,主要分两块,左边用来显示当前在线玩家的ip和昵称,用列表框实现。右边是服务端ip指定,端口指定,以及启动和关闭按钮,ip通过java自带的类提供的方法获取本机IP作为服务IP,且不允许编辑,端口自己指定但必须在0-65535的合法范围之内,否则系统会给出端口不合法提醒。
客户端界面分量大部分,左边是棋盘,右边是功能按钮和信息显示。棋盘区是行棋主界面,棋盘和棋子都是已标签的形式设置的,考虑到需要跟实际使用象棋的习惯和玩家操作的便利性,需要对不同角色的游戏玩家摆放不同布局的棋子,比如,红方玩家需要界面上显示红棋在下半屏幕,黑棋在上半屏幕,对于黑方玩家刚好相反,黑棋得在下,红棋在上。这是本系统在设计之初所面临的一个不好解决的问题,后来通过算法实现坐标的变换得以实现该功能了。对于棋子和棋盘,考虑到操纵的简单,在本系统的设计里我全部都是用坐标来定位,实践证明,这样做给我后来设计走棋规则带来很大的方便。信息区可以分三小块,第一小块主要是状态信息显示,能显示服务器的ip地址,系统默认给出服务器ip为127.0.0.1,这个可以在连接服务器的时候根据服务器的情况指定。本机ip显示本机在局域网内的ip地址,这是通过java自带的类的方法实现的,端口号显示与服务器连接的端口号。昵称和角色还有对方玩家显示用户的昵称和在游戏中是黑棋还是红棋,对方玩家显示的是对方玩家的昵称。状态显示信息用来给用户提示,在没有连接或者没有开始游戏的时候显示一条欢迎语句,
当在走棋的时候会闪烁提示用户是黑棋走棋还是红棋走棋。第二小块区域是连接服务器时的一些选项。能指定服务ip,服务端口,可以设置在游戏中的昵称,这里默认通过java自带的类获取本地主机名作为昵称,用户可以自己取名。连接和断开按钮控制与服务器的连接和断开。在线玩家这个下拉列表用来显示当前在线玩家,并且能选择其中某个玩家进行挑战。第三部分,是选项按钮,有新游戏(和棋),用来向对方提出和棋。退出按钮退出系统,接受挑战和拒绝挑战用来接受和拒绝玩家提出的挑战请求。悔棋和认输用来悔棋和认输,悔棋和新游戏只是在玩家获得行棋权利的时候才有效。且新游戏、悔棋都要经过对方玩家同意才能行。聊天功能允许玩家在已经连接上服务器,并且已经有对方玩家的情况下和对方玩家进行
聊天。
红棋角色黑棋角色
不同角色玩家棋盘布局对比
4.5走棋和吃棋规则设计
中国象棋网络对战系统对于棋子和棋盘都是通过坐标来定位,这对于走棋和吃棋方法的设计带来很大的方便。对于棋盘上每个棋点,都用坐标来进行唯一标识,对于鼠标在棋盘上的点击,根据坐标的模糊算法来确定鼠标的行为,如果鼠标在棋点周围的一定区域内点击,则判断鼠标点击了棋点,走棋和吃棋流程图如图4.5所示。
走棋和吃棋的规则按照中国象棋的游戏规则进行约定,在游戏中,当棋子移动时,我们会通过坐标判断一下其他棋子的状态,看看当前是否满足欲移动棋子的移动条件或吃棋条件。比如,红炮要吃一个黑子,我们会判断该黑子是不是跟红炮在同一条横线上或黑线上,若在一条直线上,接着会判断红炮和黑子之间是不是有且仅有一颗棋子。这都是通过坐标来判断。
图4.5走棋和吃棋规则流程图
5系统测试与总结
5.1系统测试
系统测试系统测试是软件开发过程中非常重要的一个环节,它是衡量我们所开发系统的准则。通过各种形式的测试以及相应的调试,使软件系统达到预定的要求。通过对软件测试结果的分析可以预测软件的可靠性;反之,也可以根据对软件可靠性的要求,来决定测试和调试过程什么时候可以结束。在软件生命周期中的每个阶段都无法避免的会出现差错,只有做好软件的测试工作,才能保证软件的安全可靠性。
象棋游戏网络对战系统最好的测试方式是首先通过进行象棋对弈,和各个功能的执行来测试,其次要进行多用户模拟测试。
5.1.1系统功能测试
系统的主要功能是联机对弈,完成各个模块的正常工作是系统的系统的基础。为此我对系统的各项功能进行了测试。
(1)走棋
走棋是基本功能,通过多次测试,在网络连接正常情况下系统走棋正常,
没有出现异常。
(2)不合法情况提示
系统会有一些用户不当操作的提示,为了验证此功能,首先有意让用户重名,系统能提
示
故意选择不合法的端口号,系统能提醒
去向一个正在游戏的玩家发出挑战,系统能提示
(3)常用功能
发送聊天信息
提出悔棋
玩家认输
5.1.2网络并发压力测试
中国象棋网络对战是多用户的网络对战平台,经过测试本系统可支持500以上用户同时在线利用服务器完成信息的交换。
为了测试服务器并发能力,我写了一个用于测试系统的小代码,测试代码流程图如图
5.1.2。本系统功能要求每一个新用户登录到服务器时,服务器要向所有在线用户发送新的用户列表,所以每一次新用户登录,服务器需要与所有用户几乎同时通信,本身就是多用户的同时通信的过程,前面奇数线程给偶数线程发消息和偶数线程给奇数线程发消息这两个阶段是用来测试一下基本通信的稳定,后面用500个控制线程控制来测试服务器就足可以满足同时访问的用户在500以上了,因为每一条控制线程里面有500个线程在循环,500条控制线程的顺序都是随机的,而且每个线程有一定的持续时间,这种测试持续时间长,所以这样的测试足以证明服务器能支持500以上的用户同时访问。且在测试完成还没有关闭程序时,打开命令窗口,输入netstat-a命令可以查看到确实有500个端口与服务器的2014号端口在通信。
需要注意的是,在500条控制线程里,并不是每一条控制线程都是从0号线程开始发消息的,我采用的是随机的方式。
为了验证最终数据传输的稳定性,我让每一条测试线程都生成了一个自己的文本文件,
用来记录收到的服务器端的数据,拿数据说话,观察数据保证用户数不低于500可以同时访
问。
图5.1.2测试代码流程图
5.2总结与展望
本次课程设计充分利用自己学的Java知识,熟练掌握有关Java语言的语法基础,面向对象,Applet的运用,还有图形的设计,有关线程的知识。对于中国象棋对弈系统,把Java知识灵活的结合了起来,让人们对Java有了一个崭新的认识。该程序实现了中国象棋双人对弈,并实现了悔棋、求和、认输等功能。
本系统的设计通过多线程的引入,轻松实现预期构想的500用户同时在线。另外,在设计本系统之初,设计者一直想把该系统的代码实现模块化,以增强系统的可拓展性。系统代码编写者在编写过程中也一直很注意模块化的问题,在系统目前告一段落之际,系统已具备很强的可拓展性,编者即本系统设计者预计本系统能很轻松的实现更大规模的应用平台,能实现分区分房间进行游戏。
现在网络上也有一些网络象棋对弈软件和人机对战软件,但网络上的人机对战软件只是机器运用简单的人工智能分析所有符合规则的走法,选择某种进行走棋;随着人工智能的发展,使机器拥有学习分析的能力,若把人工智能与中国象棋相结合,使得机器通过一些某人的对弈棋谱形成该人的对弈风格,并在选择人机对战时选择某一种风格,使得我们感觉如同跟真人对战一样;而且,可以选择两种风格进行机器与机器对战。如若实现,我们可以体验与古代人、世界冠军等我们无法无法接触到的人对战,而且还可以使他们的风格对战,我们从中学习提高。
中国象棋网络对战
软件设计说明书
吴刚
学号:201242238
12级信息工程2班
2014年12月10号
1绪论........................................................................错误!未定义书签。
1.1项目开发的背景及意义........................................................................错误!未定义书签。
1.2研究现状及发展趋势............................................................................错误!未定义书签。
1.3研究目标................................................................................................错误!未定义书签。2可行性研究..............................................................................................2
2.1技术可行性............................................................................................错误!未定义书签。
2.1.1使用JAVA技术的优点....................................................................................................3
2.1.2ECLIPSE简介...................................................................................................................3
2.2经济可行性............................................................................................错误!未定义书签。
2.3社会可行性..............................................................................................................................43需求分析及总体设计..............................................................................4
3.1需求分析...................................................................................................................................4
3.2总体设计...................................................................................................................................4
3.2.1总体结构设计................................................................................................................4
3.2.2棋子棋盘的设计............................................................................................................5
3.2.3服务器界面....................................................................................................................6
3.3类图说明...................................................................................................................................64详细设计..................................................................................................7
4.1程序流程设计...........................................................................................................................7
4.2网络连接设计...........................................................................................................................9
4.3功能设计...................................................................................................................................9
4.4界面设计.................................................................................................................................12
4.5走棋和吃棋规则设计.............................................................................................................135系统测试与总结....................................................................................14
5.1系统测试.................................................................................................................................14
5.1.1系统功能测试................................................................................................................14
5.1.2网络并发压力测试........................................................................................................16
5.2总结与展望.............................................................................................................................17
软件设计说明书
【摘要】随着社会的发展,科学技术不断提高,人们的娱乐活动不断增加,中国象棋作为中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。开发中国象棋游戏软件,推广我们传统的象棋文化。本文通过运用java语言、软件工程的知识,参考网上一些文献资料的设计思路,开发出中国象棋对弈游戏系统,程序实现了选择玩家进行挑战、悔棋、和棋、认输、聊天等功能。通过对系统进行详细的需求分析,设计出了系统的逻辑模型,并且对各个功能进行了详细的分析,并对该程序的功能进行了测试与总结。
【关键词】java、中国象棋、对弈、游戏
1绪论
1.1项目开发的背景及意义
随着电子信息技术的不断发展以及网络技术的普及,网络能提供多样、便捷的服务,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展非常迅猛,它凭借健康、方便、益智、互动性强等诸多优点,成为大众休闲娱乐的首选。
作为中华民族的悠久文化代表之一,中国象棋不仅源远流长,而且基础广泛,作为一项智力运动,中国象棋不仅能丰富人们文化生活,陶冶情操,而且有助于开发智力,启迪思维,培养人的品格。弈棋可磨练意志,锤炼品质,塑造性格,陶冶情操,中国象棋是中国文化的缩影,是中华民族智慧的反映。中国象棋的规则的复杂性是社会复杂性在中国象棋游戏中的一个反映。
通过java技术开发中国象棋游戏系统,以便于与时俱进,将中国象棋运用于计算机等电子设备,实现中国象棋对弈系统,为象棋在网络应用平台提供多人对弈。
1.2研究现状及发展趋势
象棋游戏软件现在有腾讯象棋、JJ象棋、象棋巫师等游戏软件;腾讯象棋和JJ象棋是网络对弈游戏。
现在的棋牌类游戏有很多,有很多游资对战平台的网络对弈软件;如腾讯QQ象棋、JJ象棋就是网络对弈象棋。但将传统的益智游戏在计算机领域推广还处于萌芽阶段。棋牌类游戏将向多平台、智能化方向发展。
1.3研究目标
此项目主要应用于中国象棋对弈软件,本文针对的是双人联网对弈,能够运用该软件进行象棋对弈。实现对弈、悔棋、和棋、认输、聊天等功能。
2可行性研究
可行性研究的目的,就是以最小的代价、在尽量短的时间内确定问题是否能够被解决。因此,必须客观的分析问题,找到主要的可能解决法,然后从系统逻辑模型出发,分析若干
种主要的解法,研究每种解法的可行性,从而最终确定这项工程的可行性。
2.1技术可行性
Java是SunMicrosystem公司开发的编程语言,java语言具有高效性、通用性、平台移植性和安全性等特点。运用Eclipse软件进行编写,并运行编译执行。
2.1.1使用java技术的优点
Java是非常新的一种语言,具有面向对象、分布式、解释执行、体系结构中立、可移植、多线程、以及动态性等特点。和其他编程语言相比,它有很多优点。使用Java语言的主要优点体现在以下几个方面:
(1)灵活性
Java语言是非常灵活的,它支持部署和开发环境中的各种变化。因为Java是在面向对象的基础平台上构建的,故其很容易对基本的语言进行扩展和发布。
(2)厂商的广泛支持
采用Java有一个非常重要的原因,就是受到了厂商的广泛支持。Java不仅仅只有一个主要的供应商,有许多公司都生产、支持Java产品。
(3)用户的广泛支持
Java语言具有良好的用户基础,它们并不局限于某一个特定的公司。在Internet上,有许多资源以及Java示例代码。另外,Java程序员还可以使用许多免费软件或共享软件和许多应用程序代码。
(4)平台独立性
Java源代码和运行时的文件与操作系统无关,可以支持多个操作系统。因此,在Windows环境中创建并编译Java类文件,无需任何修改就可以将其部署到Linux环境中。Java的这种特性,也称为可移植性,这一点使得Java开发更加方便,对于那些需要一个特定操作系统、又需要支持其他操作系统的企业来说是非常重要。
2.1.2Eclipse简介
Eclipse是一个基于Java的可扩展开发平台。它本身只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),该组件主要是针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。Eclipse这样功能完整且成熟的开发环境,大部分的开发掌握在IBM手中,但是有一部份是由eclipse.org的软件联盟主导。Eclipse使用开放原始码许可书,即用公共公众许可书CommonPublicLicense(CPL)作为授权方式,设计上是可以容许商业利益的。CPL可以容许Eclipse和其它开放原始码软件合组时,能够用更加严谨的许可书散布软件,可以用于商业途径。CPL经过OpenSoftwareInitiative(OSI)认证,其内容符合开放原始码授权的需求。
2.2经济可行性
经济可行性分析是指进行成本与效益的核算分析,从经济角度判断开发该系统的预期经济效益能否超过它的开发成本。当系统开发人员接受开发任务时,首要研究开发任务,判断是否具有简单明确合理可行的解决办法。其实,有许多不可能在预期的规模内解决的问题,如果某些问题无法很好的解决,那么花费在该项工程上的任何时间、资源和经费都是浪费的。因此可行性分析必不可少。该系统的开发运用Java开发环境Eclipse来完成,
参考图书及网上相关资料,由自己独立开发完成,在经济方面成本可自己承担,具有一定的经济可行性。
2.3社会可行性
随着计算机科技的发展,个人计算机的普及,越来越多的人们接触并使用计算机,现今普通人也能熟练地使用计算机,并习惯使用计算机通过网络进行学习工作和娱乐活动,这样更有利于人力资源的有效利用。而且该程序的简单易用,使得人们能够使用该程序进行对弈。
3需求分析及总体设计
3.1需求分析
该程序需要实现象棋游戏的以下几个基本功能:
(1)开始游戏/重新开始:开始一局新的象棋对弈;
(2)连接/断开:以自己设定的昵称连接服务器或者断开服务器;
(3)挑战:选择在线玩家,向玩家发出挑战;
(4)接受挑战/拒绝挑战:接受玩家的挑战请求或者拒绝玩家的挑战请求;
(5)悔棋:将棋子返回到之前所处的位置;
(6)求和和认输:将双方协商棋局为和棋,或一方认输结束棋局;
(7)退出:退出本程序;
(8)提示:显示出象棋的走棋;
(9)聊天:跟对弈玩家进行文字聊天。
3.2总体设计
3.2.1总体结构设计
中国象棋软件的总体结构层次方框图如图3.1
所示。
图3.1层次方框图
软件分客户端和服务端,客户端是程序的主体,包含游戏界面的各个部分,有信息显示区和各种功能按钮设计。在客户端里面需要定义走棋和吃棋的规则。服务端主要用来处理玩家之间信息的交互,以及各个玩家在服务端的代理线程的开辟和管理。界面比较简单,左半部分显示玩家列表,右半部分是功能区,能选择开启和关闭服务器。
3.2.2棋子棋盘的设计
打开客户端后显示的棋盘界面如图3.2
所示。
图3.2棋盘界面
棋盘区是行棋主界面,能根据不同角色的玩家来布置不一样的界面,图为红棋的界面,黑棋的界面则为黑子在下面,红子在上面。
信息区可以分三小块,第一小块主要是状态信息显示,能显示服务器的ip地址,系统默认给出服务器ip为127.0.0.1,这个可以在连接服务器的时候根据服务器的情况指定。本机ip显示本机在局域网内的ip地址,这是通过java自带的类的方法实现的,端口号显示与服务器连接的端口号。昵称和角色还有对方玩家显示用户的昵称和在游戏中是黑棋还是红棋,对方玩家显示的是对方玩家的昵称。状态显示信息用来给用户提示,在没有连接或者没有开始游戏的时候显示一条欢迎语句,当在走棋的时候会闪烁提示用户是黑棋走棋还是红棋走棋。第二小块区域是连接服务器时的一些选项。能指定服务ip,服务端口,可以设置在游戏中的昵称,这里默认通过java自带的类获取本地主机名作为昵称,用户可以自己取名。连接和断开按钮控制与服务器的连接和断开。在线玩家这个下拉列表用来显示当前在线玩家,并且能选择其中某个玩家进行挑战。第三部分,是选项按钮,有新游戏(和棋),用来向对方提出和棋。退出按钮退出系统,接受挑战和拒绝挑战用来接受和拒绝玩家提出的挑战请求。悔棋和认输用来悔棋和认输,悔棋和新游戏只是在玩家获得行棋权利的时候才有效。且新游戏、悔棋都要经过对方玩家同意才能行。聊天功能允许玩家在已经连接上服务器,并且已经有对方玩家的情况下和对方玩家进行聊天。
3.2.3服务器界面
运行服务端后显示的服务端界面如图3.3
所示。
图3.3服务端界面
在线用户列表区用来显示当前在线用户的昵称和ip。服务ip指定服务器的ip,这一项是不允许用户手动输入的,通过java自带的类来获取主机ip作为服务ip。服务端口指定服务器的端口号,这一项用户可以自己设定,但需要在合法范围内,即0-65535,且2端口未被占用才能成功打开服务器。否则会有错误提示。在线用户数用来实时显示当前在线玩家数目。连接和断开按钮用来控制服务器的开启和关闭状态。
3.3类图说明
该程序所包含的类如图3.4所示。
软件区别服务端和客户端分两个包,在服务端这个包里面有三个源文件:Server.java、ServerThread.java、ServerAgentThread.java。Server.java主要用来定义服务器的主界面,并给按钮添加事件监听。ServerThread.java用来监听用户的接入,当用户接入后为用户开辟在服务端的代理线程。ServerAgentThread.java是用户在服务端的代理线程,用来处理用户发来的一些消息,完成对应用户的各种请求。
客户端包里面包含两个源文件:Chess.java、ChessAgentThread.java。Chess.java主要用来创建用户界面,添加各种事件监听,以及完成事件监听,并定义了游戏规则。ClientAgentThread.java是客户端在本地的与服务器端相对应的本地代理线程,客户端就是通过它来与服务端的代理线程进行通信,完成本地的各种信息发送和请求。它也是本地用户从服务端获取信息的途径。服务器端用户的代理线程将信息发送回来,ClientAgentThread接收到信息后,对信息进行判断做出处理,实现系统的主要功能。
所以说,在整个系统中,ClientAgentThread和ServerAgentThread是关键部分,系统的主要功能都是这两部分来完成的,正式通过这样的机制才完成了系统需要的功能。
图3.4类图
4详细设计
4.1程序流程设计
程序的主体流程图如图4.1.1和4.1.2所示。
系统的主要流程如以下两个流程图所示,客户端需要连接服务器后才可以正常实现需要的各种功能,所以整个对于整个系统运行,服务端首先需要开启。客户端连接上服务器后,服务器会将在线玩家列表发送给客户端,客户端在本地更新,然后客户端选择想要挑战的玩家,向玩家提出挑战,等待玩家的同意,对方玩家同意后游戏开始,在玩家自己行棋的时候玩家有权限执行走棋、悔棋、和棋、认输等功能,在整个对弈过程中玩家之间可以进行文字聊天。对于玩家的每一步走棋,系统会用一个集合来记录棋子移动的信息,以备悔棋的时候调用,实现悔棋。玩家执行相应的行为后,系统会将信息发送到服务器,服务器根据消息的开头的特定的标记对消息类型进行判断,并调用相应的方法来处理,并给对方玩家发送消息,对方玩家收到消息后,根据消息类型实现本地相应行为的执行,这样就实现了消息和状态的同步了。
图4.1.1
客户端程序流程图
图4.1.2服务端程序流程图
4.2网络连接设计
中国象棋网络对战系统是局域网通信软件,主要的通信模式如下图4.2
所示。
图4.2系统通信模式图
系统通过使用java程序设计语言自带的socket套接字实现通信。Socket套接字连接需要提供ip和端口号,所以根据本系统的通信模式是无法利用socket让两个对等的客户端之间实现真正的意义上的直接通信,基于这些考虑,最终决定使用代理线程来实现客户之间的通信。通过代理线程概念的引入,相当于把不同地方的客户端集中到一起一样,本系统的通信模式的设计就是把它们都用代理线程的形式集中到了服务端,然后代理线程之间相互调用,执行各个方法,实现通信了。
4.3功能设计
系统通信功能和棋子移动在其他版块单独介绍。
(1)玩家在线列表获取
在服务端,设置一个存放代理线程的集合类对象,每个新用户登录后,把用户的线程添加到线程集合中,用户在服务端的代理线程以用户昵称命名用以唯一标识,这也是为什么不允许用户名重名的原因。当用户连接上服务器后,服务器端用户服务代理线程遍历整个服务端的线程集合,得到各个线程的名字并将它们组织成字符串加上特定开头,发送给自己的客户。在客户端设置一个集合类对象用来存放玩家昵称,当客户端得到服务器发来的在线玩家列表是,客户端代理线程根据这个字符串的特定开头能识别出收到的是玩家列表,用字符串处理方法处理得到的字符串,还原得到用户昵称,并将它们存放到存放玩家昵称的集合中,然后用这个集合内容来更新在线玩家下拉列表,这样实现了玩家在线列表的实时获取。
(2)连接/断开
在客户端主界面的右边,玩家可以手动指定服务器ip和服务端口号,并设置一个在整个网络中唯一的昵称用来连接服务器。在用户设置好正确的ip和端口后,用户名没有重名的情况下,用户点击连接按钮,立即为用户创建客户代理线程以后与服务器的信息交互都交给客户端代理线程。并且客户代理线程的构造函数马上连接服务器,在服务器端注册本客户
端,以获得服务代理线程。服务端收到客户注册请求后先暂时分配无名服务代理线程,然后判断是否重名,重名则让无名代理线程返回给客户重名提示,接着关闭这个无名代理线程。若不重名,把用户昵称设为无名代理线程的名字,并把这个代理线程加入线程集合,注册成功。服务器让线程集合里的所有线程给自己的客户端返回用户上线提示和新的在线用户列表
客户端点击断开连接后,客户端代理线程向服务代理线程发离线请求,服务端代理线程收到后,关闭这条代理线程,并将它移出线程集合,并让线程集合里所有的线程给自己的客户端返回该用户的离线提示和最新的在线玩家列表。
(3)挑战:选择在线玩家,向玩家发出挑战;
客户端从在线列表中选中某个昵称后,点击挑战,程序会将该用户的tiaoZhanZhe变量设为选中的玩家昵称,并将请求挑战的特定标记字符和玩家昵称组成字符串发给服务代理线程。服务代理收到后找到这个昵称的用户的服务端代理线程,让它将请求挑战的消息加上发出发出挑战的玩家的昵称返回给它的客户端,这样被挑战的玩家的客户端代理线程就收到了挑战请求,客户端代理线程会判断一下tiaoZhanZhe这个变量是否是空值,若非空,返回给服务代理线程玩家正忙,服务代理线程会让提出挑战的玩家的服务代理线程返回玩家正忙的消息。若为空,则弹窗显示收到的挑战请求,这时被挑战者可以单击接受挑战或拒绝挑战按钮来相应对方的请求。并通过服务代理线程告知对方。若同意,则双方开始游戏,且分别将tiaoZhanZhe变量设为对方的昵称。拒绝则不开始游戏,且提出挑战的玩家将先前的tiaoZhanZhe变量的赋值行为取消,设为null
。整个流程图如下
玩家请求挑战流程图
(4)悔棋/求和:将棋子返回到之前所处的位置/双方协商棋局为和棋,重新开始;
玩家在轮到自己走棋的时候有请求悔棋和提和的权利,但需要对方玩家同意。
玩家点击悔棋或重新开始按钮后,程序将悔棋或重新开始的特定标识加上tiaoZhanZhe
变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的悔棋或提和消息,tiaoZhanZhe这个玩家收到后弹出选择框,玩家选择同意还是拒绝,玩家点击同意,则悔棋一步或者开始新游戏,且提出悔棋或者和棋的玩家收到消息,并也悔棋一步或重新开始新游戏,悔棋或者提和完成。若玩
家拒绝,则通过服务代理线程返回给提出悔棋或和棋的玩家拒绝消息。流程图如下。
悔棋/提和流程图
(5)认输:一方认输结束棋局;
玩家在游戏过程中可以随时点击认输按钮提出认输。
玩家点击认输按钮后,程序将悔认输特定标识加上tiaoZhanZhe变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的认输消息,tiaoZhanZhe这个玩家收到后弹出消息框,显示对方玩家认输的信息。这时候程序设定双方都不能再走棋,认输完成。
(6)聊天:跟对弈玩家进行文字聊天。
玩家在游戏过程中可以随时进行文字聊天。
玩家在聊天文本区输入内容后点击发送按钮后,程序将得到输入内容加上tiaoZhanZhe变量的值组成字符串发送给服务代理线程,服务代理线程收到消息后,找到tiaoZhanZhe这个昵称的服务代理线程,并让它返回玩家的消息,tiaoZhanZhe这个玩家收到后弹出消息框,显示对方玩家的消息。这样实现了聊天。
(7)走棋/吃棋
玩家棋子状态发生变化后程序给服务端服务代理线程发送棋子的编号、X坐标、Y坐标、棋子是否可见四项内容。
棋子状态发生变化后,程序先给服务代理线程发送棋子移动的特定标识加tiaoZhanZhe构成的字符串,服务代理线程收到后调用相应的方法,等待用户这边发送棋子编号、X坐标、Y坐标、棋子是否可见四项内容,然后服务端服务代理线程找到tiaoZhanZhe的服务代理线
程,让它按同样的方式,先发棋子移动标识,客户代理线程收到后调用相应方法等待服务代理线程发送棋子编号、X坐标、Y坐标、棋子是否可见四项内容,然后客户代理线程更新本
地相应棋子的状态,这样实现了走棋、吃棋。流程图如下。
走棋/吃棋流程图
4.4界面设计
对于人机交互性强的象棋对弈系统,界面的设计必不可少,也是决定系统质量的重要指标。本系统客户端和服务端都设计有界面,服务端界面比较简单,主要分两块,左边用来显示当前在线玩家的ip和昵称,用列表框实现。右边是服务端ip指定,端口指定,以及启动和关闭按钮,ip通过java自带的类提供的方法获取本机IP作为服务IP,且不允许编辑,端口自己指定但必须在0-65535的合法范围之内,否则系统会给出端口不合法提醒。
客户端界面分量大部分,左边是棋盘,右边是功能按钮和信息显示。棋盘区是行棋主界面,棋盘和棋子都是已标签的形式设置的,考虑到需要跟实际使用象棋的习惯和玩家操作的便利性,需要对不同角色的游戏玩家摆放不同布局的棋子,比如,红方玩家需要界面上显示红棋在下半屏幕,黑棋在上半屏幕,对于黑方玩家刚好相反,黑棋得在下,红棋在上。这是本系统在设计之初所面临的一个不好解决的问题,后来通过算法实现坐标的变换得以实现该功能了。对于棋子和棋盘,考虑到操纵的简单,在本系统的设计里我全部都是用坐标来定位,实践证明,这样做给我后来设计走棋规则带来很大的方便。信息区可以分三小块,第一小块主要是状态信息显示,能显示服务器的ip地址,系统默认给出服务器ip为127.0.0.1,这个可以在连接服务器的时候根据服务器的情况指定。本机ip显示本机在局域网内的ip地址,这是通过java自带的类的方法实现的,端口号显示与服务器连接的端口号。昵称和角色还有对方玩家显示用户的昵称和在游戏中是黑棋还是红棋,对方玩家显示的是对方玩家的昵称。状态显示信息用来给用户提示,在没有连接或者没有开始游戏的时候显示一条欢迎语句,
当在走棋的时候会闪烁提示用户是黑棋走棋还是红棋走棋。第二小块区域是连接服务器时的一些选项。能指定服务ip,服务端口,可以设置在游戏中的昵称,这里默认通过java自带的类获取本地主机名作为昵称,用户可以自己取名。连接和断开按钮控制与服务器的连接和断开。在线玩家这个下拉列表用来显示当前在线玩家,并且能选择其中某个玩家进行挑战。第三部分,是选项按钮,有新游戏(和棋),用来向对方提出和棋。退出按钮退出系统,接受挑战和拒绝挑战用来接受和拒绝玩家提出的挑战请求。悔棋和认输用来悔棋和认输,悔棋和新游戏只是在玩家获得行棋权利的时候才有效。且新游戏、悔棋都要经过对方玩家同意才能行。聊天功能允许玩家在已经连接上服务器,并且已经有对方玩家的情况下和对方玩家进行
聊天。
红棋角色黑棋角色
不同角色玩家棋盘布局对比
4.5走棋和吃棋规则设计
中国象棋网络对战系统对于棋子和棋盘都是通过坐标来定位,这对于走棋和吃棋方法的设计带来很大的方便。对于棋盘上每个棋点,都用坐标来进行唯一标识,对于鼠标在棋盘上的点击,根据坐标的模糊算法来确定鼠标的行为,如果鼠标在棋点周围的一定区域内点击,则判断鼠标点击了棋点,走棋和吃棋流程图如图4.5所示。
走棋和吃棋的规则按照中国象棋的游戏规则进行约定,在游戏中,当棋子移动时,我们会通过坐标判断一下其他棋子的状态,看看当前是否满足欲移动棋子的移动条件或吃棋条件。比如,红炮要吃一个黑子,我们会判断该黑子是不是跟红炮在同一条横线上或黑线上,若在一条直线上,接着会判断红炮和黑子之间是不是有且仅有一颗棋子。这都是通过坐标来判断。
图4.5走棋和吃棋规则流程图
5系统测试与总结
5.1系统测试
系统测试系统测试是软件开发过程中非常重要的一个环节,它是衡量我们所开发系统的准则。通过各种形式的测试以及相应的调试,使软件系统达到预定的要求。通过对软件测试结果的分析可以预测软件的可靠性;反之,也可以根据对软件可靠性的要求,来决定测试和调试过程什么时候可以结束。在软件生命周期中的每个阶段都无法避免的会出现差错,只有做好软件的测试工作,才能保证软件的安全可靠性。
象棋游戏网络对战系统最好的测试方式是首先通过进行象棋对弈,和各个功能的执行来测试,其次要进行多用户模拟测试。
5.1.1系统功能测试
系统的主要功能是联机对弈,完成各个模块的正常工作是系统的系统的基础。为此我对系统的各项功能进行了测试。
(1)走棋
走棋是基本功能,通过多次测试,在网络连接正常情况下系统走棋正常,
没有出现异常。
(2)不合法情况提示
系统会有一些用户不当操作的提示,为了验证此功能,首先有意让用户重名,系统能提
示
故意选择不合法的端口号,系统能提醒
去向一个正在游戏的玩家发出挑战,系统能提示
(3)常用功能
发送聊天信息
提出悔棋
玩家认输
5.1.2网络并发压力测试
中国象棋网络对战是多用户的网络对战平台,经过测试本系统可支持500以上用户同时在线利用服务器完成信息的交换。
为了测试服务器并发能力,我写了一个用于测试系统的小代码,测试代码流程图如图
5.1.2。本系统功能要求每一个新用户登录到服务器时,服务器要向所有在线用户发送新的用户列表,所以每一次新用户登录,服务器需要与所有用户几乎同时通信,本身就是多用户的同时通信的过程,前面奇数线程给偶数线程发消息和偶数线程给奇数线程发消息这两个阶段是用来测试一下基本通信的稳定,后面用500个控制线程控制来测试服务器就足可以满足同时访问的用户在500以上了,因为每一条控制线程里面有500个线程在循环,500条控制线程的顺序都是随机的,而且每个线程有一定的持续时间,这种测试持续时间长,所以这样的测试足以证明服务器能支持500以上的用户同时访问。且在测试完成还没有关闭程序时,打开命令窗口,输入netstat-a命令可以查看到确实有500个端口与服务器的2014号端口在通信。
需要注意的是,在500条控制线程里,并不是每一条控制线程都是从0号线程开始发消息的,我采用的是随机的方式。
为了验证最终数据传输的稳定性,我让每一条测试线程都生成了一个自己的文本文件,
用来记录收到的服务器端的数据,拿数据说话,观察数据保证用户数不低于500可以同时访
问。
图5.1.2测试代码流程图
5.2总结与展望
本次课程设计充分利用自己学的Java知识,熟练掌握有关Java语言的语法基础,面向对象,Applet的运用,还有图形的设计,有关线程的知识。对于中国象棋对弈系统,把Java知识灵活的结合了起来,让人们对Java有了一个崭新的认识。该程序实现了中国象棋双人对弈,并实现了悔棋、求和、认输等功能。
本系统的设计通过多线程的引入,轻松实现预期构想的500用户同时在线。另外,在设计本系统之初,设计者一直想把该系统的代码实现模块化,以增强系统的可拓展性。系统代码编写者在编写过程中也一直很注意模块化的问题,在系统目前告一段落之际,系统已具备很强的可拓展性,编者即本系统设计者预计本系统能很轻松的实现更大规模的应用平台,能实现分区分房间进行游戏。
现在网络上也有一些网络象棋对弈软件和人机对战软件,但网络上的人机对战软件只是机器运用简单的人工智能分析所有符合规则的走法,选择某种进行走棋;随着人工智能的发展,使机器拥有学习分析的能力,若把人工智能与中国象棋相结合,使得机器通过一些某人的对弈棋谱形成该人的对弈风格,并在选择人机对战时选择某一种风格,使得我们感觉如同跟真人对战一样;而且,可以选择两种风格进行机器与机器对战。如若实现,我们可以体验与古代人、世界冠军等我们无法无法接触到的人对战,而且还可以使他们的风格对战,我们从中学习提高。