您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > 在线纸牌游戏的设计与实现
浙江工业大学本科毕业设计文献综述1在线纸牌游戏的设计与实现摘要:本文是关于在线纸牌游戏的设计与实现的一篇文献综述。随着互联网的发展,网络游戏受到越来越多人的接受和喜爱,其中纸牌类游戏因其历史悠久、用户众多而成为网络游戏市场中占据很大份额的一部分。在本文中,简述了在线纸牌游戏的基本结构、并论述纸牌游戏客户端和服务端的设计模型和具体流程,给出相关交互协议,使用Socket和多线程实现该系统。关键词:在线游戏、纸牌、多线程、SOCKET一、引言纸牌的历史相当悠久,早在汉代,我国就出现了一种叫做“叶子戏”的纸牌游戏。据说是大将军韩信为了减轻士兵出门打仗的思乡之愁,在军中发明了它。叶子戏可以说是世界最早的扑克牌雏形了。到了唐代中期,开始有了关于叶子戏的文字记载,一个叫叶子青的人还撰写了一部叶子戏的专著《叶子格》,详细记载了叶子戏的玩法,说明在当时它已经相当成熟了。大约在13世纪,中国的叶子戏传入欧洲,经过数百年的演变,融合了中外各国的纸牌游戏,才逐渐形成了今天国际公认的纸牌模式――扑克牌[1]。中华民族是一个有着几千年悠久历史和璀璨文化的国家,而纸牌游戏却早已突破了纯游戏的范畴而成为中国传统文化的一个分支。纸牌游戏在中国拥有良好的群众基础,并得到了广泛的普及,在经过几千年的衍化之后,其精髓已经达到了登峰造极的地步。它旺盛的生命力非一般性娱乐项目所能比拟。而一些纸牌游戏在经过千百年来的不断发展后,已经成为民族文化不可分割的一个重要组成部分。随着Internet的普及,网络游戏发展速度很快,纸牌游戏也不例外。纸牌网络游戏软件大多是多用户模式,用户操作具有并发性的特点,所以需要基于线程机制来编程,多线程编程能够为游戏各方提供底层的信息通信、协调各方的执行顺序[2]。浙江工业大学本科毕业设计文献综述2二、研究意义近代传入中国后极度盛行的西方纸牌类娱乐,在进入中国后也慢慢演变成了多种趣味横生的玩法,如:争上游、拖拉机、斗地主等等这些日常我们生活中最常见的多人纸牌类游戏已成为中国老百姓最大众化的一种消遣娱乐的方法。随着中西文化的不断碰撞,这些原本并不为中国人所接受的对弈工具和方式也逐渐的被中国人老百姓所接受和喜爱,且不乏有国际高手出现。近几年来扑克游戏发展迅速,成为人们茶后饭余,亲朋聚会的热门话题。中国是一个扑克大国,也有大量忠实的游戏玩家。如何使这项有着广大爱好者的智力竞技运动提高到一个高度,也是许多人苦苦思索的问题,美国有代表世界扑克最高水平的“世界扑克锦标赛”,并且在2004年秋首次在ESPN黄金时段播出“世界扑克锦标赛”以后,更加使扑克游戏得到了全面的发展。我国拥有世界最多扑克玩家,而线下的纸牌游戏耗时太久、也不易找对家,而且一般初出道的玩家都不喜欢面对对手在牌桌上的咄咄逼人,在线上他们则没有这些顾虑,把发牌和数筹码的工作留给电脑,不但节省时间,也去掉了牌局之间的冷场。同时,打牌不用约时间,足不出户即有成千上万个来自各个国家的对手和你切磋,这是现实生活中所无法做到的,所以在线纸牌游戏的开发将会越来越受欢迎。网络让天涯咫尺,有了在线纸牌游戏这样的平台介质,亲朋好友纵使天各一方也可以像聚在一起的时候那样,打打扑克,边游戏边谈心。相比那些奇思异想的虚幻世界为背景网络游戏来讲,网络纸牌游戏更多了些温馨,少了点喧嚣,它给玩家们带去的不是构筑假想空间虚荣心的满足,而是更接近于真实生活的快乐。浙江工业大学本科毕业设计文献综述3三、国内外研究现状及难点许多公司都致力于把拥有悠久文化传统和深厚群众基础的传统棋牌类游戏搬上网,在探索具有网络特色的比赛规则、比赛形式、比赛制度等方面,取得了大量有益的经验。现在国内主要的扑克游戏平台有比较早的联众世界,还有后来居上的QQ游戏,以及以德州扑克游戏闻名的扑克巴巴吧平台,平台中的纸牌游戏也越来越丰盛,基于方便快捷,受到越来越多玩家的喜爱。中国是扑克大国,有着无数的忠实玩家,虽平台众多,但还是缺少一些当地特色游戏的制作,是许多平台在游戏设计中的空缺,因为设计当地特色在线纸牌游戏也是迫在眉睫,介于玩家的喜爱,在线纸牌游戏的设计在互联网上还有很大的发展空间。由此看来,目前国内的在线纸牌游戏市场正随着网络的高速普及而不断的发展壮大,大型网络游戏近年来的繁荣并没有导致在线棋牌游戏的衰退,相反还起到了相辅相成,极大的丰富了人们网络娱乐生活的作用。这也是在线纸牌游戏进一步繁荣,百花其放的原因之所在,相比大型网络游戏产业的喧嚣和种种急功近利的表现。这些纸牌游戏带给我们更多的却是一份值得信任的稳重感。目前,一些较流行的开发语言,如VisualC[3],BorlandC[4]和Java等都支持线程编程。在网络日趋成为未来趋势的形势下,Java语言的地位越来越突出,越受到人们的重视,利用Java语言来编写网络应用程序,会使设计人员感到意想不到的简单与快捷,也为编写在线游戏带来方便,因此在这种互联网形式下,越来越多的设计人员选择Java语言来开发纸牌游戏。而本系统的难点主要在于实现服务端与客户端之间通信(即构建多客户端与服务器端的网络通信构架),以及一些SOCKET和多线程编程。对于纸牌游戏本身,如何将规则转换为算法,如何设计游戏开局的发牌都将是一些难点。浙江工业大学本科毕业设计文献综述4四、纸牌游戏的系统设计思想4.1基本架构介绍现在的纸牌游戏实现架构主要分为二类:C/S和B/S。C/S[5]结构的在线纸牌游戏,C/S网络应用程序即客户/服务器网络应用程序。其工作原理是:首先通过客户端应用程序接收客户的服务请求;其次通过服务器端应用程序从后台数据库中读取数据对客户的请求进行服务;最后再由服务器端应用程序对处理后的数据写入后台数据库[6]。执行过程如图4.1所示:图4.1C/S执行过程B/S[7]结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构[8]。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。通常如果要求系统的响应要求快,又是用于局域网内部或机关企事业单位内部的系统,可以采用C/S结构模式。但如果用户不在同一局域网内,而是分散在各个不同的地方或处于不同的单位,在这种情况下B/S结构模式通常比较适合。C/S程序具有好的交互性,功能强大,但是客户端必须安装客户端软件,限制了其应用;B/S模式下要求客户端具有浏览器,但浏览器在安全方面有一些限制,交互性与功能有一些限制。JDBC-ODBCsocket(tcp)socket(tcp)socket(tcp)后台数据库服务器客户客户客户浙江工业大学本科毕业设计文献综述5在线纸牌游戏系统,对交互性要求较高。本系统选用了C/S模式进行实现,网络内部使用TCP/IP方式利用Socket通过传输层提供的服务,使用Java进行图形用户的搭建。在C/S模式游戏中,Server一般提供所有用户的全局信息,并能提供客户之间的信息转发,客户之间的通讯必须通过Server进行,因为多个客户能够连接到同一台Server上,所以Server必须用Thread负责每个用户的通讯和消息处理:服务端程序通过一个Thread监听客户端的连接,一旦客户连接,为该客户建立连接并启动一个特定的客户Thread,利用该连接不断从客户读取数据,实现客户和服务器或者客户与客户之间的信息的交互。[9]4.2纸牌设计思路本游戏主要分为两个部分,游戏服务端和游戏客户端。游戏服务端主要存储所有连线玩家的相关信息及各种状态,并负责游戏客户之间信息的传递,游戏客户端提供客户连接服务器,创建、加入、退出游戏等功能,并能与联网客户进行游戏。关于在线纸牌游戏角色的设定,通常情况下扑克牌游戏中有三个以上角色,一个是游戏裁判,另外是两个以上的游戏方。游戏裁判负责向游戏方发出牌等提示信息,并负责对游戏作出裁判,游戏方遵照游戏规则出牌[10]。以“跑得快”扑克牌游戏(四方)为例进行具体设计,如图4.2出牌队列所示。出牌队列(存放游戏方的出牌)。游戏裁判取出countcount++游戏方、图4.2出牌队列判断出牌队列中的牌数(count)是否已清,如已清,根据规则裁判,并给出下一步出牌信息按照提示信息出牌,即选择牌放入出牌队列中,然后执行count++浙江工业大学本科毕业设计文献综述6五、系统实现技术方法研究在线纸牌游戏的实现技术多种多样,所以选择合理的技术来实现系统也是一个重大的环节,如果所选择的技术不当,将对系统的实现造成一定的麻烦,可能还会影响系统的性能。J2EE[11]是实现在线纸牌游戏的一种有效技术,当前用J2EE实现C/S结构的在线纸牌游戏非常的流行且技术也越来越趋于成熟,性能也得到了非常大的提升,是一种更实际的信息化平台架构。5.1服务端[12、13、14、15]服务器端完成的功能是:对服务器的某一可用端口进行监听,以获得客户端请求,从而对客户端请求进行处理。因为是多用户,所以采用多线程,为每一个在线用户分配一个客户线程,实时处理每个客户端的事务请求。编写子线程类ServerThread为客户端提供服务。在ServerThread类中调用JDBC-ODBC桥技术[16]读取后台数据库中数据完成客户端服务请求;调用输入流类接收客户端传来的数据和服务请求进行处理;最后再次调用JDBC-ODBC桥技术将处理后的数据写入后台数据库。使用Socket网络通信技术实现客户端和服务器端的数据通信功能。编写Server类调用java.net.ServerSocket类绑定系统某个使用端口,调用accept方法等待客户端服务请求。当服务器端接收到客户端的服务请求时,创建一个新的Socket与客户端创建的Socket连接进行数据通信。一、建立服务器类用Java实现服务器类的设计,其主要类Server实现如下:publicclassServer{privateServerSocketserverSocket=null;pubhcstaticintport=4444;…//其他处理publicServer()throwsIOException{try{serverSocket=newServerSocket(port);}//建立服务器Socketcatch(Exceptionex){⋯}//异常处理while(true)//等待用户连接addClient(serverSocket.accept());浙江工业大学本科毕业设计文献综述7//接收用户连接请求serverSocket.close();//关闭服务器Socket}publicvoidaddClient(Socketsocket)throwsIOException{newServerThread(socket.this).start();//创建并启动一个服务器线程⋯//其他处理}}其中addClient(serversocket.accept())为每当一个用户连接请求到来时,就创建一个单独的线程来为该用户服务,这是并发服务器实现的关键。二、建立服务器线程类每当一个新用户登陆时,服务器端使用newServerThread(socket,this).start()单独创建并启动一个服务器线程,该线程从产生到灭亡(即该用户退出系统)整个过程都只为这个用户服务。该线程主要处理服务器端与该用户有关的信息发送与接收等工作,服务器线程类实现如下:publicclassServerThreadextendsThread{…//成员变量的定义及初始化publicvoidrun{//线程运行处理try{//接收和发送信息处理out=flewPrintWriter(socket.getOutputStream(),true);in=newBufferedReader(newInputStreamReader(socket.getlnputStream
本文标题:在线纸牌游戏的设计与实现
链接地址:https://www.777doc.com/doc-2562949 .html