版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于VC的俄罗斯方块摘要俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上不同于那些传统的经典娱乐,因为它本质上是电子的,所以它确实是一个现代产品。当游戏刚发布时,俄罗斯方块世界著名的游戏玩法就很直观。与掉落的玩具碎片及其形状有关,即使是新手也很自然地尝试将它们排列并适当组合,好像俄罗斯方块触及了我们的一些存在感官,使得即使是我们当中最杂乱无章的东西也不得不放东西为了。俄罗斯方块是一款风靡全球的掌上游戏机和PC游戏。它所创造的轰动效应和经济价值,可以说是游戏史上的一件大事。它是由俄罗斯人AlekPajitnov发明的,因此得名。俄罗斯方块的基本规则是移动、旋转、放置游戏自动输出的各种方块,形成一条或多条完整的线并消除点。它看起来很简单,但变化无穷。俄罗斯方块极易上手,但熟练掌握操作和放置技巧却不难。作为众所周知的老少皆宜的热门游戏,它的火爆程度可以说是历史上任何一款游戏都无法比拟的。相信大部分人都还记得当年痴迷的俄罗斯方块时代。俄罗斯方块是一款老少皆宜的小游戏。它由四个方形颜色块组成,然后存储在数组的四个元素中。计算机随机生成七种不同类型的块,并根据计算机定时器对其进行控制。连续产生一定的时间,用户根据键盘的四个方向键来控制翻、左、右、下操作,(按键事件的控制是通过信号和槽的关联来实现的功能)。然后程序将这七个块堆叠成各种模型。Qt是诺基亚开发的跨平台C++GUI应用程序框架。它为应用程序开发人员提供了创建最先进的图形用户界面所需的所有功能。论文描述了游戏的历史、游戏开发的环境以及游戏开发的意义。遵循软件工程的知识,从定义软件问题开始,到可行性研究、需求分析、大纲设计、详细设计,整个开发过程贯穿于软件工程的知识体系。本设计是在Linux系统下,使用QT+Creator作为开发语言,使用C++和QT库来设计和实现游戏。关键词:游戏设计;算法;大批;事件目录摘要……………………1内容………………..2简介………………3__1简介………………4__1.1电子游戏及其分类……………………3______电子游戏发展现状…………41.2.1国外电子游戏发展现状……42.可行性研究…………………………52.1设计目的62.2软件问题定义62.3可行性分析6三、外形设计………………73.1确定游戏设计方案……………………73.2系统流程结构设计……………………83.3各功能模块图设计…………83.3.1模型层功能框图设计……………….8332尝试层功能模块图设计93.3.3控制层9功能模块设计4.详细设计规范……………………10总结25至26参考文献27介绍游戏是人们活动中非常重要的一部分。有人认为,如果有一天人类对所有游戏都失去兴趣,恐怕世界末日就要来临了。电脑对游戏的贡献是有目共睹的,现在接触过电脑的人很少没玩过电脑游戏,喜欢游戏的人也很少不玩电脑。俄罗斯方块是一款风靡全球的视频游戏和掌上游戏。它曾经引起的轰动和经济价值,可以说是游戏史上的一件大事。该游戏最初由曼联的游戏制作人AlexPajitnov创建,看似简单,但变化无穷,令人上瘾。相信大部分用户都还记得当年痴迷的俄罗斯方块时代。回顾其历史,俄罗斯方块最早出现在PC上,我国用户通过红白电脑了解并喜欢上了它。现在联众将再次掀起这股让人上瘾的俄罗斯方块风潮。对于普通用户来说,它的规则简单易上手,游戏过程变化无穷。在《联众俄罗斯方块》中,联众网游有一些独特的魅力——有单人对战,也有两人在线对战。有两种模式,用户可以选择其中一种来玩游戏。网络模式还增加了积分系统,让用户不仅可以在游戏中感受乐趣,还为用户提供了展示高超技能的场所。俄罗斯方块游戏可以说是随着计算机的发展而发展,不断推出新的和进化的各种同类游戏,深受玩家喜爱。这个游戏有的简单,有的复杂,但基本原理是一样的,都是通过移动积木的组合来训练玩家的反应能力。说到游戏软件,大多数人都认为它是不可预测的,无与伦比的。而总则游戏软件确实有很高的技术难度。随着开发工具和软件开发方法论的不断发展,手工开发游戏并不是很难。俄罗斯方块游戏是一个古老而有趣的游戏。网络上的游戏软件数不胜数,复杂的算法和设计也数不胜数。难度对于普通初学者来说是望而却步的。本文采用数组作为积木的数据结构,提出了一种用pascal语言实现的简单方法,可供初学者开发类似的游戏,了解游戏软件的设计开发过程。一、简介1.1电子游戏及其分类是在家用电脑、家用视频游戏机或手持游戏机和街机上运行的视频游戏程序。电子游戏是集叙事、艺术、音乐、动画、编程等多种技术于一体的互动娱乐软件,涉及多个行业。从电子游戏的分类来看,分类方法有很多种。传统的游戏分类是按游戏类型分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略游戏等类别。根据运行游戏的平台,视频游戏可分为主机游戏、单机PC游戏、互动视频游戏、网络游戏和手机游戏。此外,中国政府将视频游戏产业划分为四类:家用游戏机游戏、单机PC游戏、网络游戏和街机游戏。考虑到我国游戏产业比较接近,本文采用国家的分类标准。“网络游戏”也俗称“网络游戏”,是指通过互联网进行的电脑游戏,通过人与人之间的互动达到交流、娱乐、休闲的目的。在互联网(局域网)技术出现之前,视频游戏都可以归类为单人游戏,即“人机”游戏,或至多是两人游戏。随着互联网技术的出现,成百上千甚至上万的游戏玩家可以通过连接游戏服务器同时连接娱乐。这大大增加了游戏的交互性和真实性,丰富了电子游戏。韩。从网络游戏的分类来看,目前行业内还没有比较统一的分类。随着计算机设备和网络技术的发展,电子游戏在世界范围内迅速发展,取得了巨大的成功,成为当今世界不可缺少的精神食粮。1.2电子游戏发展现状1.2.1国外电子游戏发展现状电子游戏最初是在美国制作的。1971年,一位还在麻省理工学院读书的学生设计了世界上第一台商务游戏机。这个街机游戏的名字是“电脑空间”。可以说,时至今日,电子游戏仍是外国的天下。美国仍然是全球最大的游戏市场,遵循发行商为主的产业链发展模式。据美国市场研究公司NPDGroup的调查统计,2004年美国游戏(包括家用和掌上游戏机)和软件的总销售额为99亿美元,占全球游戏市场的45%。游戏软件销售额的具体数字为:视频游戏软件销售额52亿美元(1.6亿台),PC游戏软件销售额11亿美元(4500万台),掌上游戏销售额10亿美元(4230万台)。2004年共售出约2.48亿款游戏。据估计,美国家庭平均购买了2款游戏[3]。日本近20年来一直在疯狂地赚钱。从1960年代初的街机,到1960、1970年代的家用游戏机,再到1980、1990年代的掌上游戏机,经过30多年的努力,日本终于培育出了电子游戏的“摇钱树”。成为第一时尚娱乐行业,垄断全球行业10余年。对日本而言,电子游戏产业已成为国民经济的重要支柱之一,占GDP的1/5。在最辉煌的1998年,日本游戏产业一度占据全球视频游戏市场90%以上的硬件份额和50%以上的软件份额。中国被誉为全球网络游戏产业最发达的国家之一。迄今为止,中国网络游戏市场60%以上的产品来自中国游戏软件开发商。中国的网络游戏使中国的许多游戏运营公司在游戏营销市场或股票资本市场上取得了巨大的成功。中国游戏市场的发展并非偶然。中国政府不仅对游戏产业进行了正确的定位和引导,而且将其与国民经济发展紧密结合,做了大量的市场培育工作。中国政府意识到依靠重工业来支撑国民经济是片面的,于是把IT和娱乐产业作为新的经济增长点,开始大力扶持。此后,科技含量极高、能耗极低的游戏制作及相关产业肩负着“兴国兴国”的重任。文化和旅游部出面成立国家游戏支持中心,为中国游戏产业提供从资金到技术的多方面支持;建立游戏投资联盟,政府每年对游戏产业的投资高达500亿元,并为游戏企业提供资金支持。长期低息贷款;设立信息科技基金和文化产业基金,服务游戏产业;对指定创业公司实施各项税收优惠政策,减轻甚至免除游戏公司的税收负担;建设游戏产业基地,支持中小游戏公司发展;从事游戏产业的高技术人才免服二年兵役。在中国,从生产到运营,网络游戏公司的起步门槛相对较低,主要得益于政府实施的扶持计划。此外,在政策利好的形势下,国内涌现出不少游戏院校,一些未涉足该领域的高校也开设了游戏相关专业课程,大力培养游戏专业人才,为游戏制作提供了基础保障。2.可行性研究2.1设计目的通过本游戏的设计,综合在校期间所学的理论知识,设计开发俄罗斯方块游戏,熟悉应用系统的开发流程,培养独立思考能力,测试学习效果和动手能力,初步掌握软件工程系统理论,初步掌握MVC这种设计模式,进一步巩固和加强自己对j2se基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。2.2软件问题定义基本要求:本次游戏开发的总体任务是实现游戏的可操作性和界面的美观性。整个开发过程遵循软件工程规则,采用PASCAL编程实现接口和事件控制。用户根据键盘的四个方向键控制翻、左、右、下操作,通过菜单栏中相应的菜单选项来实现。游戏的开始、结束、改变方块、点数和关卡的功能。目标:通过这款游戏的开发,主要实现游戏的可操作性和美观性,同时让我们更好地理解PASCAL语言,为以后的实际工作打下坚实的基础。条件、假设和限制:由于知识和能力的限制,本游戏实现的功能还不够强大,可以改进本游戏以增强游戏的功能。可行性研究方法:通过研究分析俄罗斯方块的能力和实施方法,确定主要结构。利用我现阶段所能达到的能力,以最简单最容易的方式,开发、测试、修改,实现一个初级的游戏软件。评测规模:由于本软件是初级产品,对它的要求也不算太苛刻,所以可以实现俄罗斯游戏的一般功能。2.3可行性分析技术可行性:开发这款游戏有多种编程语言。考虑到语言的掌握,选择PASCAL语言进行游戏开发,使用PASCAL编程实现界面和事件控制。经济可行性:本游戏的开发旨在完成毕业设计。不关注直接经济效益和后续发展方向。只注重自身水平和能力的提高,对自身经济要求不高。手机运行相应的JAVA程序就足够了,不用考虑经济问题。社会可行性:这款游戏的开发主要是为了完成毕业设计。开发的主体是个人,不存在违法行为,不会影响社会。这方面是完全可行的。3.外形设计3.1游戏设计方案的确定本游戏的设计采用MVC模式(Model-View-Controller),即本游戏的输入、处理、输出过程按照Model、View、Controller的方法进行分离,这样设计这个游戏分为三层——模型层、视图层、控制层。MVC模型图如下所示:3.2系统流程结构设计触发按键事件图形工厂类触发按键事件图形工厂类图形类障碍物类中央控制器处理按键事件处理逻辑显示面板显示生产3.3各功能模块图设计3.3.1模型层(Model)功能框图设计图形工厂图形工厂图形障碍物生产图形下落产生障碍物3.3.2视图层(View)功能模块设计游戏面板游戏面板GamePanel方块的显示障碍物的显示3.3.3控制层(Controller)功能模块设计中央控制器中央控制器Controller类图形工厂生产图形显示面板显示图形和障碍物处理按键和鼠标事件4.详细设计代码{ Tetris-经典游戏的MIDletPascal实现。 您可以免费使用此代码,请在您的 拥有自己的意愿,使用它,分发它等,只要你做出没有任何利润 。}程序俄罗斯方块;常量 字段宽度=10; 场高=15;var gameField:array[1..fieldWidth,1..fieldHeight]的整数; 块:整数数组[1..4,1..4]; 块X,块Y:整数; 块大小:整数; 屏幕宽度,屏幕高度:整数; screenX,screenY:整数; 分数:整数; 时间:整数; 游戏运行:布尔值; 游戏速度延迟:整数; pauseCommand、quitCommand、clickedCommand:命令; 游戏暂停:布尔值;程序rotateRight;向前;函数blockPositionValid:布尔值;向前;{ welcomeScreen-显示惠康屏幕}程序欢迎屏幕;变量文本显示:字符串;textXPos:整数;textYPos:整数;键码:整数;开始 setColor(255,0,255);fillRect(0,0,screenWidth,screenHeight);setColor(0,0,255);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_BOLD,FONT_SIZE_LARGE);textToDisplay:='俄罗斯方块';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;textYPos:=(screenHeight-getStringHeight(textToDisplay))/2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);setColor(0,0,0);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_PLAIN,FONT_SIZE_SMALL);textToDisplay:='使用MIDletPascal创建';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);textToDisplay:='按任意键';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;drawText(textToDisplay,textXPos,textYPos);重绘;{等到用户按下任意键}重复keyCode:=getKeyClicked;直到keyCode<>0;结尾;{gameOver-显示游戏结束画面}函数gameOver:布尔值;变量文本显示:字符串;textXPos:整数;textYPos:整数;键码:整数; 新游戏:命令;退出:命令;clickedCommand:命令;开始设置颜色(255、255、255);fillRect(0,0,screenWidth,screenHeight);setColor(255,0,0);setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_BOLD,FONT_SIZE_LARGE);textToDisplay:='游戏结束!';textXPos:=(screenWidth-getStringWidth(textToDisplay))div2;textYPos:=(screenHeight-getStringHeight(textToDisplay))/2;drawText(textToDisplay,textXPos,textYPos);textYPos:=textYPos+getStringHeight(textToDisplay);重绘;newGame:=createCommand('Play',CM_SCREEN,1); 退出:=createCommand('退出',CM_EXIT,1); 添加命令(新游戏); 添加命令(退出);{等到用户按下任意键}重复延迟(100);clickedCommand:=getClickedCommand;直到(clickedCommand<>emptyCommand);如果clickedCommand=退出然后 游戏结束:=真; 别的 游戏结束:=假; 删除命令(新游戏); 删除命令(退出);结尾;{ setSizes-计算单个块的大小 以及比赛场地的位置}程序集大小;varblockWidth,blockHeight:整数;开始 屏幕宽度:=获取宽度; 屏幕高度:=getHeight; 块宽度:=屏幕宽度/字段宽度; 块高度:=屏幕高度/字段高度; 如果blockHeight>blockWidth那么 块大小:=块宽度; 别的 块大小:=块高度; screenX:=(screenWidth-blockSize*fieldWidth)/2; screenY:=(screenHeight-blockSize*fieldHeight)/2;结尾;{ initializeGameField-使游戏字段为空}过程初始化游戏场;变量i,j:整数;开始 对于i:=1到fieldWidth做 对于j:=1到fieldHeight做 游戏场[i,j]:=0;结尾;{ drawScore-在屏幕上以黑色书写分数}程序drawScore;var stringWidth,stringHeight:整数; 输出文本:字符串;开始 outputText:='行数:'+分数; stringWidth:=getStringWidth(outputText); stringHeight:=getStringHeight(outputText); setFont(FONT_FACE_PROPORTIONAL,FONT_STYLE_PLAIN,FONT_SIZE_SMALL); setColor(0,0,0); drawText(outputText,(screenWidth-stringWidth)/2, (screenHeight-stringHeight)/2);结尾;{ drawBlock-绘制单个游戏块}过程drawBlock(col,row,color:integer);var red,green,blue:整数;开始 {设置颜色} 如果颜色=1那么红色:=255; 如果颜色=2那么绿色:=255; 如果颜色=3那么蓝色:=255; 如果color=4则开始red:=255;绿色:=255;结尾; 如果color=5则开始red:=255;蓝色:=255;结尾; 如果颜色=6,则开始绿色:=255;蓝色:=255;结尾; if(color<>0)and(row>0)and(row<=fieldHeight)and(col>0)和(col<=fieldWidth)然后 开始 行:=行; col:=col-1; {绘制光块填充} 设置颜色(红、绿、蓝); fillRect(screenX+col*blockSize,screenHeight-screenY-row*blockSize,blockSize,blockSize); {在方块周围画出黑色边框} 设置颜色(红色/2,绿色/2,蓝色/2); drawRect(screenX+col*blockSize,screenHeight-screenY-row*blockSize,blockSize,blockSize); 结尾; 结尾;{ redrawGameScreen-用所有块重绘屏幕}程序重绘游戏屏幕;var i,j:整数;开始 setColor(0,0,0); fillRect(0,0,screenWidth,screenHeight); 设置颜色(255、255、255); fillRect(screenX,screenY,fieldWidth*blockSize+1,fieldHeight*blockSize+1); {绘制向下的块} 对于i:=1到fieldWidth做 对于j:=1到fieldHeight做 drawBlock(i,j,gameField[i,j]); {画下落的方块} 对于i:=1到4做 对于j:=1到4做 drawBlock(i+blockX,j+blockY,block[i,j]); {绘制分数文本} 绘制分数; 重绘;结尾;{ createNewBlock-创建新的下落块。如果你想 要更改下降的形状,请在此处进行。}程序创建新块;varx,形状:整数;开始 形状:=随机(7); x:=随机(6)+1; 如果形状=0那么 开始 块[1,4]:=0;块[2,4]:=x;块[3,4]:=x;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=x;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=0;块[3,2]:=0;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=1那么 开始 块[1,4]:=0;块[2,4]:=x;块[3,4]:=0;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=0;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=x;块[3,2]:=0;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=x;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=2那么 开始 块[1,4]:=0;块[2,4]:=x;块[3,4]:=0;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=x;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=0;块[3,2]:=x;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=3那么 开始 块[1,4]:=0;块[2,4]:=0;块[3,4]:=x;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=x;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=x;块[3,2]:=0;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=4那么 开始 块[1,4]:=0;块[2,4]:=x;块[3,4]:=0;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=0;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=x;块[3,2]:=x;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=5那么 开始 块[1,4]:=0;块[2,4]:=0;块[3,4]:=x;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=0;块[3,3]:=x;块[4,3]:=0; 块[1,2]:=0;块[2,2]:=x;块[3,2]:=x;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 如果形状=6那么 开始 块[1,4]:=0;块[2,4]:=0;块[3,4]:=0;块[4,4]:=0; 块[1,3]:=0;块[2,3]:=x;块[3,3]:=0;块[4,3]:=0; 块[1,2]:=x;块[2,2]:=x;块[3,2]:=x;块[4,2]:=0; 块[1,1]:=0;块[2,1]:=0;块[3,1]:=0;块[4,1]:=0; 结尾; 重绘游戏画面;结尾;{ removeFullLines-检查任何行是否已满并将其删除}程序removeFullLines;varlineFull:布尔值; i,j,k:整数;开始 对于i:=1到fieldHeight做 开始 {检查线路是否已满} 全线:=真; 对于j:=1到fieldWidth做 如果gameField[j,i]=0那么lineFull:=false; {如果已满,请删除它} 如果lineFull那么 开始 对于k:=i+1到fieldHeight做 开始 对于j:=1到fieldWidth做 游戏场[j,k-1]:=游戏场[j,k]; 结尾; {擦除第一行} 对于j:=1到fieldWidth做 游戏场[j,fieldHeight]:=0; 分数:=分数+1; {加快游戏速度} 如果(分数mod5)=0那么 游戏速度延迟:=游戏速度延迟*9/10; 我:=我-1; 结尾; 结尾;结尾;{ blockIsDown-当阻塞时调用此过程 尽可能低地下降。}程序块IsDown;var i,j:整数;开始 {复制块数据} 对于i:=1到4做 对于j:=1到4做 开始 如果块[i,j]<>0那么 游戏场[i+blockX,j+blockY]:=block[i,j]; 结尾; {检查是否可以删除任何行} 删除全线; blockX:=(fieldWidth-4)/2; blockY:=fieldHeight-4; {创建新块} 创建新块; {检查块是否可以放置在屏幕上} 如果不是blockPositionValid那么 游戏运行:=假;结尾;{ blockPositionValid-如果 块的当前位置是好的。如果 块的当前位置不正确,因为 该块与其他元素重叠或 因为是出局者,返回 错误的;}函数blockPositionValid:布尔值;var i,j:整数; x,y:整数;开始 blockPositionValid:=true; 对于i:=1到4做 对于j:=1到4做 开始 如果块[i,j]<>0那么 开始 x:=块X+i; y:=块Y+j; 如果x<=0那么blockPositionValid:=false;别的 如果x>fieldWidth然后blockPositionValid:=false;别的 如果y<=0则blockPositionValid:=false;别的 如果y>fieldHeight则blockPositionValid:=false;别的 如果gameField[x,y]<>0那么blockPositionValid:=false; 结尾; 结尾;结尾;{ rotateLeft-向左旋转一个块}程序旋转左;vari,j,t:整数;开始 {转置块} 对于i:=1到4做 对于j:=i到4做 开始 t:=块[i,j]; 块[i,j]:=块[j,i]; 块[j,i]:=t; 结尾; {做垂直镜像变换} 对于i:=1到4做 开始 t:=块[i,1]; 块[i,1]:=块[i,4]; 块[i,4]:=t; t:=块[i,2]; 块[i,2]:=块[i,3]; 块[i,3]:=t; 结尾; 如果不是blockPositionValid那么 右旋; 别的 重绘游戏画面;结尾;{ rotateRight-向右旋转一个方块}程序rotateRight;vari,j,t:整数;开始 {转置块} 对于i:=1到4做 对于j:=i到4做 开始 t:=块[i,j]; 块[i,j]:=块[j,i]; 块[j,i]:=t; 结尾; {做水平镜像变换} 对于i:=1到4做 开始 t:=块[1,i]; 块[1,i]:=块[4,i]; 块[4,i]:=t; t:=块[2,i]; 块[2,i]:=块[3,i]; 块[3,i]:=t; 结尾; 如果不是blockPositionValid那么 向左旋转; 别的 重绘游戏画面;结尾;{ moveBlock-移动方块并检查方块是否 可以移动到给定位置}过程moveBlock(deltaX,deltaY:integer);开始 区块X:=区块X+deltaX; 块Y:=块Y+deltaY; 如果不是blockPositionValid那么 开始 区块X:=区块X-deltaX; 块Y:=块Y-deltaY; 如果(deltaY<>0)那么 块下; 结尾; 别的 重绘游戏画面;结尾;{ processKeyActions-读取键盘并运行需要命令}过程processKeyActions;var 键:整数;开始 键:=keyToAction(getKeyClicked); 如果key=GA_UP然后rotateLeft; 如果key=GA_FIRE然后rotateRight; 如果key=GA_DOWN然后moveBlock(0,-1); 如果key=GA_LEFT然后moveBlock(-1,0); 如果key=GA_RIGHT然后moveBlock(1,0);结尾;{ checkTime-检查游戏速度间隔是否已过; 如果是,则将块向下移动一位}程序检查时间;var currentTime:整数;开始 当前时间:=getRelativeTimeMs; if((currentTime-time)>gameSpeedDelay)或((currentTime-time)<0)然后 开始 移动块(0,-1); 时间:=当前时间; 结尾;结尾;{ 主程序-初始化游戏,读取键盘输入并测量时间}开始 设置尺寸; 欢迎屏幕; 设置默认字体; 重复 初始化游戏场; 游戏速度延迟:=500;{500毫秒=0.5秒} 分数:=0; 创建新块; blockX:=(fieldWidth-4)div2; blockY:=fieldHeight-4; 时间:=getRelativeTimeMs; 游戏运行:=真; 重绘游戏画面; 游戏暂停:=假; pauseCommand:=createCommand('Pause',CM_SCREEN,1); quitCommand:=createCommand('Quit',CM_EXIT,1); 添加命令(暂停命令); 添加命令(退出命令); 在游戏运行时 开始 if(notisMidletPaused)和(notgamePaused)then 开始 进程键操作; 检查时间; 结尾; clickedCommand:=getClickedCommand; 如果clickedCommand=quitCommand那么 开始 游戏运行:=假; 停; 结尾; 如果clickedCommand=pauseCommand那么 gamePaused:=不是gamePaused; 结尾; 删除命令(暂停命令); 删除命令(退出命令); 直到游戏结束;结尾评测规模:由于本软件是初级产品,对它的要求也不算太苛刻,所以可以实现俄罗斯游戏的一般功能。总结游戏设计和实践是一项复杂而庞大的工作。选了题目之后,我才意识到这个过程的难度。因为之前没有接触过游戏设计,所以刚开始有点迷茫和犹豫。后来通过看书和上网查资料,逐渐找到了一些感受,也根据资料自己整理了一些简单经典的游戏。本文仅以俄罗斯方块为例进行说明。这个设计让我对电子游戏所涉及的相关技术和方法有了初步的了解,包括电子游戏分类、选题、构思等。并实现了几个可演示的游戏软件,其中很多应用了学习相关的技术,实现了图文并茂的结合,可以实际演示。设计过程中最让人印象深刻的收获是:1.学到了很多新知识,复习了旧知识。经过长时间的学习,我对C++语言更加熟悉了。2.通过不断的电脑实验,调试程序,总结经验,从不懂题目到能动手,提出问题,想办法解决问题,多靠自己练习,动手能力有了得到了增强。3.提高中英文资料的检索能力。在这次毕业设计的过程中,我查了很多资料,不仅是图书馆的期刊、杂志、书籍,还有网络中的电子文档、电子书、网页和下载的视频教学课程;不仅有中文资料,还有英文资料。材料。这些材料开阔了我的视野,让我对这个学科的理解更加深刻,让我在编写程序时思路更加清晰,也避免了很多弯路。但如果你真的想从事游戏设计工作,还有很长的路要走。即便是国际知名的大公司,也在不断的探索和实践中不断前行。但这并不意味着未来渺茫。通过这种做法,进行了自下而上和自上而下的归纳和演绎过程。面对瞬息万变的游戏,我终于明白了一点它的奥秘。一个复杂的、采用各种表达手段的游戏世界,无论多么复杂,都可以通过一定程度的归纳和演绎,找到适合其规则和表现的拟合点。回顾这个设计过程,我学到了很多书本上没有的东西。通过这次制作的软件,丰富了自己的实践技能,拓展了专业知识,让我受益匪浅。同时,我也经历了软件开发的困难。在这个设计的同时,我也从中学到了很多。但是,由于我只是处于这种软件开发的起步阶段,所以对它了解不多。可能还有很多不足之处。有些模块做的不是很好,有些功能不能完全实现。块会提前显示。因此,它不是很好。界面的设计和整体布局都比较简单,没有什么突出的特点。这也可能是我系统的不足之处。至我的论文是在导师易老师的悉心指导下完成的。他严肃的科学态度、严谨的学术精神和卓越的工作作风深深地感染和鼓舞了我。从选题到最终完成项目,易总一直给予我细心的指导和不懈的支持。谨向易老师表示诚挚的敬意和崇高的敬意。在此,我还要感谢所有一起快乐度过大学生活的可爱的同学和尊敬的老师们。正是因为有你们的帮助和支持
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济宁市嘉祥县2025届数学三年级第二学期期中考试模拟试题(含解析)
- 2026年10月自考中国古代文学史(一)(00538)模拟试卷(含答案解析)
- 橡胶半成品生产工班组建设考核试卷含答案
- 乙醛装置操作工安全教育水平考核试卷含答案
- 漆器髹漆工发展趋势考核试卷含答案
- 炼乳结晶工岗前设备维护考核试卷含答案
- 医用光学仪器组装调试工复测评优考核试卷含答案
- 酒体设计师安全教育模拟考核试卷含答案
- 船舶加油工岗中责任感考核试卷含答案
- 照明设计师技能实操强化考核试卷含答案
- 天域全国名校协作体2027届高三10月联考英语试卷(含答案)
- 2026广东茂名市高校毕业生基层公共就业创业服务岗位招募61人笔试参考题库及答案解析
- 自考13635工程力学(机械)高频考点重点
- GB/T 48132.9-2026绿色矿山建设规范第9部分:水泥用灰岩矿山
- JEDEC-JESD51-中文版详细解读
- 初中七年级英语跨学科项目化学习-Seasonal Poetry Pamphlet 创作工坊(第一课时)
- 精算师考试风险管理试题汇编(带解析)
- 2026年山东中考化学真题【含答案解析】
- 广东省深圳市2026中考语文作文真题解读及范文
- SpaceX IPO Roadshow 上市路演课件
- 中级注册安全工程师《化工实务》案例100问
评论
0/150
提交评论