长沙麻将游戏系统的设计与开发_第1页
长沙麻将游戏系统的设计与开发_第2页
长沙麻将游戏系统的设计与开发_第3页
长沙麻将游戏系统的设计与开发_第4页
长沙麻将游戏系统的设计与开发_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

PAGE毕业设计(论文)第35页毕业设计(论文)设计(论文)题目:长沙麻将游戏系统的设计与开发学生姓名: 学生学号: 专业班级: 指导老师: 毕业设计(论文)第PAGEI页长沙麻将游戏系统的设计与开发摘要在互联网高度发达的今天,网络游戏得到了很大的普及。如今网络上的游戏普遍存在地域性特点不强的缺点。本课题将开发一个长沙本地化的麻将游戏,它有着自身独特的打牌方式,并加入了长沙本地化语音功能。本系统的设计考虑到了系统的高可移植性,高可用性等特点。系统结构采用C/S模式,运用了多线程技术,并利用TCP协议来实现服务器与客户端之间信息的传递。游戏规则的制定在服务器端用单独的类来实现。将来只需要做少许修改,就可支持其他地域的游戏规则。考虑到玩家游戏过程中的速度体验,系统设计中,我们将各种复杂的计算都在服务器端处理,客户端只是简单的显示信息,这样游戏过程中速度将是非常快的。本设计的创新性在于它采用了面向对象的设计思路,将语音功能,计分功能等单独封。这样,只需要对这些单独的模块稍作修改,就可满足不同地域的需求,提高的系统的“扩展性”。该系统很好的实现了麻将游戏的长沙本地化特点。游戏在本机测试过程中运行良好,同时语音系统也能正常工作,证实了系统的设计和开发都得到了理想的结果。关键词:长沙麻将,多线程,TCP协议,C/S模式,语音功能Thedesignanddevelopmentof"ChangshaMajiang"ABSTRACTInhighlydevelopedInternettoday,thenetworkgamewasmuchuniversal.Nowthenetworkgamesonthewidespreadhavemanyshortcomings,suchasgeographicalcharacteristicsisnotstrong.ThistopicwilldevelopamajianggameinChangshalocalization,whichhasitsownuniquewayofplayingcards,andwealsoappendlocalizationofvoicefunctiontothisgame.Thedesignofthesystemtakesintoaccountthehighportabilityandhighavailabilityfeatures.WeusedC/Ssystemarchitecturemodel,multithreadingtechnology,andweusedTCPprotocoltotransferofinformationbetweenserverandclients.Rulesofthegamewereconstitutedintheserverwithaseparatecategory.Inthefuture,thegameonlyneedssomesmallmodificationstosupportothergeographicalrules.Takingintoaccountoftheplayer'sfeelingwhentheyplayingthegame,wewillallhavecomplicatedcalculationsontheserverside,theclientonlysimplydisplayinformation.Sothespeedofthisgamewillbeveryfast.Theinnovationindesignliesinitsuseoftheobject-orienteddesign.Thefunctionofvoiceandcalculatescoreisachievedinaseparatecategory.Thus,theyonlyneedtomakesomemodificationsintheseseparatemodules;itcanmeettheneedsofdifferentregions,whichimprovethesystem"scalability."Thesystemachievedaverygoodlocalizationfeatures.Gamesinthecourseofthetestrungood,andvoicesystemcanworkwell,too.Alloftheseconfirmedthatthesystemdesignanddevelopmenthasbeenthedesiredresults.Keywords:Changshamajiang,multithreading,TCPprotocol,C/Smode,voicefunction目录TOC\o"1-3"\h\z1绪论 11.1课题背景与长沙麻将设计的目的 11.1.1课题背景 11.1.2长沙麻将设计的目的 21.2网络游戏的市场现状 21.2.1中韩游戏领域对比分析 21.2.2中国网络游戏存在的问题 41.3长沙麻将设计的内容和意义 52长沙麻将设计的相关技术介绍 72.1客户端/服务器(C/S)模式介绍 72.2基于JDBC的数据库操作 82.3基于Socket的网络传输 92.4多线程的介绍及应用 103长沙麻将总体设计与实现 113.1长沙麻将总体设计思想 113.2服务器与客户端设计 113.2.1并发的,面向连接服务器的算法 123.2.2TCP客户算法 133.3各模块设计 133.4吃牌,碰牌,胡牌算法实现 194长沙麻将运行结果及分析 254.1游戏运行环境 254.2游戏运行结果 25结论与展望 32致谢 33参考文献: 341绪论1.1课题背景与长沙麻将设计的目的1.1.1课题背景中国的网络游戏萌芽于1995年以前。这一时期的单机版的游戏在国内已经形成一定的气候,并向联机版游戏过渡;为网络游戏在中国得以快速发展在人才和技术等方面做了储备。2001年至今正式进入了中国网络游戏的高速成长期。网络游戏在发展期已经呈现出一定的赢利潜力和广阔的发展空间,因此,正在为现金收入烦恼的网络公司不约而同地将目光投入到网络游戏,并且采取了实际的行动。2005年,中国游戏产业经历了由引进代理向自主创新转折的重要一年。在这一年中,网络游戏产业继续保持了2004年的增长势头,用户达到2634万,比2004年增长了30.1%;网络游戏出版市场实际销售收入达到了37.7亿元,比2004年增长了52.6%。全国从事游戏自主研发的团队由2004年的73家增长到2005年的120多家,增长比例为37%;开发的大中型网游作品达到192款,较之2004年的109款增加了83款,增长幅度达76%。游戏研发从业人员数从2004年的4000多人,增长到12600人,增长幅度超过了200%。2005年中国民族原创网络游戏的市场占有率已经达到60%以上[1]。2006年上半年中国互联网游戏市场规模达到32.75亿元,前三家的市场份额达到64.42%,相较于2005年同期的51%有较大幅度的增长,市场集中度进一步提升。同时网易的市场份额超过盛大,达到28.6%,盛大的市场份额为20.9%,九城的市场份额为15.0%,腾讯的市场份额为10.0%[1]。中国的网络游戏玩家已经达到2633万人,但目前国内仅有游戏技术人员几千人,这其中的缺口达到1.5万人以上。然而网络游戏业务若想持续表现良好并稳定增长,重要原因在于对研发的重视和投入,研发团队的能力和经验,已经成了网络游戏方面重要的核心竞争力之一[1]。未来发展趋势预测:行业整合加剧,会迅速出现几个行业研究开发巨头;收费降低,进入免费,增值收费的模式将迅速普及;产品市场细分;国内研究开发实力的崛起;教育类、益智类游戏将迅速提高娱乐性、挑战性和画面的精美程度,减少教育内容和成分,从而得到玩家的认可,迅速提高在游戏类市场中的比重;流通领域在竞争中将起到越来越重要的作用。1.1.2长沙麻将设计的目的目前国内市场上的大部分网络游戏都是面向全国广大游戏玩家设计的,诚然这减小了开发商的开发成本,但却导致了很多游戏的地域性特点无法得到体现,比如相同的游戏,在不同地域可能游戏规则存在着细微的差别,如果开发商不注意这些细节,忽略玩家的感觉,将导致严重的后果,这也是当前国内游戏开发商必须严肃面对的一个问题。本课题的目的在于改善当前市场上部分游戏产品,无法满足某些特定地区人群习惯的缺点。通过市场调研,得到当前长沙人在网络游戏的一些独特需求,为了更好的服务长沙人的娱乐休闲生活,制定了开发“长沙游戏”的计划。为了确保该游戏具有长沙本地化的特点,在系统中加入了长沙本地语音功能。同时,研究了长沙麻将的一些特殊打法,这些都将在游戏中体现出来。游戏本身选用JAVA来开发,其目的是为了将来可以将系统移植到其他平台上去。本游戏的设计模式以及设计思路将为游戏开发商提供一个指导方向。1.2网络游戏的市场现状1.2.1中韩游戏领域对比分析这里我们将对比中国和韩国游戏领域的情况。近几年,中国网络游戏市场规模急剧扩大,大大小小的网络游戏公司如雨后春笋般涌现。各路商家携巨资攻打网游市场,这足以证明整个网游产业的强劲发展势头。对比于前几年中国市场空白状态下韩国游戏独领风骚的局面,如今国内网络游戏市场群雄逐鹿,竞争异常激烈。面对越来越多的国外游戏进入,国内的网游也迅速成长,不甘蛰伏于他人旗下。那么与网游业发达的韩国相比,国内的网游是什么样的状况呢?先看看韩国的情况。有人说“从来都没有在一个领域韩国的一举一动如此受世人瞩目过,除了游戏”,虽然夸张了些,但是国家的扶持和宽带的普及确实促成了韩国网游产业的繁荣。韩国网络游戏公司2004年的销售额达到了6.4亿美元。在网游玩家眼里,韩国可谓是不争的“麦加之地”。韩国国内的游戏制作及经营企业达到了1500多家,网吧等游戏场所46900个,8个包括韩国政府部门下属韩国尖端游戏产业协会KESA和韩国游戏支援中心KGPC在内的游戏协会,在288家有IT相关学位的大学中由政府指定赞助的10家游戏大学及研究院,6大包括OnGameNet、在内的有线电视和卫星广播专业游戏频道等组成的游戏产业群[2]。韩国网游有鲜明的产业特征。首先是政府支持,制定一系列的相关政策和优惠措施,鼓励国内企业发展以宽带、游戏为代表的信息产业。其次是本土化,其本土游戏在国内占据了绝对的主导地位,其游戏内容也有显著的本土化性格特征。再次是系统化,空前发达的网络环境为游戏产业的运营提供了保障,游戏真正成为一项系统化发展的产业,并且与相关事业密不可分。网吧的盛行、传媒的造势、教育的配合、企业的支持、各类游戏竞赛的举办等等,多方面、多层次的配合推动了网游行业的健康发展。另外,韩国公众媒体在消除人们对游戏负面影响的过程中也扮演了重要的角色。近几年来,韩国电视和报纸一直将游戏产业作为一块正在崛起的新兴市场进行广泛宣传,将游戏开发作为信息技术的前沿阵地来造势。观念的转变刺激了网络游戏的突飞猛进。与之相比,中国的网络游戏产业则还处于起步阶段。第一,由于文化背景的差异,很长时间以来,社会舆论大都对网络游戏持不支持甚至反对态度。这种观念下造成的社会环境是对网游产业形成的无形制约。第二,技术瓶颈,目前我国网络游戏市场基本上以代理国外游戏为主,核心技术的80%为国外控制[27]。国内市场近乎爆发式的快速发育,使得国内企业根本来不及作出准备,国外的优秀产品趁虚而入,抢占先机,而代理国外产品很容易获利,不少国内企业也因此而失去研发热情,只有为数不多的几家公司在苦苦支撑。第三,与中国网络游戏产业的庞大规模和增长速度相比,政府在制定规则和加强监管方面显得苍白无力。对待网游,国内政府的态度可谓是一波三折。自从2004年初部分人大代表在人大会上表达了对网络游戏的意见之后,2004年4月12日国家广电总局就电脑网络游戏类节目的问题发出了《关于禁止播出电脑网络游戏类节目的通知》。很多我们熟知的游戏节目从电视中消失了,其中比较著名的有中央电视台5套的《电子竞技世界》、旅游卫视的《游戏东西》等[2]。好在人们的认识总是在不断变化发展之中的。2004年10月,新闻出版总署推出了“中国民族网络游戏重点出版工程”,标志着政府部门对中国网络游戏态度的转变,该工程计划将在未来5年内投资10~20亿元,产出100种国产网络游戏[27]。近期,网络游戏技术研发也首次被纳入国家863科技计划,显示了政府在游戏领域自主研发的决心[27]。另一方面值得庆幸的是,随着越来越多的中国游戏人的成长,国内网游公司纷纷注意到了技术相对于整个网络游戏产业经济起到的决定性作用。越来越多的公司加入到了自主开发的阵列,《剑侠online》、《海之乐章》、《刀剑online》、《傲世online》、《大话西游》等等,也分别占据了国内市场的一部分份额。但是技术的发展并不是一个一蹴而就的过程,无论是网络游戏表层的在客户端技术开发等可见领域,还是包括平衡性等在内的后台不可见因素,这些都需要时间的积累[2]。如今,欧美的各大游戏商也纷纷打入国内市场,曾经认为欧美网游不太适应中国市场的看法也随着《魔兽世界》的一声炮响被砸得灰飞烟灭,韩国网游在中国已不再是一枝独秀。据报道,目前只有2个韩国网游,即的《泡泡堂》和的《天堂II》达到过中国网游榜的前五。这不是说韩国网游产业已经落后了,只是其他国家已经赶上来了,不是说韩国没有好游戏了,只不过玩家可选择的范围扩大了。韩国网游作为中国游戏行业发展历程当中一个特殊而又重要的现象,萦绕在中国玩家的心中已经很多年了。从凸现江湖到呼风唤雨再到盛极而衰,韩国网游走过了一条似乎很符合产品寿命周期规律的道路。它能否再度在国内市场崛起,我们没有特别期待,只是有点好奇。我们真正期待的是,中国本土的网络游戏什么时候才能收复失去的领土.1.2.2中国网络游戏存在的问题金山公司主管网游研发的张志宏曾表示金山早已在2000年开始对游戏引擎进行攻关,如今已将自己开发的游戏引擎应用到了《剑侠情缘》中。技术的进步使得国内网游商家发展自主研发运营网络游戏一体化更加得心应手,网络游戏发展更加迅速。攻克了技术障碍,政府政策的扶持更是让网游商家信心倍增。去年8月,国家“863计划”让国产网络游戏发展“昂首阔步”;今年,国家新闻出版总署明确指出,支持具有自主知识产权的数字娱乐软件开发,对网络游戏进口采取部分限制。从快速增长的市场产值到商家企业的业绩增长以及网络游戏发展带来的经济效益,商家毫无理由不选择投资网络游戏产业。同时它也带动了电信、电脑软硬件、网吧等产业的发展,日渐完善的网络游戏产业链亦将带给各类商家更多的发展机会。网络游戏发展前景光明,受到商家青睐。但要进一步做大网游市场并非易事,需要网络游戏商家从传统游戏代理向自主研发转变,同时创新内容、拓展营销渠道。网络游戏还是个发展中的产业,网游商家欲做大网游市场,还需从多方面进行完善。转变目前的代理运营进口游戏,大力发展研发自主产权的网络游戏产品,实行研发运营一体化都是当务之急。目前,国内的网游商家已具有了独立研发网络游戏产品能力。自主研发将是网络游戏的发展发向。当技术不再是网络游戏的障碍的时候,网络游戏会得到发展,而发展则意味着需要创新。目前中国网络游戏与国外游戏比较面临着游戏内容的创意匮乏问题。金山公司张志宏表示“金山目前网络游戏研发人员已近200人,差不多相当于金山研发人员总数的一半。技术上我们跟国外已没有太大的差别,但是我们具有游戏创意的人员极度缺乏,而且这还不仅是金山一家存在的问题”[2]。国内自主研发的网络游戏需要在游戏内容上完善创新,才能超越国外同类游戏,吸引更多的消费者,实现网络游戏的持续快速发展。1.3长沙麻将设计的内容和意义本课题通过对网络上现有游戏的分析,结合不同地域游戏规则的不一致,制定了长沙麻将游戏的开发计划。为了更好的体现地域性的特点,游戏中加入了长沙本地化的方言语音功能。本课题做到了以下三方面:科学性:本系统结构采用C/S模式,运用了多线程技术,并利用TCP协议来实现服务器与客户端之间信息的传递,而且各种游戏规则的制定及判断都是在服务器端完成。这样,系统将支持多人同时在线游戏,同时各种信息的传递都将是准确的,可信的。客户端处理信息的速度也是很快的。创新性:它采用了面向对象的设计思路,将语音功能,计分功能等单独封装,这样,只需要对这些单独的模块稍作修改,就可满足不同地域的需求,提高的系统的“扩展性”。实用性:游戏采用了C/S模式开发,用户只需要下载客户端安装后,就可以进入游戏厅和网络上的人一起游戏。正如金山公司主管网游研发的张志宏说过的那样,现在中国在游戏开发的技术方面和国外差距不大了,国内游戏唯一不足的地方在于游戏创意上。有了好的创意,才能吸引到更多的游戏玩家。本课题尝试着让网络游戏跟着消费者的口味走,改变以往开发商开发什么游戏,玩家就只能按照开发商制定的规则去游戏的方式。相信如果中国所有的游戏开发商都可以在自己的产品中加入更多的创意,中国游戏产业的发展一定不可估量!2长沙麻将设计的相关技术介绍2.1客户端/服务器(C/S)模式介绍C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。C/S架构软件的优势与劣势:(1)应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。(2)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。(3)C/S架构的劣势是高昂的维护成本且投资大。采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。2.2基于JDBC的数据库操作JDBC是Java的开发者Sun的公司制定的Java数据库连接(Java

