网络对战象棋游戏.doc_第1页
网络对战象棋游戏.doc_第2页
网络对战象棋游戏.doc_第3页
网络对战象棋游戏.doc_第4页
网络对战象棋游戏.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编号:05023216河南大学2009届本科毕业论文网络对战象棋游戏Challenging Game of Chess On The Internet论文作者姓名:秦佳佳 作者学号:05023216 所在学院:计算机与信息工程学院 所学专业:计算机科学与技术 导师姓名职称:贾培艳(讲师) 论文完成时间:2009年5月20日 2009年5月20日河南大学2009届毕业论文(设计、创作)开题报告(由学生本人认真填写)学号05023216姓名秦佳佳导师姓名职称贾培艳(讲师)开题时间2008年12月1日课题题目网络对战象棋游戏课题来源导师指定 自定 其他来源课题的目的、意义以及和本课题有关的国内外现状分析:1、目的:开发一个基于C/S模式的网络象棋游戏,主要包括客户端和服务器的设计两个核心功能。2、意义:为了满足广大中国象棋爱好者的需要,也是处于不同地区的玩家只要下载安装客户端便能进行对弈。 3、现状:C/S模式早在20世纪80年代和90年代就得到了广泛的应用。近几年来,由于网络技术的迅速发展,很多应用系统的体系结构从传统的C/S模式向更加灵活的多极分布式结构演变,使得软件系统的网络体系结构再次跨入一个新阶段。 研究目标、研究内容和准备解决的问题:1、目标:开发一个基于C/S模式的网络对战象棋游戏,主要包括客户端和服务器的设计两个核心功能。 2、内容:利用C/S模式和封装、继承、多态技术实现网络对战象棋游戏。从整体上看分为客服端设计和服务器设计;从功能上分为网络通信模块设计、信息处理模块设计及系统模块设计。3、准备解决的问题:如何进行客户端与服务器之间的通信,如何处理接收到的信息,如何实现棋子的移动操作和吃棋子的操作。拟采取的方法、技术或设计(开发)工具:方法、技术:C/S构架,封装、继承、多态技术,Socket开发工具:VS2005(语言为C#)预期成果:1、毕业设计成果网络对战象棋游戏2、毕业论文进度计划:2008.12.1 - 2009.3.5: 查找资料、搜集相关素材2009.3.6 - 2009.3.26:完成需求分析2009.3.27 - 2009.4.7: 完成概要设计2009.4.8 - 2009.4.15:完成详细设计2009.4.16 - 2009.4.28:完成编码2009.4.29 - 2009.5.4: 完成软件测试2009.5.5 - 2009.5.15:整理资料、撰写毕业论文2009.5.16 - 2009.5.20:根据导师要求,完善毕业设计和论文指导教师对选题报告的意见:该生选题新颖、贴近现实、实用性强、准备资料较全面,希望在后期的工作中,继续努力,很好的完成毕业设计。 指导教师签名: 2008年12月1日开题报告II河南大学2009届毕业论文(设计、创作)任务书题目名称 网络对战象棋游戏学院计算机与信息工程学院学生姓名秦佳佳所学专业计算机科学与技术学号05023216一、 毕业论文(设计、创作)要求1、 可行性分析:完成系统的技术可行性分析2、 系统设计:对系统中用到的关键技术进行初步设计3、 程序开发与调试:具体进行项目的开发4、 撰写论文:完成论文撰写二、 毕业论文(设计、创作)进度安排2008.12.1 - 2009.3.5: 查找资料、搜集相关素材2009.3.6 - 2009.3.26:完成需求分析2009.3.27 - 2009.4.7: 完成概要设计2009.4.8 - 2009.4.15:完成详细设计2009.4.16 - 2009.4.28:完成编码2009.4.29 - 2009.5.4: 完成软件测试2009.5.5 - 2009.5.15:整理资料、撰写毕业论文2009.5.16 - 2009.5.20:根据导师要求,完善毕业设计和论文三、需收集的资料和指导性参考文献1参考多级联合绘图系统2马骏C#网络应用编程实验指导与开发实例人民邮电出版社3马骏C#网络应用高级编程人民邮电出版社,2006年10月4马骏C#网络应用基础编程人民邮电出版社2006年10月第1版5谢希仁计算机网络(第4版)电子工业出版社,2003年6月6卢潇 孙璐 刘娟 张科英软件工程清华大学出版社、北京交通大学出版社2005年1月第1版指导教师签名 2008年12 月 8 日河南大学2009届毕业设计(论文、创作)中期检查表题目名称:基于C/S模式的中国象棋游戏学院计算机与信息工程学院学生姓名秦佳佳所学专业计算机科学与技术学号05023216一、毕业论文(设计、创作)进展情况目前,项目的大致框架已基本完成,程序能够正常运行。但是还有一部分没有实现,有待进一步的学习和完善。在这个阶段中已经完成的模块:棋盘、棋子及棋子的移动和吃棋子操作、服务器端部分代码、客户端部分代码。二、毕业论文(设计、创作)存在问题及解决方案存在的问题:1.如何选中并移动一个棋子。2.何如实现客户端与服务器端棋子信息的交换。解决方案:1.把棋子作为对象,封装成一个类。选中棋子时可以显示该棋子的句柄。移动棋子时改变该对象左上角坐标的位置即可。2.在客户端把所有棋子添加到一个集合里,每次移动或删除一个棋子时都重新刷新集合里的所有对象。在服务器端把棋盘看成一个2维的数组,每个数据(对应棋盘上相应的位置)包含Color和ID两个属性。三、指导教师对学生毕业论文(设计、创作)进展方面的评语该生在做毕业设计的期间,积极认真,能够及时分析和解决遇到的各种问题。希望在后续的工作期间,能够继续努力。指导教师签名 2009年 4 月 10日河南大学2009届毕业论文(设计、创作)综合成绩表(一)学院名称:计算机与信息工程学院学 号05023216姓名秦佳佳专业计算机科学与技术指导教师贾培艳(讲师)综合得分90论文题目网络对战象棋游戏指导教师评语及得分指导教师评语该生设计运用所学知识开发网络中国象棋游戏,界面友好,操作简单,运行稳定,论文叙述条理清晰、详略得当,并按时完成了项目所要求的功能,达到本科论文要求。评分项目分值指导教师对毕业论文(设计、创作)评分撰写开题报告、文献综述15调查研究查阅整理资料10学习态度与规范要求10数据处理、文字表达10论文(设计、创作)质量和创新意识55合计100得分138985290指导教师签名 2009年5月20日评阅教师评语及评分评阅教师评语该生论文结构合理,语句流畅,详略得当,论点明确,思路清晰,符合本科论文的要求。评分项目分值评阅毕业论文(设计、创作)评分撰写开题报告、文献综述15调查研究查阅整理资料10学习态度与规范要求10数据处理、文字表达10论文(设计、创作)质量和创新意识55合计100得分139885290评阅教师签名 2009年5月22日此表由教师填写河南大学2009届毕业论文(设计、创作)综合成绩表(二)学号05023216姓名秦佳佳所在学院计算机与信息工程学院答辩委员会评语及评分答辩委员会评语该生在答辩过程中,内容表达清楚,反应敏捷,回答问题准确,分析、概括能力强,经答辩委员会小组集体表决,同意该生通过论文答辩,并建议授予学士学位。答辩委员签字: 2009年5月25日评分 项目 分值论文答辩小组评分答辩情况论文质量合计(100)内容表达情况(15)答辩问题情况(25)规范要求与文字表达(20)论文(设计、创作)质量和创新意识(40)得分1322173890答辩委员会主任签字: 2009年5月25日毕业论文(设计、创作)成绩综合评定: 90 分综合评定等级:优备注:一、论文的质量评定,应包括对论文的语言表达、结构层次、逻辑性理论分析、设计计算、分析和概括能力及在论文中是否有新的见解或创新性成果等做出评价。从论文来看学生掌握本专业基础理论和基本技能的程度。二、成绩评定采用结构评分法,即由指导教师、评阅教师和答辩委员会分别给分(以百分计),评阅教师得分乘以20%加上指导教师得分乘以20%加上答辩委员会得分乘以60%即综合成绩。评估等级按优、良、中、差划分,优90-100分;良76-89分;中60-75分;差60分以下。三、评分由专业教研室或院组织专门评分小组(不少于5人),根据指导教师和答辩委员会意见决定每个学生的分数,在有争议时,应由答辩委员会进行表决。四、毕业论文答辩工作结束后,各院应于6月20日前向教务处推荐优秀论文以汇编成册,推荐的篇数为按当年学院毕业生人数的1.5%篇。五、各院亦可根据本专业的不同情况,制定相应的具有自己特色的内容。须报教务处备案。六、书写格式要求:1、目录;2、内容提要须书写200左右汉字,开题报告(文科除外)的内容要根据不同专业的课题任务要求,阐述查阅文献、文案论证、解题思路、工作步骤等;3、正文(含引言、结论等);4、参考文献(或资料)河南大学本科生毕业论文(设计、创作)承诺书论文题目网络对战象棋游戏姓 名秦佳佳所学专业计算机科学与技术学 号05023216完成时间2009年5 月20日指导教师姓名职称贾培艳(讲师)承诺内容:1、本毕业论文(设计、创作)是学生 秦佳佳 在导师 贾培艳 的指导下独立完成的,没有抄袭、剽窃他人成果,没有请人代做,若在毕业论文(设计、创作)的各种检查、评比中被发现有以上行为,愿按学校有关规定接受处理,并承担相应的法律责任。2、学校有权保留并向上级有关部门送交本毕业论文(设计、创作)的复印件和磁盘。备注:学生签名: 指导教师签名: 2009 年 5 月 20 日 2009 年 5 月 20 日说明:学生毕业论文(设计、创作)如有保密等要求,请在备注中明确,承诺内容第2条即以备注为准。目 录摘 要IABSTRACTI第1章 绪论11.1课题背景11.2设计中使用的关键技术11.2.1客户端/服务器模式(C/S)11.2.2封装、继承、多态11.2.3中国象棋21.3使用的开发平台3第2章 系统总体分析和设计42.1游戏功能描述42.2服务器与客户端通信基本原理42.3服务器端架构52.3.1服务器端类的组成52.3.2客户端发送给服务器的命令62.4客户端架构82.4.1客户端类的组成82.4.2服务器发给客户端的命令10第3章 详细设计143.1客户端系统模块设计143.1.1棋盘设计143.1.2棋子设计153.1.3游戏房间、棋盘、棋子的关系163.2服务器系统模块设计173.3界面设计193.3.1客户端界面设计193.3.2服务器端界面设计21结 论24参考文献25河南大学本科毕业生学士学位论文摘 要近年来,随着互联网在全球范围内的发展和普及,联网游戏作为一种娱乐手段,正以独特的魅力吸引着越来越多的玩家。为了满足广大象棋爱好者可以享受到网络所带来的便利,本设计在当前局域网条件下实现了网络对战象棋游戏。本文首先分析了中国象棋的现状以及在设计中使用的关键技术。然后从系统总体结构上进行分析,分别介绍了本游戏的功能,服务器与客户端通信的基本原理以及服务器构架和客户端构架。最后详细介绍了客户端系统模块设计,服务器端系统模块设计,和界面设计。本游戏基于.Net框架进行开发,使用C/S模式实现相互之间的通信。主要涉及GDI+绘图,Socket通信,类的封装、继承、多态等方面的技术。经过测试,本游戏可以在有.Net 2.0框架的各种windows系统下运行。关键词:联网游戏、中国象棋、C/S构架-第23页-ABSTRACTRecently, with the development and widespread use of the internet globally, on-line game as a means of entertainment has a unique charm to attract more and more player. To meet chess lovers, this design has realized the challenges of Chinese-chess on the internet under the current LAN environment.The article introduces the state of Chinese-Chess and important technologies in the program at first. Then, it analyses the system framework. It contains the function of the game, the reason of communication between server and client, the server construction and the client construction. Finally, the article illuminates the server module design, the client module design and the interface design in detail.The development of this game based on .Net framework and used C/S construction to realize mutual communication. It mainly related to GDI+ graphics, socket communication, encapsulation, inheritance, and polymorphism skills and so on. After testing, the game can run on Windows operating system in the support of the dot Net 2.0 framework.Keywords: On-line Game, Chinese-Chess, C/S construction第1章 绪论随着互联网的扩张和基于互联网应用的发展,联网游戏正以一种独特的魅力吸引着越来越多的玩家,尤其是中国象棋游戏更是得到广大玩家的青睐。为了中国象棋在世界的推广和发展,网络象棋游戏的开发显得越发重要。因此,开发基于C/S模式的网络象棋游戏具有重要的现实意义。1.1 课题背景众所周知,互联网技术的发展十分迅猛,已经在各行各业得到了广泛的应用。与此同时,各种基于互联网的游戏也如雨后春笋般出现。中国象棋游戏随之也成为许多玩家在闲暇时间消遣的对象,为了满足广大玩家的需求,扩大中国象棋的应用范围,网上象棋游戏的开发已显得越来越重要。1.2 设计中使用的关键技术在本设计中使用了C/S构架实现了网络通信功能,并使用封装、继承、多态技术实现了系统模块功能。1.2.1 客户端/服务器模式(C/S)客户端/服务器模式是一种网络连接模式,即Client/Server。在客户端/服务器网络中,服务器是网络的核心,而客户端是网络的基础,客户端依靠服务器获得所需要的网络资源,而服务器为客户端提供网络必须的资源。这里客户端和服务器都是指通信中所涉及的两个应用进程。1.2.2 封装、继承、多态封装:封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。继承:当一个类拥有另一个类的所有数据和操作时,就称这两个类之间具有继承关系。多态:多态是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的情况有多种,可以通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法。在本设计中是通过子类对父类方法的覆盖来实现多态。1.2.3 中国象棋中国象棋是我国国粹,历史悠久,普及流行。下棋双方根据对棋局形势的理解和对棋艺规律的掌握,调动车马,组织兵力,协调作战。在棋盘这块特定的战场上,进行着象征性的军事战斗。以下对游戏规则作简要说明。(1) 棋子象棋中棋子共三十二个,分为红黑两组,各十六个,由对弈双方各执一组,兵种是一样的,分为七种。红方:帅、仕、相、车、马、炮、兵。黑方:将、士、象、车、马、炮、卒。其中帅与将、仕与士、相与象、兵与卒的作用完全相同,仅仅是为了区分红棋和黑棋。在本设计中为了简便,棋子只有将、士、象、车、马、炮、兵,区分仅仅为颜色不同。(2) 棋盘棋子活动的场所,叫做棋盘。在长方形的平面上,绘有九条平行竖线和十条平行的横线相交组成,共九十个交叉点,棋子就摆在这些交叉点上。中间第五、第六两横线之间未画竖线的空白地带,称为河界。整个棋盘就以河界分为相等的两部分,两方将、帅坐镇。画米字方格的地方,叫做九宫。(3) 将或帅移动范围:它只能在九宫内移动。移动规则:它每一步只可以水平或垂直移动一点。(4) 士移动范围:它只能在九宫内移动。移动规则:它每一步只可以沿对角线方向移动一点。(5) 象移动范围:河界的一侧。移动规则:它每一步只可以沿对角线方向移动两点,另外,在移动的过程中不能够穿越障碍。(6) 马移动范围:任何位置。移动规则:每一步只可以水平或垂直移动一点,再按对角线方面向左或者右移动。另移动的过程中不能够穿越障碍。(7) 车移动范围:任何位置。移动规则:可以水平或垂直方向移动任意个无阻碍的点。(8) 炮移动范围:任何位置。移动规则:移动起来和车很相似,但它必须跳过一个棋子来吃掉对方的一个棋子。(9) 兵移动范围:任何位置。移动规则:每步只能向前移动一点。过河以后,它便增加了向左右移动的能力,兵不允许向后移动。(10) 胜、负帅(将)被对方吃掉。(11) 和一方提议作和,对方同意。1.3 使用的开发平台网络通信模式:C/S 模式。使用平台:Windows XP。开发工具:VS 2005。开发语言:C#。第2章 系统总体分析和设计本章首先介绍了游戏的功能,然后分析了客户端与服务器通信的基本原理,最后从服务器端架构、客户端架构两个方面对该设计进行了总体分析说明。2.1 游戏功能描述(1)服务器可以同时服务多桌,每桌允许两个玩家通过Internet对弈,并且可以有多个旁观者。(2)允许玩家自由选择坐在哪一桌的哪一方。如果两个玩家坐在同一桌,双方应都能看到对方的状态。旁观者可随时进入游戏房间观看游戏进行情况。(3)游戏开始后玩家必须按照下一步提示信息放置棋子,且只能移动本方棋子。如果玩家单击对方棋子,则表示吃掉该棋子,游戏规则严格按照中国象棋走法规则。(4)如果一方的将或帅被吃,表明另一方获胜。(5)如果一方想求和,则可点击【求和】按钮。(6)在同一房间的用户可以聊天。2.2 服务器端与客户端通信的基本原理图2-1 面向连接通信原理图本设计采用面向连接的通信原理,利用同步TCP编写了该游戏。底层的套接字通信如上图2-1所示。在本设计中使用了TcpClient和TcpListener类,这两个类封装了底层的套接字。TcpClient类用于为TCP网络服务提供本地主机和远程主机的连接信息,TcpListener类则用于监听是否有传入的连接请求。客户端编程的步骤:1. 利用服务器的IP和端口号创建TcpClient实例,与服务器建立连接,若创建失败,则与服务器连接失败,否则连接成功。2. 根据TcpClient实例获取网络流NetWorkStream。3. 利用网络流创建接收信息流和发送信息流。4. 创建接收信息的线程来循环接收来自服务器的信息,启动该线程。服务器端编程的步骤:1. 创建TcpListener类的对象,并与服务器的IP和端口号绑定。2. 启动监听。3. 循环监听客户端连接,每接受一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息。2.3 服务器架构服务器端构架从两个方面进行了介绍,首先是服务器端类的组成,主要介绍了服务器端有哪些类构成,以及每个类应具有的属性和方法。然后介绍了客户端发送给服务器的命令有哪些,包括命令格式、含义以及服务器收到该命令后应进行的动作。2.3.1 服务器端类的组成首先,服务器端应该可以向客户端发送信息,并可以在服务器端显示信息,因此应包含一个Service类。其次,两个用户之间的通信需要以服务器为桥梁,服务器对每个用户的信息都要进行记录,因此服务器端系统模块应包含棋盘类、游戏房间类、玩家类、用户类。(1) Service类方法:在服务器界面上显示信息、将信息发送给指定用户、将信息发总给指定房间、将信息发送给所有人。 (2) 棋盘属性:黑色棋子、红色棋子、棋盘数组、下一步颜色。方法:初始化棋盘。(3) 游戏房间属性:旁观者、黑方、红方、棋盘。方法:放置棋子、删除棋子。(4) 玩家属性:用户、是否开始。(5) 用户字段:TcpClient,StreamReader,StreamWriter,username。2.3.2 客户端发送给服务器的命令(1) Login命令格式:Login,昵称含义:客户与服务器建立连接后,希望登录服务器进入游戏室。服务器收到该信息后,首先判断游戏室人员是否已满。如果还能容纳用户进入,再判断游戏室内是否已经有人使用过这个昵称。如果两个条件均满足,则将该用户添加到用户列表中,并将游戏室现有总人数、游戏室开设的房间数以及各游戏桌人员情况发送给该用户,同时告诉其他用户该用户进入了游戏室。(2) Logout命令格式:Logout含义:用户退出游戏室。服务器收到该信息后,结束与该用户对应的线程,同时将该用户退出的信息告诉其他用户,并将该用户从用户列表中删除。(3) EnterRoom命令格式:EnterRoom,桌号,类别号含义:用户进入游戏室内的小房间。由于每个房间只有一张游戏桌,因此房间号也是桌号。服务器需要将房间内的人员情况告诉该用户,如果该用户是旁观者,还需要将当前棋盘上的棋子情况发送给他。如果他是坐在游戏桌的每一边,还要告诉对方有人坐下了。除此之外,服务器还要将该用户进入房间的情况告诉房间内的其他人。(4) ExitRoom命令格式:ExitRoom,桌号,类别号含义:客户离开房间,回到游戏室。对服务器来说,有人退出房间,必须判断他原来是旁观者还是玩家。如果是玩家,游戏就无法继续进行,同时各桌人员情况发生了变化,因此必须做离座处理,并将处理接结果发送给其他客户。(5) Talk命令格式:Talk,桌号,对话内容含义:表明小房间内有人说话,服务器需要将说话内容告诉该房间的所有人。(6) Start命令格式:Start,桌号,座位号含义:玩家单击了开始按钮。由于只有玩家才允许单击开始按钮,因此服务器不需要判断是不是 旁观者。但服务器需要判断对方是否也单击了开始按钮,如果双方都开始了,则需要初始化棋盘,并告诉该房间内的所有人,应该有哪一方放置棋子。(7) SetChess命令格式:SetChes,桌号,座位号,行,列,颜色,棋子ID含义:玩家请求在指定位置放置棋子。服务器收到该命令后,需要修改棋盘上相应的信息,并告诉该房间所有人下一步该谁走。这里判断该不该放置棋子交给了客户端进行判断,因此服务器不需要对棋子位置是否合法进行处理。(8) DeleteChess命令格式:DeleteChess,桌号,座位号,行,列,颜色,棋子ID含义:删除指定位置的棋子,也即修改棋盘上对应位置的信息。(9) AskTie命令格式:AskTie,桌号,座位号含义:玩家请求和棋。服务器收到该信息后,只需要将请求告诉另一个玩家,有对方决定是否同意和棋。(10) Reply命令格式:Replay,桌号,座位号,True或者False含义:玩家回复是否同意和棋信息。如果同意和棋,服务器需要重新初始化棋盘,否则继续进行游戏。(11) Win命令格式:Win,color含义:玩家告诉服务器我已经胜利。服务器收到该信息后要重新初始化棋盘,并告诉该房间所有人该用户胜利信息。2.4 客户端架构客户端构架从两个方面进行了介绍,首先是客户端类的组成,主要介绍了客户端有哪些类构成,以及每个类应具有的属性和方法。然后介绍了服务器发送给客户端的命令有哪些,包括命令格式、含义以及客户端收到该命令后应进行的动作。2.4.1 客户端类的组成客户端程序包含棋子(IChessItem)、棋子集合类(GraphicsList)、游戏桌(PlayingTable)、棋盘控件(UserChessBord)、房间控件(ChessUserControl)。(1) 棋子基类(IChessItem)属性:IsChess(是否被按下)、HandleCount(句柄数)、ObjRectangle(矩形框)、ChessColor(颜色)、ChessID(棋子ID)、GridX(在棋盘网格中的X坐标、GridY(在棋盘网格中的Y坐标)。方法:GetHanle(取句柄所在点)、DrawTracker(画句柄)、Draw(画棋子)、GetHandleRectangle(取句柄的实体矩阵)、PointInObject(判断点是否在对象范围内)、IsMoveItem(判断棋子是否移动)、SetChessPosition(设置棋子位置)。其中Draw和IsMoveItem是需要子类进行重写的。(2) 棋子集合类(GraphicsList)字段:List的对象_graphicsList。属性:Count(集合中棋子个数)。方法:Clear(清除所有棋子)、Draw(画棋子)、GetObjectIncludingPoint(得到包含一点的图形对象)、GetIDObject(得到指定ID的对象)、SetIDObject(设置指定ID的棋子的位置)、DeleteIDObject(删除指定ID的对象)、Add(添加棋子对象)、UnselectAll(所有对象都不选中)。(3) 棋盘控件字段:(桌号、进入者类别)属性:下一步、是否开始、棋子集合类对象。方法:AddNewObject(添加棋子)、Start(开始游戏)、SetChess(设置棋子的位置)、DeleteChess(删除棋子)、UpDateGrid(更新各个棋子的位置)、ResetGrid(重新初始化棋盘)。事件:MouseDown、MouseMove、MouseUp、Paint。(4) 房间控件属性:黑方是否有人、红方是否有人、黑方玩家昵称、红方玩家昵称、用户状态、旁观者集合。事件:pictureBoxBlack_Click(单击黑方座位触发的事件)、pictureBoxRed_Click(单击红方座位触发的事件)。(5) 游戏桌(PlayingTable)字段:房间号tableIndex、进入者类别side、棋盘控件对象。方法:SetLabel(设置Label的文本信息)、SetLabelGo(设置该谁落子的提示信息)、SetPictureBoxImage(设置PictureBox中的图像)、AskTie(求和)、ReplyTie(求和回复)、SendToServer(与服务器通信)AddToRichTextBox(向RichTextBox中添加信息)、Restart(重来一局)、SetEnterUerTips(设置用户进入房间时看到的信息)、SetExitUerTips(设置用户退出房间后显示的信息)。事件:单击开始按钮触发的事件、单击求和按钮触发的事件、窗体下载时触发的事件。2.4.2 服务器发送给客户端的命令(1) Login格式:Login,昵称含义:客户进入游戏室。客户端接收线程收到此信息后,不论这个客户是不是自己,均需要在游戏室显示此人进入的信息。(2) Logout格式:Logout,用户名含义:客户退出游戏室。接收线程收到此信息后,需要判断退出者是不是自己,如果不是自己,则在游戏室显示此人退出信息。如果是自己,应该直接退出接收线程,并结束应用程序运行。(3) Sorry格式:Sorry含义:服务器游戏室人员已满,不允许这个客户进入。(4) RoomNumbers格式:RoomNumbers,房间数,已经进入游戏室的人数含义:服务器已经同意该客户进入游戏室,并将游戏室当前人数以及开设的房间数告诉该客户。接收线程收到此信息后,应该根据接受的信息显示相应的界面,以便客户决定下一步的操作。(5) Tables格式:Tables,字符串含义:各桌玩家情况,包括那一桌的哪一方有人,以及玩家的昵称。接收线程收到此信息后,需要解析字符串,并形象的显示各桌情况,以便客户决定旁观哪一桌或者判断可以坐在那哪一桌的哪一方(6) EnterRoom格式:EnterRoom,类别号,用/分隔的黑白旁观者名,用/分隔的该房间所有人员含义:客户进入房间。接收线程收到此信息后,需要解析接收的字符串,并将该房间内的人员信息、是否有人坐在游戏桌两边以及是坐在黑方还是红方等情况显示出来。(7) Grid格式:Grid,棋盘上各子位置字符串含义:棋盘上游戏进行的情况。只有旁观者才可以接收到此信息。这是应为旁观者进入房间时,游戏可能正在进行,他必须先看到已经进行到什么程度,然后才能继续观察游戏情况。(8) ExitRoom格式:ExitRoom,类别号,用/分隔的黑方红方及旁观者名含义:有人退出了房间。接收线程收到此信息后,可以根据类别号判断是玩家退出房间还是旁观者退出房间,同时还要判断退出的是不是自己。如果不是自己,需要修改房间内相应的提示信息。如果是自己,则关闭棋盘窗体,然后显示游戏室窗体。(9) Start格式:Start含义:服务器告诉该房间游戏正式开始了。接收线程收到此信息后,需要设置相应的标志,表明可以在棋盘上放棋子了。但是应该哪一方放置棋子,还需要等服务器发送进一步的命令后才能决定。(10) NextChess格式:NextChess,颜色含义:服务器指示应该有哪一方放置棋子。客户端程序根据指示,决定客户在棋盘上单击是否有效,以及决定是否向服务器发送鼠标单击映射的位置信息。(11) Restart格式:Restart含义:服务器指示重新开始新局。客户端程序收到此信息后,应该初始化棋盘,并等待接收应该有谁放置棋子的命令。(12) SetChess格式:SetChess,行,列,颜色,ID含义:放置棋子位置信息。接收线程收到该信息后,把该ID的棋子放置到棋盘上对应的位置。(13) DeleteChess格式:DeleteChess,ID含义:删除该ID的棋子。(14) Win格式:Win,获胜方颜色含义:服务器告诉客户哪一方获胜。接收线程收到此信息后,显示哪一方获胜的信息。(15) AskTie格式:AskTie,座位号含义:服务器告诉客户对方请求和棋,要求该客户回复是否同意。接收线程接收到此信息后,需要显示对话框,然后根据客户的选择回复相应的信息。(16) Reply格式:Reply,座位号,True或者False含义:服务器告诉对方回复的信息。接收线程根据此信息,决定是继续进行游戏还是重新开始新局。(17) Lost格式:Lost,座位号,用户名含义:服务器告诉玩家对方与服务器失去联系,游戏无法继续进行。接收线程收到此信息后,结束当前进行的游戏。(18) Talk格式:Talk,说话者昵称,对话内容含义:该房间内某人说的话。接收线程收到此命令后,只需要将发言的信息显示出来即可。第3章 详细设计本章主要对各个功能模块的详细设计做具体说明。首先对各模块的架构进行阐述,然后分别对各个模块的设计特别是一些关键技术进行详细论述,最后介绍客户端与服务器的界面设计。其中最重要的是各个棋子的设计及客户端与服务器通信时信息处理部分。3.1 客户端系统模块设计在这里分析了棋盘设计,棋子设计以及游戏房间、棋盘、棋子的关系。3.1.1 棋盘设计在客户端,棋盘上的棋子都是一个个的对象,放在集合GraphicsList的对象graphics里,相当于客户端的棋盘。当初始化棋盘时,即在集合graphics中添加一个个棋子对象,并显示在棋盘图片对应的位置上。客户端的棋盘由一个用户控件构成,其背景图即为棋盘图片。因此该控件要响应MouseDown、MouseMove、MouseUp、Paint事件。标记flag:表示鼠标第几次选中对象,其初始值为零。lastPoint:表示鼠标上一次选中棋子时的点坐标。lastObject:表示鼠标上一次选中的对象。(1) MouseDown事件:if(flag=0)判断鼠标按下位置Point是否存在棋子对象w若存在 选中该对象;flag=1;lastPoint=Point;lastObject=w;若不存在 则返回;If(flag=1)判断lastObject是否满足移动条件若满足判断鼠标按下位置Point是否存在棋子对象w若存在If(lastObject.ChessColor!=w.ChessColor)删除w;把lastObject移动到该点;Flag=0;返回;elseFlag=0;返回;若不存在直接把lastObject移动到该点;flag=0;返回;若不满足令flag=0;返回;(2) MouseMove事件:当鼠标移动到棋子上方时显示为手型图标,表示可以移动该棋子。其他位置鼠标形状为默认状态。(3) Paint事件:绘制graphics里的棋子对象。依次画出各个棋子对象在棋盘上的位置,然后刷新。(4) SetChess(int i ,int j,int ChessColor,int ChessID)函数:把ID号等于ChessID的棋子放置在坐标i,j所在的位置上。(5) DeleteChess(int chessID)函数:删除ID号为chessID的棋子。(6) AddNewObject()函数:添加新的棋子对象。(7) SelectObject(int chessID)函数:选中指定ID的棋子,显现其句柄。(8) ResetGrid():初始化棋盘。添加所有棋子对象,并放置在适当位置。3.1.2 棋子设计象棋的棋子有七种:将、士、象、车、马、炮、兵。他们之间有一些共同的属性和方法,同时也有自己的特点。因此在设计棋子时,首先写了一个基类,把他们共同的属性和方法放在里面,然后不同的棋子继承这个基类,并拥有自己的属性和方法。设计的类图如下图3-1所示:图3-1 棋子类图棋子的核心函数功能:(1) IsMove(int dX,int dY,ChessBord pallete)函数:用于判断棋子是否移动,其返回值为布尔型,其中三个参数的含义分别为:dX表示移动的X坐标步长,dY表示移动的Y坐标步长,pallete表示棋盘控件对象。(2) Move(int dX,int dY)函数:把棋子在X坐标上移动dX距离,在Y坐标上移动dY距离。(3) SetChessPosition(int i,int j)函数:把当前棋子左上角的位置设置为i ,j 坐标所对应棋盘上的位置。3.1.3 游戏房间、棋盘、棋子的关系一个游戏房间对应一个棋盘,在棋盘上可以添加棋子、删除棋子、移动棋子,这些棋子放在一个集合中,该集合可以想像成盛放棋子的容器。他们之间的关系如下图3-2所示。图3-2 客户端各个类的关系图核心函数功能介绍:(1) SetEnterUserTips(string uerTypeString, string names, string roomOnLineNames)函数:设置用户进入房间看到的信息。userTypeString表示用户类型(0黑方,1红方,2旁观),names表示昵称(格式:黑方名/红方名/旁观者),roomOnLineNames已经进入房间的用户昵称。(2) SetExiteUserTips(string userTypeString, string names)函数:设置用户退出房间后显示的信息,自己退出不需要调用此方法。userTypeString表示用户类型(0黑方,1红方,2旁观),names表示昵称(格式:黑方名/红方名/旁观者)。3.2 服务器端系统模块设计在系统总体分析和设计中,我们已经讨论了服务器端应包含的所有类,现对这些类进行详细的说明。它们之间的关系如下图3-3所示。图3-3 服务器端类图服务器端的棋盘Grid是一个二维数组,其中每一个元素都是一个结构类型,含有两个int型的变量ChessColor和ChessID。ChessColor的值有-1,0,1分别表示无棋子、黑色棋子、红色棋子。ChessID的值为032。其中:0:无棋子 1:黑车一 2:黑马一 3:黑象一 4:黑士一 5:黑将 6:黑士二 7:黑象二 8:黑马二 9:黑车二 10:黑炮一 11:黑炮二 12:黑兵一 13:黑兵二 14:黑兵三15:黑兵四 16:黑兵五 17:红兵一 18:红兵二 19:红兵三20:红兵四 21:红兵五 22:红炮一 23:红炮二 24:红车一25:红马一 26:红象一 27:红士一 28:红将 29:红士二30:红象二 31:红马二 32:红车二在服务器端,令Grid i , j .ChessColor=-1,Grid i , j .ChessID=0表示该点无棋子。若删除一个棋子,即令该位置的颜色为-1,ID为0;而在客户端删除一个棋子,则是删除棋子集合中ChessID=ID的棋子对象。3.3 界面设计界面设计中包括客户端界面设计和服务器端界面设计。其中客户端界面包括登录界面、游戏室、游戏房间。服务器端只有一个主界面。3.3.1 客户端界面设计用户运行客户端程序,首先进入登录界面,如图3-4所示。图3-4 登录界面客户填入本人昵称后点击【登录】按钮与服务器建立链接。若服务器没有开始监听,此时提示连接失败信息。否则连接成功,客户端发送给服务器Login命令。服务器接收到该信息后,首先判断游戏室人员是否已满,如果还能容纳用户进入,再判断游戏室内是否已经有人使用过这个昵称,如果两个条件均满足,则将该用户添加到用户列表中,并将游戏室现有总人数、游戏室开设的房间数(RoomNumbers命令)以及各游戏桌人员情况(Tables命令)发送给该用户,同时告诉其他用户该用户进入了游戏室(Login命令)。客户点击【登录】按钮触发的事件如下:首先判断用户是否填写了用户昵称,若没有,则提示用户输入昵称。然后判断用户是否输入了服务器DNS名称,如果不输入则直接使用本机IP创建TcpClient实例,否则使用输入的服务器DNS或IP创建TcpClient实例。如果没有发生异常则表示与服务器连接成功,然后用该TcpClient实例获取网络流,用于接收和发送信息。最后发送给服务器该用户的登录信息,即Login命令,同时创建一个接受线程用来循环接收来自服务器的命令。客户端接收到服务器发来的RoomNumbers命令、Tables命令、Login命令后进行相应的处理,进入游戏室,界面如图3-5所示。图3-5 游戏室界面客户进入游戏室后,可随意单击游戏桌的座位,进入游戏房间。 单击游戏桌时向服务器发送EnterRoom命令,告诉服务器该用户进入了哪一桌的哪一方。服务器收到该命令后,首先判断该用户的类别(即该用户以什么身份进入游戏房间),如果该用户是旁观者,则需要将当前棋盘上的棋子情况发送给他。如果他坐在游戏桌的某一边,还要告诉对方有人坐下了。并将该用户进入房间的情况告诉房间内的其他人。用户进入游戏房间后将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论