ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:564.42KB ,
资源ID:30370200      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30370200.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(2班倪佩佩学号0059.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

2班倪佩佩学号0059.docx

1、2班倪佩佩学号0059Java课程设计 黑白棋网络对战平台系统的设计与实现姓 名 倪珮珮 学 号 201000130059 时 间 2011年5月5日星期四 一、 需求分析 41.1 功能需求 41.2 开发环境 4二、 整体架构 4三、 通信协议 43.1 协议指令 53.1.1 客户端的指令集 63.1.2 服务器端的指令集 7四、详细设计 94.1 数据库设计 94.2 包图 94.2.1 客户端 94.2.2 服务器端 94.3 类图 104.3.1 客户端 104.3.2 服务器端 114.4 类概要 13五、 使用指南 135.1概况 135.2 流程 145.3界面介绍 15六、

2、 测试用例22七、时间进度23八、关键技术实现24九、特色功能29十、个人体会30一、需求分析1.1 功能需求本系统实现一个基于C/S架构的黑白棋网络对战平台,在这个系统中,服务器提供一个平台使得多个玩家可以同时连接服务器进行双人对战,多人观看。同时提供友好的图形用户界面。具体功能需求如下:1.1.1 客户端 提供登陆窗体使用户可以通过输入其用户名和密码登陆服务器,此时可以点击设置按钮设置服务器IP地址。 提供注册窗体使得新的用户可以通过此注册一个新ID。 登陆服务器后用户将进入游戏大厅,用户可以看到当前已登录用户的所有信息。 在游戏大厅内,系统将提供一个供用户聊天的聊天窗口,这里是所有登录用

3、户用于群聊的部分 进入大厅后,玩家可以进入游戏模式。也可进入观战模式 在用于黑白棋比赛的窗口中,将显示当前棋盘、下棋记录,用户详情以及其对手的详情,同时提供一个聊天窗口。 在比赛过程中,用户可以向对手请求悔棋,当且仅当对手同意时方能悔棋;同时用户也可以向对手认输从而提前结束比赛。 在比赛尚未开始或一局比赛已经结束时,用户可以正常退出黑白棋游戏从而结束比赛。1.1.2 服务器端 提供图形化的界面,显示服务器运行状况以及提供启动和关闭服务器的接口 服务器被启动后,对于每一个用户的连接,将启动一个线程用于该连接上的用户的事务处理 服务器将对用户的请求(诸如登陆,注册,获得大厅信息等)结合数据库的查询

4、给予适当的反馈信息 每当有一个新的用户登陆时,服务器将这则消息发送给其他每个在线用户 每当有一个新的用户就坐时,服务器将这则消息发送给其他每个在线用户。 当比赛结束或有用户认输或强行退出比赛时,服务器将要更新数据库上他们的比赛积分值和输赢次数,同时将更新后的信息发送给每一个用户1.2 开发环境开发语言:Java开发工具:Eclipse-SDK-3.5.1-win32所用开发系统:Microsoft Windows XP二、整体架构本系统采用经典的C/S模式。C/S (Client/Server)架构,即大家熟知的客户机和服务器架构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将

5、任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层架构。C/S架构把数据库内容放在远程的服务器上,而在客户机上安装相应软件。C/S软件一般采用两层架构,其分布结构如图1所示。它由两部分构成:前端是客户机,即Client,结合了程序界面和应用逻辑,接受用户的请求,并向数据库服务提出请求,后端是服务器,即数据管理(Server),将数据提交给客户端,客户端将数据进行计算并将结果呈现给用户,还要提供完善的安全保护及对数据的完整性处理等操作,并允许多个客户同时访问同一个数据库。 图1 C/S结构三、通信协议本系统的通

6、信协议和一些经典的网络应用通信协议类似(例如FTP协议),客户端和服务器都是通过发送/接收命令(通常由命令头+参数构成)来通信的。3.1 协议指令3.1.1 客户端的指令集3.1.1.1 用户名(USERNAME)其参数是用户输入的用户名,客户端将此命令发送给服务器端有两种场景:一是用户登陆;二是用户注册。对于这两种用途,服务器端都会直接在数据库中国查找该用户名给出用户名存在/不存在的消息,由客户端后续的操作去处理这些情况。3.1.1.2 密码(PASSWORD)其参数是用户输入的密码,客户端将此命令发送给服务器以实现登陆。3.1.1.3 开始比赛(START)无参指令,用于通知服务器该用户准

7、备好了比赛。3.1.1.4 放置棋子(GetQIZI)参数为用户所放置棋子的位置,客户端将此命令发送给服务器以通知服务器其在该位置上放置了一颗棋子。3.1.1.5房间内聊天信息(DOS)参数为用户所发送给其对手及观战者的聊天信息,用于通知服务器该用户向其对手及观战者发送了一条聊天信息。3.1.1.6 请求悔棋(huiqi)无参指令,用于通知服务器该用户向其对手请求悔棋。3.1.1.7 同意悔棋(agree)无参指令,用于通知服务器其同意对手的悔棋请求。3.1.1.8 拒绝悔棋(reject)无参指令,用于通知服务器其拒绝对手的悔棋请求。3.1.1.9 请求认输(GIVE_UP)无参指令,客户端

8、向服务器发送此命令以请求认输。3.1.1.10 确认认输(COMFIRM_GIVE_UP)无参指令,客户端向服务器发送此命令以确认收到对手认输的消息。3.1.1.11比赛结果(PanDing)参数为黑方和白方分别所占的棋格数,客户端向服务器发送此命令以将比赛结果发送至服务器。3.1.1.12 大厅公聊信息(ShowMessage)参数为用户所发送给每个在线用户的聊天信息,客户端向服务器发送此命令以将公聊信息发送至服务器。3.1.1.13 注册(CLIENT_REGIST)参数是用户的注册信息,客户端向服务器发送此命令以注册新用户。3.1.1.14请求观战(CLIENT_ASK_FOR_LOOK

9、ING)参数是请求观战的房间ID,客户端发送此命令以请求观战某一房间3.1.1.15开始猜先(CLIENT_START_CHOOSE_COLOR)参数是客户端抓起的白棋数,客户端发送此命令以通知服务器已选定猜先棋 子数,让对手猜3.1.2 服务器端的指令集3.1.2.1 需要密码(SERVER_PASSWORD)无参指令,服务端向客户器发送此命令以通知用户发送其密码过来。3.1.2.2 用户不存在(SERVER_USER_NOT_EXIST)无参指令,服务端向客户器发送此命令以通知用户其用户名不存在。3.1.2.3 用户已登录(SERVER_USER_LOGIN_ALREADY)无参指令,服务

10、端向客户器发送此命令以通知该用户名已经登陆。3.1.2.4 登陆成功(SERVER_LOGIN)无参指令,服务端向客户器发送此命令以通知用户成功登陆信息。3.1.2.5 登陆失败(SERVER_LOGIN_ERROR)无参指令,服务端向客户器发送此命令以通知用户密码错误信息。3.1.2.6 新用户登陆(SERVER_NEW_CLIENT)参数为新登录用户的个人信息,服务端向客户器发送此命令以通知用户有新的用户进入大厅。3.1.2.7 初始化游戏(SERVER_INITIAL_GAME)无参指令,服务端向客户器发送此命令以通知用户初始化游戏。3.1.2.8 开始游戏(SERVER_START)无

11、参指令,服务端向客户器发送此命令以通知用户其对手准备好了游戏。3.1.2.9 放置棋子(SERVER_PUT_CHESS)参数为放置棋子的位置,服务端向客户器发送此命令以通知用户其对手的下棋位置。3.1.2.10 退出大厅(SERVER_QUIT)无参指令,服务端向客户器发送此命令以通知用户有用户退出大厅信息3.1.2.11成功进入房间观战(SERVER_AGREE_LOOKING)有参指令, 服务器向客户端发送此命令以通知客户端成功进入房间观战,随即发送房间信息3.1.2.12开始猜先(SERVER_START_CHOOSE_COLOR)无参指令, 服务器向客户端发送此命令以通知客户端开始猜

12、先四、详细设计4.1 数据库设计在本系统中,服务器端将负责在数据库中存储所有用户的相关信息,所以需要为其设计一个数据表。我设计了userinfo这个表用于存储用户相关信息。表项类型意义usernameVARCHAR(45)用户名passwordVARCHAR(45)用户密码 4.2包图 4.2.1客户端(OthelloHall这个包) 在这个包里,共有四个方法,分别为HallClient,HallServer,ItemAction,Room,分别用于登录注册,连接网络,实现功能按钮,进入房间游戏。 4.2.2服务器端 与客户端基本类似,共有三个方法,分别为Request,Server,Serv

13、erTimer,用于获取用户的ID,连接网络,倒计时。 4.3类图4.3.1客户端4.3.2服务器端 4.4类概要五、使用指南本系统拥有友好的图形界面,直接运行后即可使用。5.1概况:在输入用户名之后,游戏会自动启动一个本地的服务器,可以供自己或是他人连接。(如果在本地开启两个以上游戏,会自动提示服务器已经在另一个进程启动)如果直接按“参加游戏”,则进入“单机模式”。用户可以与内置的AI进行对战。当进行网络连接时,可以选择是连接到本地服务器还是他人机子上的服务器。连接上服务器后,如果参加的人数不满两个,则可以选择“参加游戏”,进入对战模式。如果超过两个,则进入“观战模式”(默认)观看他人游戏。

14、游戏的默认设置是,下完一盘棋后参加游戏的人并不会改变。参加游戏的人可以选择“退出”,点“进入观战模式”,这样在观战的人便也能参加游戏。5.2流程:5.3界面介绍5.3.1与AI对战时黑白棋主界面:界面左边是棋盘,上边左边是玩家双方的数据。包括黑方白方,玩家用户名,所用总时间和剩余思考时间,黑子数目白子数目。右边则是灌水区,用来用户的留言等。在左上方有两个选项,选择这两个选项会切换界面。如果选择右边的按钮,会出现一个新的界面,这个界面与“单机人人对战”界面差不多,只是里面有点微小的区别。在右边有四个按钮,分别为:用来打开自己下棋的第一步。用来打开自己下的最后一步用来打开自己当前步骤的前一步用来打

15、开对方的最后一步,也就是自己当前步骤的前一步。5.3.2.网络网络连接首先,你要运行一下服务器端,运行服务器端以后再运行一下客户端就可以连接网络了。连接网络的界面与单机模式的棋盘类似。只不过连接网络以后,你就可以与玩家聊天了。在右下角有个”关于“的按钮,按下这个按钮以后,会出现一个窗口,跳出设计者的相关信息。5.3.3按钮5.3.3.1保存将当前对战的过程以*.sav格式的文件保存下载。5.3.3.2悔棋悔一步棋。如果是网络对战的话,需要得到对方的同意。如果对方不同意悔棋,会自动提示要求悔棋的人,对方不同意悔棋,游戏继续进行。如果不是你在下棋的阶段,你是不可以悔棋的5.3.3.3打开打开以前下

16、棋的保存的棋谱5.3.3.4关于打开作者的相关信息5.3.3.5发送将玩家的聊天记录发送到公聊窗口上5.3.4计时器点击“暂停计时器按钮“,计时器会暂停,点击”启动计时器“,计时器开始运行,并且为双方计时,如果对方超时,会有窗口提示时间已超。六、测试用例黑白棋测试用例1 登陆a输入未注册用户名和密码,无法登陆b运行服务器端,服务器端无反应c输入已登录的用户名和密码,提示该用户已登录。d输入已注册未登录的用户名和密码,正常登陆大厅e输入注册的用户名和错误的密码,提示密码错误2. 注册 a输入已注册名字,返回提示已注册 b输入正常信息,提示XX注册成功,并返回登陆窗口3. 大厅 a点击任意桌子,正

17、常进入房间 b进入正在进行游戏的房间观战,正常获得当前房间情况 c选择单机模式还是多人模式,若为单机模式,则与计算机对战,若连接网络,则与其他人对战。d点击退出时,系统会提示是退出单机模式还是退出程序e若退出单机模式,则视为观战,若退出程序,则窗口关闭4. 房间 a两个人都准备后,系统提示猜先,并根据结果赋予各方正确的颜色。 b一方点击悔棋,另一方正常收到。若同意则悔棋,否则不悔棋 c一方点击认输按钮,正常认输 d房间内的聊天系统正常5. 采用各种下棋测试棋谱 a甲方停步,系统正常提示甲方和乙方b双方停步,游戏结束,正确统计结果c一方强制退出游戏,游戏结束,刷新界面并更新积分6. 观战 a未开

18、时游戏进入房间,正常显示房间内就坐情况,并正常接收提示信息 b游戏进行中进入游戏房间,可以正常接收棋子和时间 c观战者可以正常进行发言七、时间进度第一周 分析项目要求,进行总体设计。并从网上寻找参考资料,加以阅读。主要是GUI的高级应用和多线程部分第二周 编写协议,并制作简单的客户端和服务器端,进行简单正常的通信,建立C/S的大体框架,并绘制UML类图第三四五周 按照设计一点点的加入各种功能模块,同时进行测试。一旦发现更好的实现方法,会返回重新设计某一模块。第六七周 美化GUI界面,网上寻找图片,并同时自己PS。寻找并试验各种观感,增加美观性。与此同时,进行测试第八九十周测试,并整理开发文档.

19、八、关键技术实现8.1抽象棋盘的实现使用8*8的二维数组模拟。其中0表示没有棋子,1表示黑子,2表示白子。 8.2具体棋盘的实现定义一个480*480的JPanel作为一个格子大小为60*60的棋盘。当用户点击时,点击位置的xy坐标分别除以60得到其在棋盘上的位置。8.3棋盘的绘制在JPanel中加入棋盘的图片,并在下完一步后根据模拟的二维数字调用repaint方法,在1和2的地方分别画上相对应的棋子。8.4下棋的时候的判定8.4.1吃子调用PanDing类的static boolean check(int friend, int x, int y)方法。传入的分别是所下棋子的颜色(黑1,白2

20、),所在的棋盘的位置(左上角是原点,向右是X+ 即列,向下是Y+ 即行)。然后在方法开头设定变量boolean flag = false; 并获得对方棋子的颜色int enemy = (friend = 1) ? 2 : 1; 如果该棋子所下的位置合法,则进行翻棋处理,并令 flag = true;返回flag。如果所下位置非法,则返回flag。在得到所下的其的位置后,首先判断其位置是否为空。如为空则返回false。if(qijuyx != 0) return flag;如不为空,则检测该位置的八个方向。例:for(int i = 1; x+i 8; i+) /看横向向右(x+)是否可以夹子

21、if(qijuyx+1 != enemy) /x+1如果不是enemy,跳出 break; if(qijuyx+i = enemy) /如果是enemy,继续循环 continue; else if(qijuyx+i = 0) /如果是空的,跳出 break; else /如果是friend,便翻棋子 for(int n = 1; n i; n+) qijuyx+n = friend; flag = true; break; 在方法最后,如果flag为true,则qijuyx = friend; /将棋子填下去 8.4.2检测棋局的状况调用PanDing类的static int judge(i

22、nt friend)方法。这个方法一般在check方法后使用。传入其中的参数是在上一次check方法中传入的棋子颜色。这个方法有三种返回值:0、1、2。0代表双方无子可下,游戏结束。1代表对方有子可下,游戏继续进行。2代表对方无子可下,而己方有子可下。此时对方跳过一步,己方继续。方法运行时,首先检测对方有无子可下: for(int i = 0; i 8; i+) for(int j = 0; j 8; j+) if(tempij != 0) continue; else if(check(enemyBack, j, i) = true) qiju = temp; return 1; /表示敌方

23、有子可下 如无子可下,则检测我方。如双方都无子可下,返回0。8.5AI理论上来说,黑白棋的AI至少应该分成两个部分:探索部分和评价部分。探索部分即模拟自己和对方的会下的地方,然后用评价系统评价棋局,最后返回得到评价最高的走法。作为附加的部分,可以在其中设置一些套路。即当某个出现某种棋局时,可以根据既定的套路。此外,也可以添加学习系统。即在结束一盘棋后对齐进行一个整体性的评价分析。实现方法也很简单。首先,优先搜索能够下在边上的地方。如果没有则搜索自己所有能下的地方,最后下在自己得子最多的地方。也是用的也是check方法。8.6存盘与读取在PanDing类的内部,设定了一个静态变量static A

24、rrayList qipu = new ArrayList();当下完一步时,便将表示棋盘状况的二维数组加入到容器中。当要进行存盘时,便使用ObjectOutputStream将其以*.sav文件的形式保存在硬盘上。当要进行读盘时,则使用ObjectInputStream将容器读入,并通过读取绘制其中的维位数组来重现整个下棋的过程。8.7客户端与服务器的连接当客户端与服务器连接时,服务器会分配给客户端一个ID,并且将这个ID和指向客户端的DataOutputStream存进一个HashMap中,以ID作为Key。随后再将现在棋局的情况发送给客户端。包括参加双方的姓名(如果有的话),游戏进行的时

25、间,棋盘上的状况等。发送信息是服务器就根据ID来判别对方是否是玩家,并发出不同的指令。当客户端要断开连接时,服务器也会根据ID找到其DataOutputStream,并将其删除。8.8客户端与服务器间的数据传输 客户端与服务器间的命令的请求和回应基本上都是以字符串的方式来传递的 (writeUTF)。其中,每个字符串都有一个四个大写字母的开头。根据这些大写字母, 客户端或服务器决定对这些命令做怎样的处理。“MESS”:聊天信息。直接显示在聊天栏上。“QIZI”:棋盘信息。用来传递棋子摆放的位置及棋子的颜色。“NAME”:参展的玩家的名字。“TIME”:游戏进行的时间。“INFM”:游戏的一些进

26、展情况。如胜负,悔棋等。“REQU”:客户端向服务器发送的一些请求命令。需要服务器进行回应。“RSPN”:服务器向客户端发送的回复命令。8.9 BUG:这里有一些明显的BUG是关于计时器的。比如,新加入的观战者从服务器接收关于时间的数据时有可能会因为服务器或客户端自身的原因使得观战的人的时间会和正常的时间显示产生零点几秒的误差。当在同一个机子上启动两个客户端时,如果一个客户端启动了存档读取器,另一个客户端也启动的话,这个客户端就会锁住。九、特色功能1.行棋和悔棋时有音效。2.简单的AI(可以人机对战)。十、个人体会 这次课程设计对我个人来说是一次质的飞跃。因为我从一开始的不知所措到后来的了然于

27、胸,这期间我花了很长时间才转变过来。上学期还停留在对Java语法的掌握上,这学期就要应用了。我发现单单掌握Java语法是远远不够的,因为在编程时你会遇到很多意想不到的错误和困难。就比如说这次的课程设计,编黑白棋程序时我就遇到了很多很多的困难,当自己敲出一行行代码时才发现自己有很多问题都没有想清楚。有很多异常处理没有做,也有很多特殊情况没有考虑到。因而,我觉得在编程序前,需要对自己的程序项目做一个总体的规划,然后再根据规划具体的实现规划里面的内容。这样就可以避免花很多时间去修改代码。还有,我觉得编程最重要的就是合作,因为一个人不可能把所有的问题都考虑进去,如果加上合作就能够轻而易举的把所有的问题都考虑清楚并且很轻松的解决问题。有时候,我们需要从别人的思考中去思索,去得到启迪。这是一个双赢的局面,对于这次编程,我感触最深的就是不断尝试并且学习新的内容来解决以所不可能解决的困难。一个人不可能学会所有的东西,所以我们要在学习中不断的充实自己,不断让自己变得更强大,这样我们就在无形中学到了很多在课本中学不到的知识。因而,我觉得编程最重要的就是亲身尝试,并且在尝试中丰富自己的经验,学习新的知识和技能。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1