Data

Base

Connectivity)技术的简称,是为各种常用数据库提供无缝联接的技术。JDBC在Web和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。,称为开放式数据库互联技术,是由Microsoft公司倡导并得到业界普遍响应的一门数据库连接技术,如果读者有使用ODBC编程的经验,就会发现JDBC与ODBC很类似。JDBC现在可以连接的数据库包括:以及Paradox等。

JDBC的工作机制:SQL(Structure

Query

Language:结构化查询语言)是一种标准化的关系型数据库访问语言。在SQL看来,数据库就是表的集合,其中包含了行和列。SQL标准虽然也还处在不断变革之中,但其基本内容相对稳定。JDBC定义了Java语言同SQL数据之间的程序设计接口。JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。公司开发了JDBC

API,JDBC

API是一个标准统一的SQL数据存取接口。JDBC在Internet中的作用与ODBC在Windows系列中的作用类似。它为Java程序提供了一个统一缝地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性,而且在Internet上确实无法预料你的用户想访问什么类型的数据库。只要系统上安装了正确的驱动程序,JDBC应用程序就可以访问其相关的数据库。用JDBC来实现访问数据库记录可以采用下面的几个步骤:通过驱动程序获取连接接口。获得Statement或它的子类。限制Statement中的参数。执行Statement。查看返回的行数是否超出范围。关闭Statement。处理其它的Statement8、

