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