1、摘 要俄罗斯方块游戏是一种比较经典的游戏,研究它具有一定的价值和意义。但目前的俄罗斯方块多以单机版为主,游戏交互性弱、可玩性差,存在很大的弊端。利用网络通信技术、图形界面、多媒体等技术可以支持多人分组对战,提高游戏的可玩性,弥补传统俄罗斯方块的不足。本文在分析研究传统俄罗斯方块的基础上,借助C/S软件模型,将CSocket套接字技术移植到俄罗斯方块中实现了多人分组对战模式。将传统的人机对战变成人与人对战,增强了游戏的交互性。利用GDI图形界面绘制技术和多媒体技术使游戏画面变得更加生动,并且动态显示各游戏玩家的游戏进展情况,改善了玩家的视觉、听觉感受。游戏中的各个玩家通过自定义消息来进行交互,他
2、们可以组队进行游戏,可分为自由人、蓝队、橙队和红队。各玩家之间除了可以相互聊天外,还可以相互攻击和援助。实验表明,经过扩展后的俄罗斯方块游戏画面更加活泼,游戏方式更加灵活,游戏的交互性更强,游戏可玩性大大提高。关键词:多人分组对战俄罗斯方块;CSocket技术;GDI图形绘制;多媒体技术 ABSTRACT Tetris game is a classic game .It is valuable to research. But current games are mainly single plane version, lack of interaction, and can not be
3、played easily. By using network communication technology, graphical interface, multimedia and other technology, the game introduced in this paper can support group antagonizing, be more easily played and make up the shortcomings of traditional versions. Based on the analysis of traditional versions,
4、 CSocket is transplanted to the game to achieve groups antagonizing mode, which changes the traditional man-machine model into man-man model and enhance the interaction in the game. GDI and multimedia technologies make the game more lively, display the progress of every player dynamically and improv
5、e the visual and auditory experience. The various players interact by customizing the information in the game. They can team up for the game. There are free man, blue team, red team and orange team. Not only can they chat with each other, but also attack and help each other.The experiments show that
6、 the expansion can make the game more lively, make it more flexible in playing the game, make the game more interactive and enable the game to be played more easily.Keywords: Tetris of more groups antagonizing; CSocket; GDI graphics rendering; Multimedia technology目 录1 绪论11.1 俄罗斯方块游戏简介11.2 多人分组对战俄罗斯
7、方块与传统俄罗斯方块的异同21.3 本论文的主要内容与组织结构32 多人分组对战俄罗斯方块的分析与设计42.1 多人分组对战俄罗斯方块的设计原理42.2 需求分析82.2.1 数据流图92.2.2 数据字典112.3 概要设计122.3.1 功能定义122.3.2 游戏框架设计142.3.3 技术、风险预测153 详细设计173.1 系统组成及功能描述173.2 系统登录模块设计173.3 游戏算法实现模块193.4 网络通信模块233.5 游戏界面绘制模块253.5.1 游戏初始界面253.5.2 游戏准备界面273.5.3 游戏开始界面283.5.4 游戏结束界面324 多人分组对战俄罗斯
8、方块的实现364.1 多人分组对战俄罗斯方块的实现原理364.2 多人分组对战俄罗斯方块核心功能实现375 系统测试与维护405.1 软件测试概述405.2 多人分组对战俄罗斯方块测试405.2.1 登录阶段测试405.2.2 游戏开始前的准备阶段测试415.2.3 游戏进行阶段测试425.2.4 游戏结束阶段测试42结论43参考文献44英文原文45中文译文50致 谢53中国矿业大学2008届本科生毕业设计 第 53 页1 绪论1.1 俄罗斯方块游戏简介 “俄罗斯方块”由莫斯科科学学院程序员Alexei Pajitnov所设计。1985年6月工作于莫斯科科学计算机中心的阿列克谢帕基特诺夫在玩过
9、一个拼图游戏之后受到启发,从而制作了一个以Electronica 60(一种计算机)为平台的俄罗斯方块的游戏。后来经瓦丁格拉西莫夫(Vadim Gerasimov)移植到PC上,并且在莫斯科的电脑界传播。实际上,在游戏发明后的数年间,“俄罗斯方块”成了无数场专利官司和法律纠纷的目标,而许多公司也不遗余力地上阵厮杀,想要将游戏的创意据为己有。一个最初的版本是Spectrum Holobyte为IBM兼容机开发的游戏。1988年,“俄罗斯方块”在街机上也变得非常流行,这都要归功于Atari,因为他们发布了一个能让两名玩家同时游戏的版本。 还是在1988年,Tengen为任天堂娱乐系统发布了“俄罗斯
10、方块”的一个优秀版本,但它很快便从货架上撤掉了,因为任天堂指控该公司侵犯版权。后来,任天堂把那个版本的“俄罗斯方块”换成了自己的版本,可是新版本却缺乏Tengen版的双人对打模式和出色的音乐。到了1989年,任天堂着手将一个移动版本的“俄罗斯方块”与当时崭新的GBA系统捆绑出售。GBA后来成为有史以来销售成绩最佳的游戏系统,对此,“俄罗斯方块”作出了不小的贡献。 这次产权争夺,几家欢喜,几家哀愁,几家公司倒闭,几家公司赚钱,其中的是是非非,一言难尽。目前“俄罗斯方块”游戏已经有了很大的发展。国内从以前的掌上游戏移植到了电脑、手机等平台。游戏的画面、功能都有了很大的提高。例如有名的QQ游戏中的“
11、火拼俄罗斯方块”、边锋游戏大厅中的“俄罗斯方块”等。国外“俄罗斯方块游戏”也有很大发展。电脑上、手机上、PSP上、各种网站上都有它的身影。“俄罗斯方块”游戏从诞生到现在已经几十年了,它一直伴随着我们,一直在不断的成长。没有人认为它会消失,将来它也会不断的发展下去。随着高科技电子产品的不断涌现,“俄罗斯方块”将以他们为载体继续随时间洪流传播到世界的每一个角落。“俄罗斯方块”不仅会扩大传播介质,同时自身的功能的多样化、界面的美化、操作的简化、特效、魔法等技术都会在将来得到很大的发展。例如可以将游戏地图变成各种各样的形状而不再是单一的矩形地图;还可以改变游戏时运动方块的形状;也可以增加键盘鼠标事件并
12、以特殊的功能去响应这样的事件(例如连续点击鼠标时可以使运动方块发射子弹等)。“俄罗斯方块游戏”早在十几年前它就风靡全球,成为大家津津乐道的话题。从掌上游戏机到PC机,从单调的黑白画面到绚丽多彩的QQ游戏画面。“俄罗斯方块”始终跟随着人们一起发展、进步。许多游戏轰轰烈烈的诞生没多久就悄然而去,然而“俄罗斯方块”却长久不衰,仿佛它已经成为了我们的一部分,将永远伴随着我们去开辟未来,带给我们更多的欢笑。“俄罗斯方块”是一款集休闲、娱乐、益智于一体的游戏,适合各种人群。它的实现方法简单,但灵活多变,通过研究“俄罗斯方块”,在原来的技术上演变出更多、更新的版本也是一件很有意义的事情。同时,由于“俄罗斯方
13、块”的广泛传播也带来了很大的商业价值。怎样开发出更新、更吸引人的“俄罗斯方块”游戏也成为许多游戏公司的首要任务。1.2 多人分组对战俄罗斯方块与传统俄罗斯方块的异同多人分组对战俄罗斯方块是传统单机版俄罗斯方块的扩展,因此,它们具有许多相似之处。同时,多人分组对战俄罗斯方块游戏的设计原理又有了很大的改变,游戏方式也不再相同,它们也有许多不同的地方。(1) 相同点:1) 游戏算法相同:多人分组对战俄罗斯方块与传统俄罗斯方块主要的相同点在游戏算法上。经过长时间的发展,俄罗斯方块游戏的算法已经发展成熟,因此本文并没有作多大的改变。游戏算法主要由运动方块的随机产生、方块下移、左移、右移、直接下落、变换、
14、方块触界检测、消层等多个模块组成。它们的实现原理基本相同。2) 游戏逻辑相同:游戏从运动方块的产生、消层到游戏结束,整过流程是相同的。(2) 异同点:1) 设计模式不同:传统俄罗斯方块游戏多是单机版,只能供一个人游玩;而多人分组对战俄罗斯方块是基于C/S的设计模式,支持网络互联,可以多人游玩。2) 对战模式不同:传统俄罗斯方块游戏是人机对战,缺乏交互性;而多人分组对战俄罗斯方块是多人分组对站。即最多六个玩家可以以自由人、澄队、蓝队、红队四种身份进行游戏。3) 游戏交互程度不同:传统俄罗斯方块主要是人机交互,形式比较单调,且交互较少;而多人分组对战俄罗斯方块游戏主要是人与人的交互,且交互形式多样
15、,比较灵活。例如玩家之间可以相互聊天等。4) 游戏的趣味性不同:传统俄罗斯方块游戏游戏方式较单一,趣味性较低;而多人分组对战俄罗斯方块中每个玩家都可以看见其他玩家的游戏进行情况,对手较多,且还有敌友之分,游戏中可以获得道具,并使用道具对敌方进行攻击,对盟友或自己进行援助,再加上游戏音效。使游戏玩家始终感觉到他不是一个人在游戏,而是身处一个团队中共同游戏,这样使游戏趣味性大大增加。5) 游戏结束方式不同:传统俄罗斯方块游戏没有游戏胜负之分,以方块到达游戏区域顶端为游戏结束,以游戏消层数量来计算游戏得分;而多人分组对战俄罗斯方块以方块到达游戏区域顶端作为本游戏玩家游戏结束的标志,但并不作为游戏胜负
16、的依据。游戏以最终存活下来的一个分组作为游戏的胜利方,其他玩家作为游戏失败方。且游戏得分不以消层数量为计算依据,而是以游戏名次来计算。并且游戏结束后会将游戏结果写入数据库,并重新显示玩家的游戏基础信息。总之,多人分组对战俄罗斯方块游戏和传统俄罗斯方块游戏相比有了很大的进步,提高了游戏方式的多样化,增加了游戏的趣味性,使游戏具有了更大的可玩性。1.3 本论文的主要内容与组织结构本文主要介绍了利用CSocket、GDI、多媒体技术对传统俄罗斯方块进行扩展,形成多人分组对战俄罗斯方块的具体原理和方法。全文主要分为五部分。第一章为绪论,简单介绍了俄罗斯方块的起源及发展历程,比较了传统俄罗斯方块与多人分
17、组对战俄罗斯方块的异同,明确了研究俄罗斯方块的意义和方向。指出了本文所要做的工作。第二章介绍了多人分组对战俄罗斯方块的设计原理,包括实现需要的技术介绍。在对设计原理进行分析的基础上,初步设计了多人分组对战俄罗斯方块游戏系统需求分析、功能定义、游戏框架等,并对系统开发中需要的技术和可能承担的风险进行预测。第三章是全文最主要的部分,主要介绍了多人分组对战俄罗斯方块游戏的实现过程。本章分为五个小节,第一小节是对整个系统功能的概述,其余四小节分别从四个模块对游戏的实现进行了分析介绍。全章以模块化分析的方式系统的阐明了该系统的组成及实现过程。第四章、第五章是在系统各功能设计已经完成的基础上,对游戏系统的
18、集成和测试。介绍了游戏的工作流程和游戏运行阶段的维护。最后,总结了本次毕业设计的主要内容和成果。全文从俄罗斯方块的历史介绍到多人分组对战俄罗斯方块的实现阐述,从游戏系统的功能设计到系统集成测试,由浅入深,循序渐进的阐明了整个系统的设计原理和实现过程。2 多人分组对战俄罗斯方块的分析与设计2.1 多人分组对战俄罗斯方块的设计原理 多人对战俄罗斯方块游戏的设计是单机版俄罗斯方块游戏设计的扩展,在原来的基础上加入网络互联,使原来的人机交互模式变成了人人交互模式。也就是说俄罗斯方块游戏本身的算法没有多大的变化,只是在其中融入了一些新的技术和新的游戏理念。如图形界面、多媒体、多人分组等设计思想。多人分组
19、对战俄罗斯方块游戏与单机版俄罗斯方块游戏有很大的区别,它们的模型如图2-1所示。 图2-1 单机版俄罗斯方块游戏模型图而多人分组对战俄罗斯方块游戏模型如图2-2所示。图2-2 多人分组对战俄罗斯方块游戏模型图从图2-1、2-2中可以看出两种游戏模型有较大的差异,多人对战俄罗斯方块更加多样化。单机版俄罗斯方块游戏注重人机交互,而对人对战俄罗斯方块游戏注重人与人的交互。多人分组对战俄罗斯方块游戏仍然设计为C/S模型【3】。服务器端主要功能是接受客户端的连接,接收并处理客户端发来的消息,将处理结果反馈给各客户端。客户端是游戏的主系统,玩家首先通过登录系统进入游戏界面,通过各种操作完成游戏开始前的准备
20、工作。当所有玩家都准备就绪后进入游戏,此时玩家操作键盘来完成游戏。游戏游玩的原理如图2-3所示。图2-3 多人分组对战俄罗斯方块游戏原理图游玩游戏需要经历以下步骤:(1) 在游戏服务器已经建立的情况下,运行客户端进入游戏登录直系统。输入服务器地址、用户帐号、用户密码,进入系统认证状态。登录模块从数据库中提取用户信息(ID、昵称、密码、等级、积分、登录标志等)进行验证【2】。验证通过则进入游戏主系统,否则返回初始登录界面。需要技术:ADO远程连接数据库、身份验证【1】。实现原理:在SQL2000上装上SP4的补丁,利用成熟的ADO数据库连接技术,封装ADO连接类,实现数据库的连接;封装CUser
21、类实现数据库中userinfo数据表的读写,根据玩家输入信息从数据库读取相应内容完成身份认证。(2) 通过身份认证后,进入游戏主系统,游戏根据玩家输入的服务器地址连接到服务器。连接成功则初始化游戏界面,进入游戏准备状态,否则返回到游戏登录初始界面或退出游戏。需要技术:CSocket套接字技术【9】。实现原理:套接字(socket)是一种网络编程接口,它是对通信端点的一种抽象,提供了一个发送和接收数据的机制。套接字技术最先应用于unix系统,后来移植到windows系统,有了Winsock API。经过对Winsock API的低层封装产生了CAsyncSocket类,经过高层次的封装产生了CS
22、ocket类。 CSocket进行通信的过程很简单。服务器首先启动,通过调用socket函数建立一个套接口,然后调用bind函数将该套接口和本地网络地址联系在一起,再调用listen函数使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用accept函数来接收连接。客户端在建立套接口之后就可调用connect函数来发送和接收数据。最后,待数据传送结束后,双方调用close函数关闭套接口【7】。它的原理如图2-4所示。图2-4 Winsock通信原理图CSocket通信技术类似,通过编写ServerSocket类,并重载了OnAccept()函数实现服务器套接口的监听。编写ClientS
23、ocket类,并重载OnReceive()实现客户端数据的接收【6】。(3) 服务器连接成功后,将显示游戏的初始界面。初始界面将根据玩家在数据库保存的游戏基础信息来显示。同时登录成功时,客户端将向服务器发送新玩家进入游戏的消息,而服务起得到这个消息后经过处理,再将处理结果发给其他的游戏玩家,这样其他的游戏玩家就能看见有游戏玩家进入游戏。此后,玩家可以操作游戏界面元素完成游戏开始前的准备。例如玩家可以选择分组、发送聊天、点击开始按钮准备就绪等。同样,这些事件都将以消息的方式发送给服务器,服务器经过处理后,将结果发往目标玩家,目标玩家就会了解到自己的游戏情况。需要技术:GDI绘图技术【5】、多缓冲
24、绘图技术、自定义消息。实现方法:GDI绘图是Windows系统下较成熟的窗口绘图技术。GDI处理来自Windows应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,有设备驱动程序来执行与硬件相关的函数,并产生最后的输出结果。GDI可以看作是一个应用程序与输出设备之间的中介,一方面。GDI向应用程序提供了一个设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道;多缓冲技术是以牺牲内存为代价来消除屏幕的闪烁。单缓冲只有一个内存DC,绘制完成后将该DC输出到屏幕。而多缓冲有多个内存DC和多幅位图【4】,首先将所有的绘制操作在内存中完成后,再将最终的位图绘制到屏幕。CSo
25、cket提供了Send()和Receive()函数用于数据的发送和接收。本游戏系统发送的消息较多,且消息各不相同。因此定义了消息格式,将各种消息的格式统一起来。例如:新玩家进入游戏的消息:“infotype: INTO&group: CYA&” 改变分组信息的消息:“infotype: GROU&group: RED&” 玩家退出游戏的消息:“infotype: QUIT&” 玩家聊天的消息:“infotype: INFO&data: 我进来了。”这样的消息还有很多。以上的技术主要通过封装CGame类来实现。(4) 当所有进入游戏的游戏玩家都准备就绪之后,就开始游戏。游戏中玩家通过左右键、向下
26、键来移动运动方块,向上键来变换方块,空格键使方块直接下落。并且根据玩家的操作不同播发不同的音乐。游戏中消层时可以获得该层的道具,并通过16的数字键来使用道具,以达到相互攻击和援助的目的。需要技术:GDI绘图技术、自定义消息、MCI多媒体技术【8】、道具技术。实现方法:MCI(Media Control Interface,媒体控制接口)向Windows程序提供了在高层次上控制媒体设备接口的能力。程序不必关心具体设备,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的
27、MCI命令)可以让设备完成各种功能,而不必关心设备内部实现。比如,对于play【11】,视盘机和CD机有不同的反应(一个是播放视频,一个播放音频),而对用户来说却只需要按同一按钮。通过调用MCI的函数来实现音乐的播放;道具技术主要是利用随机加入的方式,玩家每消掉一层方块时就会产生随机数量的道具方块。玩家使用道具时,游戏主要根据接收的消息,利用绘图技术实现道具的功能。这些都在CGame类【21】中实现。(5) 当只剩下一个分组每有结束游戏的时候,游戏结束,且该分组取得了游戏的胜利。游戏进入结束清理、还原工作【17】。如计算各玩家的游戏得分,并将得分写入数据库,同时更新玩家界面显示的游戏基础信息;
28、绘制游戏结束界面等。需要技术:半透明窗体、半透明绘图技术【12】、MCI技术、自定义消息【14】。实现方法:半透明绘制技术主要是将原图像素点颜色值与现图对应像素点颜色值进行逻辑异或运算形成新值来实现。(6) 一局游戏结束后,玩家还可以继续进行游戏,只要加入游戏的人数不少于两人。多人分组对战俄罗斯方块游戏设计原理较简单,但里面的各种事件的处理较烦琐,且涉及到的编程技术、技巧较多,稍不注意就可能出错。且作为游戏,系统运行的稳定性、异常处理、健壮性等也很重要。2.2 需求分析 俄罗斯方块是我们耳熟能详的一款休闲益智小游戏,老少皆宜。在各大网站和对战平台,以及掌机上都能见到它的身影。在它给广大爱好者带
29、来欢乐的同时,也创造了巨大的商业价值。开发出一款的好的俄罗斯方块游戏具有极大的意义。同时俄罗斯方块游戏产生较早,设计较简单,各方面的技术已经很成熟,要将现有的新技术加入到其中也是一件很容易的事情。从各方面来看开发一款别开生面的俄罗斯方块游戏都是一个不错的选择。然而,多人对战俄罗斯方块游戏是一种有别于传统俄罗斯方块的游戏。传统的俄罗斯方块游戏多在掌机或街机上,只能由一个人游玩。游戏缺少玩家的交互,不免游戏单调。而多人分组对战俄罗斯方块游戏在原来的基础上加入了网络互联,可以支持多人分组对战。增加了游戏玩家的交互,这是一种全新的设计理念。因此也使程序设计的难度大大增加。因此多人分组对战俄罗斯方块游戏
30、应具有下面的功能: 能够远程连接数据库为用户提供登录验证及玩家游戏信息保存的功能。 正确的俄罗斯方块游戏算法,使玩家能够畅快的游玩游戏。 实现网络互联,可以支持多人对战,且多个玩家可以分组对战。 玩家可以获得游戏道具,利用道具对对手进行攻击,对自己或盟友进行援助。 每个玩家都可以通过自己的游戏界面清楚的了解到其他玩家的游戏情况。 完善的记分系统,能通过分组情况、游戏名次等信息计算出每个玩家的游戏得分,并将得分情况写入数据库。 游戏玩家中可以相互聊天,以此来增加游戏的交互性和趣味性。 游戏要具有友好的人机界面,如动画光标、音效等。 游戏应具有较强的健壮性,确保游戏正常运行。多人分组对战俄罗斯方块
31、游戏的数据流程和遵循一般的C/S软件模型。游戏分为服务器和客户端两个软件。服务器主要用于接收从客户端发来的消息,并对消息进行判断,根据消息类型作出相应的处理,将处理结果发送给目标客户端。而客户端的功能主要是显示游戏界面,获取玩家的操作信息,根据玩家的操作作出相应的处理,并将结果以消息的形式发送给服务器,使自己的游戏情况让其他玩家了解。2.2.1 数据流图进入游戏时首先要进行登录认证,游戏以ADO数据库连接技术,远程连接到SQL2000数据库。由于本系统不是管理系统,只需要记录游戏玩家的游戏信息,所以数据库中只建立了一张userinfo数据表【11】。该表记录了玩家帐号、密码、昵称、游戏等级、游
32、戏积分、玩家性别等信息。该表主要用于玩家登录时从中提取帐号、密码等进行验证;当游戏结束时将游戏得分写入数据表中。 数据库顶层数据流如图2-5所示。图2-5 数据库顶层数据流图 一层数据流如图2-6所示。图2-6 数据一层数据流图 二层数据流如图2-7、图2-8所示。图2-7 登录子系统二层数据流图图2-8 游戏初始化模块二层数据流图图2-9 游戏处理模块二层数据流图2.2.2 数据字典数据流名:玩家信息别名:用户信息组成:用户帐号+用户密码+昵称+游戏等级+游戏积分+玩家性别+登录标志表2-1 玩家信息数据流名:登录信息别名:认证信息组成:用户ID+用户密码+登录标志表2-2 登录信息数据流名
33、:游戏基础信息别名:游戏记录信息组成:昵称+游戏级别+游戏积分+玩家性别+登录标志表2-3 游戏基础信息 数据流名:初始化信息别名:初始数据组成:昵称+游戏级别+游戏积分+分组+IP+PORT表2-4 游戏初始化信息数据流名:游戏处理信息别名:游戏中信息组成:开始标志+结束标志+游戏界面数组+IP+PORT+分组+表2-5 游戏处理信息数据流名:游戏结束信息别名:游戏结果组成:获得道具数+使用道具数+名次+方块数+失败盘数+胜利盘数+消层数+得分表2-6 游戏结束信息2.3 概要设计2.3.1 功能定义 多人对战俄罗斯方块游戏主要以网络通信为基础实现人与人的交互。它主要包含以下几大功能模块:
34、(1) 系统登录模块 该模块主要提供玩家进入游戏时的认证功能。首先建立SQL2000数据库,利用ADO远程连接技术实现与数据库的连接。读取数据库中的数据与用户输入数据进行比较,如果正确就进入游戏主系统,否则将返回到登录界面。 层次图如图2-9所示。图2-10 登录系统层次图 (2) 俄罗斯算法模块 该模块主要实现俄罗斯方块游戏的控制。其中它又包括运动方块的随机产生、方块下移、左移、右移、直接下落、变换、方块触界检测、消层等多个模块。运动方块随机产生主要是在一个运动方块到底后,通过Rand()方法产生下一个将要出现的方块形状【13】。下移、左移、右移、直接下落模块主要是将运动方块向下移动一格、向
35、左移动一格、向右移动一格、直接落到游戏池底。变换模块主要是将当前运动方块劣时针方向旋转90度【15】。方块触界检测模块主要完成运动方块是否运动到了游戏池的底部、左边界、右边界的判断。消层模块主要是当运动方块运动到了游戏池的底部后,检测游戏池中的每一行,发现有满行的层就消掉,并将该层上面的方块逐层下移一行【19】。 模块层次图如图2-10所示。图2-11 俄罗斯方块算法实现层次图 (3) 网络通信模块 网络通信模块主要完成服务器的建立、客户端的连接以及各玩家的相互通信功能。它又分为服务器和客户端两个模块。服务器完成网络俄罗斯方块服务器的建立,并等待客户端的连接。同时接收客户端发送过来的消息,并对
36、接收的消息进行处理,将处理结果发送给目标客户端。客户端模块完成对指定服务器的连接,连接成功后,将玩家的游戏操作信息发送给服务器,通过服务器将这些消息传达给其他的玩家【16】。 模块层次图如图2-11所示。图2-12 网络通信层次图 (4) 游戏界面绘制模块 该模块是游戏实现的核心模块,它本身并不实现一些游戏控制的功能。但是,它是其他模块功能的体现。其他模块都要受它的调用,从而形成一个游戏系统。该模块的子模块较多,例如初始界面绘制模块、游戏开始前的准备界面绘制模块、游戏准备就绪界面绘制模块、游戏开始界面绘制模块(其中又包括主游戏区域绘制、从游戏区域绘制等)、游戏结束绘制模块等。该主模块及其它的子
37、模块主要完成界面在不同事件响应下游戏界面的绘制和音乐的播放功能【18】。 模块层次图如图2-12所示。图2-13 界面绘制模块层次图 以上是游戏功能实现的主要模块,它们经过相互调用控制,协作分工最终完成了本游戏系统的设计。 本系统采用Visual C+6.0开发环境,C+为开发语言,MFC为开发库,SQL Server2000+SP4补丁为数据库进行开发【25】。2.3.2 游戏框架设计 本游戏系统采用C/S软件开发模型,主要包括登录认证、游戏算法、网络通信、界面绘制四大模块【21】。 系统层次图如图2-13所示。图2-14 多人分组对战俄罗斯方块游戏层次图 本系统采用C/S软件模型、单线程、
38、阻塞式网络通信的设计方式。服务器系统只有一个界面。系统调用网络通信模块中的服务器端模块完成服务器的建立,并等待连接。当连接成功客户端发送消息过来,系统调用消息处理模块处理消息得到结果。最后调用消息收发模块将消息发送出去。客户端系统主要由两个界面组成。一个登录界面和一个游戏主界面。登录界面调用登录认证模块,完成身份认证。认证成功后进入游戏主界面。主界面首先调用网络通信模块完成与服务器的连接,并向服务器发送相应的消息。连接成功后,系统调用界面绘制模块中的初始界面绘制模块完成初始界面的绘制。游戏开始前,系统调用游戏准备阶段界面绘制模块绘制界面。游戏开始后将在调用游戏算法模块控制游戏的同时调用游戏开始
39、界面绘制模块显示游戏进度。游戏结束后,系统调用游戏记分模块计算各玩家的最终得分,并调用游戏结束界面绘制模块完成游戏结果画面的绘制。2.3.3 技术、风险预测 俄罗斯方块游戏虽然很早就被发明了,经过长时间的发展各种技术相对较成熟。俄罗斯方块的游戏算法也基本定型。但是,本系统为多人对战俄罗斯方块游戏,和传统的俄罗斯方块有很大的不同,在原来的基础上加入了很多新的技术 新的实现方法。然而,要将一些新的技术融入到俄罗斯方块游戏中并非一件容易的事情。同时,由于本人知识水平有限,对很多技术没有掌握或不熟悉,这就使开发本游戏存在一定的风险,从而导致系统开发的失败或不完整。本系统设计为四大模块:系统登录模块、游
40、戏算法模块、网络通信模块、界面绘制模块。在四个模块中都用到了相应的开发技术,也具有一定的开发风险。(1) 系统登录模块: 技术:ADO远程连接SQL2000技术。 风险:实现登录信息的安全性较困难。(2) 游戏算法模块: 技术:数组等基础知识的操作。 风险:怎样设计合理的游戏逻辑、怎样设计各个子模块、各个子模块应该怎样协调工作使游戏正确、怎样进行触界检测等。(3) 网络通信模块: 技术:CSocket套接字技术、自定义消息技术 风险:怎样实现消息收发的正确性、怎样将接收的信息正确发送给逻辑目的玩家、怎样实现不同信息的发送、信息收发出现异常怎么办等。(4) 界面绘制模块: 技术:GDI绘图技术、
41、多缓冲绘图技术、半透明绘图技术、MCI多媒体技术、动画光标技术。 风险:怎样根据服务器发送的消息绘制界面、怎样将自己界面的绘制结果发送给其他玩家、怎样实现游戏动画特效、怎样实现多次绘图屏幕不闪烁等。3 详细设计3.1 系统组成及功能描述本游戏系统是在单机版俄罗斯方块游戏的基础上扩展而来的多人分组对战俄罗斯方块游戏。它改变了传统俄罗斯方块人机对战的游戏模式,实现了多人对打的模式。本系统的主要功能是:多人一起加入游戏进行对抗赛,至少两人,最多六人。玩家可以自由选择分组,可以分为自由人、澄色、蓝色、红色四种身份。开始对战后,各分组可以以获得的道具相互攻击,最后存活下来的一组游戏玩家成为最终胜利者,他
42、们将平分其他失败玩家扣除的分数。游戏中玩家之间可以相互聊天等以此来达到游戏娱乐的目的。本系统的组成:本系统为C/S软件模型,主要由登录模块、游戏算法模块、网络通信模块、界面绘制模块四部分组成。其中每个模块又包括各个小模块。3.2 系统登录模块设计系统登录模块包括一个登录界面用于接受玩家的输入信息。包括:服务器IP地址、用户帐号、用户密码。界面设计如图3-1所示。图3-1 登录模块界面设计图登录界面由一个对话框组成。玩家必须在用户帐号、用户密码和服务地址对应编辑框中输入完整的登录信息才能进行登录验证,否则将提示错误信息。进入登录系统前,必须运行SQL Server 2000数据库,且保证数据库中
43、的数据表正确无误。该模块需要的数据表如表3-1所示。accountpasswordbynamegradeintegralsexflag11追风学徒-90男022水云间砌墙工人196男033朝阳晨风砌墙工人440男044白杨建筑工人946女055云意学徒-246男066冰凝工程师3965女0表3-1 玩家信息表account :用户帐号;password :用户密码;byname :昵称;grade :游戏等级;integral :游戏积分;sex :用户性别;flag :该用户是否已经登录,为0表示还没有登录,为1表示已经登录。当玩家完成登录信息的输入后,点击登录按钮时,系统将调用ADOCon
44、n类远程连接到SQL Server2000数据库,此处采用ADO数据库连接技术实现。如果连接成功将调用CUsers类根据玩家输入的用户帐号去读取password 字段和flag字段。如果读取成功,说明该用户帐号存在,否则说明帐号有误。帐号正确时,首先检查flag字段是否为0。若flag为0,则说明该用户还没有登录游戏,接着将读取的password 与用户输入的用户密码进行比较,相等则登录成功,并将flag字段值更新为1写入数据库。不相等则登录失败,重新输入登录信息。若flag不为0,说明该用户已经登录,不能多次登录,将提示信息错误。返回登录初始状态,要求重新输入登录信息。若用户登录成功,系统将
45、读取byname 、grade 、integral 字段的信息并保存起来以便进入游戏主模块时绘制该玩家的游戏基础信息。到此,登录模块所做的工作就完成了。 该模块的详细流程图如图3-2所示。图3-2 登录模块详细流程图3.3 游戏算法实现模块算法实现模块主要描述俄罗斯方块游戏的实现原理。它包括运动方块的随机产生、方块下移、左移、右移、直接下落、变换、方块触界检测、消层等多个模块。方块随机产生主要由GenerateDiamond()函数实现。本系统游戏区域由一个21*12的矩阵diamondsA2112组成【22】。随机方块由一个4*4的矩阵cubeX44保存。在下一个方块产生前须将保存上一个方块
46、信息的cubeX44清零。然后,用Rand()函数随机产生一个0到8之间的数字,每一个数字都对应着一个不同形状的方块。同时随机产生方块的颜色(1到7,每个数字代表一种颜色)。随机的数字产生后,方块的形状也就固定了。就用随机产生的颜色值(1到7)填充cubeX44相应的元素。这样cubeX44就保存了下一个方块的形状、颜色等信息。接着将cubeX44矩阵随机旋转,并将旋转后的方块移动到cubeX44矩阵的最上方,这样下一个方块就产生了。最后初始化该方块将第一次出现在游戏区域中的位置为游戏区域矩阵的第一行中间。同时擦除下一个待出现方块提示区域原来的方块,并将该方块绘制上去。到此,下一个待出现的运动方块就产生了。算法实现流程图如图3-3所示。图3-3 方块随机产生接口流程图方块下移、左移、右移、直接下落主要由Move()函数来实现。左移和右移时,函数首先调用MeetBorder()函数进行边界检测,如果已经到了左边界或右边界,就退出。否则就将游戏区域当前显示的运动方块擦除,然后将该运动方块的位置向左或向右移动一格,最后在新的位置上重新画出运动方块,同时播放音效。下移时,函数首先调