为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

俄罗斯方块游戏论文

2017-09-01 50页 doc 702KB 30阅读

用户头像

is_037433

暂无简介

举报
俄罗斯方块游戏论文俄罗斯方块游戏论文 中 国 矿 业 大 学 本科生毕业设计 姓 名: 张建欧 学 号: 08042872 学 院: 计算机科学与技术 专 业: 计算机科学与技术 设计题目: 多人分组对战俄罗斯方块的研究与实现 专 题: 指导教师: 陆亚萍 职 称: 讲师 2008 年 6 月 徐州 中国矿业大学毕业设计任务书 学院 计算机科学与技术专业年级 计算机04级 学生姓名 张建欧 任务下达日期: 2008 年 1 月 15 日 毕业设计日期: 2008 年 2 月 25 日至 2008 年 6 月 20 日 毕业设计题...
俄罗斯方块游戏论文
俄罗斯方块游戏论文 中 国 矿 业 大 学 本科生毕业 姓 名: 张建欧 学 号: 08042872 学 院: 计算机科学与技术 专 业: 计算机科学与技术 设计题目: 多人分组对战俄罗斯方块的研究与实现 专 题: 指导教师: 陆亚萍 职 称: 讲师 2008 年 6 月 徐州 中国矿业大学毕业设计任务书 学院 计算机科学与技术专业年级 计算机04级 学生姓名 张建欧 任务下达日期: 2008 年 1 月 15 日 毕业设计日期: 2008 年 2 月 25 日至 2008 年 6 月 20 日 毕业设计题目: 多人分组对战俄罗斯方块的研究与实现 毕业设计专题题目: 毕业设计主要内容和要求: 1. 软件系统应提供一个方便实用的用户界面。 2. 实现多人网络对战。 3. 根据消层情况获得道具,并能够使用道具进行攻击。 4. 可以进行分组对战 5. 认真工作,依照任务进度按时完成任务 6. 论文要阐述系统开发所用到的理论,介绍整个软件开发的过程。 7. 进行系统需求分析,系统分析,系统设计。 8. 介绍开发过程中用到的关键技术以及遇到的困难和解决的方法。 9. 论文要求内容规范。 毕业设计要求采用的技术有:一种程序开发语言及相关开发工具,Scoket编程技术,软件工程知识。 院长签字: 指导教师签字: 中国矿业大学毕业设计指导教师评阅书 指导教师评语(?基础理论及基本技能的掌握;?独立解决实际问题的能力;?研究内容的理论依据和技术方法;?取得的主要成果及创新点;?工作态度及工作量;?总体评价及建议成绩;?存在问题;?是否同意答辩等): 成 绩: 指导教师签字: 年 月 日 中国矿业大学毕业设计评阅教师评阅书 评阅教师评语(?选题的意义;?基础理论及基本技能的掌握;?综合运用所学知识解决实际问题的能力;?工作量的大小;?取得的主要成果及创新点;?写作的规范程度;?总体评价及建议成绩;?存在问题;?是否同意答辩等): 成 绩: 评阅教师签字: 年 月 日 中国矿业大学毕业设计答辩及综合成绩 答 辩 情 况 回 答 问 题 有一有原提 出 问 题 正 基本 没有 般性则性确 正确 回答 错误 错误 答辩委员会评语及建议成绩: 答辩委员会主任签字: 年 月 日 学院领导小组综合评定成绩: 学院领导小组负责人: 年 月 日 摘 要 俄罗斯方块游戏是一种比较经典的游戏,研究它具有一定的价值和意义。但目前的俄罗斯方块多以单机版为主,游戏交互性弱、可玩性差,存在很大的弊端。利用网络通信技术、图形界面、多媒体等技术可以支持多人分组对战,提高游戏的可玩性,弥补传统俄罗斯方块的不足。 本文在分析研究传统俄罗斯方块的基础上,借助C/S软件模型,将CSocket套接字技术移植到俄罗斯方块中实现了多人分组对战模式。将传统的人机对战变成人与人对战,增强了游戏的交互性。利用GDI图形界面绘制技术和多媒体技术使游戏画面变得更加生动,并且动态显示各游戏玩家的游戏进展情况,改善了玩家的视觉、听觉感受。游戏中的各个玩家通过自定义消息来进行交互,他们可以组队进行游戏,可分为自由人、蓝队、橙队和红队。各玩家之间除了可以相互聊天外,还可以相互攻击和援助。 实验表明,经过扩展后的俄罗斯方块游戏画面更加活泼,游戏方式更加灵活,游戏的交互性更强,游戏可玩性大大提高。 关键词:多人分组对战俄罗斯方块;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 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, 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 improve 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 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 绪论 ................................................................ 1 1.1 俄罗斯方块游戏简介 ............................................ 1 1.2 多人分组对战俄罗斯方块与传统俄罗斯方块的异同 .................. 2 1.3 本论文的主要内容与组织结构 .................................... 3 2 多人分组对战俄罗斯方块的分析与设计 .................................. 4 2.1 多人分组对战俄罗斯方块的设计原理 .............................. 4 2.2 需求分析 ...................................................... 8 2.2.1 数据流图 ................................................. 9 2.2.2 数据字典 ................................................ 11 2.3 概要设计 ..................................................... 12 2.3.1 功能定义 ................................................ 12 2.3.2 游戏框架设计 ............................................ 14 2.3.3 技术、风险预测 .......................................... 15 3 详细设计 ........................................................... 17 3.1 系统组成及功能描述 ........................................... 17 3.2 系统登录模块设计 ............................................. 17 3.3 游戏算法实现模块 ............................................. 19 3.4 网络通信模块 ................................................. 23 3.5 游戏界面绘制模块 ............................................. 25 3.5.1 游戏初始界面 ............................................ 25 3.5.2 游戏准备界面 ............................................ 27 3.5.3 游戏开始界面 ............................................ 28 3.5.4 游戏结束界面 ............................................ 32 4 多人分组对战俄罗斯方块的实现 ....................................... 36 4.1 多人分组对战俄罗斯方块的实现原理 ............................. 36 4.2 多人分组对战俄罗斯方块核心功能实现 ........................... 37 5 系统测试与维护 ..................................................... 40 5.1 软件测试概述 ................................................. 40 5.2 多人分组对战俄罗斯方块测试 ................................... 40 5.2.1 登录阶段测试 ............................................ 40 5.2.2 游戏开始前的准备阶段测试 ................................ 41 5.2.3 游戏进行阶段测试 ........................................ 42 5.2.4 游戏结束阶段测试 ........................................ 42 结论 ................................................................. 43 参考文献 ............................................................. 44 英文原文 ............................................................. 45 中文译文 ............................................................. 50 致 谢 ............................................................... 53 中国矿业大学2008届本科生毕业设计 第 1 页 1 绪论 1.1 俄罗斯方块游戏简介 “俄罗斯方块”由莫斯科科学学院程序员Alexei Pajitnov所设计。1985年6月工作于莫斯科科学计算机中心的阿列克谢?帕基特诺夫在玩过一个拼图游戏之后受到启发,从而制作了一个以Electronica 60(一种计算机)为平台的俄罗斯方块的游戏。后来经瓦丁?格拉西莫夫(Vadim Gerasimov)移植到PC上,并且在莫斯科的电脑界传播。实际上,在游戏发明后的数年间,“俄罗斯方块”成了无数场专利官司和法律纠纷的目标,而许多公司也不遗余力地上阵厮杀,想要将游戏的创意据为己有。一个最初的版本是Spectrum Holobyte为IBM兼容机开发的游戏。1988年,“俄罗斯方块”在街机上也变得非常流行,这都要归功于Atari,因为他们发布了一个能让两名玩家同时游戏的版本。 还是在1988年,Tengen为任天堂娱乐系统发布了“俄罗斯方块”的一个优秀版本,但它很快便从货架上撤掉了,因为任天堂指控该公司侵犯版权。后来,任天堂把那个版本的“俄罗斯方块”换成了自己的版本,可是新版本却缺乏Tengen版的双人对打模式和出色的音乐。到了1989年,任天堂着手将一个移动版本的“俄罗斯方块”与当时崭新的GBA系统捆绑出售。GBA后来成为有史以来销售成绩最佳的游戏系统,对此,“俄罗斯方块”作出了不小的贡献。 这次产权争夺,几家欢喜,几家哀愁,几家公司倒闭,几家公司赚钱,其中的是是非非,一言难尽。 目前“俄罗斯方块”游戏已经有了很大的发展。国内从以前的掌上游戏移 植到了电脑、手机等平台。游戏的画面、功能都有了很大的提高。例如有名的QQ游戏中的“火拼俄罗斯方块”、边锋游戏大厅中的“俄罗斯方块”等。国外“俄罗斯方块游戏”也有很大发展。电脑上、手机上、PSP上、各种网站上都有它的身影。“俄罗斯方块”游戏从诞生到现在已经几十年了,它一直伴随着我们,一直在不断的成长。没有人认为它会消失,将来它也会不断的发展下去。随着高科技电子产品的不断涌现,“俄罗斯方块”将以他们为载体继续随时间洪流传播到世界的每一个角落。“俄罗斯方块”不仅会扩大传播介质,同时自身的功能的多样化、界面的美化、操作的简化、特效、魔法等技术都会在将来得到很大的发展。例如可以将游戏地图变成各种各样的形状而不再是单一的矩形地图;还可以改变游戏时运动方块的形状;也可以增加键盘鼠标事件并以特殊的功能去响应这样的事件(例如连续点击鼠标时可以使运动方块发射子弹等)。 “俄罗斯方块游戏”早在十几年前它就风靡全球,成为大家津津乐道的话题。从掌上游戏机到PC机,从单调的黑白画面到绚丽多彩的QQ游戏画面。“俄罗斯方块”始终跟随着人们一起发展、进步。许多游戏轰轰烈烈的诞生没多久就悄然而去,然而“俄罗斯方块”却长久不衰,仿佛它已经成为了我们的一部分,将永远伴随着 中国矿业大学2008届本科生毕业设计 第 2 页 我们去开辟未来,带给我们更多的欢笑。“俄罗斯方块”是一款集休闲、娱乐、益智于一体的游戏,适合各种人群。它的实现方法简单,但灵活多变,通过研究“俄罗斯方块”,在原来的技术上演变出更多、更新的版本也是一件很有意义的事情。同时,由于“俄罗斯方块”的广泛传播也带来了很大的商业价值。怎样开发出更新、更吸引人的“俄罗斯方块”游戏也成为许多游戏公司的首要任务。 1.2 多人分组对战俄罗斯方块与传统俄罗斯方块的异同 多人分组对战俄罗斯方块是传统单机版俄罗斯方块的扩展,因此,它们具有许多相似之处。同时,多人分组对战俄罗斯方块游戏的设计原理又有了很大的改变,游戏方式也不再相同,它们也有许多不同的地方。 (1) 相同点: 1) 游戏算法相同:多人分组对战俄罗斯方块与传统俄罗斯方块主要的相同点在游戏算法上。经过长时间的发展,俄罗斯方块游戏的算法已经发展成熟,因此本文并没有作多大的改变。游戏算法主要由运动方块的随机产生、方块下移、左移、右移、直接下落、变换、方块触界检测、消层等多个模块组成。它们的实现原理基本相同。 2) 游戏逻辑相同:游戏从运动方块的产生、消层到游戏结束,整过流程是相同的。 (2) 异同点: 1) 设计模式不同:传统俄罗斯方块游戏多是单机版,只能供一个人游玩;而多人分组对战俄罗斯方块是基于C/S的设计模式,支持网络互联,可以多人游玩。 2) 对战模式不同:传统俄罗斯方块游戏是人机对战,缺乏交互性;而多人分组对战俄罗斯方块是多人分组对站。即最多六个玩家可以以自由人、澄队、蓝队、红队四种身份进行游戏。 3) 游戏交互程度不同:传统俄罗斯方块主要是人机交互,形式比较单调,且交互较少;而多人分组对战俄罗斯方块游戏主要是人与人的交互,且交互形式多样,比较灵活。例如玩家之间可以相互聊天等。 4) 游戏的趣味性不同:传统俄罗斯方块游戏游戏方式较单一,趣味性较低;而多人分组对战俄罗斯方块中每个玩家都可以看见其他玩家的游戏进行情况,对手较多,且还有敌友之分,游戏中可以获得道具,并使用道具对敌方进行攻击,对盟友或自己进行援助,再加上游戏音效。使游戏玩家始终感觉到他不是一个人在游戏,而是身处一个团队中共同游戏,这样使游戏趣味性大大增加。 5) 游戏结束方式不同:传统俄罗斯方块游戏没有游戏胜负之分,以方块到达游戏区域顶端为游戏结束,以游戏消层数量来计算游戏得分;而多人分组对战俄罗斯方块以方块到达游戏区域顶端作为本游戏玩家游戏结束的标志,但并不作为游戏胜负的依据。游戏以最终存活下来的一个分组作为游戏的胜利方,其他玩家作为游戏失败方。且游戏得分不以消层数量为计算依据,而是以游戏名次来计算。并且游 中国矿业大学2008届本科生毕业设计 第 3 页 戏结束后会将游戏结果写入数据库,并重新显示玩家的游戏基础信息。 总之,多人分组对战俄罗斯方块游戏和传统俄罗斯方块游戏相比有了很大的进步,提高了游戏方式的多样化,增加了游戏的趣味性,使游戏具有了更大的可玩性。 1.3 本论文的主要内容与组织结构 本文主要介绍了利用CSocket、GDI、多媒体技术对传统俄罗斯方块进行扩展,形成多人分组对战俄罗斯方块的具体原理和方法。 全文主要分为五部分。第一章为绪论,简单介绍了俄罗斯方块的起源及发展历程,比较了传统俄罗斯方块与多人分组对战俄罗斯方块的异同,明确了研究俄罗斯方块的意义和方向。指出了本文所要做的工作。第二章介绍了多人分组对战俄罗斯方块的设计原理,包括实现需要的技术介绍。在对设计原理进行分析的基础上,初步设计了多人分组对战俄罗斯方块游戏系统需求分析、功能定义、游戏框架等,并对系统开发中需要的技术和可能承担的风险进行预测。第三章是全文最主要的部分,主要介绍了多人分组对战俄罗斯方块游戏的实现过程。本章分为五个小节,第一小节是对整个系统功能的概述,其余四小节分别从四个模块对游戏的实现进行了分析介绍。全章以模块化分析的方式系统的阐明了该系统的组成及实现过程。第四章、第五章是在系统各功能设计已经完成的基础上,对游戏系统的集成和测试。介绍了游戏的工作流程和游戏运行阶段的维护。最后,了本次毕业设计的主要内容和成果。 全文从俄罗斯方块的历史介绍到多人分组对战俄罗斯方块的实现阐述,从游戏系统的功能设计到系统集成测试,由浅入深,循序渐进的阐明了整个系统的设计原理和实现过程。 中国矿业大学2008届本科生毕业设计 第 4 页 2 多人分组对战俄罗斯方块的分析与设计 2.1 多人分组对战俄罗斯方块的设计原理 多人对战俄罗斯方块游戏的设计是单机版俄罗斯方块游戏设计的扩展,在原来的基础上加入网络互联,使原来的人机交互模式变成了人人交互模式。也就是说俄罗斯方块游戏本身的算法没有多大的变化,只是在其中融入了一些新的技术和新的游戏理念。如图形界面、多媒体、多人分组等设计思想。 多人分组对战俄罗斯方块游戏与单机版俄罗斯方块游戏有很大的区别,它们的模型如图2-1所示。 操作指令 处理反馈工作站 用户 图2-1 单机版俄罗斯方块游戏模型图 而多人分组对战俄罗斯方块游戏模型如图2-2所示。 游戏玩家 多人分组对战 俄罗斯方块游 工作站4工作站1戏服务器 消息 消息 消息消息 工作站5工作站2 消息 服务器消息 工作站6工作站3 图2-2 多人分组对战俄罗斯方块游戏模型图 从图2-1、2-2中可以看出两种游戏模型有较大的差异,多人对战俄罗斯方块更加多样化。单机版俄罗斯方块游戏注重人机交互,而对人对战俄罗斯方块游戏注 中国矿业大学2008届本科生毕业设计 第 5 页 重人与人的交互。 【3】多人分组对战俄罗斯方块游戏仍然设计为C/S模型。服务器端主要功能是接受客户端的连接,接收并处理客户端发来的消息,将处理结果反馈给各客户端。客户端是游戏的主系统,玩家首先通过登录系统进入游戏界面,通过各种操作完成游戏开始前的准备工作。当所有玩家都准备就绪后进入游戏,此时玩家操作键盘来完成游戏。 游戏游玩的原理如图2-3所示。 连接服务器失败验证失败连接到服务器 玩家1登录子系统游戏主系统User验证成功 Pass 结束消息登陆消息游戏信息ID PASS分组消息更新 开始消息 Userinfo表 登陆消息验证失败分组消息 开始消息游戏主系统玩家2登录子系统游戏服务器验证成功User结束消息Pass 游戏信息ID PASS更新 登陆消息 分组消息Userinfo表开始消息结束消息 验证失败 游戏信息游戏主系统玩家3登录子系统验证成功User Pass 更新ID PASS Userinfo表 图2-3 多人分组对战俄罗斯方块游戏原理图 游玩游戏需要经历以下步骤: (1) 在游戏服务器已经建立的情况下,运行客户端进入游戏登录直系统。输入服务器地址、用户帐号、用户密码,进入系统认证状态。登录模块从数据库中提取 【2】用户信息(ID、昵称、密码、等级、积分、登录标志等)进行验证。验证通过则进入游戏主系统,否则返回初始登录界面。 【1】需要技术:ADO远程连接数据库、身份验证。 中国矿业大学2008届本科生毕业设计 第 6 页 实现原理:在SQL2000上装上SP4的补丁,利用成熟的ADO数据库连接技术,封装ADO连接类,实现数据库的连接;封装CUser类实现数据库中userinfo数据表的读写,根据玩家输入信息从数据库读取相应内容完成身份认证。 (2) 通过身份认证后,进入游戏主系统,游戏根据玩家输入的服务器地址连接到服务器。连接成功则初始化游戏界面,进入游戏准备状态,否则返回到游戏登录初始界面或退出游戏。 【9】需要技术:CSocket套接字技术。 实现原理:套接字(socket)是一种网络编程接口,它是对通信端点的一种抽象,提供了一个发送和接收数据的机制。套接字技术最先应用于unix系统,后来移植到windows系统,有了Winsock API。经过对Winsock API的低层封装产生了CAsyncSocket类,经过高层次的封装产生了CSocket类。 CSocket进行通信的过程很简单。服务器首先启动,通过调用socket函数建立一个套接口,然后调用bind函数将该套接口和本地网络地址联系在一起,再调用listen函数使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用accept函数来接收连接。客户端在建立套接口之后就可调用connect函数来发送和接收数据。最后,待数据传 【7】送结束后,双方调用close函数关闭套接口。 它的原理如图2-4所示。 Socket()服务器 Bind() Listen() Accept()Socket()客户端 阻塞、等待客户连接Connect() 请求数据 Read()Write() 图2-4 Winsock通信原理图 处理服务请求 应答数据CSocket通信技术类似,通过编写ServerSocket类,并重载了OnAccept()函 Write()Read() Close()Close() 中国矿业大学2008届本科生毕业设计 第 7 页 数实现服务器套接口的监听。编写ClientSocket类,并重载OnReceive()实现客 【6】户端数据的接收。 (3) 服务器连接成功后,将显示游戏的初始界面。初始界面将根据玩家在数据库保存的游戏基础信息来显示。同时登录成功时,客户端将向服务器发送新玩家进入游戏的消息,而服务起得到这个消息后经过处理,再将处理结果发给其他的游戏玩家,这样其他的游戏玩家就能看见有游戏玩家进入游戏。此后,玩家可以操作游戏界面元素完成游戏开始前的准备。例如玩家可以选择分组、发送聊天、点击开始按钮准备就绪等。同样,这些事件都将以消息的方式发送给服务器,服务器经过处理后,将结果发往目标玩家,目标玩家就会了解到自己的游戏情况。 【5】需要技术:GDI绘图技术、多缓冲绘图技术、自定义消息。 实现方法:GDI绘图是Windows系统下较成熟的窗口绘图技术。GDI处理来自Windows应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,有设备驱动程序来执行与硬件相关的函数,并产生最后的输出结果。GDI可以看作是一个应用程序与输出设备之间的中介,一方面。GDI向应用程序提供了一个设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道;多缓冲技术是以牺牲内存为代价来消除屏幕的闪烁。单缓冲只有一个内存DC,绘制完成 【4】后将该DC输出到屏幕。而多缓冲有多个内存DC和多幅位图,首先将所有的绘制操作在内存中完成后,再将最终的位图绘制到屏幕。CSocket提供了Send()和Receive()函数用于数据的发送和接收。本游戏系统发送的消息较多,且消息各不相同。因此定义了消息格式,将各种消息的格式统一起来。 例如:新玩家进入游戏的消息:“infotype: INTO&group: CYA&” 改变分组信息的消息:“infotype: GROU&group: RED&” 玩家退出游戏的消息:“infotype: QUIT&” 玩家聊天的消息:“infotype: INFO&data: 我进来了。” 这样的消息还有很多。以上的技术主要通过封装CGame类来实现。 (4) 当所有进入游戏的游戏玩家都准备就绪之后,就开始游戏。游戏中玩家通过左右键、向下键来移动运动方块,向上键来变换方块,空格键使方块直接下落。并且根据玩家的操作不同播发不同的音乐。游戏中消层时可以获得该层的道具,并通过1——6的数字键来使用道具,以达到相互攻击和援助的目的。 【8】需要技术:GDI绘图技术、自定义消息、MCI多媒体技术、道具技术。 实现方法:MCI(Media Control Interface,媒体控制接口)向Windows程序提供了在高层次上控制媒体设备接口的能力。程序不必关心具体设备,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备内部实现。 【11】比如,对于play,视盘机和CD机有不同的反应(一个是播放视频,一个播放音 中国矿业大学2008届本科生毕业设计 第 8 页 频),而对用户来说却只需要按同一按钮。通过调用MCI的函数来实现音乐的播放;道具技术主要是利用随机加入的方式,玩家每消掉一层方块时就会产生随机数量的道具方块。玩家使用道具时,游戏主要根据接收的消息,利用绘图技术实现道具的 【21】功能。这些都在CGame类中实现。 (5) 当只剩下一个分组每有结束游戏的时候,游戏结束,且该分组取得了游戏 【17】的胜利。游戏进入结束清理、还原工作。如计算各玩家的游戏得分,并将得分写入数据库,同时更新玩家界面显示的游戏基础信息;绘制游戏结束界面等。 【12】【14】需要技术:半透明窗体、半透明绘图技术、MCI技术、自定义消息。 实现方法:半透明绘制技术主要是将原图像素点颜色值与现图对应像素点颜色值进行逻辑异或运算形成新值来实现。 (6) 一局游戏结束后,玩家还可以继续进行游戏,只要加入游戏的人数不少于两人。 多人分组对战俄罗斯方块游戏设计原理较简单,但里面的各种事件的处理较烦琐,且涉及到的编程技术、技巧较多,稍不注意就可能出错。且作为游戏,系统运行的稳定性、异常处理、健壮性等也很重要。 2.2 需求分析 俄罗斯方块是我们耳熟能详的一款休闲益智小游戏,老少皆宜。在各大网站和对战平台,以及掌机上都能见到它的身影。在它给广大爱好者带来欢乐的同时,也创造了巨大的商业价值。开发出一款的好的俄罗斯方块游戏具有极大的意义。同时俄罗斯方块游戏产生较早,设计较简单,各方面的技术已经很成熟,要将现有的新技术加入到其中也是一件很容易的事情。从各方面来看开发一款别开生面的俄罗斯方块游戏都是一个不错的选择。 然而,多人对战俄罗斯方块游戏是一种有别于传统俄罗斯方块的游戏。传统的俄罗斯方块游戏多在掌机或街机上,只能由一个人游玩。游戏缺少玩家的交互,不免游戏单调。而多人分组对战俄罗斯方块游戏在原来的基础上加入了网络互联,可以支持多人分组对战。增加了游戏玩家的交互,这是一种全新的设计理念。因此也使程序设计的难度大大增加。 因此多人分组对战俄罗斯方块游戏应具有下面的功能: ? 能够远程连接数据库为用户提供登录验证及玩家游戏信息保存的功能。 ? 正确的俄罗斯方块游戏算法,使玩家能够畅快的游玩游戏。 ? 实现网络互联,可以支持多人对战,且多个玩家可以分组对战。 ? 玩家可以获得游戏道具,利用道具对对手进行攻击,对自己或盟友进行援 助。 ? 每个玩家都可以通过自己的游戏界面清楚的了解到其他玩家的游戏情况。 ? 完善的记分系统,能通过分组情况、游戏名次等信息计算出每个玩家的游 戏得分,并将得分情况写入数据库。 中国矿业大学2008届本科生毕业设计 第 9 页 ? 游戏玩家中可以相互聊天,以此来增加游戏的交互性和趣味性。 ? 游戏要具有友好的人机界面,如动画光标、音效等。 ? 游戏应具有较强的健壮性,确保游戏正常运行。 多人分组对战俄罗斯方块游戏的数据流程和遵循一般的C/S软件模型。游戏分为服务器和客户端两个软件。服务器主要用于接收从客户端发来的消息,并对消息进行判断,根据消息类型作出相应的处理,将处理结果发送给目标客户端。而客户端的功能主要是显示游戏界面,获取玩家的操作信息,根据玩家的操作作出相应的处理,并将结果以消息的形式发送给服务器,使自己的游戏情况让其他玩家了解。 2.2.1 数据流图 进入游戏时首先要进行登录认证,游戏以ADO数据库连接技术,远程连接到SQL2000数据库。由于本系统不是管理系统,只需要记录游戏玩家的游戏信息,所 【11】以数据库中只建立了一张userinfo数据表。该表记录了玩家帐号、密码、昵称、游戏等级、游戏积分、玩家性别等信息。该表主要用于玩家登录时从中提取帐号、密码等进行验证;当游戏结束时将游戏得分写入数据表中。 数据库顶层数据流如图2-5所示。 消息登录 玩家游戏主系统服务器系统 图2-5 数据库顶层数据流图 一层数据流如图2-6所示。 中国矿业大学2008届本科生毕业设计 第 10 页 系统初始化 模块 2 等待处理 登录登录子系统 游1戏 开 始 游戏初始化登录验证 游戏处理模 块 3 消息 Userinfo 数据表 图2-6 数据一层数据流图 二层数据流如图2-7、图2-8所示。 登录用户信息身份验证游戏主界面 1.11.2 登 录 信 息等待处理 Userinfo 数据表 图2-7 登录子系统二层数据流图 初始界面绘界面绘制昵称、等级、 制积分 2.1 等待处理 Userinfo表 消息消息发送发送消息 2.2 图2-8 游戏初始化模块二层数据流图 中国矿业大学2008届本科生毕业设计 第 11 页 游戏准备消息游戏准备 处理3.1 消息游戏开始游戏进行游戏进行 处理3.2 Userinfo表 游戏结果 游戏结束 处理3.3 图2-9 游戏处理模块二层数据流图 2.2.2 数据字典 数据流名:玩家信息 别名:用户信息 组成:用户帐号+用户密码+昵称+游戏等级+游戏积分+玩家性别+登录标志 表2-1 玩家信息 数据流名:登录信息 别名:认证信息 组成:用户ID+用户密码+登录标志 表2-2 登录信息 数据流名:游戏基础信息 别名:游戏记录信息 组成:昵称+游戏级别+游戏积分+玩家性别+登录标志 表2-3 游戏基础信息 数据流名:初始化信息 别名:初始数据 组成:昵称+游戏级别+游戏积分+分组+IP+PORT 表2-4 游戏初始化信息 数据流名:游戏处理信息 别名:游戏中信息 组成:开始标志+结束标志+游戏界面数组+IP+PORT+分组+ 表2-5 游戏处理信息 中国矿业大学2008届本科生毕业设计 第 12 页 数据流名:游戏结束信息 别名:游戏结果 组成:获得道具数+使用道具数+名次+方块数+失败盘数+胜利盘数+消层数+ 得分 表2-6 游戏结束信息 2.3 概要设计 2.3.1 功能定义 多人对战俄罗斯方块游戏主要以网络通信为基础实现人与人的交互。它主要包含以下几大功能模块: (1) 系统登录模块 该模块主要提供玩家进入游戏时的认证功能。首先建立SQL2000数据库,利用ADO远程连接技术实现与数据库的连接。读取数据库中的数据与用户输入数据进行比较,如果正确就进入游戏主系统,否则将返回到登录界面。 层次图如图2-9所示。 登录系统 ADOCUse 远程rs身 登录份验 证 图2-10 登录系统层次图 (2) 俄罗斯算法模块 该模块主要实现俄罗斯方块游戏的控制。其中它又包括运动方块的随机产生、方块下移、左移、右移、直接下落、变换、方块触界检测、消层等多个模块。运动方块随机产生主要是在一个运动方块到底后,通过Rand()方法产生下一个将要出 【13】现的方块形状。下移、左移、右移、直接下落模块主要是将运动方块向下移动一格、向左移动一格、向右移动一格、直接落到游戏池底。变换模块主要是将当前 【15】运动方块劣时针方向旋转90度。方块触界检测模块主要完成运动方块是否运动到了游戏池的底部、左边界、右边界的判断。消层模块主要是当运动方块运动到了游戏池的底部后,检测游戏池中的每一行,发现有满行的层就消掉,并将该层上面 【19】的方块逐层下移一行。 模块层次图如图2-10所示。 中国矿业大学2008届本科生毕业设计 第 13 页 算法实现 方块方块方块方块直接方块触界游戏产生下落左移右移下落变换检测消层 图2-11 俄罗斯方块算法实现层次图 (3) 网络通信模块 网络通信模块主要完成服务器的建立、客户端的连接以及各玩家的相互通信功能。它又分为服务器和客户端两个模块。服务器完成网络俄罗斯方块服务器的建立,并等待客户端的连接。同时接收客户端发送过来的消息,并对接收的消息进行处理,将处理结果发送给目标客户端。客户端模块完成对指定服务器的连接,连接成功后,将玩家的游戏操作信息发送给服务器,通过服务器将这些消息传达给其他 【16】的玩家。 模块层次图如图2-11所示。 网络通信 服务器客户端 建立数据数据建立数据数据 服务处理收发连接处理收发 图2-12 网络通信层次图 (4) 游戏界面绘制模块 该模块是游戏实现的核心模块,它本身并不实现一些游戏控制的功能。但是,它是其他模块功能的体现。其他模块都要受它的调用,从而形成一个游戏系统。该模块的子模块较多,例如初始界面绘制模块、游戏开始前的准备界面绘制模块、游戏准备就绪界面绘制模块、游戏开始界面绘制模块(其中又包括主游戏区域绘制、 中国矿业大学2008届本科生毕业设计 第 14 页 从游戏区域绘制等)、游戏结束绘制模块等。该主模块及其它的子模块主要完成界 【18】面在不同事件响应下游戏界面的绘制和音乐的播放功能。 模块层次图如图2-12所示。 游戏界面绘制 主游从游初始准备就绪开始道具结束戏界戏界其他界面界面界面界面效果界面面绘面绘绘制绘制绘制绘制绘制绘制绘制制制 图2-13 界面绘制模块层次图 以上是游戏功能实现的主要模块,它们经过相互调用控制,协作分工最终完成了本游戏系统的设计。 本系统采用Visual C++6.0开发环境,C++为开发语言,MFC为开发库,SQL 【25】Server2000+SP4补丁为数据库进行开发。 2.3.2 游戏框架设计 本游戏系统采用C/S软件开发模型,主要包括登录认证、游戏算法、网络通信、 【21】界面绘制四大模块。 系统层次图如图2-13所示。 多人分组对战俄罗斯方块系统 登录验证算法实现网络通信界面绘制ADO用户初始开始结束方块方块服务客户远程身份消层界面界面界面产生移动器端连接验证绘制绘制绘制 图2-14 多人分组对战俄罗斯方块游戏层次图 中国矿业大学2008届本科生毕业设计 第 15 页 本系统采用C/S软件模型、单线程、阻塞式网络通信的设计方式。服务器系统只有一个界面。系统调用网络通信模块中的服务器端模块完成服务器的建立,并等待连接。当连接成功客户端发送消息过来,系统调用消息处理模块处理消息得到结果。最后调用消息收发模块将消息发送出去。客户端系统主要由两个界面组成。一个登录界面和一个游戏主界面。登录界面调用登录认证模块,完成身份认证。认证成功后进入游戏主界面。主界面首先调用网络通信模块完成与服务器的连接,并向服务器发送相应的消息。连接成功后,系统调用界面绘制模块中的初始界面绘制模块完成初始界面的绘制。游戏开始前,系统调用游戏准备阶段界面绘制模块绘制界面。游戏开始后将在调用游戏算法模块控制游戏的同时调用游戏开始界面绘制模块显示游戏进度。游戏结束后,系统调用游戏记分模块计算各玩家的最终得分,并调用游戏结束界面绘制模块完成游戏结果画面的绘制。 2.3.3 技术、风险预测 俄罗斯方块游戏虽然很早就被发明了,经过长时间的发展各种技术相对较成熟。俄罗斯方块的游戏算法也基本定型。但是,本系统为多人对战俄罗斯方块游戏,和传统的俄罗斯方块有很大的不同,在原来的基础上加入了很多新的技术 新的实现方法。然而,要将一些新的技术融入到俄罗斯方块游戏中并非一件容易的事情。同时,由于本人知识水平有限,对很多技术没有掌握或不熟悉,这就使开发本游戏存在一定的风险,从而导致系统开发的失败或不完整。 本系统设计为四大模块:系统登录模块、游戏算法模块、网络通信模块、界面绘制模块。在四个模块中都用到了相应的开发技术,也具有一定的开发风险。 (1) 系统登录模块: 技术:ADO远程连接SQL2000技术。 风险:实现登录信息的安全性较困难。 (2) 游戏算法模块: 技术:数组等基础知识的操作。 风险:怎样设计合理的游戏逻辑、怎样设计各个子模块、各个子模块 应该怎样协调工作使游戏正确、怎样进行触界检测等。 (3) 网络通信模块: 技术:CSocket套接字技术、自定义消息技术 风险:怎样实现消息收发的正确性、怎样将接收的信息正确发送给逻 辑目的玩家、怎样实现不同信息的发送、信息收发出现异常怎 么办等。 (4) 界面绘制模块: 技术:GDI绘图技术、多缓冲绘图技术、半透明绘图技术、MCI多媒 体技术、动画光标技术。 风险:怎样根据服务器发送的消息绘制界面、怎样将自己界面的绘制 中国矿业大学2008届本科生毕业设计 第 16 页 结果发送给其他玩家、怎样实现游戏动画特效、怎样实现多次 绘图屏幕不闪烁等。 中国矿业大学2008届本科生毕业设计 第 17 页 3 详细设计 3.1 系统组成及功能描述 本游戏系统是在单机版俄罗斯方块游戏的基础上扩展而来的多人分组对战俄罗斯方块游戏。它改变了传统俄罗斯方块人机对战的游戏模式,实现了多人对打的模式。 本系统的主要功能是:多人一起加入游戏进行对抗赛,至少两人,最多六人。玩家可以自由选择分组,可以分为自由人、澄色、蓝色、红色四种身份。开始对战后,各分组可以以获得的道具相互攻击,最后存活下来的一组游戏玩家成为最终胜利者,他们将平分其他失败玩家扣除的分数。游戏中玩家之间可以相互聊天等以此来达到游戏娱乐的目的。 本系统的组成:本系统为C/S软件模型,主要由登录模块、游戏算法模块、网络通信模块、界面绘制模块四部分组成。其中每个模块又包括各个小模块。 3.2 系统登录模块设计 系统登录模块包括一个登录界面用于接受玩家的输入信息。包括:服务器IP地址、用户帐号、用户密码。界面设计如图3-1所示。 图3-1 登录模块界面设计图 登录界面由一个对话框组成。玩家必须在用户帐号、用户密码和服务地址对应编辑框中输入完整的登录信息才能进行登录验证,否则将提示错误信息。进入登录系统前,必须运行SQL Server 2000数据库,且保证数据库中的数据表正确无误。 该模块需要的数据表如表3-1所示。 中国矿业大学2008届本科生毕业设计 第 18 页 account password byname grade integral sex flag 1 1 追风 学徒 -90 男 0 2 2 水云间 砌墙工人 196 男 0 3 3 朝阳晨风 砌墙工人 440 男 0 4 4 白杨 建筑工人 946 女 0 5 5 云意 学徒 -246 男 0 6 6 冰凝 工程师 3965 女 0 表3-1 玩家信息表 account :用户帐号;password :用户密码;byname :昵称;grade :游戏等级;integral :游戏积分;sex :用户性别;flag :该用户是否已经登录,为0表示还没有登录,为1表示已经登录。 当玩家完成登录信息的输入后,点击登录按钮时,系统将调用ADOConn类远程连接到SQL Server2000数据库,此处采用ADO数据库连接技术实现。如果连接成功将调用CUsers类根据玩家输入的用户帐号去读取password 字段和flag字段。如果读取成功,说明该用户帐号存在,否则说明帐号有误。帐号正确时,首先检查flag字段是否为0。若flag为0,则说明该用户还没有登录游戏,接着将读取的password 与用户输入的用户密码进行比较,相等则登录成功,并将flag字段值更新为1写入数据库。不相等则登录失败,重新输入登录信息。若flag不为0,说明该用户已经登录,不能多次登录,将提示信息错误。返回登录初始状态,要求重新输入登录信息。若用户登录成功,系统将读取byname 、grade 、integral 字段的信息并保存起来以便进入游戏主模块时绘制该玩家的游戏基础信息。到此,登录模块所做的工作就完成了。 该模块的详细流程图如图3-2所示。 中国矿业大学2008届本科生毕业设计 第 19 页 登录 否登录 否输入是否完整 是否 帐号是否正确否 是 flag是否为0 是 密码是否正确 是 保存游戏信息 结束 图3-2 登录模块详细流程图 3.3 游戏算法实现模块 算法实现模块主要描述俄罗斯方块游戏的实现原理。它包括运动方块的随机产生、方块下移、左移、右移、直接下落、变换、方块触界检测、消层等多个模块。 方块随机产生主要由GenerateDiamond()函数实现。本系统游戏区域由一个 【22】21*12的矩阵diamondsA[21][12]组成。随机方块由一个4*4的矩阵cubeX[4][4]保存。在下一个方块产生前须将保存上一个方块信息的cubeX[4][4]清零。然后,用Rand()函数随机产生一个0到8之间的数字,每一个数字都对应着一个不同形状的方块。同时随机产生方块的颜色(1到7,每个数字代表一种颜色)。随机的数字产生后,方块的形状也就固定了。就用随机产生的颜色值(1到7)填充cubeX[4][4]相应的元素。这样cubeX[4][4]就保存了下一个方块的形状、颜色等信息。接着将cubeX[4][4]矩阵随机旋转,并将旋转后的方块移动到cubeX[4][4]矩阵的最上方,这样下一个方块就产生了。最后初始化该方块将第一次出现在游戏 中国矿业大学2008届本科生毕业设计 第 20 页 区域中的位置为游戏区域矩阵的第一行中间。同时擦除下一个待出现方块提示区域原来的方块,并将该方块绘制上去。到此,下一个待出现的运动方块就产生了。 算法实现流程图如图3-3所示。 开始 随机产生方块形状、cubeX[4][4]清零颜色 用颜色填充cubeX[4][4]随机旋转cubeX[4][4] 旋转后方块移到初始化方块在游戏区 cubeX[4][4]上方域中的位置 擦出原来方块显示下 一方块 算法结束 图3-3 方块随机产生接口流程图 方块下移、左移、右移、直接下落主要由Move()函数来实现。左移和右移时,函数首先调用MeetBorder()函数进行边界检测,如果已经到了左边界或右边界,就退出。否则就将游戏区域当前显示的运动方块擦除,然后将该运动方块的位置向左或向右移动一格,最后在新的位置上重新画出运动方块,同时播放音效。下移时,函数首先调用MeetBorder()函数进行边界检测,检测是否已经到了下边界,如果到了下边界,则调用LineDelete()进行消层,调用PropPaint()记录获得的道具,调用PropExplainPaint()绘制获得的道具。如果没有到下边界,则退出。然后将游戏区域当前显示的运动方块擦除,将该运动方块的位置向下移动一格,最后在新的位置上重新画出运动方块,同时播放音效。直接下落时,函数首先擦除游戏区域当前显示的运动方块,然后进行循环进行边界检测,没有到达下边界就将运动方块的当前位置向下移动一格,直到到达下边界为止。最后在新的位置画出运动方块,进行消层、记录获得的道具、画出道具。 算法实现流程图如图3-4所示。 中国矿业大学2008届本科生毕业设计 第 21 页 左移是否到了左边界否左移一格新位置绘制方块 是结束 右移是否到了右边界否右移一格新位置绘制方块 是结束 否开始ENDFLAG是否为1 是否到了下边界否下移下移一格新位置绘制方块 是 消层、获得并结束是绘制道具 擦出原来的方旋转90度并绘制新变换方块是否能变换能块方块 原来位置绘制原来不能的方块 直接擦出原来的方是否到达下边界否方块向下移动一格下落块 消层、获得并绘制是道具 图3-4 Move函数实现流程图 方块变换的实现见上图,首先擦除游戏区域当前的运动方块,然后调用MeetBorder()进行变换,MeetBorder()调用Rotatable()判断能否变换。如果能变换,MeetBorder()中将当前运动方块逆时针旋转90度角形成新的方块。最后将新的方块绘制到游戏区域运动方块原来的位置上。如果不能变换,则Move()函数中将刚才擦除的运动方块重新绘制上去。 方块触界检测主要判断当前运动方块是否到达了左边界、右边界、下边界,同时兼有变换方块的功能。函数首先将保存运动方块信息的cubeX[4][4]矩阵的值移植到表示游戏区域的diamondsA[21][12]矩阵的相应位置。如果方块左移,则将cubeX[4][4]矩阵在diamondsA[21][12]中左移一格,然后检查cubeX[4][4]中所有值不为0的元素与diamondsA[21][12]中重合的元素的值是否为0,只要有一个不为0,则表示已经到了左边界或被其他方块挡住了,不能左移。若都为0,说明可 中国矿业大学2008届本科生毕业设计 第 22 页 以向左移。就将方块向左移一格,并在新的位置绘制出运动方块。向右移、向下移、 【27】变换的情况同理。 算法实现流程图如图3-5所示。 两个不为0cubeX[4][4]左移还原cubeX[4][4]到原左移的元素重合一格来的位置有 无 右移cubeX[4][4]右移两个不为0还原cubeX[4][4]到原 一格的元素重合来的位置有 开始在新位置绘制方块结束 无 cubeX[4][4]下移两个不为0还原cubeX[4][4]到原下移一格的元素重合来的位置有 无 变换还原cubeX[4][4]到原Rotatable()方块是否能变换来的位置不能 能 cubeX[4][4]旋转90度 图3-5 触界检测实现流程图 消层功能主要由LineDelete()函数实现。该函数实现的原理是:逐行遍历diamondsA[21][12]矩阵,发现某一行为满行就将该行消去。并逐一检查该行的每一个元素,若发现为道具方块,则将该道具加入道具数组中。然后将该行上面的行依次往下移一行,第一行元素的值变为全零。并将变化后的diamondsA[21][12]矩阵绘制到游戏区域。重复上面的操作,直到检查到diamondsA[21][12]的最后一行。完成后,将获得的道具绘制到道具区域,并将记录消层数量的变量的值增加相应的值。随机产生下一个方块,最后检查方块是否已经到了游戏区域顶部。若是则将 【26】EndFlag置1,表示游戏结束。 算法实现流程图如图3-6所示。 中国矿业大学2008届本科生毕业设计 第 23 页 开始 不全为0diamindsA的 每一行 全不为0 检测diamondsA的消层并记录绘 下一行制道具 否所有的行是 否都已检测 是 随机产生下一 个方块 否是 游戏是否结束 继续游戏ENDFLAG置1 结束 图3-6 消层实现流程图 到此,俄罗斯方块游戏的算法实现模块就完成了,游戏系统将通过对上面各个功能模块的调用实现游戏的运行。 3.4 网络通信模块 网络通信模块是各个独立游戏实体连接的纽带。它的主要作用是将每个游戏玩家连接起来,帮助他们传递信息,实现人与人之间的交互。从而提高游戏的趣味性、交互性、可玩性。具体的说网络通信模块主要包括服务器和客户端两个模块。服务器模块用于建立服务器为客户端提供服务,接收客户端的连接,处理并转发消息。客户端模块主要用于将客户端连接到服务器,并将玩家的操作情况以消息的形式发送给服务器处理,最后接收服务器发送来的消息并处理。 服务器建立:服务器端封装CSocket类分别生成了CClientSocket类和 中国矿业大学2008届本科生毕业设计 第 24 页 CServerSocket类,并在CServerSocket类中重载了OnAccept消息,在CClientSocket类中重载了OnReceive消息。服务器的建立遵循CSocket编程的一 【24】般步骤,首先创建监听套接字,调用Listen()监听客户端的连接。有客户端请求连接时,调用Accept()接受客户端的连接。连接成功后,就可以调用ReceiveData()接收已连接客户端发送来的消息。服务器界面设计图如图3-7所示。 图3-7 服务器界面图 客户端连接:客户端封装CSocket类生成了CMysocket类,并重载了OnReceive消息。首先在游戏主系统中创建客户端套接字,然后调用Connect()连接到指定的服务器,连接成功后,调用Send()将该玩家的游戏基础信息发送到服务器。 服务器端和客户端消息的收发:服务器建立成功,客户端连接到服务器后,客户端就可以向服务器发送消息。服务器重载ReceiveData()来接收客户端发送的消息,利用Send()来发送消息。客户端也重载了ReceiveData()来接收服务器发送来的消息。客户端发送来的数据较多,且数据样式各不相同。因此,本系统自定义消息格式,统一数据的发送方式。 消息格式为:infotype: 消息类型&<标志字段: >字段值&„„<标志字段: >字段值& <>标记的内容可有可无。 例如:当玩家发送聊天信息时,客户端向服务器发送的消息为:"infotype: INFO&data: "+str。Str表示聊天信息字符串。 服务器在ReceiveData()函数中接收到该消息后,语法分析该消息,读取infotype字段的值,若为“INFO”,则服务器就知道发送过来的是聊天信息。接着就提取聊天信息“str”,将其发送到每一个连接到服务器的客户端。这样每个客户端都会在ReceiveData()中接收到该消息,客户端再次对其进行语法分析,读取消息类型字段,若为“INFO”就将聊天信息“str”写入到Richedit控件。 除了聊天消息外还有很多消息,部分消息列举如下: 新玩家进入游戏的消息:“infotype: INTO&group: CYA&” 改变分组信息的消息:“infotype: GROU&group: RED&” 中国矿业大学2008届本科生毕业设计 第 25 页 玩家退出游戏的消息:“infotype: QUIT&” 使用道具的消息:"infotype: PROP&addr: "+m_address[p].Mid(0, m_address[p].GetLength()-5)+m_proptype 从游戏区域改变的消息:"infotype: DIAM&" 游戏一个玩家结束的消息:="infotype: MEND&"+strtemp 游戏胜利的消息:"infotype: WINN&"+m_fen+"&" 整个游戏结束的消息:"infotype: OVER&"+strtemp 各种消息的收发和处理情况基本相似,由于内容较多,这里就不再累述。 网络通信模块的流程图如图3-8所示。 结束服务器建立 连接服务器名次、得分计客户端监听算 发送游戏消息开始发送游戏操作消息收发、处游戏是否结束 消息理判断 消息转发 处理结果 其他消息界面绘制等数消息收发、处其他数据处理据处理理 图3-8 网络通信模块实现流程图 3.5 游戏界面绘制模块 游戏的最终目的是能给游戏玩家提供友好的视觉享受。因此,游戏界面的绘制尤为重要。前面各模块的功能主要集中在游戏逻辑的实现,那么游戏界面绘制模块就是将看不见的游戏逻辑让游戏玩家能够看见,从而帮助玩家正确的完成操作。该模块贯穿整个游戏系统,从进入游戏到最后退出游戏都将用到该模块来绘制游戏界面,显示游戏进行情况。游戏界面绘制模块实现较复杂,子模块较多,提供的函数接口也很烦琐。从游戏进行的阶段可以将该模块大致分为以下几个不同部分:游戏初始界面、游戏准备界面、游戏开始界面、游戏结束界面等。 3.5.1 游戏初始界面 该界面是登录成功后,玩家第一次看见的游戏界面,此时,游戏玩家没有作出任何操作。界面效果图如图3-9所示。 中国矿业大学2008届本科生毕业设计 第 26 页 图3-9 游戏初始界面设计图 从图中我们可以看到,效果图主要由左边标记的2—6五个从游戏区域、中间标记为1的主游戏区域、右边的聊天窗口及分组选择等按钮组成。 初始界面绘制原理是:当玩家登录成功后,系统显示游戏主界面。首先创建第一重绘图DC将一张游戏背景图绘制到界面上,并初始化参数设置、快速帮助、最小化、最大化、关闭、发言、A、B、C、自由人、开始、退出等按钮为INIT状态,练习按钮为INVALID状态,接着调用InitPaint()函数根据它们的状态绘制按钮图。聊天信息框中显示事先准备好的字符串。接着分别创建6个第二重绘图DC,一个用于主游戏区域的绘制。当玩家登录时便从数据库中提取出了该玩家的昵称、等级、积分等游戏基础信息,且每个刚登录的玩家的默认身份都为自由人。此时直接将绿色背景图绘制到主游戏区域的头部以表明该玩家的分组情况,同时也将基础信息绘制上去。主游戏区域中绘制暗色人物图作为背景,暗色表示还没有准备好游戏。这样中间的主游戏区域就绘制完成了。接着就向服务器发送一个"infotype: INTO&group: CYA&"+m_login.m_byname+"&"+m_login.m_grade+"&"+m_login.m_in tegral+"&"的消息。该消息表示一个新的玩家进入了游戏,后面字段注明了该玩家的分组情况和游戏基础信息。服务器接收到该消息后,会根据IP地址和PORT号将该消息转发给其他已经登录的玩家,同时将其他已经登录玩家的信息发送给该客户端。因此,在该客户端的ReceiveData()函数中将接收到多个”infotype: INTO&group: CYA&”m_login.m_byname+"&"+m_login.m_grade+"&"+m_login.m_in tegral+"&"的消息,每接收到一个这样的消息,系统就会在从游戏区域2—6的位 中国矿业大学2008届本科生毕业设计 第 27 页 置依次去找到一个没有被占用的位置,然后根据INTO消息中的信息绘制上相应的图片到第二重DC。当将其他所有玩家都绘制到从游戏区域后,就看到了游戏界面左边区域的效果。即其他玩家在自己界面上显示的位置也就确定了。最后将第二重 【23】DC的内容绘制到第一重DC,再将第一重DC的内容绘制到屏幕DC上。到此,游戏初始界面的绘制也就结束了。 流程图如图3-10所示。 创建第一重 开始DC,绘制游戏 背景登录成功 根据按钮状态InitPaint()绘制按钮 绘制主游戏区服务器域发往其他玩家发送 INFO消息 GetNullPositiReceiveData()其他玩家的INFO消息结束on()消息接收处 图3-10 初始界面绘制流程图 3.5.2 游戏准备界面 游戏准备界面主要指初始界面到游戏正式开始之间的游戏界面。准备界面与初始界面略有不同,因为在游戏准备阶段玩家可以进行一系列的操作。如改变分组、聊天、查看快速帮助、点击开始等操作。当玩家点击“开始”按钮,就标志准备阶段结束等待进入游戏开始界面。游戏准备界面效果图如图3-11所示。 中国矿业大学2008届本科生毕业设计 第 28 页 图3-11 游戏准备界面效果图 从图中可以看到界面变化不大,只是主游戏区域和某些从游戏区域的背景图变成了亮色人物图。变成亮色说明该游戏玩家已经准备就绪,等待其他没有准备就绪的玩家。只有所有游戏玩家都准备就绪的时候才能开始游戏。同时我们还可以看到某些从游戏玩家的分组该变了,它头部的背景图也做了相应的改变。右边的按钮大都变成了灰色。 游戏准备界面绘制原理:该界面的绘制原理和初始界面的绘制原理基本一样。按钮边灰是通过改变该按钮的状态为INVALID状态。主游戏区域背景变亮是鼠标点击“开始”按钮时擦出原来的背景图后绘制新的亮色背景图。并向服务器发送"infotype: STAR&"的消息,表示自己已经准备好了。服务器接收到该消息后将该消息转发给其他玩家,其他玩家接收到该消息后,根据IP和PORT找到该玩家在从游戏区域的位置,找到后擦出原来的暗色背景绘制成亮色背景。分组改变也是一样的,只是发送的消息为"infotype: GROU&group: BLU&"(其中BLU表示蓝色分组,可以替换为其他分组)而已。绘制的流程与初始化的基本一样,这里就不再累述。 3.5.3 游戏开始界面 游戏开始界面是指所有玩家都准备好了,游戏开始,到游戏结束之前的游戏界面。此时的游戏界面是最复杂的,游戏界面时刻都在变化,它动态的显示了每个玩家游戏进行的情况。游戏效果图如图3-12所示。 中国矿业大学2008届本科生毕业设计 第 29 页 图3-12 游戏刚开始,没有人结束的效果图 图3-13 有一个分组结束游戏的效果图 中国矿业大学2008届本科生毕业设计 第 30 页 图3-14 多个分组结束游戏的效果图 图3-15 道具功能效果图 从上面图形可以看到本阶段的界面显示变化较快,变化的方式较多,但是它的绘制原理并没有太大的变化,只是系统操作变得更多,收发的消息更多而已。 游戏开始界面绘制原理:本阶段游戏界面的绘制工作主要是根据游戏逻辑来 中国矿业大学2008届本科生毕业设计 第 31 页 的。右边区域的绘制和前面一样,没有变化。主游戏区域是在游戏开始后,游戏逻 辑开始,首先产生一个运动方块,并开始一个定时器。定时器每经过一定的时间就 让运动方块在游戏区域中下移一格。游戏逻辑中是将cubeX[4][4]矩阵在 diamondsA[21][12]中下移一格,同时根据diamondsA[21][12]中每个元素的值调 用绘图函数将该时刻的游戏区域情况绘制出来。同理,方块向左、向右运动也是改 变cubeX[4][4]在diamondsA[21][12]中的位置来实现的。当当前运动方块到达下 边界时,系统会向服务器发送一个"infotype: DIAM&"+ m_index的消息,该消息表 示本客户端在其他客户端的显示情况需要更新,m_index记录了本客户端游戏区域 矩阵各元素的值。服务器接收到该消息后,将其转发给其他客户端,其他客户端将 根据IP和PORT找到该客户端在自己从游戏区域的具体位置,并根据m_index的值 重新绘制该位置的从游戏画面。当主游戏区域消掉一层时,会将获得的道具方块加 入道具数组中,系统根据道具数组的值将道具绘制到道具区域,并在道具说明区域 绘制第一个道具的用途。同时在主游戏区域剩下的方块中随机产生一些道具方块, 即只有消层道具方块才有可能出现。若是对别人使用道具时,将向服务器发送一个 "infotype: PROP&addr: "+m_address[p].Mid(0, m_address[p].GetLength()-5)+ m_proptype消息,其中m_proptype标记了使用的是什么道具m_address[p].Mid(0, m_address[p].GetLength()-5)标记了是对谁使用道具。服务器接收到该消息将根 据m_address[p].Mid(0, m_address[p].GetLength()-5)确定把该消息转发给哪个 客户端。被使用了道具的客户端将根据m_proptype在自己的游戏区域绘制界面, 同时再次向服务器发送"infotype: DIAM&"+ m_index消息,因为此时自己的游戏界 面已经改变了,其他客户端的从游戏区域需要更新。若玩家对自己使用道具将只发 送"infotype: DIAM&"+ m_index消息。若自己游戏结束了,系统将向服务器发送 "infotype: MEND&"+strtemp消息,该消息表示该客户端游戏结束,并非整局游戏 结束。其中strtemp记录了该客户端的游戏信息,如消层数量、获得道具数量、使 用道具数量、胜利盘数、失败盘数、总共产生的方块数量等。服务器接收到该消息 后,会向其他客户端发送一个"infotype: WAIT&addr: "+ip+"&"+pot+"&"消息,表 示自己从游戏区域的一个玩家已经结束游戏,其他客户端接收到该消息后,将从游 戏区域的该玩家的方块都变为暗色。同时服务器会向自己返回一个"infotype: THRU&"消息,表示本客户端的游戏结束,主游戏区域方块变为暗色。接着服务器会 作出一系列判断,判断该客户端还有没有同组的玩家,若没有就计算它的名次和得 分,并向该客户端发送"infotype: FINI&"+m_group[row][j].score+"&"+m_group [row][j].countprop+"&"+m_group[row][j].countdiamond+"&"+m_group[row][j] .usedprop+"&"+m_group[row][j].countwin+"&"+m_group[row][j].countfail+"& "+m_group[row][j].number+"&"+m_fen+"&"消息,该客户端接收到该消息将绘制它 的结束界面。同时服务器向其他客户端发送"infotype: MEND&"+m_group[row][j]. score+"&"+m_group[row][j].countprop+"&"+m_group[row][j].countdiamond+"& 中国矿业大学2008届本科生毕业设计 第 32 页 "+m_group[row][j].usedprop+"&"+m_group[row][j].countwin+"&"+m_group[row ][j].countfail+"&"+m_group[row][j].number+"&"+m_fen+"&addr:"+m_group[ro w][j].ip+"&"+portstr+"&"消息,其他客户端将根据该消息在从游戏区域绘制相应的界面。若该客户端还有同组的玩家没有结束游戏,它将什么都不做,等待游戏的结束。 以上介绍了游戏开始界面绘制的大体思路,由于涉及内容较多,不再累述。 流程图如图3-16所示。 PROP消息、MDIA消 息、其他消息 玩家1STAR 消PROP调用息 玩家2 PROP调用PROP消开始息 玩家3服务器 MDIA消 息开始游戏MDIA调用 所有玩家都准玩家4备就绪 玩家5结束 MDIA调用 玩家6 图3-16 游戏开始界面绘制流程图 3.5.4 游戏结束界面 游戏结束界面是指本局游戏中所有游戏玩家都结束了游戏时的界面。该界面主要显示了各个玩家的游戏信息(消层数量、获得道具数量、使用道具数量、胜利盘数、失败盘数、总共产生的方块数量)、名次、游戏得分等。效果图如图3-17所示。 中国矿业大学2008届本科生毕业设计 第 33 页 图3-17 游戏结束界面效果图 本阶段的主要任务是计算游戏结果,恢复游戏初始状态等。 游戏结束界面绘制原理:加入游戏以共六个玩家,每当一个玩家结束游戏时,服务器都会接收到游戏结束的消息(前面已经讲过)。接着服务器分别发送WAIT消息和THRU消息(前面讲过),接着查看与自己同组的玩家是否都结束,若都结束,就向该组玩家发送MEND和FINI消息(前面讲过),并检查剩下的分组数量是否为1,若为1,则向该组发送游戏胜利的消息。若不为1,则什么都不做。接收到游戏胜利消息的玩家将向其他玩家发送"infotype: OVER&"+strtemp的消息,表示本局游戏结束。并恢复游戏的初始状态,即按钮等都变为INIT状态,其他记录游戏信息的变量初始化等。游戏得分的计算主要是根据游戏人数、游戏名次、游戏分组来的。计算方法较简单。分为五种情况,即有2、3、4、5、6个人加入游戏,分别对应五种计算方式。在每种情况下,游戏名次一定则它的得分就一定。例如现在有三个人加入游戏,那么第三名就是-12分,第二名就是-10分,第一名是其他两名所扣分之和,即为22分。其他情况类似。 流程图如图3-18所示。 中国矿业大学2008届本科生毕业设计 第 34 页 游戏得分计算结束 OVERWINN调用游戏胜利的分游戏胜利的分组组OVER消息OVER消息 WINN 主游戏区域结不是自由果界面绘制人该组剩下一个剩下一个MEND消息是自由人所有玩家WAIT消息分组FINI调用FINI分组结束该自由人该自由人从游戏区域暗色方 块绘制 开始主游戏区域结 果界面绘制 THRUTHRU调用一个玩家游戏结束从游戏区域胜利玩服务器其他玩家保存游戏信息家界面绘制WAITOVER MEND 绘制主游戏区 域暗色方块 从游戏区域结果界FINI调用面绘制该组所有玩家该组所有玩家 WAIT消息FINIMEND消息主游戏区域结 果界面绘制 OVERWINN调用游戏胜利的分游戏胜利的分组组 WINN 主游戏区域结结束果界面绘制 图3-18 游戏结束界面绘制流程图 总之,游戏界面的绘制都是以系统消息为主导的,收到什么消息就会绘制相应的游戏界面。 除此之外,本系统可以进行多次游戏,效果图如图3-19所示。 中国矿业大学2008届本科生毕业设计 第 35 页 图3-19 重新开始游戏效果图 中国矿业大学2008届本科生毕业设计 第 36 页 4 多人分组对战俄罗斯方块的实现 4.1 多人分组对战俄罗斯方块的实现原理 本系统按照C/S软件模型设计而成,包括服务器和客户端两部分软件。本系统的工作流程:系统首先需要建立服务器,然后运行客户端软件进入登录模块,登录成功就进入游戏主界面,游戏开始调用游戏算法模块和界面绘制模块还有网络通信模块协调工作控制游戏正常运行直到游戏结束。以下是系统各个模块类的说明: 客户端模块如表4-1所示。 ADOConn类 登录模块中用于远程连接SQL2000数据库 CUsers类 登录模块中用于从数据库中读取、存入游戏数据 CLogin类 登录主界面,用于验证玩家登录信息 CMysocket类 网络通信模块中的客户端模块,处理客户端信息的收发 CGame类 算法实现模块和界面绘制模块,用于处理游戏逻辑 CCGameDlg类 游戏主界面,用于控制游戏逻辑,使系统有条不紊的运行 表4-1 客户端模块表 服务器模块如表4-2所示。 CClientSocket类 网络通信模块中的客户端通信模块 CServerSocket类 网络通信模块中的服务器通信模块 CCGameServerDlg类 服务器主界面,用于服务器的建立 表4-2 服务器模块表 各个模块的调用关系如图4-1、4-2所示。 ADOConnCUsersCMysocketCGame 登录CloginCCGameDlg 图4-1 客户端各模块调用图 CClientSocketCServerSocket 服务器建立、消息收发CCGameServerDlg 图4-2 服务器各模块调用图 中国矿业大学2008届本科生毕业设计 第 37 页 4.2 多人分组对战俄罗斯方块核心功能实现 本游戏系统的核心功能主要包括俄罗斯方块游戏的算法、界面的绘制和网络消息的处理三个部分。 游戏逻辑核心算法实现了运动方块到达游戏池底部时是否有满行出现的检查,并消去已满的行,重画游戏区域界面,获得游戏道具,在剩余方块中加入道具,记录游戏玩家消层数量,同时随机产生下一个运动方块等功能。 游戏算法核心原码如下(由于核心代码较多,以下只列出部分代码)。 void CGame::LineDelete() else{GetDiamond(diamondsA[k][l]); {int m=0; bool flag=0; DrawNode(k,l,false);}}} for(int i=0;i=8&& diamondsA[i][h] case 3: <=16) m_score+=6; break; {for(int f=0; f<20; f++) case 4: {if(m_prop[f]==0) m_score+=10; break; {m_countprop++;default: m_prop[f]=diamondsA[i][h]; break;}}} } break;} for(int k=i;k>0;k--) { for(i=0;i<4;i++) for(int l=0;lBitBlt(rectTemp.left,rectTemp.toIsErase) p,rectTemp.Width(),rectTemp.Height(),m_pRun{CBitmap* pOldBitmap=m_pMemDC-> DC,0,0,SRCCOPY);}else SelectObject(m_pBitmap); {CBitmap* pOldInitBitmap= CBitmap* pOldBitmap2=m_pRunDC-> m_pInitRunDC->SelectObject(m_pInitRunBitSelectObject(m_pRunBitmap); map); CRect rectRun(0,0,192,336); rect.left=rectRun.left+j*dx+1; CRect rectTemp(389, 139, 581,475); rect.top=rectRun.top+i*dy+1; CRect rect; rect.right=rectRun.left+dx-1; CDC hDc; rect.bottom=rectRun.top+dy-1; hDc.CreateCompatibleDC(m_pRunDC); m_pRunDC->BitBlt(rect.left,rect.top,16,1hDc.SelectObject(&blueDiamond); 6,m_pInitRunDC,rect.left,rect.top,SRCCOPY);if(!IsErase) m_pMemDC->BitBlt(rectTemp.left,rectTe{ mp.top,dx,dy,m_pRunDC,0,0,SRCCOPY); rect.left=rectRun.left+j*dx+1; m_pInitRunDC->SelectObject(pOldInitBit rect.top=rectRun.top+i*dy+1; map);} rect.right=rect.left+dx-1; hDc.DeleteDC(); rect.bottom=rect.top+dy-1; blueDiamond.DeleteObject(); m_pRunDC->BitBlt(rect.left,rect.top,rect. m_pMemDC->SelectObject(pOldBitmap); Width(),rect.Height(),&hDc,0,0,SRCCOPY); m_pRunDC->SelectObject(pOldBitmap2); } 网络通信的核心算法是对客户端与服务器交互的各种消息进行处理。加入游戏 的各个玩家主要是以服务器为中介,通过收发消息进行交互的。客户端或服务器每 接收到一个消息,首先完整的取出该消息分析消息类型,根据消息类型作出不同的 处理。然后,根据消息类型来决定是否将处理结果发送给服务器或其他玩家。例如 “INTO”消息表示一个新玩家进入了游戏。接收到这样的消息后,程序将保存该玩 家的基础信息,如昵称、积分、IP地址、端口号、分组信息等。程序将根据这些 信息来绘制游戏界面,初始化游戏等。最后,还要将这些信息发送给其他玩家,以 便他们能了解该玩家的基本信息。这样的消息还有很多,它们的原理基本相同。下 面介绍了它们的部分实现。 中国矿业大学2008届本科生毕业设计 第 39 页 网络消息处理核心原码(由于核心代码较多,以下只列出部分代码)。 void CCGameDlg::ReceiveData() if(m_str=="INTO") //消息类型为:有新的游{char buffer[BUFFERSIZE]; 戏玩家进入 Int factdata= m_pSocket-> {CString num; Receive(buffer,BUFFERSIZE); //接收传来 char temp[2]; 的数据 CString m_addr; //保存新进入的游戏玩家的buffer[factdata] = '\0'; IP、PORT CString m_allstr=buffer; CString m_data; int m_infopos=0; m_data=m_strtemp.Mid(22,3); CString m_infostr=""; //保存分解出来的if(m_data=="RED"){ 一个Send()数据包 GetNullPosition(m_strtemp, num, temp, while(m_infopos!=-1) m_addr, 4, m_data);} {m_infopos=m_allstr.Find("infotype:", 8); else if(m_data=="BLU") if(m_infopos==-1) //只有一个Send() {GetNullPos ition(m_strtemp, num, temp, {m_infostr=m_allstr;} m_addr, 3, m_data);} else //有两个以上的Send() else if(m_data=="YEL") {m_infostr=m_allstr.Mid(0,m_infopos); {GetNullPosition(m_strtemp, num, temp, m_allstr=m_allstr.Mid(m_infopos);} m_addr, 2, m_data);} CString m_strtemp, m_str; else if(m_data=="CYA") m_strtemp=m_infostr; {GetNullPosition(m_strtemp, num, temp, m_str=m_strtemp.Mid(10,4); //读取消息类m_addr, 1, m_data);}} 型 ……} 以上列出的只是核心代码中的一个片段,由于篇幅有限,这里就不再一一列举。 中国矿业大学2008届本科生毕业设计 第 40 页 5 系统测试与维护 5.1 软件测试概述 软件测试是为了发现程序中的错误而执行程序的过程。它的目的是在软件投入生产性运行之前,尽可能多的发现软件中的错误。 软件测试对于软件生产来说是必须的。首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助我们发现当前所采用的软件过程的缺陷,以便对其进行改进。同时这种分析也能帮助我们设计出有针对性的检测,改善测试的有效性。 软件测试一般分为代码审查、单元测试、集成测试和系统测试几个阶段。代码会审是由一组人对程序进行逐条语句讲解、讨论和争议,对软件进行静态分析,从而找出隐藏的错误的过程。单元测试集中检查软件的各个功能模块的实际功能与定义该模块的功能说明是否相符,以及发现编码的错误。集成测试是将模块按照设计要求组装起来,在组装的同时进行测试,。主要目的是发现与接口有关的问题。系统测试的目的是向未来的用户表明系统能够像预定要求的那样工作经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。 软件测试的方法有很多,按是否需要执行的角度可以划分为静态测试和动态测试。静态测试主要包括代码会审、走查和办公桌检查。动态测试分为黑盒测试和白盒测试。 5.2 多人分组对战俄罗斯方块测试 本系统由于操作较复杂,游戏所处状态较多,限于篇幅,以下只利用等价分类法对系统进行了黑盒测试。系统主要划分为登录、游戏开始前的准备、游戏进行之中、游戏结束四个阶段进行测试。 5.2.1 登录阶段测试 登录测试阶段主要包括游戏玩家的身份验证和服务器的连接。登录界面要求三个输入,服务器地址用于连接到指定的服务器,若输入有误,系统将登录失败,用户帐号和用户密码,标志了合法的玩家身份。初始帐号和密码为1到6中的一个数,且帐号和秘密相等,他们中的任何一个不输或输入有误都将登录失败。本阶段主要从各个方面全面的测试登录模块是否能够正常工作。 中国矿业大学2008届本科生毕业设计 第 41 页 黑盒测试策略如表5-1所示。 等价分类法 有效等价类 无效等价类 输入服务器地址(1) 非服务器地址(8) 输入帐号和密码1-6之中的一个数: 帐号:1 密码:1(2) 帐号:2 密码:2(3) 只输入其中一个(9) 帐号:3 密码:3(4) 帐号不在1-6之中(10) 帐号、密码相等 帐号:4 密码:4(5) 密码不在1-6之中(11) 帐号:5 密码:5(6) 帐号:6 密码:6(7) 帐号、密码不等(8) 表5-1 黑盒测试策略表 测试用例如表5-2所示。 序号 测试内容 测 试 数 据 期望结果 Ip地址 帐号 密码 1 连接服务 127(0(0(1 连接成功 2 连接服务 127(0(0(2 连接失败 3 连接服务 128(9 连接失败 4 验证用户 1 1 验证成功 5 验证用户 2 2 验证成功 6 验证用户 3 3 验证成功 7 验证用户 4 4 验证成功 8 验证用户 5 5 验证成功 9 验证用户 6 6 验证成功 10 验证用户 1 2 验证失败 11 验证用户 4 3 验证失败 12 验证用户 无 2 验证失败 13 验证用户 3 无 验证失败 表5-2 测试用例表 经过测试,软件运行正常。 5.2.2 游戏开始前的准备阶段测试 黑盒测试策略、测试用例 本阶段主要是玩家对界面元素的操作。包括选择分组按钮改变分组、发送聊天 信息、登录玩家退出、游戏准备开始。该阶段的测试主要是查看当玩家点击按钮后, 中国矿业大学2008届本科生毕业设计 第 42 页 系统是否正常且按照规定的方式显示该按钮的功能。分组按钮点击后,该玩家的分组改变,界面的分组背景图也相应的改变。发送按钮点击后,将把编辑框中的内容显示在每个客户端的聊天信息提示框中。退出按钮点击后,该玩家将退出游戏,游戏界面自动关闭,其他玩家的从游戏区域也不再显示该玩家的信息。开始按钮点击后,该玩家的游戏区域背景变亮,分组按钮和开始按钮变为不可用。游戏测试内容较多,且测试方法与前面相同,这里就不再累述。 5.2.3 游戏进行阶段测试 黑盒测试策略、测试用例 本阶段主要是玩家对游戏的控制操作。包括左移、右移、下移、变换、直接下落、道具释放、聊天以及各种消息的处理等。该阶段主要是测试程序逻辑是否正确、游戏界面是否能够根据游戏逻辑的进行而正确的绘制、游戏道具使用是否有效、游戏操作是否正确等。游戏测试内容较多,且测试方法与前面相同,这里就不再累述。 5.2.4 游戏结束阶段测试 黑盒测试策略、测试用例 本阶段主要是结束界面的绘制和游戏的还原。包括判断游戏的结束、正确计算各玩家的名次和得分、正确的绘制游戏界面、重新开始游戏等。该阶段主要测试游戏是否能够正确的结束,并能正确的计算名次和游戏得分、游戏是否恢复为初始状态、游戏是否能够正确的重新开始、游戏结果是否正确的更新到数据库。游戏测试内容较多,且测试方法与前面相同,这里就不再累述。 中国矿业大学2008届本科生毕业设计 第 43 页 结论 俄罗斯方块游戏是发明最早的经典游戏之一,经过长时间的发展,游戏逐渐成熟,算法已经成型。本文不是一篇研究俄罗斯方块算法的文章。本文主要是在已经成熟的俄罗斯方块游戏算法的基础上做适当的扩展,将单机版扩展为网络版,将个人对战扩展为多人分组对战。以此来增加游戏的生动性、趣味性和可玩性。本文首先介绍了俄罗斯方块的历史渊源和多人分组对战俄罗斯方块的设计原理,阐明了研究俄罗斯方块的意义。接着详细介绍了多人分组对战俄罗斯方块游戏的设计过程。通过不断的测试,实现了以下功能: ? 玩家登录验证,连接数据库保存玩家个人游戏信息。 ? 正确的俄罗斯方块游戏算法,使玩家能够畅快的游玩游戏。 ? 实现网络互联,可以支持多人对战,且多个玩家可以分组对战。 ? 玩家可以获得游戏道具,利用道具对对手进行攻击,对自己或盟友进行援 助。 ? 每个玩家都可以通过自己的游戏界面清楚的了解到其他玩家的游戏情况。 ? 完善的记分系统,能通过分组情况、游戏名次等信息计算出每个玩家的游 戏得分,并将得分情况写入数据库。 ? 游戏玩家中可以相互聊天,以此来增加游戏的交互性和趣味性。 ? 游戏具有友好的人机界面,如动画光标、音效等。 ? 游戏具有较强的健壮性,确保游戏正常运行。 俄罗斯方块游戏可以扩展的地方很多,例如可以打破传统的矩形游戏地图, 将地图变为其他实物形状等。还可以在运行方块中进行研究,赋予不同下落方块相应的功能。由于技术水平有限,这里不再详述,不过怎样增加游戏的多样化、趣味性将是游戏发展的重点。 中国矿业大学2008届本科生毕业设计 第 44 页 参考文献 [1]宋坤、刘锐宁、李伟明等编著. Visual C++开发技术大全,人民邮电出版社,2007 [2]苏峰、黄金双、汤蕾等编著. Visual C++.NET编程实例,清华大学出版社,2004 [3]姜淑娟、刘迎春、荣新节等编著.软件工程与软件开发工具,清华大学出版社,2004 [4]王松编著. Visual C++ 6.0程序设计与开发指南,高等教育出版社,2001 [5]David Simon,周瑜萍等编著.Visual C++编程宝典,电子工业出版社,2005 [6]王金库,孙连云主编.Visual C++程序设计实训教程,科学出版社,2004 [7]东方人华主编.Visual C++ 范例入门与提高,清华大学出版社,2003 [8]杨永国主编.Visual C++ 6.0实用教程,清华大学出版社,2004 [9]郭晓朋,李存斌编著.Visual C++高级编程及其项目应用开发,中国水利水电出版社,2004 [10]陈坚、陈伟等.Visual C++ 网络高级编程,电子工业出版社,2001 [11]黄维通编著. Visual C++面向对象与可视化程序设计,清华大学出版社,2004 [12]黄明、梁旭、周绍斌等编著. Visual C++信息系统设计与开发实例,机械工业出版社,2005 [13]张世永主编(网络安全原理与应用,科学出版社,2003 [14]冯登国主编(网络安全原理与技术,科学出版社,2003 [15]殷肖川等编著(网络编程与开发技术,西安交通大学出版社,2003 [16]贾斌等编著(网络编程技巧与实例,人民邮电出版社,2001 [17]琼斯,奥朗德(Windows网络编程技术,机械工业出版,2000 [18]求是科技编著. Visual C++ 6.0程序设计与开发技术大全,人民邮电出版社,2004 [19]马晓兰(网页内容分级过滤系统研究,华东师范大学硕士学位论文,2004 [20]萧秋水、文娟 (Windows网络编程之VC篇,清华大学出版社,2001 [21]谷保山编著(Visual C++ 6.0编程与实例 ,科学出版社,1999 [22]王罡、林立志编著(基于Windows的TCP,IP编程,清华大学出版社,2002 [23]Jeffrey Richter著(Windows核心编程,机械工业出版社,2000 [24]《Windows API函数参考手册》编写组编著(Windows API函数参考手册,人民邮电出版 社,2002 [25]龚志翔等编著. Visual C++编程实例与技巧集粹,北京希望电子出版社,2004 [26]朱磊、周彬编著. Windows下的C/C++高级编程,人民邮电出版社,2002 [27]赛奎春、张雨、阮伟良、李贺等编著. Visual C++工程应用与项目实践,机械工业出版社, 2005 中国矿业大学2008届本科生毕业设计 第 45 页 英文原文 Extending the Limits of CVE' s to Support Collaborative e-Learning Scenarios Abstract This paper proposes the use of collaborative virtual environments in order toprov ide collaborative e-learning services in an efficient and cost effective way. On the one hand, we present the transformation of well known collaborative learning techniques t o collaborative elearning scenarios. The collaborative learning techniques, which are discussed in this paper, are brainstorming/roundtable, think pair share, jigsaw, quick writes/microthemes, and structured academic controversies. On the other hand, we des cribe the necessary modifications of the collaborative virtual environments in order to support collaborative e-learning services and scenarios. Main proposals are the integra tion of more media to offer more awareness, the support of more people with different roles, and the definition of an integrated system architecture. 1、Introduction It is well known that collaborative e-learning is a definite need nowadays. Much research and technological work has been done in order to support and/or to offer elea rning services. In the technological field there are technologies, commercial tools, and /or research prototypes to support e-learning [1], [3]. Theoretical frameworks and lear ning techniques have been presented for collaborative learning. Furthermore it is more difficult for both learners to learn and teachers to teach from distance. Thus, in order to provide collaborative elearning services to the users in an effective way, it is neede d to incorporate available or new technologies with learning theories and the user nee ds. Starting from the user requirements, we have realised that the main users' need is to be more aware about the actions of the rest of users in the collaborative e-learning groups. Systems,which satisfy this need and integrate the necessary tools for realising the collaborative e-learning techniques, have many possibilities to succeed. Furtherm ore, an effective elearning system, which provides valuable learning experience, shoul d combine pedagogy, learning content and community features, in an effective way [5]. If the focus is no longer content but rather the management of the learning experi ence, then the pedagogical process becomes the most important factor in the design an d support of that experience. For this reason, this paper proposes to transfer well-kno wn collaborative learning techniques into collaborative e-learning scenarios. In additi on the emphasis of most e-learning platforms today has been on the accumulation, or ganization, and delivery of content. Thus, new solutions should be investigated for the contribution on the context of e-learning. The advantages of collaborative virtual e nvironments, against the other technologies such as videoconferencing, regarding both 中国矿业大学2008届本科生毕业设计 第 46 页 the awareness and the collaborative features, motivate us to concentrate our research o n providing collaborative e-learning services to the users using CVE's. However, CVE 's cannot be used as they are in order to provide collaborative e-learning services. Ne w network architectures should be investigated; new modules should be integrated in the CVE's in order to provide specific functionality and to exploit the main characteris tics of CVE's as much as possible. In this case,the design of the 3D worlds is affected from the collaborative e-learning scenarios. For these reasons, this paper proposes so me extensions in the CVE's in order to upgrade them into Educational Virtual Environ ments (EVE's) [2]. We initially describe the processes in order to realise these techni ques using CVE's and more media. Afterwards, we present our proposed extensions of the CVEs, and a system architecture. 2、Realizing collaborative learning techniques into a collaborative e-learning environment The first step before the design of a system is to investigate well-known collabo rative learning scenarios in order to transform them into e-learning techniques. The m ain collaborative learning techniques are: brainstorming/roundtable, think pair share, j igsaw, quickwrites/microthemes, and structured academic controversies. These techni ques are not presented in this paper due to space limitations. More information is avai lable at [7]. Here we present the processes in order to realise these techniques using C VE's. Before describing these processes we are describing specific functionality, whic h is derived from the collaborative learning techniques. First of all, we propose the tutors and learners to use a 3D virtual classroom and supportive break-out session rooms for dividing the users in sub-groups (if the scena rio requires that). The learners and tutors who participate in a virtual classroom are re presented by avatars. The user's avatars should be able to make various types of gestu res: expressing opinions (e.g. agree, disagree), expressing feelings, mimics (e.g. happy, sad), as well as showing actions (e.g. move learning content, pick learning content). T he virtual classroom and the break-out session rooms should be supported by audio co llaboration, application sharing and text chat functionality. Also they should have a sp ecific place where the users can upload their content and show it to the other participa nts. This space can be a 3D presentation table. It should also provide (according to eac h scenario) more functionality such as shared whiteboard, or simulation of a brainstor ming board. Both, the above functionality and the access rights on it, depend on the e- learning scenario. The transformation and the basic processes are described in the foll owing paragraphs. Brainstorming/Roundtable: The tutor asks a question using audio collaboration 中国矿业大学2008届本科生毕业设计 第 47 页 functionality (or alternatively text chat). Furthermore the tutor can write the question and upload it to the presentation table as a document. The learners can answer to the q uestions using the audio collaboration functionality (or alternatively text chat). Further more the learners can use the brainstorming tool in order to write and attach on it their ideas. Think pair share: The tutor poses a question (or a problem) as a file on the pres entation table or using audio/text chat and introduces the collaboration technique.Aft er a short pause for reflecting, the learners turn into the whisper-mode with their neigh bour and discuss in private the problem. Preferable way for whispering would be a pr ivate audio-channel within the classroom (audiowhisper function). Alternatively a pri vate text chat can be used. After the assigned discussion time, the tutor gathers the att ention of the learners by "ringing the bell" (sending a text message to all of the participants). At that time, the learners exit from the whispering mode, and then return to a group for discussion. Jigsaw: The whole Jigsaw procedure can be handled within the virtual classroom, which has also 4 breakout session rooms. The tutor first introduces in short the proced ure and then asks for the number of learners (good numbers are any multiple of four). For 16 learners the tutor suggests study groups of 4 and 4 sections. Then the tutor nee ds to formulate the sections: s/he divides the users in the sections and attaches the nec essary learning content to each section. The tutor then assigns to the learners their role (group number and section number). Spontaneously, the learners will receive an auto mated message, which room they need to go to: there they find the section description on the presentation table and any study material the tutor might have assigned to the f ocus group. After that, the learners of each section participate all together in a section- shared place. The places can be virtual small classes (breakout session rooms) with au dio collaboration, application, sharing, and text-chat functionality. The tutor can also assign documents to this section. These documents will be available to the learners in the breakout room. The learners can take material from the presentation table to their other session, by saving the material into his/her local PC and upload it again. Quickwrites/Microthemes: The whole procedure for this technique can be hand led within a 3D classroom, which also has 4 breakout session rooms. In the virtual cla ssroom and the breakout out session rooms the users can use audio collaboration, app lication sharing and text chat functionality. The tutor presents to the learners the micr othemes in the presentation table space. In addition s/he uploads and presents suppor ting documents on the shared space. The learners can open a notepad or other text ed itor for personal use; focus on the proposed documents and after completion of the as 中国矿业大学2008届本科生毕业设计 第 48 页 signment, can easily save their result on their local PC and upload it into the shared s pace. The tutor assigns to each group which themes should be discussed (2-4 persons). The learners move to the breakout-rooms pull their documents onto the presentation area, in those rooms, and discuss the outcomes. One person writes a protocol of the g roup discussion and saves the result back to his/her local PC and then upload it into t he classrooms' shared space. The tutor can visit the groups in the breakout out session rooms and discuss the status of the work. Furthermore, the tutor has the capability to call the learners group to return back to the main classroom area, using text chat or by visiting the breakout session rooms. In the main classroom area the groups present the ir results using application sharing and audio chat. Structured academic controversies: The whole procedure for this technique ca n be handled within a 3D classroom, which has similarly 4 breakout session rooms in case of 16 learners. In the virtual classroom as well as the breakout out session rooms the users can use audio collaboration, application sharing and text chat functionality. The tutor selects and uploads a topic in two different viewpoints on the presentatio n table. The learners form groups of 4 and divide into two pairs. Each pair goes to a br eakout session room and the tutor uploads supportive documentation. Furthermore, th e learners can upload their own content, which they think could be is supportive in for mulating their assigned advocacy position. The pairs of learners have the possibility to visit breakout session rooms of the other pairs with the same positions. Each learner pair can prepare a short presentation using application sharing and collaboration on do cuments, and can upload this presentation in the original groups of four learners. Each pair presents its position to the other pair in their group using application sharing and audio chat. In this case there is no debate allowed and the tutor restricts the audio, app lication sharing, text chat, and gestures functionality from the opposite pair. fterwards, the other pair presents its position, and then the learners debate and provide more evid ence. Finally, learners drop their advocacy role and generate a consensus report adder ssing the original question posed using application sharing, collaboration on ocuments, and audio chat. 3、Proposed extension of CVE's As we can realise from the above descriptions CVE' s should be extended in order to support e-learning services. Several extensions should be made in order to support avirtual e-learning community. These extensions are described in the following parag raphs. 3.1、Many people with different roles An e-learning system should be able to be used concurrently by many users. These 中国矿业大学2008届本科生毕业设计 第 49 页 users should create an e-learning community. The users should have different roles an d rights in this community. This implies the two following issues. The first one is that many concurrent users should be supported by the system. Actually the maximum nu mber of participants in a course is 17 (16 learners and one tutor). This number of part icipants is derived from the e-learning scenarios described earlier. Furthermore the sys tem should support many concurrent courses. This increases the number of concurrent users. 中国矿业大学2008届本科生毕业设计 第 50 页 中文译文 扩展现代远程教育的限制来支持协同式电子学习情景 摘 要 本文主要介绍了协同虚拟环境的使用,目的是提供一种高效的、低成本的协同电子学习服务。在一方面,我们从目前人所共知的学习方式转型到协作网络学习环境。本文讨论的协作学习技术是大家平等讨论的,共享的,交互的,结构化的和学术争论式的学习方式。在另一方面,我们描述了该协同虚拟环境必要的修改,以支持协同电子服务和学习环境。协作学习的主要思想是整合更多的媒体提供更多的认识,支持更多的人与不同的角色,并定义一个综合的系统架构。 1、 绪论 众所周知,如今协同电子学习已被广泛地应用。为了支持电子学习,人们做了大量的研究和科研。在科技领域里,技术、资金、研究原型被用来支持电子学习。对于协同学习,已经提出相应的理论框架和技术。此外,无论是远程学习还是远程教育都是非常困难的。因此,为了给用户以一种高效的方式提供协同学习服务,就很有必要协调用户需求和那些学习理论方面可用的或者新的技术。从用户需求出发,我们意识到用户最主要的需求是能更关注其它协同电子学习小组成员的行动。能满足这种需求并且融合了实现协同电子学习所必需的工具的系统是很有可能实现的。此外,一个高效的能提供有价值的学习经验的电子学习系统,应该由教学、学习内容、论坛有机结合而成。假如重点不是内容而是学习经验的管理,那么教学过程就变成设计时最重要的因素。基于这点,这篇文章将把众所周知的 协同学习技术转化为协同电子学习。此外现在许多电子学习平台中心都在内容的积累和传输上。因此,必须研究出新的解决方案用在电子学习上。协同虚拟环境的优点,与其它的技术(例如视频会议)不同,让我们把研究重点放在给远程教育的用户提供协同电子学习服务上。然而,远程教育不能提供协同电子学习服务。必须研究新的网络架构;远程教育必须融合新的模块用来提供特定的功能和尽可能多地使用远程教育的主要特性。于是,3D世界出现在协同电子学习场景中。基于这些理由,这篇文章会提到一些远程教育方面的扩展来让其升级教育虚拟环境。首先,我们会介绍怎样用远程教育和其它媒体实现这些技术。然后,我们会介绍我们所提到的远程教育的扩展和系统架构。 2、把协同学习转变为协同电子学习环境 设计系统前第一步是研究那些知名的协同学习从而把它们转化为电子学习技术。主要的协同学习技术有:大家平等讨论,想法共享,相互交流, quickwrites/microthemes,和结构学术争议。由于篇幅有限,这些技术本文不会提到。在可以查阅更多的信息。这里我们介绍怎样用远程教育来实现这些技术。在介 中国矿业大学2008届本科生毕业设计 第 51 页 绍这个过程之前,我们会介绍一些特定的功能。这些功能由协同学习技术衍生而来。 首先,我们建议导师和学生使用3D虚拟教室和支持划分为不同小组的自由会议室(如果情况需要那样做)。在虚拟教室中的导师和学生可以具体的提出自己意见。用户的身体可以做出许多不同的手势:表达意见(如同意,不同意),表达感情,模仿(如快乐,悲伤),以及显示行动(例如移动的学习内容,选择学习内容)。虚拟课堂和自由会议室被支持通过音频协作,应用共享和文字聊天功能。他们也应该有一个明确的空间,用户可以上传自己的内容并显示给其他的学习者。这个空间可以是一个三维演示表。它还应提供(根据每个章节)更多的功能,如共享留言板,或模拟智力测试。上述功能和存取权都依赖于电子学习的情景。转变和基本处理过程在以下几段进行描述。 大家平等讨论:导师使用音频协作功能提出一个问题(或者选择文字聊天)。此外,导师也可以写出这个问题,并作为一个文件将其上传到演示表。学习者可使用音频协作功能(或者选择文字聊天)以回答这个问题。此外,更多的学习者可以使用智力工具去写出和表达他们的观点。 观点共享:导师提出问题(或疑问)作为一个文件上传到演示表中,或使用语音或文字聊天来介绍协作技术。经过短暂停顿后,学习者转入耳语模式与他们的邻居,并私下讨论这个问题。最好的方式是在虚拟教室内为窃窃私语者提供一个私人的音频通道( 低声语音功能)。也可以使用私人文字聊天功能。在规定的讨论时间结束后,导师通过敲响铃声(发送一个文字讯息到所有的学生)重新聚集学生的注意力。在这时,学习者结束个人讨论,开始分组进行讨论。 相互交流:整个交流的过程在分为四个自主讨论室的虚拟课堂中都是可以控制的。导师首先经过一个简短的介绍,然后向学习者提问(最好参加学习的人数是四的倍数)。例如16个学生,导师建议分为四组,四个部分进行学习。然后导师需要阐明每一个学习部分:他/她划分每个用户到相应的分组,并为该组分配学习内容。然后,导师为每个学生指定了他的角色(小组数量和节数量数)。自然的,学习者会收到一个消息,他们应该去的地方:在那里,他们找到一节关于提交表描述和一些导师有可能分配给该组的具体的学习内容。之后,每个小组的学习者都加入到一个共享学习空间。这个地方可能是一个具有语音协作、程序、共享和文字聊天功能的自主讨论室。导师也可以把文档下发到这个小组。这些文档,该讨论室的学习者都是可以获得的。学习者可以发送这些资料从演示表到他们自己的小组通过保存这些资料到他们的个人电脑,然后再次上传。 Quickwrites/Microthemes: 整个交流的过程在分为四个自主讨论室的虚拟课堂中都是可以控制的。在虚拟教室和自主讨论室中,用户可以使用音频协作,应用共享和文字聊天功能。导师在演示表空间中向初学者介绍了microthemes。此外,他或她上传文件到共享空间。学习者可以打开一个记事本或其他供个人使用文本编辑器;重点是提议的文件和完成的任务可以轻易地保存结果到他们的本地PC上,然 中国矿业大学2008届本科生毕业设计 第 52 页 后将它们上传到共享空间。导师指派给每个小组( 2-4人)将要讨论的主题。学习者到自主讨论室拖动他们的文档到该房间的图示区域上,并讨论结果。一个人写出本组讨论的草案并把结果保存到他或她的本地PC上。然后,将它上传到本教室的共同空间。导师可以访问自主讨论室的每个小组以了解工作的进展情况。此外,导师也有能力通过文字聊天和访问自主讨论室要求小组的学习者回到主课堂区域。在主课堂区域中,所有的小组都可以通过程序共享和文字聊天发送他们的结果。 结构学术争议:这个技术的整个过程在类似分为四个自主讨论室和16个学习者的虚拟课堂中都是可以控制的。和自主讨论室一样,在虚拟教室中用户也可以使用音频协作,应用共享和文字聊天功能。 导师精选并上传了一个带有两种不同观点的论题到演示表中。每个小组的学习者被化为两队。每队都将到自主讨论室,导师上传相关文档。此外,学习者也可以将他们认为对自己讨论有帮助的文档上传上去。每队的学习者有可能去访问相同位置的其他队。每个学习小队将使用共享程序和协作文档准备一个简短的介绍,并将其上传到他们原来由四个人组成的小组中。每一队利用程序共享和语音聊天向该组的其他队介绍他们的立场。在这种情况下,双方不允许辩论,并且导师限制音频,应用共享,文字聊天,和手势的功能。之后,其他的学习小队介绍他们的观点,然后学习者开始辩论,并提供更多的证据。最后,结束讨论,并产生一个共识,使用应用共享、辅助文档和音频聊天处理原提出的问题。 3、扩展远程教育的建议 通过上面的叙述我们可以明白,远程教育应该被扩展来支持网络学习服务。为了支持虚拟网络学习学校,需要注意几个客观存在的事实。以下几段对这些客观事实进行了叙述。 3.1、不同角色的人们 一个电子学习系统应该能够同时被许多用户使用。这些用户者应建立一个电子学习社区。在这个社区中,这些用户应该扮演不同的角色,并具有不同的权限。这意味着下列两个问题。其一是,系统能够支持许多用户同时学习。其实在虚拟课堂中最大的参加人数是17(16个学习者和一个导师)。这个参与人数是来自前面对电子学习环境的描述。此外,系统应支持同时开设许多课程。这增加了同时进行协作学习的人数。 中国矿业大学2008届本科生毕业设计 第 53 页 致 谢 能够顺利的完成本次毕业设计,首先要感谢陆亚萍老师的悉心指导。陆老师认真的工作作风、严谨的治学态度、诲人不倦的崇高师德使我在各方面都有很大的获益。 时光荏苒,转眼大学四年就过去了。四年大学生活给予我太多。无论是和蔼可亲的老师,还是团结友爱的同学。他们时刻影响着我,给我带来欢乐和知识。在此,感谢大学期间所有传授我知识的老师、陪伴我成长的同学,您们带给我的美好回忆将是我一生的财富~ 感谢中国矿业大学,感谢计算机科学与技术学院,感谢您们陪伴我走完了人生的重要里程。 感谢评阅老师对我的论文的悉心评阅,答辩委员会老师对我的毕业设计的关注与批评,院领导小组对我的综合评定~ 最后,感谢一如既往、默默支持我的父母及亲戚、朋友~感谢您们用爱和包容给于我力量,让我走到了今天。
/
本文档为【俄罗斯方块游戏论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索