俄罗斯方块分组对抗游戏的实现  毕业论文_第1页
俄罗斯方块分组对抗游戏的实现  毕业论文_第2页
俄罗斯方块分组对抗游戏的实现  毕业论文_第3页
俄罗斯方块分组对抗游戏的实现  毕业论文_第4页
俄罗斯方块分组对抗游戏的实现  毕业论文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

XXXX大学本科生毕业设计姓名学号学院计算机科学与技术学院专业计算机科学与技术设计题目俄罗斯方块分组对抗游戏的实现专题指导教师职称2013年5月XXXX大学毕业设计任务书学院计算机科学与技术学院专业年级学生姓名任务下达日期2013年1月4日毕业设计日期2013年1月4日至2013年6月2日毕业设计题目俄罗斯方块分组对抗游戏的实现毕业设计专题题目毕业设计主要内容和要求1用户可参与的俄罗斯方块游戏;具体包括随机给出不同的形状下落填充给定的区域,若填满一条便消掉,计分。若在游戏中各形状填满了给定区域,则游戏结束。2在此基础上实现多人网络对战,并且可以进行分组对战,3可以分3个组。要求根据消层情况获得道具,并能够使用道具进行攻击。院长签字指导教师签字摘要俄罗斯方块(TETRIS,俄文)是一款从1988年起至今都风靡全球的电视游戏机和掌上游戏机游戏,是落下型益智游戏的始祖。它是由俄罗斯人阿列克谢帕基特诺夫发明的一款能锻炼人的反应能力、动手能力等能力的教育软件,故得此名。俄罗斯方块的基本游戏规则是移动、旋转和摆放游戏自动随机输出的各种方块,当某一行或几行(最多四行)完全充满时,即消失。由于具有数学性、动态性,知名度,而且上手简单、老少皆宜,从而家喻户晓,风靡全世界。目前,人们在基于俄罗斯方块在基于原有的设计原理上,发展出了许多新的不同类型的游戏,大大增加了这种游戏的趣味性,界面观赏性,可玩性。游戏分为单机版、对战版、分组对战等多种游戏方式。本软件在了解俄罗斯方块设计原理的基础之上,借助C/S软件模型,用CSOCKET套接字技术实现了一个网络版的能进行分组对抗的俄罗斯方块游戏。该游戏软件不仅实现了基本的俄罗斯方块功能,并能支持俄罗斯方块服务器的建立、客户端接入等功能,在此基础之上,添加了个性音效、分组对抗功能和道具使用等机制,从而改进了传统的简单俄罗斯方块游戏,大大提高了游戏的趣味性、可玩性,使游戏画面也更加具有观赏性,人机交互性更强。本次开发所使用的开发工具为VC60,使用的编程语言是C。本文主要阐述了本俄罗斯方块软件的开发方法以及实现的功能。关键词俄罗斯方块;CSOCKET技术;局域网;VCABSTRACTTHETETRISTETRIS,THERUSSIANISASWEPTTHEWORLDFROM1988TOTHEPRESENTTVGAMECONSOLESANDHANDHELDGAMECONSOLESGAME,ISTHEANCESTOROFFALLINGPUZZLEGAMEITISEXERCISEBYTHERUSSIANSALEXEIPAJITNOVINVENTIONAREACTIONABILITY,PRACTICALABILITYANDABILITYOFEDUCATIONALSOFTWARE,ITWASTHISNAMETHEBASICRULESOFTHEGAMEOFTETRISISMOVED,ROTATEDANDPLACEDTHEGAMEAUTOMATICALLYOUTPUTRANDOMBOXDISAPPEARSWHENALINEORLINESUPTOFOURLINESCOMPLETELYFILLEDMATHEMATICS,DYNAMIC,WELLKNOWN,ANDEASYTOGETSTARTED,ALLAGES,SOWELLKNOWN,POPULARAROUNDTHEWORLDPEOPLEBASEDTETRISBASEDONTHEORIGINALDESIGNPRINCIPLE,THEDEVELOPMENTOFMANYNEWANDDIFFERENTTYPESOFGAMES,GREATLYINCREASINGTHEGAMEINTERESTING,INTERFACESPECTATORPLAYABILITYWECANPLAYTHISGAMEALONEORAGAINSTEACHOTHER,ANDALSOWECANDEVIDETHEPLAYERSINTOGROUPSTHESOFTWAREBASEDONTHEUNDERSTANDINGOFTHEDESIGNPRINCIPLESOFTETRIS,WITHTHEC/SSOFTWAREMODEL,ANETWORKVERSIONCANBEGROUPEDAGAINSTTHETETRISGAMESOCKETTECHNIQUETHEGAMESOFTWARENOTONLYTOACHIEVETHEBASICTETRIS,ANDCANSUPPORTTHEESTABLISHMENTOFTHETETRISSERVER,CLIENTACCESS,ONTHISBASIS,ADDAPERSONALIZEDSOUND,SCRIMMAGINGFEATURESANDTHEUSEOFPROPSANDOTHERMECHANISMSINORDERTOIMPROVESIMPLETETRISGAME,GREATLYINCREASINGTHEGAMEINTERESTING,EASYTOPLAY,THEGAMESCREENMOREORNAMENTAL,HUMANCOMPUTERINTERACTIONMORETHEDEVELOPMENTUSEDEVELOPMENTTOOLSFORTHEVC60,THEPROGRAMMINGLANGUAGEUSEDISCTHISARTICLEFOCUSESONTHETETRISSOFTWAREDEVELOPMENTANDFUNCTIONKEYWORDSTETRISCSOCKETLANVC1绪论11俄罗斯方块的背景随着电子信息技术的高速发展,电子类的游戏逐渐成为人们日常娱乐生活中不可缺失的一部分。俄罗斯方块游戏是其中一种风靡全球的电脑类游戏机和掌上型游戏机的游戏,它老少皆宜,而且是可以锻炼人的反应能力、动手能力、全局统筹能力,并具有数学性、灵活性和良好的可玩性的一款教育软件。随着科技水平的发展,游戏开发技术的提升,由俄罗斯方块衍生出来的各种经典游戏比比皆是。12课题研究和发展状况俄罗斯方块最早是在1985年6月由工作于莫斯科科学计算机中心的阿列克谢帕基特诺夫在玩过一个拼图游戏之后受到启发而制作的一个以ELECTRONICA60为平台的游戏,后来,随着此游戏的热销,其版权问题也一直纠缠不清,官司不断。也导致几家公司倒闭,一些公司获益,并以此赚了很多钱,其中,最受关注的是1989年的TENGEN和任天堂的官司,最终TENGEN的权利被否决,而任天堂的请求或许。因此,TENGEN版的俄罗斯方块不得不停止销售,撤下货架。而任天堂NES版TETRIS同年在美国发售。全美销量大约300万。与此同时,和GB版TETRIS捆绑销售的GAMEBOY席卷美国,美利坚大地上刮起一阵方块旋风。俄罗斯方块游戏通过在CONTAINER的顶端产生随机的一个形状的方块,玩家通过选择左移、右移、旋转、下落等集中操作来使其尽可能整齐的叠在一起,当某一行全部充满时,即消失。由这个游戏过程可以看到,这款游戏不仅能锻炼人的反应能力、动手能力,更能锻炼我们统筹安排、随机应变的能力,而决不是像很多孩子的家长所有的,能使孩子沉迷其中,降低智力、耽误身心发展。13本软件与传统的俄罗斯方块的异同俄罗斯方块本身具有一个区别于其他很多游戏的特点,就是只能在电子平台上运行,而不能用实物来进行游戏,传统的俄罗斯方块游戏也有很多版本,他支持在手机等工具上的单机模式,也支持在小游戏机上和电脑上的单机双人对战模式,本游戏相比传统的俄罗斯方块有很多相同之处,但也做了很多改进相同点本游戏包含了单机俄罗斯方块的主题框架,采用2维数组来表示每个方块,均由七种方块组成,分别是L型,反L型,Z型,反Z型,田字型,1型,T型。基本算法是相同的,即随机产生一个方块,根据玩家按键来响应键盘事件和鼠标事件,分别进行右移、左移、旋转和下落等操作。对每一行是否充满的判断和消去也跟单机版是相似的思路。游戏逻辑相同,游戏从第一个方块下落开始到游戏结束,整个流程是相同的。不同点本游戏在原来的简单模式的基础上做了很多改进1在双人对战的基础上进行了扩充,采用C/S模式,最多可容纳六个人一起游戏,并且可随意选择自己的分组,共有ABC和自由人四组供选择,进入房间后可以选择准备游戏,当有超过两个队伍且所有人都准备好时,游戏开始。2游戏在原来单纯拼方块的基础上,增加了很多道具,玩家在消去多行的时候可随机获得道具,主要有消去几行、增加几行、全部消去、加速下落、减速下落等功能,玩家可根据需求对自己、队友或者对手使用该道具。3游戏在交互方式上比之前有很大改进,之前的单机游戏或者双人对战模式没有办法进行交流,现在的游戏中添加了聊天界面,可以进行沟通,并且在使用相应道具或者准备开始游戏的时候都有音乐,能让参与游戏的玩家更放松心情,体会游戏的乐趣。2俄罗斯方块游戏的分析与设计21俄罗斯方块的设计原理和技术需求本软件是基于单机版俄罗斯方块的程序设计原理上的扩展,在原来的基础上加入了网络互连,在原来的单机模式和双人对战模式上增加了网络对战模式。即与原始的俄罗斯方块的程序设计原理基本上是相同的,而方块的模型建立,游戏的操作流程和游戏的过程中软件进行各种判断的原理是相同的,但是与原始的俄罗斯方块相比,本软件在原有的基础上又加入了一些新的理念和新的设计技术。比如说新增加了网络多人分组对战、网络聊天功能、新的道具模块等设计。本软件与传统的单机版或双人版俄罗斯方块游戏具有一定的区别,传统的俄罗斯方块的设计模型如下图21所示,本软件的设计模型如图22所示。用户工作站操作指令处理反馈图21单机版俄罗斯方块游戏模型图玩家2玩家1玩家3玩家N图22本系统游戏模型从上两图中可以得出传统的俄罗斯方块模型与本软件的游戏模型具有很大的不同,本软件支持多人在线同时操作,更加丰富。传统的俄罗斯方块注重的是人机交换,而本软件更注意的是人与人之间通过这个网络平台进行的交互。本软件为C/S模型。参与游戏的人的机器都作为客户端客户端,而服务器既可以是上述参与游戏的人的机器,也可以是单独的一台机器。首先由服务器端建立服务器,接下来准备参与游戏的人可以打开客户端通过连接服务器的IP地址进去服务器,再服务器将所接受的用户信息在返回给用户。游戏运行的原理如图23所示。玩家1游戏主系统加入游戏玩家2游戏主系统初始化游戏客户端游戏服务器初始化建立游戏连接服务器操作消息图23本游戏系统原理图本软件主要有以下几个功能1建立服务器。在安装了服务器端的电脑上打开服务器端输入IP地址并建立服务器。2玩家打开安装的客户端,并输入自己的用户名,通过特有的IP地址连接到服务器端所创建的服务器的房间。3连接到本服务器的所有玩家进行分组并都准备游戏,当该房间有至少两个组的玩家准备好了就可以进行对战了。4游戏结束后,本软件会对本局游戏各组玩家的积分和道具的使用状况进行统计。22可行性研究221设计目的222可行性分析管理可行性本游戏的开发职位检测自己大学四年所学到的知识,是在基于传统的俄罗斯方块设计原理上新添加了网络对战模块。便于管理。经济可行性做这个游戏的背景是毕业设计,并不注重开发出来后的经济效益和以后的发展方向,重在检测自身的知识水平,软件开发过程中的经济需求也不高,只需要本人和一台电脑,不需要考虑经济问题。技术可行性本游戏为C/S模型,用C语言编写,开发工具是VC60。社会可行性本游戏只为检测和巩固自己所学知识,开发出来的成品只供自己娱乐和使用,不用考虑对社会的影响,也不用考虑版权和法律的问题。23软件的开发技术和开发工具的简介游戏主要基于的技术原理是SOCKET编程。套接字(SOCKET)是一种网络编程接口,它是对通信端点的一种抽象,提供了一个发送和接收数据的机制。套接字技术最先应用于UNIX系统,后来移植到WINDOWS系统,有了WINSOCKAPI。经过对WINSOCKAPI的低层封装产生了CASYNCSOCKET类,经过高层次的封装产生了CSOCKET类。CSOCKET进行通信的过程很简单。服务器首先启动,通过调用SOCKET函数建立一个套接口,然后调用BIND函数将该套接口和本地网络地址联系在一起,再调用LISTEN函数使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用ACCEPT函数来接收连接。客户端在建立套接口之后就可调用CONNECT函数来发送和接收数据。最后,待数据传送结束后,双方调用CLOSE函数关闭套接口。其原理如图24所示。图24WINSOCK通信原理图本游戏采用的编程工具是VC60,C60是MICROSOFT公司推出的一个基于WINDOWS系统平台、可视化的集成开发环境,它的源程序按C语言的要求编写,并加入了微软提供的功能强大的MFCMICROSOFTFOUNDATIONCLASS类库。MFC中封装了大部分WINDOWSAPI函数和WINDOWS控件,它包含的功能涉及到整个WINDOWS操作系统。MFC不仅给用户提供了WINDOWS图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准WINDOWS应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。使用VC提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。此外,本程序的开发人员一直使用VC60进行程序设计,对此比较熟悉,对其可视化面向对象的编程特点相对了解,在开发起来会轻松许多。表21硬件需求操作系统WINDOWS98/ME/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DIRECTX80音效卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上硬盘空间400MB显示器VGA以上显示器开发软件VC6024需求分析游戏流程需求7种方块共有28中状态(包含形象重复的),在屏幕顶端依次随机下落填充给定的区域,下落过程中由玩家根据自己需求的情况下控制方块的旋转得到自己所需要的图形,并选择下落的位置,判断是否填满某一行或几行,若满消去该行或几行并获得积分,在游戏过程中如果某个玩家的区域在无法放置随机落下的方块,则对方获胜;反之,则对方失败。游戏的主要功能需求如下用户界面需求7种方块分别用不同的颜色来显示,随机落下的方块在一定的区域里根据玩家的操控进行变形并放在所需的位置上。需要有良好的人机交互和观赏性的界面,玩家登录到服务器房间后可以看到以下模块登录到服务器的各个玩家的信息、各个玩家在游戏界面中所在的位置、各个玩家是否准备的画面、玩家之间进行交流的聊天对话框以及在自己所登录的界面上在游戏过程中了解到其他玩家的游戏状况。游戏形状方块需求绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形(即旋转),可设为顺时针或逆时针变形,一般为逆时针方向旋转。键盘处理事件方块随机下落时,可以通过键盘上的方向键对方快进行控制。上键控制方块的变形,下键控制方块的加速,左键控制方块向左移动,右键控制方块的向右移动。显示需求当方块填满某一行或几行时消去该行或几行,在所消去的行上面的方块向下移动,并统计所得积分。23概要设计231功能定义本系统主要以网络通信为基础实现人与人的交互。它主要包含以下几大功能模块1系统初始化模块该模块主要提供玩家进入游戏时初始化游戏界面的功能。登录时,玩家需要有一个昵称,在游戏过程中,玩家能看到其他所有对手的资料。2俄罗斯方块算法模块该模块主要实现俄罗斯方块游戏的控制。其中它主要包括判断胜负算法模块和方块产生算法模块。下图显示的就是方块如何产生的算法。图25方块产生流程3网络通信模块网络通信模块主要包括服务器的建立、客户端与服务器的链接、服务器将其他客户端玩家资料传送给玩家。即,在界面内保证能让每个玩家看到对手资料。各个模块主要实现的功能如下网络通信服务器客户端建立游戏数据处理数据收发加入游戏数据处理数据收发图26网络通信模块功能图4游戏界面绘制模块该模块是游戏实现的核心模块,它本身并不实现一些游戏控制的功能。但是,它是其他模块功能的体现。其他模块都要受它的调用,从而形成一个游戏系统。该模块主要由初始化界面绘制和游戏开始界面绘制两个子模块组成。它们主要完成界面在不同事件响应下游戏界面的绘制和音频的播放功能。游戏界面绘制初始化界面游戏开始界面图27界面绘制模块图以上是游戏功能实现的主要模块,它们经过相互调用控制,协作分工最终完成了本游戏系统的设计。232游戏框架设计本系统采用C/S软件模型、单线程、阻塞式网络通信的设计方式。系统刚运行的时候都要调用系统初始化模块读取用户配置信息对游戏主系统进行初始化,之后系统进入游戏主界面。系统通过调用网络通信模块中的服务器端模块完成服务器的建立,并等待连接。客户端主界面首先调用网络通信模块完成与服务器的连接。连接成功后,系统调用网络通信模块实现服务器端玩家和客户端玩家间操作信息的交互,并通过游戏界面绘制模块绘制游戏开始后的主界面。游戏结束后,系统将玩家战绩信息更新到配置文件中。图28系统层次图俄罗斯方块游戏初始化网络通信界面绘制算法实现读取配置文件保存配置文件产生方块判断输赢服务器客户端初始化界面游戏开始界面3详细设计31系统组成及功能描述本游戏软件是在传统的单机版俄罗斯方块游戏的基础上增加了网络多人分组对抗对战模式。增加了人与人间的交流和各种道具的使用,增强了俄罗斯方块的趣味性和可玩性。本游戏的主要功能是通过客户端登录到服务器的各个玩家可以自己选择同伴和对手,因为本游戏设计的目的就是进行网络多人分组对抗,需要至少有两支队伍才可以进行游戏。在游戏过程的中,各个玩家通过消去方块可以随机获得某个道具,这些道具有的可以增加游戏的难度,如在底部添加几行。也有降低游戏难度的,如减少当前玩家底部的行数,玩家们可以通过自己的需求给己对或对方使用道具来降低己方游戏的难度或增加对方的游戏难度。另外,为了增强俄罗斯方块的竞争、可玩性和趣味性,同时使用网络的优势,玩家和玩家之间可以通过对话框进行聊天,沟通。本软件的组成本软件为C/S软件模型,主要由软件初始化模块、游戏算法模块、网络通信模块、界面绘制模块四部分组成。32系统初始化模块设计软件初始化模块是从配置文件中读取玩家的信息完成游戏初始化的过程。在游戏结束后该模块会自动保存玩家战绩信息到配置文件中。用户初始化登录信息如图31所示。图31用户登录信息登录以后玩家的状态显示为未准备状态,如图32(A)所示头像为黑白状态,该状态下,游戏不能开始。图32(A)图32(B)当玩家点击准备时,头像就变为彩色,如图32(B)。这时,如果至少有两组玩家准备号,就可以开始游戏。33游戏算法实现模块本俄罗斯方块游戏中,有相当大的篇幅是算法的实现模块部分。无论是传统版单机俄罗斯方块,还是本网络多人分组对战模式的俄罗斯方块都离不开算法的支持。接下来详细介绍本软件的算法。图33为游戏主要函数调用流程图。首先从一个方块RANDOM()的随机产生开始,判断是否能产生方块。如果不能,则直接在MASSAGEBOX中显示游戏结束;如果能,则刷新容器内的的图,接下来判断方块能否下落和键盘事件,根据相应的键盘事件进行相关判断,如,按上旋转键,则判断方块能否进行旋转,左右移动也是类似。方块落下后,进行一次判断,看游戏是否失败,失败则提示游戏结束,否则,继续产生新的方块。调用流程如图33。图33方块产生后函数调用流程图主要的游戏过程如下游戏开始随机产生一个方块,接下来判断方块是否已经到达底部,如果不是,则执行自动下降或根据键盘事件快速下降,直到下降到底部,并进行判断是否满足消行条件进行消行操作。否则,继续随机生成下一个下落方块,在下一个方块的提示框中用新生成的方块代替先前在该方框显示的方块,并用先前在该方框里方块作为当前下落的方块,当方块产生时就已经在底部(即在游戏区域的顶端),则游戏结束。否则,继续循环该流程。流程图如图34所示。到达底部部到达底部,游戏结束到达底部部结束销行操作生成下一个下坠物将新生的下坠物代替旧的“下一个下坠物“将旧的“下一个下坠物”用作当前下坠物销行操作游戏结束处理下降一个单位开始图34游戏流程图331方块实现所有的部件及已停止的部件均用小方格来表示。整个游戏区域对应一个二维数组,数组元素为0时,表示空白;为1时,表示已有方格。该数组存储所有已经不能移动的部件。部件采用一维数组表示,这些一维数组实际表是一个NN的矩阵。如表示一个方块使用一个22的矩阵,实际存储1,1,1,1;如表示一个长条使用一个44的矩阵,实际存储0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0。实际显示的时候,先画出已停止的方块,然后计算出正在下落的部件的正确坐标位置并其将画出,同时在固定位置画出预览方块。旋转部件时,只需变换存储部件的矩阵即矩阵的转置,使其对应为转换后的形态,并将其显示出即可。判断部件是否可以下落、旋转、左移、右移时,将表示部件的数组对应到游戏区域的二维数组中,再判断是否允许操作。当部件无法再操作时,将部件数组中对应填入游戏区域中对应的二维数组。使一层消失可以通过判断游戏区域中的二维数组是否某一行全为1;如果该数组的第一行全为1或已没有足够的空白使新的部件可以加入到游戏区域中,则游戏结束。332数据结构的实现游戏方块COMPONET结构体TYPEDEFSTRUCTTAGCOMPONETINTINTCOMID/部件的ID号INTNTDIMENSION/存储该部件所需的数组维数INTPINTARRAY/指向存储该部件的数组COMPONETCOMPONET结构体表示某个游戏方块具体的属性,每个游戏方块对应有一个编号,且有对应存储该部件的数组,用指针指向该数组,并设定存储该部件所需数组(NN)的维数。COMPONET结构体数组初始化游戏方块,即定义MAXCOM个COMPONET类型的结构体,并初始化(MAXCOM为7)。例如M_COMPONETS6INTCOMID6M_COMPONETS6INTDIMENSION4M_COMPONETS6PINTARRAYNEWINT16M_COMPONETS6PINTARRAY00M_COMPONETS6PINTARRAY11M_COMPONETS6PINTARRAY20M_COMPONETS6PINTARRAY30/0100M_COMPONETS6PINTARRAY40/0100M_COMPONETS6PINTARRAY51/0100M_COMPONETS6PINTARRAY60/0100M_COMPONETS6PINTARRAY70M_COMPONETS6PINTARRAY80M_COMPONETS6PINTARRAY91M_COMPONETS6PINTARRAY100M_COMPONETS6PINTARRAY110M_COMPONETS6PINTARRAY120M_COMPONETS6PINTARRAY131M_COMPONETS6PINTARRAY140M_COMPONETS6PINTARRAY150以上代码是对长条这个方块的定义和初始化。其余形状的6种方块的定义不在此赘述。333游戏功能实现1、游戏方块预览游戏中的方块将在44的正方形小方块中预览,如图4所示。使用随机函数RAND来产生06之间的游戏方块编号,其中的正方形小方块的大小为SIZESIZE。SIZE为所设定的方块像素大小。2、游戏方块控制1左移的实现过程A首先判断方块在矩形“容器”中能否能左移。要想左移必须满足以下两个条件(1)如果正在下落的方块整体左移一位后,该方块不超越“矩形”容器的左边线,否则出界,不能执行该操作;(2)在该44方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行左移操作,否则不执行左移操作。B清除执行左移操作前的方块。C该方块左移后,在左移一位后的位置,重新显示此游戏方块。(B、C操作步骤中涉及到的如何清除和显示方块的函数在第四章中的功能函数设计中将会详细进行阐述)。2右移的实现过程A首先判断方块在矩形“容器”中能否能右移。要想右移必须满足以下两个条件(1)如果正在下落的方块整体右移一位后,该方块不超越“矩形”容器的右边线,否则出界,不能执行该操作;(2)在该44方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行右移操作,否则不执行右移操作。B清除执行左移操作前的方块。C该方块右移后,在右移一位后的位置,重新显示此游戏方块。(B、C操作步骤中涉及到的如何清除和显示方块的函数在第四章中的功能函数设计中将会详细进行阐述)。3向下加速下落(下移)的实现过程A首先判断方块在矩形“容器”中能否能右移。要想右移必须满足以下两个条件(1)如果正在下落的方块整体右移一位后,该方块不超越“矩形”容器的底边线,否则出界,不能执行该操作;(2)在该44方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行下移操作,否则不执行下移操作。B清除执行右移操作前的方块。C该方块右移后,在右移一位后的位置,重新显示此游戏方块。4旋转的实现过程A首先判断方块在矩形“容器”中能否旋转。要想旋转必须满足以下两个条件(1)如果游戏方块整体旋转后,游戏方块不能超过“矩形”容器的左边线、右边线、底边线,否则越界,不能执行该操作;(2)在该44方块有值(值为1)的位置,“矩形”容器内在这时必须是没有被占用的(占用时,值为1),否则,不能执行该操作。如果能同时满足上述这两个条件,则执行下移操作,否则不执行下移操作。B清除执行旋转操作前的游戏方块。C在“矩形”容器中显示区域不变的位置,显示旋转后的游戏方块。3、游戏显示更新A当游戏方块执行左右移动、下落、旋转操作时,首先要清除先前位置的游戏方块,再根据操作向左一位、向右一位、向下一位或在显示区域不变的位置重新绘制游戏方块。B当某一行或几行填满方块消去时,上方不能移动的方块下移后,进行重新绘制。清除游戏方块的过程为首先用刷新函数刷新相应的游戏区域,清除执行操作前显示的方块,执行相应的操作后,再次调用刷新函数刷新此区域,显示将要显示的游戏方块。4、游戏帮助功能在帮助的功能选项中直接添加静态文本即可。34网络通信模块网络通信模块是各个玩家实体之间连接。它的主要作用是将两个以上的玩家进行交流和沟通,通过聊天对话框实现人与人之间的交互。进而提高俄罗斯方块的趣味性、交互性、可玩性。具体来说本游戏的网络通信模块主要包括服务器端和客户端两个模块。服务器端模块创建服务器为客户端提供服务,接受客户端的连接。客户端模块主要用于将客户端连接到服务器端,建立连接之后,服务器和客户端分别将玩家的操作情况以消息的形式进行交互,并根据消息更新容器内玩家进度以及响应各种请求。套接字建立系统继承CASYNCSOCKET类生成派生类CFIVESOCKET,并在CFIVESOCKET类中重载了ONACCEPT、ONCONNECT、ONRECEIVE、ONCLOSE消息。服务器的建立遵循CSOCKET编程的一般步骤,首先创建监听套接字,调用LISTEN()监听客户端的连接。有客户端请求连接时,调用ACCEPT()接受客户端的连接。连接成功后,就可以调用RECEIVEDATA()接收已连接客户端发送来的消息。客户端封装CSOCKET类生成了CMYSOCKET类,并重载了ONRECEIVE消息。此后新的游戏实例作为客户端程序创建客户端套接字,然后调用CONNECT()连接到指定的服务器,连接成功后,调用SEND()将该玩家的游戏基础信息发送到服务器。服务器端和客户端消息的收发服务器建立成功,客户端连接到服务器后,客户端就可以向服务器发送消息。服务器重载RECEIVEDATA()来接收客户端发送的消息,利用SEND()来发送消息。客户端也重载了RECEIVEDATA()来接收服务器发送来的消息。由于本系统中发送和接收的数据样式各不相同,因此本系统自定义消息格式,统一数据的发送方式。35游戏界面绘制模块设计游戏的良好的游戏界面目的是能给游戏玩家提供良好的视觉感受。所以,游戏界面的回执非常重要。前面各模块的功能主要集中在游戏逻辑的实现,那么游戏界面绘制模块就是将看不见的游戏逻辑让游戏玩家能够看见,从而帮助玩家正确的完成操作。该模块贯穿整个游戏系统,从进入游戏到最后退出游戏都将用到该模块来绘制游戏界面,显示游戏进行情况。游戏界面绘制模块实现较复杂,提供的函数接口比较烦琐。从游戏进行的阶段可以将该模块分为游戏初始界面绘制和游戏开始界面绘制。351游戏初始界面该界面是登录成功后,玩家第一次看见的游戏界面,此时,游戏玩家没有作出任何操作。但图中昵称为456的玩家已经准备游戏,123尚未准备,界面效果图如图35所示。图35游戏初始界面初始界面绘制原理是由重绘消息WM_PAINT消息触发CBOARD类中的ONPAINT函数对界面进行重绘制。系统先创建内存DC,在内存中先绘制好主界面和根据保存当前界面情况数据的二维数组M_DATA绘制方块,最后再将内存中的界面数据直接拷贝到设备当中,这样就很好地解决了在游戏过程中由于不断刷新界面数据而导致屏幕闪烁的问题。352游戏开始界面游戏开始界面是指两个玩家已经建立连接,游戏开始后的游戏界面。此时的游戏界面是最复杂的,游戏界面时刻都在变化,它动态的显示了玩家游戏进行的情况。游戏效果图如图36所示。图36游戏开始界面从上面图形可以看到本阶段的界面显示变化较快,变化的方式较多,但是它的绘制原理并没有太大的变化,只是系统操作变得更多,收发的消息更多而已。总之,游戏界面的绘制都是以系统消息为主导的,收到什么消息就会绘制相应的游戏界面。4俄罗斯方块游戏的实现41实现原理和主要机制(1)定时制机制从分析俄罗斯方块游戏的特点而得,在游戏开始时定时器就应该产生并生效,而在游戏暂停时使已经制定的定时器失效,当游戏从暂停状态回到游戏状态时,系统再重新创建一个定时器并激活使其正常工作;当游戏结束时,则将制定的定时器销毁。经上所述所以在游戏的开始、暂停、结束分别对应的游戏开始函数、暂停函数、结束函数中进行定时器的控制,对定时器进行创建激活、失效与销毁处理。所以,先在VC60资源编辑器菜单资源选项里面新添加三个菜单选项,然后通过时类图实现即分别是游戏的“开始”、“暂停”、和“结束”,然后利用CLASSWIZARD直接在视图类对象CSKYBLUE_RECTVIEW中分别为它们添加空白的处理函数,具体函数添加如表41所示。表41菜单选项功能对应表菜单选项名称快捷键资源ID响应处理函数开始游戏I0KFORJ0JM_ICOLJGAMESTATUSKJGAMESTATUSK1J/第1行清零FORJ0JM_ICOLJGAMESTATUS0JMAP_STATE_EMPTYM_IMUCH1在视图类对象中增加了M_ISTARTX和M_ISTARTY两个成员变量,它们分别为视图窗口的左上角起点的坐标偏移值。如果该函数检测到有消行的操作,经过数据的修改后,将消行行后的区域空白出来以及分数显示区域的部分进行修改即进行重绘。所以函数体分别先计算出这两个小矩形区域的位置,然后再调用INVALIDATERECT函数对这两个区域宣布重绘,从而触发视图的重绘。42主要的功能函数在MFC视图类中添加功能构造函数,主要的功能函数设计如下CELSBLOCKVIEW函数原型CELSBLOCKVIEWCELSBLOCKVIEWCELSBLOCKVIEW初始化游戏的各项数据,“矩形”容器(游戏地图)、游戏级别、当前部件的ID、游戏分数、随机函数。定义并初始化MAXCOM个方块部件信息(MAXCOM为7),且在对应的析构函数中释放回收内存。ONDRAW函数原型VOIDCELSBLOCKVIEWONDRAWCDCPDCONDRAW导入背景图片,画游戏区域、不能移动的方块、下落的部件,显示得分、级别、下一个方块。ONKEYDOWN函数原型VOIDCELSBLOCKVIEWONKEYDOWNUINTNCHAR,UINTNREPCNT,UINTNFLAGSONKEYDOWN对键盘信息处理,读取键盘操作值,对当前部件,调用CANLEFT、CANRIGHT、CANROTATE、CANDOWN,并实现左移、右移、旋转、加速下落。ONTIMER函数原型VOIDCELSBLOCKVIEWONTIMERUINTNIDEVENTONTIMER是定时器消息处理函数,显示预览部件,调用CANDOWN判断能否下移,实现方块自由下落,调用DISAPPEAR消去满行,调用CHECKFAIL判断游戏是否结束,调用NEWCOMPONET产生新部件。NEWCOMPONET函数原型VOIDCELSBLOCKVIEWNEWCOMPONETVOIDNEWCOMPONET产生新部件的函数,并将新部件的信息拷贝到当前部件的结构体M_CURRENTCOM中。CANDOWN函数原型BOOLCELSBLOCKVIEWCANDOWNVOID或FALSE。CANLEFT函数原型BOOLCELSBLOCKVIEWCANLEFTVOIDCANLEFT判断游戏方块是否可以左移,并返回值TRUE或FALSE。CANRIGHT函数原型BOOLCELSBLOCKVIEWCANRIGHTVOIDCANRIGHT判断游戏方块是否可以右移,并返回值TRUE或FALSE。CANROTATE函数原型BOOLCELSBLOCKVIEWCANROTATEVOIDCANROTATE判断游戏方块是否可以旋转,并返回值TRUE或FALSE。CANNEW函数原型BOOLCELSBLOCKVIEWCANNEWVOIDCANNEW判断是否可以在“矩形”容器中产生新的游戏方块,并返回值TRUE或FALSE。CHECKFAIL函数原型BOOLCELSBLOCKVIEWCHECKFAILVOIDCHECKFAIL判断游戏是否结束,并返回值TRUE或FALSE。DISAPPEAR函数原型CELSBLOCKVIEWDISAPPEARVOIDDISAPPEAR判断是否有满行,且消去满行,记录消去行数,并按规则增加和显示游戏分数。MYINVALIDATERECT函数原型VOIDCELSBLOCKVIEWMYINVALIDATERECTPOINTPTSTART,INTINTDIMENSIONMYINVALIDATERECT刷新了一个以PTSTART为坐上角,长度为INTDIMENSION且不超出游戏区域的正方形区域。ONGAMESTART函数原型VOIDCELSBLOCKVIEWONGAMESTARTONGAMESTART游戏开始的菜单和工具栏消息函数。ONGAMEEND函数原型VOIDCELSBLOCKVIEWONGAMEENDONGAMEEND游戏结束的菜单和工具栏消息函数。其他相关的功能实现函数PRECREATEWINDOW函数原型BOOLCMAINFRAMEPRECREATEWINDOWCREATESTRUCTBREAKCASEVK_RIGHTRECTARROWRIGHTBREAKCASEVK_UPRECTCHANGEBREAKCASEVK_DOWNRECTARROWDOWNBREAKCVIEWONKEYDOWNNCHAR,NREPCNT,NFLAGS上左右下开启游戏开关判断按键图形变化调用RECTCHANGE方法1判断可移动性2可以则移动1判断可移动性2可以则移动1判断是否能再向下移2可以则向下移调用INVALIDATERECT将发生变化后的方块显示在屏幕上图43图键盘事件功能图当方块要进行变形或向左、右、下移动时,首先要对方块将要移动到的位置进行判断,判断是否有障碍,如果有该操作不被执行,方块则仍然保持到原来的位置不变;如果没有则根据玩家所按的键执行相关的操作。并把该方块的位置显示出来。其实方块的各个方向的移动知识对方块所处的坐标的变化。(2)变形的实现不可变可变根据下坠物的形态特性计算出变形后新的坐标和状态值新点坐标赋给控制方块变量方块变化(按向上键)检查可变性不发生任何改变图44图方块变化本游戏通过键盘的向上键来控制方块的变形。即当玩家按下向上键时,程序就会执行方块变化CHANGE函数。方块的类型有七种长条形、Z字形、反Z形、田字形、7字形、反7形、T字型,而每个随机产生的方块都有四种变换形态,所有方块的坐标都是由两个一维数组来统计的。如通过上述机制来计算变形后的方块的坐标和所显示的状态值。方块变形后位置在数组中的存放顺序仍为先左后右,在同一列中先上后下。XX1X1XX2X2XX3X3XX4X4YY1Y1YY2Y2YY3Y3YY4Y4SWITCHM_CURRENTRECTCASE1XX1X11YY1Y11XX3X31YY3Y31XX4X42YY4Y42M_LSCURRENTRECT11BREAKCASE11XX1X11YY1Y11XX3X31YY3Y31XX4X42YY4Y42M_LSCURRENTRECT1BREAK/省略部分为同类实现的变形后小方块坐标的计算代码CASE73XX2X21YY2Y21XX3X32YY3Y32XX4X41YY4Y41M_LSCURRENTRECT7BREAK5系统测试与维护51软件测试概述软件测试是为了发现程序中的错误而执行程序的过程。它的目的是在软件投入生产性运行之前,尽可能多的发现软件中的错误。软件测试对于软件生产来说是必须的。首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助我们发现当前所采用的软件过程的缺陷,以便对其进行改进。同时这种分析也能帮助我们设计出有针对性的检测方案,改善测试的有效性。软件测试一般分为代码审查、单元测试、集成测试和系统测试几个阶段。代码会审是由一组人对程序进行逐条语句讲解、讨论和争议,对软件进行静态分析,从而找出隐藏的错误的过程。单元测试集中检查软件的各个功能模块的实际功能与定义该模块的功能说明是否相符,以及发现编码的错误。集成测试是将模块按照设计要求组装起来,在组装的同时进行测试,。主要目的是发现与接口有关的问题。系统测试的目的是向未来的用户表明系统能够像预定要求的那样工作经过上述的测试过程对软件进行测试后,软件基本满足开发的要求,测试宣告结束。软件测试的方法有很多,按是否需要执行的角度可以划分为静态测试和动态测试。静态测试主要包括代码会审、走查和办公桌检查。动态测试分为黑盒测试和白盒测试。52俄罗斯方块测试本系统由于所处状态较多,限于篇幅,以下只对软件的可用性做简单的测试。系统分为游戏开始前和游戏进行中两个阶段进行测试。521游戏开始前阶段测试游戏开始前阶段主要包括配置文件的读取和服务器的连接。本阶段主要从各个方面全面的测试游戏开始前是否能够正常工作。测试用例如表51所示。测试数据序号测试内容IP地址主机名期望结果1连接服务169254233242连接成功2连接服务127002连接失败3连接服务1289连接失败4连接服务连接失败表51测试用例表经过测试,软件运行正常。522游戏进行中阶段测试本阶段主要是玩家对游戏的控制操作。包括开始游戏、移动方块、变形、使用道具、聊天以及各种消息的处理等。该阶段主要是测试程序逻辑是否正确、游戏界面是否能够根据游戏逻辑的进行而正确的绘制、游戏操作是否正确等。游戏测试内容较多,且测试方法与前面相同,这里就不再累述。游戏中,在进行过一段时间并使用过道具以后的的界面如图51所示图51游戏过程中界面结论通过编写这个程序,我体会最为深刻的一点是系统架构和设计模式的重要性。即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。这个游戏之中,有关网络SOCKET编程或者俄罗斯方块主要游戏算法的知识都可以直接从无所不包的INTERNET上获

温馨提示

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

评论

0/150

提交评论