关闭连接接口。2.3基于Socket的网络传输TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,也是一种电脑数据打包和寻址的标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在INTERNET中几乎可以无差错地传送数据。socket用来让一个进程和其他的进程互通信息(IPC),而Socket接口是TCP/IP网络的API接口函数。Socket最先应用于Unix操作系统,如果了解Unix系统的I/O的话,就很容易了解Socket了,因为Socket数据传输其实就是一种特殊的I/O。在Java中,通过将连接功能封装到套接字类里而使得网络编程更加容易。套接字类即Socket类(它创建一个客户套接字)和类(它创建一个服务器套接字)。套接字类大致介绍如下:Socket是基类,它支持TCP协议。TCP是一个可靠的流网络连接协议。Socket类提供了流输入/输出的方法,使得从套接字中读出数据和往套接字中写数据都很容易。该类对于编写因特网上的通讯程序而言是必不可少的。是一个因特网服务程序用来监听客户请求的类。实际上并不执行服务;而是创建了一个Socket对象来代表客户机。通讯由创建的对象来完成。在本课题中,在服务器端设置一个类进行监听,对每一个客户端的请求产生一个Socket类与之进行通信。通过这个连接的Socket,将客户端的数据文件传输到服务器端。2.4多线程的介绍及应用线程也称为轻型进程(LWP)。因为线程只能在单个进程的作用域内活动,所以创建线程比创建进程要廉价得多。这样,因为线程允许协作和数据交换,并且在计算资源方面非常廉价,所以线程比进程更可取。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。Java编程语言使多线程比在其他语言中药容易的多。需要注意的是main()函数也是一个线程,并可用来做有用的工作。只有在需要多个线程时才需要创建新的线程。Thread类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从Thread类导出的新类。程序员必须覆盖Thread的run()函数来完成有用的工作。用户并不直接调用此函数;而是必须调用Thread的start()函数,该函数再调用run()。在本课题中根据实际需要,也充分利用了多线程,当有新的游戏玩家登陆系统后,服务器端将会使用一个新的线程与之通信,直到该玩家退出游戏。采用多线程技术后,系统叫支持多人同时在线游戏。3长沙麻将总体设计与实现3.1长沙麻将总体设计思想该游戏是一个支持多用户同时在线,对安全性,访问速度要求都比较高的系统,这里我们将采用C/S模式,运用了多线程技术,并利用TCP协议来实现服务器与客户端之间信息的传递,而且各种游戏规则的制定及判断都是在服务器端完成。这样,系统将支持多人同时在线游戏,同时各种信息的传递都将是准确的,可信的。客户端处理信息的速度也是很快的。同时,它采用了面向对象的设计思路,将语音功能,计分功能等单独封装,这样,只需要对这些单独的模块稍作修改,就可满足不同地域的需求,提高的系统的“扩展性”。由于游戏采用了C/S模式开发,用户只需要下载客户端安装后,就可以进入游戏厅和网络上的人一起游戏。数据库采用了“连接池”的方式,在启动服务器的时候,将会在连接池中放了400的连接,一旦有客户请求到达服务器是时候,就可以直接从连接池中取得一个连接来满足客户的请求,这样做可以提高对数据库的访问速度。3.2服务器与客户端设计常见的服务器类型有:循环的,无连接的服务器;循环的,面向连接的服务器;并发的,无连接的服务器;并发的,面向连接的服务器。循环的,无连接的服务器是最常见的无连接服务器形式,特别适应于要求对每个请求进行少量处理的服务。循环服务器往往是无状态的,这使其容易理解而且不易出错。循环的,面向连接的服务器是一种较常见的服务器类型,它适用于要求对每个请求进行少量处理,但要求有可靠的传输。因为与建立和终止连接相关的开销可能很高,平均响应时间可能并不短。并发的,无连接的服务器是一种不常见的服务器类型,服务器要为处理每个请求创建一个新线程或者进程。在许多系统中,创建线程或进程所增加的开销决定了并发性所获得的效率。为证明并发是可取的,要么创建一个新线程或进程所要求的时间必须明显小于计算响应是需的时间,要么并发的请求必须能够同时使用多个I/O设备。并发的,面向连接的服务器是最一般的服务器类型,因为他提供了可靠的传输以及并发处理多个请求的能力。在并发线程的实现方法中,主服务器线程为每个连接创建一个从线程以便对其进行处理。使用多线程使如下情况变得容易,即为每个连接执行一个单独编译的程序,而不是将所有的代码放在一个单独的,巨大的服务器程序中。综合考虑到游戏程序需要多人同时在线游戏,而且必须对游戏过程中信息的交互提供可靠的传输,我们选择了使用并发的,面向连接的服务器。3.2.1并发的,面向连接服务器的算法主1.创建套接字并将其绑定到所提供服务的熟知地址上,并让该套接字保持非连接。主2.将该端口设置为被动模式,使其准备为服务器所用。主3.反复调用accept以便接收来自客户的下一个连接请求,并创建新的从线程来处理响应。从1.由主线程传递来的连接请求(即针对连接的套接字)开始。从2.用该连接与客户进行交互:读取请求并发回响应。从3.关闭连接并退出。在处理完来自客户的所有请求后,从线程退出。并发线程结构图:图3-1并发线程结构图主服务器线程不与客户直接通信,它只是在熟知端口上等待下一个连接请求。一旦某个请求到达,主服务器线程会接收这个连接请求,并创建一个新的套接字线程来处理该连接。在任何时刻,服务器都包括一个主线程,以及零个或者多个从线程。3.2.2TCP客户算法1、找到期望与之通信的服务器的IP地址和协议端口号。配套接字。这个套接字连接到服务器。使用应用级协议与服务器通信(在此包含发送请求和等待应答)。关闭连接。3.3各模块设计系统分3个部分来开发:部分封装了对数据库的操作,其他2个部分都将用到所提供的接口来实现对数据信息的读取及修改。部分为游戏的客户端程序,安装客户端后,可以登陆到服务器上,即可实现与其他玩家一起游戏。部分为服务器安装程序,用他来实现各玩家之间信息的交互以及信息的分析。部分包括2个类:和图3-2database类图说明:类封装了数据库的连接,包含对该连接的一些基本操作,以及该连接是否可用等信息。类封装连接池的信息,当有新的连接请求时,会到连接池中去选择某个合适的连接。这样做的好处是,当客户端有新的连接请求到达时,可以直接返回某个对数据库的连接,节省了连接建立过程所需要的时间,提高了系统的反应速度。部分包括9个类:,,,,,,,,。图3-3MaJiang类图说明:Login类主要包括了登陆界面的初始化以及客户端套接字的建立,Login的实例通过新建一个Connect类的实例,通过将刚才建立的socket传递给该实例,来实现与服务器端信息的交互。当从服务器端返回“new”信息后,释放Login实例,通过实例化一个类的实例,玩家进入了游戏大厅。类初始化大厅信息,并通过新建Listen类的实例,来实现与服务器端信息的交互。当玩家选择某张桌子坐下后,将游戏大厅设置为隐藏,并新建类的实例,该实例会初始化桌台信息,并通过Play类实现与服务器端信息的交互。其中Game类封装了对玩家手中牌信息的一些处理,User则为当前玩家的个人信息。Server部分包括5个类:,Client,Game,Server,Watch。图3-4Server类图说明:Server类主要初始化服务器信息,并创建一个主动套接字。通过Watch类来实现监听客户端的连接信息,并新建一个新的套接字。Client类获得新的套接字来实现与该客户的通信。Game类为本系统的核心部分,他实现了各种牌面信息的处理,包括胡牌,吃牌等信息的判断。类作为一个单独的模块,专门用来处理计分。部分主要流程图如下:图3-5进入大厅流程图说明:用户首先进入登陆界面,在这里系统需要初始化登陆界面的信息,并为“登陆”绑定事件。此时若用户按下了登陆按钮,则会根据用户信息去判断用户是否为合法用户。如果为合法用户,客户端会马上向服务器端发送相关个人信息,如用户名,用户编号以及登陆IP地址,同时会新建一个Connect类的实例,并用它实现与服务器端信息的交流。由于此时客户端已经给服务器端发送了用户的登陆信息,服务器会返回一个包含“NEW”的字符串信息,表示玩家已经成功登陆了系统。此时会停止Connect实例的运行,并进入到游戏大厅,包括初始化大厅信息,为各张桌子注册事件触发信息。同时会新建一个Listen类的实例,并用它实现与服务器端信息的交流,而且此时用到的Socket和前面Socket为同一个。图3-6启动服务器流程图说明:启动服务器后,首先会进行服务器端界面信息的初始化,同时会创建一个主动套接字,用来监听客户端的连接请求信息。当接收到这样的一个连接请求后,该主动套接字会新建一个Client类的实例,并将接收到的客户端套接字传递给这个Client类的实例来实现与客户端信息的交互。图3-7进入游戏流程图说明:玩家在大厅内选择了某张桌子后,会将大厅设置为隐藏,同时会新建一个类的实例,包括了桌台信息的初始化和在该类实例中新建一个Play类的实例来实现与服务器信息的交互。客户端有个Game类,里面包括了存储玩家手中牌信息以及对玩家手中牌信息进行排序等功能。服务器端也有个Game类,里面包括了当一个牌局开始时,初始化牌信息,以及玩家在游戏个过程中对牌信息的分析处理,包括了吃牌算法,碰牌算法,胡牌算法等。本系统的服务器端算法都封装在Game类中。3.4吃牌,碰牌,胡牌算法实现在本系统中,我们将为每张牌图片取一个名字。因为一共有27张不同的牌,所以牌图片的名字为0到26的连续数字。具体做法为:‘一万’到‘九万’用0到8的连续数字表示;‘一条’到‘九条’用9到17的连续数字表示;‘一丙’到‘九丙’用18到26的连续数字表示。如:图3-8麻将信息图由于每张牌的名字都是一个特定数字,这样在处理吃牌,碰牌以及胡牌时,只要先获得牌所对应的数字信息,牌信息的处理就变成了简单的对数字的处理了。另外在服务器用一个保存玩家的牌值,另外用一个保存玩家各张牌所对应牌的张数。吃牌算法描述:我们将所有的牌分为5类,具体方法为:‘一万’,‘一条’,‘一丙’为第一类;‘二万’,‘二条’,‘二丙’为第二类;‘八万’,‘八条’,‘八丙’为第三类;‘九万’,‘九条’,‘九丙’为第四类;其他为第五类。当一个玩家打出一张牌后,该牌信息会传递到服务器,而服务器保存了所有玩家的牌信息。此时,服务器只需要判断该玩家的下家是否可以吃牌。为了处理方便,我们假设玩家打出的牌为,其下家为玩家B。判断能否吃牌的规则为:若为第一类牌,而且玩家B中同时存在牌值为和的牌,则可以吃牌,否则不可以。如玩家打出了‘一万’,其下家只可以用‘二万’和‘三万’去吃。若为第二类牌,而且玩家B中同时存在牌值为和的牌,或者同时存在牌值为和的牌,则可以吃牌,否则不可以。如玩家打出了‘二万’,其下家若同时有‘一万’和‘三万’,或者同时有‘三万’和‘四万’,则可以吃,否则不可以吃。若为第三类牌,而且玩家B中同时存在牌值为和的牌,或者同时存在牌值为和的牌,则可以吃牌,否则不可以。如玩家打出了‘八万’,其下家若同时有‘六万’和‘七万’,或者同时有‘七万’和‘九万’,则可以吃,否则不可以吃。若为第四类牌,而且玩家B中同时存在牌值为和的牌,则可以吃牌,否则不可以。如玩家打出了‘九万’,其下家若同时有‘七万’和‘八万’,则可以吃,否则不可以吃。若为第五类牌,而且玩家B中同时存在牌值为和的牌,或者同时存在牌值为和的牌,或者同时存在牌值为和的牌,则可以吃牌,否则不可以。如玩家打出了‘三万’,其下家若同时有‘一万’和‘二万’,或者同时有‘二万’和‘四万’,或者同时有‘四万’和‘五万’,则可以吃,否则不可以吃。碰牌算法描述:为了处理方便,我们假设玩家A打出的牌为,其他同桌玩家为B,C,D。判断能否碰牌的规则为:玩家A打出了牌后,会将自己的编号,桌台编号以及牌值发到服务器。服务器根据玩家A的编号,以及桌台编号获得同桌另外三人的牌信息,并从那个保存玩家牌张数的中取得对应牌值为的牌的张数。若有一个人的牌张数大于或者等于2,则代表其可以碰牌。普通胡牌算法描述:首先我们会去判断玩家手中是否有“将”。如果没有“将”,玩家一定不可以胡牌;如果玩家手中有“将”,我们将用这些所有可能作为“将”的牌的值记下来,并防止一个单独的中。接下来,我们从上面的中取得一个值,并将它作为“将”,即从玩家手中的牌中去除两张该值的牌,同时将别人打出的牌或者玩家自己摸到的牌加到玩家的牌中,判断是否此时玩家手中的牌可以每3张都连续在一起。如果可以,则表示此时玩家可以胡牌,否则将从中取得下一个值作为“将”,然后依照上面的判断规则去检测是否可以胡牌,直到中的所有牌都检测完毕。为了处理方便,我们假设玩家A打出的牌为,判断同桌玩家为B是否可以胡牌,而且玩家B的牌值保存在中,牌值对应张数保存在中。比如某张牌的牌值为,则起对应的张数保存在中。判断能否胡牌的规则为:首先判断玩家B是否有“将”,若没有,则不可以胡牌;若有,则将所有可能的“将”的值防止数组中,并建立一个临时的数组,其值初始化为和完全一样,伪代码表示如下://从中取得第一个不为0的值,并返回其位置,该位置的值恰好为对应的牌值//如果中已经不存在大于0的值了,返回-1//判断是否可以胡牌{ //得到所有可能作为“将”的牌的个数{ //取其中一张作为“将” 从中移除掉2张值为的牌,同时增加一张牌; //判断是否中的所有牌都可以和其他牌联系在一起 //可以胡牌 } ;//不可以胡牌}//判断是否中的所有牌都可以和其他牌联系在一起{ //从中取得第一个不为0的值,并返回其值 { 从中得到value值对应的张数number; //如果牌的张数为1 { 判断值为和值为的牌的张数是否都大于等于1,而且在同一个区间内; //如果是 { 将值为对应的张数都减去1; //进入下一个判断 } //不可以胡牌 } //如果牌的张数为2 { 判断值为和值为的牌的张数是否都大于等于2,而且在同一个区间内; //如果是 { 将值为对应的张数都减去2; //进入下一个判断 } //不可以胡牌 } //如果牌的张数为3 { 将值为对应的张数设置为0; //进入下一个判断 } { 将值为对应的张数设置为1; //进入下一个判断 } } //可以胡牌}其他特殊胡牌算法,都是在上面的普通胡牌算法的基础上稍加修改后就可以实现,这里不再累叙!服务器端分析完信息后,如果有人可以吃牌,碰牌或者胡牌,服务器会把相关信息连接成一个字符串,根据桌台编号发送到特定一个桌台。该桌台的所有玩家都可以接受到该信息。他们会首先将该字符串分解,如果分析得到信息和自己无关,则放弃,否则进行下一步的分析,然后进行相关处理。如可以吃牌的话,就进行吃牌处理,然后将吃牌信息发送到服务器,服务器再将该信息发送到该桌台的所有玩家,各玩家根据这个信息更新桌面上的显示信息。4长沙麻将运行结果及分析4.1游戏运行环境硬件环境:安装有公司的pc机一台。机器装有windowsNT架构的操作系统。软件环境:Eclipse3.2,MicrosoftSQLServer2000,MicrosoftSQLServer2000DriverforJDBC。4.2游戏运行结果实验步骤:1、启动SQLServer2000。2、运行,如图:图4-1服务器启动界面图在该图中,我们可以看到服务器已经正常启动以及启动的时间。而且在的对话框中输入信息后,可以给个桌台发送信息。3、运行,如图:图4-2登陆界面图4、输入用户名a及密码1,按“登陆”,如图:图4-3游戏大厅界面图从该图的右侧可以看到玩家a的个人信息,左侧为所有大厅内所有桌台的信息,现在玩家可以选择任意一张有空闲位置的桌子坐下来游戏。当同一张桌台上有4个人,而且都选择了“开始”后就可以进入游戏状态。5、玩家选择某张桌子坐下后,玩家将进入游戏大厅。如图:图4-4桌台界面图从图中可以看到玩家已经进入了一局游戏,而且此时还没有人加入到游戏中来。在画面下侧的左端,玩家可以发送信息。发送的信息将在上端的左侧显示。当玩家进入游戏大厅,而且此时大厅内已经有人坐在桌台时,如图:图4-5游戏大厅界面图从图中可以看到,第一桌已经坐下了3个人,而且其中有2个人选择了“开始”。(图片颜色比较亮的为选择了“开始游戏”的玩家,图片颜色比较暗的为还没有选择“开始游戏”的玩家)。下一步我们将让最后登陆进来的玩家d也选择坐到第一桌。7、按照上面的方式,其他三人登陆系统,并坐上同一张桌子后,如图:图4-6游戏桌台界面图从图中可以看到游戏已经开始,而且还没有人打出一张牌,玩家a为默认庄家。牌面信息按照他们对应的牌值由小到大的排列出来。玩家a最右侧的一张牌为系统发给他的第14张牌。这张牌会单独放在右侧。8、开始游戏,并打出一些牌后。如图:图4-7玩家吃牌图从图中可以看到,玩家打出的牌单独放在玩家手中牌的前端,牌的顺序按照打出的先手顺序依次排列。此时玩家C打出了一张牌(四丙),而玩家D刚好可以吃牌,系统会提示玩家D可以吃牌。玩家D可以选择吃牌或者放弃。若选择放弃吃牌,系统将会给他发另外一张牌。9、游戏进行一段时间之后,有玩家可以碰牌。如图:图4-8玩家碰牌图从图中可以看到,玩家d打出了一张牌七丙,恰好玩家a手中有2张七丙,此时服务器判断玩家a可以碰牌,于是系统提示玩家a是否碰牌。若玩家a放弃碰牌,则系统会给玩家d的下家发一张牌。10、玩家C打出一张牌(六丙)后,玩家D可以胡派牌。如下图:图4-9玩家胡牌图从图中可以看到玩家D可以胡牌,他可以选择胡牌或者放弃胡牌。若放弃,则系统会给玩家C的下家发一张牌,若玩家D选择了胡牌,系统为各玩家更新分数,并开始新的一局牌,重新发牌,此时的庄家为刚才胡牌的玩家。11、玩家退出游戏后,如图:图4-10玩家退出游戏图从图中可以看到,服务器记录了所有登陆系统玩家的信息,包括玩家登陆时间,登陆名,登陆地址以及登陆状态信息,包括登陆系统成功和离开系统。经过一系列的测试,发现系统可以正常运行。结论与展望本系统是湖南银河电子技术有限公司一个真实项目的初始版本,项目的设计及开发由本人和公司另一位程序员,外加一名美工完成。在这之前,游戏开发领域对我还是完全陌生的,通过这四个月的努力,我学到了很多,不仅接触到了2D游戏开发的一些前沿知识,而且更重要的是通过这次设计,我养成了科学的研究态度,增强了对自我能力的信心。项目经历了前期对网络上类似系统的研究,并针对长沙本地人的爱好进行了改进,主要体现在麻将游戏的打法以及个性化的长沙方言上。游戏的设计上,采用软件工程思想中的代码封装和模块化的方法设计程序流程图,并且将具有不同功能的代码封装在各个模块中。最后,通过实验,验证了项目的开发取得了比较理想的结果。本设计总的来说是很成功的,在以下方面还可以作进一步的修改:1、由于自身水平的限制以及对需求理解的偏差,导致最初设计系统时,出现一个比较严重的错误——游戏不可以“累积胡”。2、由于时间仓促,对一些特殊的胡牌方式没有处理,而且积分系统还没有加入到系统中,这些方面都等待后续的开发来完成。3、游戏系统是一个对速度要求比较高的软件,虽然我尽力去做到让服务器的算法做到最优,但毫无疑问还有很多代码优化方面的事情要去做。4、限于条件的影响,该游戏还只限于本机测试,未来放到互联网上后,可能还会遇到诸多问题。致谢在这里,首先要感谢xxx教授和xxx博士,他们在论文研究和写作期间,对本设计提出了宝贵的指导意见,给予了有效的指导。正是因为他们严格的要求和耐心的指导,本次毕业设计能够如此顺利地完成。感谢xxx大学软件学院的所有老师,4年来,是他们耐心的教导和无私的奉献让我从一个无知少年逐渐走向成熟,让我在这美好的4年中学会了生存的本领,领悟到了生命的价值。感谢我的父母,是你们给了我生命,并在这么多年里养育了我,默默地支持着我,每当我遇到挫折时,想起父母就会重新鼓起信心和力量。感谢所有曾经帮助过我的朋友,感谢他们对我的支持,感谢他们陪我走过的所有日子。感谢xxx电子技术有限公司的同事们,他们在工作和生活上给了我很多关心和照顾,感谢和他们度过的那段美好时光。衷心地向支持和帮助过我的所有人表示感谢!参考文献:[1]王明亮.中国投资咨询网[Z]./reports/2006233wangluoyouxi.htm.[2]周余风.中国投资咨询网[Z]./2103869_d.html.[3]辛运帏饶一梅张钧.Java程序设计[M].北京:清华大学出版社1997:66-87.[4](美)MartyHall,LarryBrown.CoreServletsandJavaSer

温馨提示

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

评论

0/150

提交评论