C# 黑白棋网络对战游戏 设计.doc_第1页
C# 黑白棋网络对战游戏 设计.doc_第2页
C# 黑白棋网络对战游戏 设计.doc_第3页
C# 黑白棋网络对战游戏 设计.doc_第4页
C# 黑白棋网络对战游戏 设计.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计黑白棋网络对战游戏的设计与实现(如需购买本程序可以联系QQ:297056532)学 院: 计算机学院专 业: 姓 名: 指导老师: 计算机科学与技术陈奕聪 学 号: 职 称: 070201031005孙细斌讲师中国珠海二一一年五月北京理工大学珠海学院毕业设计诚信承诺书本人郑重承诺:我所呈交的毕业设计黑白棋网络对战游戏的设计与实现是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,设计使用的数据真实可靠。承诺人签名: 日期: 年 月 日北京理工大学珠海学院2011届本科生毕业设计黑白棋网络对战游戏的设计与实现摘 要黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。起初,黑白棋在西方和日本很流行,近年来,它已经成为手机上面的一款广受欢迎的游戏,黑白棋正逐步为中国玩家所接受,并深受喜爱。本文详细地说明了黑白棋游戏的制作过程,从开启画面的建立到棋盘的绘制,对弈框的编程,以及算法的具体实现。该黑白棋网络对战游戏程序采用了客户端/服务器(C/S)架构,服务器随时等待客户端的请求。程序采用的程序语言是Microsoft的C#语言,使用了同步TCP编程技术,TCP是一种基于连接的协议,可以保证数据准确性。通过Socket编程实现客户端和服务器之间的数据传输。开发工具采用的是visual studio 2008。本程序有几个特点:程序短小精悍,简洁明了,容易操作,趣味性强。 关键词:C# 同步TCP Socket Othello Network Game Design and ImplementationABSTRACTOthello, also known as anti-chess (Reversi), Othello, chess (Othello), Apples move, flip move. Flip through each others game pieces, and finally to the board to determine who is winning more than a pawn. Its simple rules of the game, so it is easy to get started, but it changes and very complex. Initially, Othello is very popular in the West and Japan in recent years, it has become a popular cell phone above the game, Othello is gradually accepted by the Chinese players, and much loved. This detailed description of Othellos production process, from the opening screen of the establishment to the drawing board, chess box, programming, and algorithm implementation. Network Game of the Othello program uses a client / server (C / S) architecture, the server waits for the clients request at any time. Process programming language used is Microsofts C # language, programming techniques using synchronous TCP, TCP is a connection-based protocol, can ensure data accuracy. Socket Programming by the client and server data transfer. Development tools is used by visual studio 2008. This game has several features that Othello: Program short and pithy, concise, easy and interesting. 朗显示对应的拉丁字符的拼音Key words:C# Synchronous TCP Socket目 录摘 要IABSTRACTII目 录III1概 述11.1 课题背景及意义11.2 课题现状11.3黑白棋游戏介绍21.4 课题内容与目标32系统开发环境和关键技术42.1 开发环境42.2 关键技术42.2.1 .NET Framework和C#42.2.2 SQL Server 200552.2.3 WINDOWS SOCKETS网络编程接口52.2.4 多线程开发技术62.2.5 TCP/IP协议、UDP协议72.2.6 Client/Server结构(客户端/服务器模式)83系统分析与设计93.1 系统总体分析93.2 模块介绍93.2.1 模块结构图93.2.2服务器端功能模块介绍103.2.3 客户端功能模块介绍103.3 设计原理113.3.1服务器端原理与设计113.3.2客户端原理与设计123.4工作流程133.4.1系统工作流程133.4.2服务器工作流程133.4.3客户端工作流程144系统实现154.1 服务器端设计实现154.1.1 服务器主界面设计154.1.2 服务器的配置154.1.3 服务器的开启164.1.4 服务器端关键代码164.2 客户端设计实现174.2.1 客户端登陆主界面设计174.2.2 注册184.2.3 登陆184.2.4 游戏互动194.2.5 客户端关键代码204.3 数据库设计235结论及展望25参考文献27附录:程序重要代码28致 谢38391概 述1.1 课题背景及意义近年来,随着全球信息化进程的不断发展,互联网游戏也在飞速发展。其中有基于web网页的游戏,也有由公司提供的服务器和客户端的游戏,其中除了有传统意义上的网络游戏,也衍生出各种棋牌类的网络对战游戏。棋牌类游戏网络对战游戏使各爱好棋牌的玩家有了一个可以挑战自我的平台,在网络上,各玩家可以找到水平相当的对手,或者挑战比自己实力更强的选手,不再需要为现实环境中找不到对手而苦恼。除了拥有优越的互动性,网络棋牌游戏比传统真实的对弈更方便,更省时间,从而对推广棋牌文化和提高棋牌技术起到了良好的促进作用。黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。黑白棋是19世纪末英国人发明的。直到上个世纪70年代一个日本人将其发展,借用莎士比亚名剧奥赛罗(othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。通过网络黑白棋对战游戏,玩家的脑力可以得到锻炼,提高自身的战略战术。1.2 课题现状 原先黑白棋在国内集中在3个游戏对战平台中游、联众和边锋。黑白棋的发展实际上是伴随着中国网络的发展。三大平台鼎盛时期也是中国黑白棋的鼎盛时期。期间高手辈出,新人不断。现在国内最强的一批高手都是那个时期成长起来的。 由于网络下棋可以通过一些手段作弊,导致人类黑白棋玩家积极性下降。大事件后,不少黑白棋玩家的积极性大大受挫。加之各个平台对于程序没有很好的控制。导致高手流向国外较好的平台下棋。国内三大平台渐渐衰落。 最近,qq游戏推出了黑白棋游戏。基于qq用户的基数庞大,在线下黑白棋的玩家数量达到了前所未有的地步。原先消失的高手们也纷纷出现。中国黑白棋出现了欣欣向荣的景象。但值得注意的是,qq黑白棋对于外挂和程序也没有较好的控制。平台上的玩家水平较低。不少玩家对于黑白棋尚未真正了解。希望qq游戏可以借鉴前人,完善自我。中国黑白棋也可以有更好的发展。1.3黑白棋游戏介绍1.3.1简介黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。1.3.2游戏工具(棋具)棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个)。棋子呈圆饼形。棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内。棋盘可分为“角”、“边”以及黑白棋“中腹”。现今的棋盘多以8x8较为普遍。1.3.3下棋方法黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。并且,只有在可以翻转棋子的地方才可以下子。 棋规:1棋局初始时黑棋和白棋分别有棋子如图1-1所示。 图1-1 游戏棋盘2黑方先行,双方交替下棋。3一步合法的棋步包括:在一个空格新落下一个棋子,并且翻转对手一个或多个棋子。4新落下的棋子与棋盘上已有的同色棋子间,对方被夹住的所有棋子都要翻转过来。可以是横着夹,竖着夹,或是斜着夹。夹住的位置上必须全部是对手的棋子,不能有空格。5一步棋可以在数个方向上翻棋,任何被夹住的棋子都必须被翻转过来,棋手无权选择不去翻某个棋子。6除非至少翻转了对手的一个棋子,否则就不能落子。如果一方没有合法棋步,也就是说不管他下到哪里,都不能至少翻转对手的一个棋子,那他这一轮只能弃权,而由他的对手继续落子直到他有合法棋步可下。7如果一方至少有一步合法棋步可下,他就必须落子,不得弃权。8棋局持续下去,直到棋盘填满或者双方都无合法棋步可下。1.3.4判断胜负条件如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。翻转棋类似于棋盘游戏“奥赛罗 (Othello)”,是一种得分会戏剧性变化并且需要长时间思考的策略性游戏。翻转棋的棋盘上有 64 个可以放置黑白棋子的方格(类似于国际象棋和跳棋)。游戏的目标是使棋盘上自己颜色的棋子数超过对手的棋子数。该游戏非常复杂,其名称就暗示着结果的好坏可能会迅速变化。当游戏双方都不能再按规则落子时,游戏就结束了。通常,游戏结束时棋盘上会摆满了棋子或双方都无法在下棋时谁的棋子最多谁就是赢家。1.4 课题内容与目标本课题主要研究的是设计与实现一个黑白棋游戏对战娱乐平台,支持对战功能外,还需要提供游戏大厅与房间、用户之间交流等功能。主要研究开发内容是:熟悉C#和SQL SERVER2005服务器的配置,搭配系统开发平台,探索在此开发平台下,利用socket编程技术、多线程开发技术、TCP、UDP协议等进行局域网游戏对战的实际开发。2系统开发环境和关键技术2.1 开发环境我所设计的是一个黑白棋网络对战游戏,要在短时间内开发出来并且要满足基本的游戏要求,无论是硬件还是软件都要选择合适,要求如下:开发设备应该完备;开发机器的性能必须稳定;操作系统的选择应该适当;开发出的程序可以在尽可能多的平台上运行;要求运行机配置尽可能低档。对此,我们选择的硬件环境和软件环境如下: 1、 硬件环境 处理器:Intel Pentium PIII或更高处理器 内存:256MB或更高 网络:局域网开发该系统应尽可能采用高档的硬件。因此,在应用时应采用更好的配置。2、 软件环境 操作系统:Windows XP /开发平台:Microsoft Visual S开发语言:C#后台数据库: SQL Sever 20052.2 关键技术2.2.1 .NET Framework和C#.NET Framework类似于Java虚拟机,它不但使Internet上运行的应用程序更容易被开发,而且也可用于开发运行于Windows桌面上的传统业务应用程序。它为创建、部署以及管理安全、强大、高效的应用程序提供了前所未有的最大支持。.NET Framework是一个创建、部署和运行应用程序的多语言平台环境,.NET支持的语言使用的基类库由.NET Framework类库(FCL)提供。C#是Microsoft公司设计的一种编程语言。它松散地基于C/C+,并且有很多方面和Java类似。Microsoft是这样描述C#的:“C#是从C和C+派生来的一种简单、现代、面向对象和类型安全的编程语言。C#主要是从C/C+编程语言家族移植过来的,C和C+的程序员会马上熟悉它。2.2.2 SQL Server 2005SQL Server 数据平台 SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。SQL Server 2005 为IT专家和信息共作者带来了强大的、熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建、部署、管理及使用企业数据和分析应用程序的复杂度。通过全面的功能集、和现有系统的集成性、以及对日常任务的自动化管理能力,SQL Server 2005 为不同规模的企业提供了一个完整的数据解决方案。2.2.3 WINDOWS SOCKETS网络编程接口选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图2-1所示: 图2-1 Windows Sockets实现通讯工作的各层关系图2.2.4 多线程开发技术多线程在构建大型系统的时候是需要重点关注的一个重要方面,特别是在效率(系统跑得多快?)和性能(系统工作正常?)之间做一个权衡的时候。恰当的使用多线程可以极大的提高系统性能。使用多线程的好处有以下几点:使用线程可以把占据长时间的程序中的任务放到后台去处理;用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度;程序的运行速度可能加快;在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。在本质上和结构来说,.NET是一个多线程的环境。有两种主要的多线程方法是.NET所提倡的:使用ThreadStart来开始你自己的进程,直接的(使用ThreadPool.QueueUserWorkItem)或者间接的(比如Stream.BeginRead,或者调用BeginInvoke)使用ThreadPool类。一般来说,你可以手动为长时间运行的任务创建一个新的线程,另外对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。线程的基类是System.Threading。所有线程通过CLI来进行管理。2.2.5 TCP/IP协议、UDP协议网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询-应答的服务.TCP和UDP服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 源IP地址 发送包的IP地址。 目的IP地址 接收包的IP地址。源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25。这些端口号是“广为人知”的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。2.2.6 Client/Server结构(客户端/服务器模式)Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构。C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。C/S结构的优点是能充分发挥客户端的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。3系统分析与设计3.1 系统总体分析网络游戏是目前互联网提供的主要内容之一。系统支持对战功能外,还需要提供游戏大厅与房间、战绩排名等功能。使玩家通过对战平台,能在Internet上与其它的玩家进行多人游戏模式,提供了一个玩家之间交流经验、聊天交友的好地方。客户端和服务器端的通信。在服务器端,程序需要不断的监听客户端是否有连接请求,已保证多个客户端的连接,服务器通过套接字识别客户端;而客户端只需要指定哪个服务器即可。一旦双方建立连接并创建了对应的套接字,就可以互相传输数据了。游戏客户端使该游戏的玩家能够通过客户端登入到该游戏大厅,然后玩家的客户端直接与服务器交互。所以,首先需要启动服务器,进行服务器的配置,进行正确的服务器配置和数据库连接并测试成功后,开启服务器。接下来,在客户端,该玩家能够通过登陆界面进入或者注册账号,然后直接与系统服务器交互,进行数据传输。本系统支持的活动列表如下:(1) 开启服务器;(2) 用户注册;(3) 用户登陆系统;(4) 用户与系统交互,进行数据传输;(5) 用户战绩记录;(6) 用户进行游戏;3.2 模块介绍3.2.1 模块结构图黑白棋网络对战游戏系统以局域网内的用户为应用对象,经过各方面需求分析,该系统主要由服务器端和客户端两部分构成,各功能模块如图3-1所示。黑白棋网络对战游戏系统服务器客户端开启服务器停止服务器配置服务器关闭服务器游戏登陆注册文字传送战绩记录图3-1黑白棋网络对战游戏系统功能模块图3.2.2服务器端功能模块介绍开启服务器功能模块:开启服务器,使服务器处在正常工作状态,随时等待响应客户端的连接和发送等请求。停止服务器功能模块:停止服务器,停止一切数据的接受与发送。配置服务器功能模块:此功能模块具体实现的功能有限制同时游戏的人数上限和限制同时开出游戏桌数的上限,以保证服务器能够正常运行。关闭服务器功能模块:关闭服务器。3.2.3 客户端功能模块介绍注册功能模块:为用户提供注册功能,注册了账号的用户方可登录游戏大厅进行游戏。登录功能模块:系统可以验证用户信息,以注册的用户可以通过登录模块进入游戏大厅。文字传送功能模块:为用户提供简单的文字交流平台。游戏功能模块:本系统核心模块,用户通过该模块与其他用户进行对弈。战绩记录功能模块:记录各用户的胜负场次。3.3 设计原理3.3.1服务器端原理与设计根据要求,服务器需要提供游戏室,游戏室内可以根据需要开辟多个小房间,每个小房间内提供一个游戏桌,游戏桌两边各有一个座位,分别用编号0和1表示,0代表黑方,1代表白方。每个小房间内最多只允许两个玩家。玩家进入游戏室后,应该可以看到各个小房间的游戏桌两边是否有人的情况,而且可以决定是否坐到某个座位上。坐到座位上后,才能看到游戏桌上的棋盘。玩家也可以随时离开座位返回游戏室,但视为败方。服务器启动服务后,需要创建一个线程专门用于监听玩家的连接请求。在监听线程中,服务器一旦接受一个连接,就创建一个与该玩家对应的线程,用于接收该玩家发送的信息,并根据该玩家发送的信息提供相应的服务。有多少个玩家连接,就创建多少个对应的线程。玩家退出游戏室时,其对应的线程自动终止。玩家越多需要创建的线程越多。因此服务器限制进入游戏室的玩家数量为100人。在与每个玩家对应的线程中,服务器收到对应玩家发送的字符串信息后,需要解析字符串的含义,并决定服务器需要执行的操作。字符串分为命令部分和参数部分,命令部分和参数部分之间以及参数部分的参数之间均以逗号分隔。客户端发送给服务器的命令有:Login:玩家请求进入游戏室。服务器接受连接后,检查游戏室总人数,如果人数已满,调用“Sorry”命令,否则回送“Tables”命令,并在参数中指明各小房间游戏桌的就座情况,每桌有两个座,第一座表示黑方,第二座表示白方,每座的0表示无人,1表示有人。Logout:玩家退出游戏室。服务器收到此命令后,清除该玩家对应的信息,结束与该玩家对应的线程。SitDown:玩家坐到某个小房间的游戏桌座位上,服务器接收到此命令后,将该玩家的昵称、TcpClient对象、桌号、座位号保存到对应的数组中,并将该玩家入座的信息同时告诉该游戏桌的两个玩家。另外,由于座位数已经发生变化,所以还需要将各桌是否有人的情况同时发送给连接到服务器的所有玩家。GetUp:玩家离开小房间的游戏桌座位,回到游戏室。服务器收到此信息后,需要停止向该桌发送棋子位置及颜色信息,并进行离座处理。同时由于坐到座位上的人数已经发生变化,还要将各桌是否有人的情况发送给连接到服务器的所有玩家。Start:表示玩家已经单击【开始】按钮,此时服务器需要检测另一方是否也单击了【开始】按钮,如果是,就开始游戏。3.3.2客户端原理与设计客户端与服务器连接成功后,需要创建一个接收线程,用于接收服务器发送的信息。在接收线程中,客户端收到服务器发送的字符串信息后,需要解析字符串的含义,并决定需要的操作。另外,客户端还需要根据服务器发送的命令,及时更新客户端程序的运行界面。客户端从服务器接收的信息主要有:Sorry:服务器游戏室人员已满。客户端接收到此命令后,直接结束接收线程,并退出整个客户端程序。Tables:各小房间的游戏桌情况。客户端接收到此信息后,需要计算对应的桌数,并以CheckBox的形式显示出各桌是否有人的情况,供玩家选择座位。Sitdown:玩家坐到某个小房间的游戏桌上。客户端接收到此信息后,需要判断是自己还是对家,并在窗体中显示相应信息。GetUp:玩家离开小房间的游戏桌,回到游戏室。客户端收到此信息后,需要判断是对家离座了还是自己离座后,如果对家离座,显示一个对话框;如果是自己离座,除了设置对应的标志外,不做其他任何处理。Lost:对家与服务器失去联系。由于游戏无法继续进行,直接从游戏桌返回游戏室即可。StopServer:服务器停止服务,程序要立即结束。3.4工作流程3.4.1系统工作流程只有充分地了解了游戏系统的工作流程,才能对整个系统的理解更加深刻,游戏程序的工作流程如图3-2所示。加载套接字库初始化套接字绑定本地机到套接字向指定IP地址发送数据关闭套接字库结束创建线程用于接受数据图3-2游戏程序的工作流程3.4.2服务器工作流程服务器端的工作主要是配置服务器并开启服务,其工作流程如图3-3所示。输入服务器IP是否存在开启服务Y关闭服务器N主界面配置服务器是否配置成功YN退出服务器图3-3 服务器端工作流程图3.4.3客户端工作流程客户端的是系统与用户交互的主要模块。在客户端,用户可以注册账号、登陆游戏、进行游戏。其工作流程如图3-4所示。注册账号输入信息是否正确注册成功Y登陆是否成功YN用已注册账号登陆Y登陆窗口是否拥有账号NN游戏互动N退出系统是否进入游戏游戏结束图3-4客户端工作流程图4系统实现4.1 服务器端设计实现4.1.1 服务器主界面设计服务器端的控制中心,主要实现服务器的开启、停止、配置、关闭功能。如图4-1所示。图4-1 服务器主界面4.1.2 服务器的配置服务器配置是服务器端的重要组成部分,管理者可以进行服务器允许同时在线的人数的配置和游戏桌数的配置。4.1.3 服务器的开启服务器配置测试并保存成功后,便可以开启服务。如图4-2所示。图4-2开启服务4.1.4 服务器端关键代码服务器加载:private void FormServer_Load(object sender, EventArgs e) IPAddress addrIP = Dns.GetHostAddresses(Dns.GetHostName(); localAddress = addrIP0; buttonStop.Enabled = false;服务器设置以及监听:private void buttonStart_Click(object sender, EventArgs e) if (int.TryParse(textBoxMaxTables.Text, out maxTables) = false | int.TryParse(textBoxMaxUsers.Text, out maxUsers) = false) MessageBox.Show(请输入在规定范围内的正整数); return; if (maxUsers 100) MessageBox.Show(允许进入的人数只能在1-100之间); return; if (maxTables 40) MessageBox.Show(允许的桌数只能在1-40之间); return; textBoxMaxUsers.Enabled = false; textBoxMaxTables.Enabled = false; gameTable = new GameTablemaxTables; for (int i = 0; i maxTables; i+) gameTablei = new GameTable(this.listbox); myListener = new TcpListener(localAddress, port); myListener.Start(); service.SetListBox(string.Format(开始在0:1监听客户连接, localAddress, port); ThreadStart ts = new ThreadStart(ListenClientConnect); Thread myThread = new Thread(ts); myThread.Start(); buttonStart.Enabled = false; buttonStop.Enabled = true; 4.2 客户端设计实现4.2.1 客户端登陆主界面设计客户端登陆窗口是系统与用户进行直接交互的第一扇窗口,通过此窗口,用户可以进行注册和登陆,如图4-3所示。图4-3 客户端登陆窗口4.2.2 注册注册模块是客户端程序的重要组成部分。用户可以编辑自己的昵称和密码进行注册。如图4-4所示。图4-4 注册账号4.2.3 登陆登陆是客户端程序的基本组成部分。用户输入正确的、有效的、匹配的昵称和密码后,点击登陆按钮,系统会弹出登陆后的窗体,进入游戏房间,如图4-8所示;登陆成功后界面如图4-5所示。 图4-5 用户登录后的界面4.2.4 游戏互动游戏环节是客户端程序的核心模块。通过双方玩家轮流下棋进行游戏,按开始键进行游戏,如图4-6所示。图4-6 游戏互动界面4.2.5 客户端关键代码连接服务器代码:public FormRoom() InitializeComponent(); string strHostName = Dns.GetHostName(); /得到本机的主机名 IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); /取得本机IP string strAddr = ipEntry.AddressList0.ToString(); textBoxLocal.Text = strAddr; private void buttonConnect_Click(object sender, EventArgs e) try client = new TcpClient(textBoxServer.Text, 51888); catch MessageBox.Show(与服务器连接失败, , MessageBoxButtons.OK, MessageBoxIcon.Information); return; NetworkStream netStream = client.GetStream(); sr = new StreamReader(netStream, System.Text.Encoding.UTF8); sw = new StreamWriter(netStream, System.Text.Encoding.UTF8); service = new Service(listBox1, sw); service.SendToServer(Login, + textBoxName.Text.Trim(); Thread threadReceive = new Thread(new ThreadStart(ReceiveData); threadReceive.Start(); 游戏大厅主要代码:private void AddCheckBoxToPanel(string s, int i) if (panel1.InvokeRequired) PanelCallBack d = new PanelCallBack(AddCheckBoxToPanel); this.Invoke(d, s, i); else Label label = new Label(); label.Location = new Point(10, 15 + i * 30); label.Text = string.Format(第0桌:, i + 1); label.Width = 70; this.panel1.Controls.Add(label); CreateCheckBox(i, 0, s, 黑方); CreateCheckBox(i, 1, s, 白方); delegate void CheckBoxDelegate(CheckBox checkbox, bool isChecked); private void UpdateCheckBox(CheckBox checkbox, bool isChecked) if (checkbox.InvokeRequired) CheckBoxDelegate d = new CheckBoxDelegate(UpdateCheckBox); this.Invoke(d, checkbox, isChecked); else if (side = -1) checkbox.Enabled = !isChecked; else /已经坐到某游戏桌上,不允许再选其他桌 checkbox.Enabled = false; private void CreateCheckBox(int i, int j, string s, string text) int x=j=0?100:200; checkBoxGameTablesi, j = new CheckBox(); checkBoxGameTablesi, j.Name = string.Format(check0:00001:0000, i, j); checkBoxGameTablesi, j.Width = 60; checkBoxGameTablesi, j.Location = new Point(x, 10 + i * 30); checkBoxGameTablesi, j.Text = text; checkBoxGameTablesi, j.TextAlign = ContentAlignment.MiddleLeft; if (s2 * i + j = 1) /1表示有人 checkBoxGameTablesi, j.Enabled = false; checkBoxGameTablesi, j.Checked = true; else /0表示无人 checkBoxGameTablesi, j.Enabled = true; checkBoxGameTablesi, j.Checked = false; this.panel1.Controls.Add(checkBoxGameTablesi, j); checkBoxGameTablesi, j.CheckedChanged += new EventHandler(checkBox_CheckedChanged); void checkBox_CheckedChanged(object sender, EventArgs e) CheckBox checkbox = (CheckBox)sender; if (checkbox.Checked) int i = int.Parse(checkbox.Name.Substring(5, 4); int j = int.Parse(checkbox.Name.Substring(9, 4); side = j; service.SendToServer(string.Format(SitDown,0,1, i, j); formPlaying = new FormPlaying(i, j, sw); formPlaying.Show(); 4.3 数据库设计这一设计阶

温馨提示

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

评论

0/150

提交评论