毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc

上传人:文库蛋蛋多 文档编号:3980118 上传时间:2023-03-30 格式:DOC 页数:38 大小:762KB
返回 下载 相关 举报
毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc_第1页
第1页 / 共38页
毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc_第2页
第2页 / 共38页
毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc_第3页
第3页 / 共38页
毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc_第4页
第4页 / 共38页
毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于wxWidgets的俄罗斯方块的设计与实现.doc(38页珍藏版)》请在三一办公上搜索。

1、基于wxWidgets的俄罗斯方块的设计与实现Design and implementation of Tetris based on wxWidgets2011年5 月基于c+的俄罗斯方块的实现摘要 俄罗斯方块是非常传统的游戏,操作简单,难度却不低,广受娱乐界欢迎。给人们的生活带来了健康愉快的补充,唯美的艺术享受。本文在基于Visual C+实现的单机版俄罗斯方块游戏的基础上,深入的研究wxWidgets。主要工作如下: 分析了俄罗斯游戏规则。 系统的介绍了实现俄罗斯方块游戏的算法设计过程。 熟悉软件项目开发的过程和并掌握其要点,学习wxWidgets 通过制作简单游戏可以丰富游戏玩家的娱乐

2、生活 通过游戏编程来加深自己对C+与面向对象思想的认识和理解关键词:俄罗斯方块游戏 wxWidgets 设计 实现Design and implementation of Tetris based on wxWidgetsAbstract Tetris game is very traditional, simple, but not low. it is widely welcomed by the entertainment industry. Brought to peoples lives happy and healthy complement to the art of aesth

3、etic enjoyment.In this paper, based on Visual C + + implementation of stand-alone version of Tetris game, based on in-depth study of wxWidgets.The main work is as follows: Analysis of the Russian rules of the game. system introduces an algorithm to achieve Tetris game design process. Familiar with s

4、oftware development and mastery of the process and its key points, learning wxWidgets rich by making a simple game can be a gamers entertainment programming to deepen their own through the game on C + + and object-oriented knowledge and understanding of ideasKeywords: Tetris wxWidgets design achieve

5、d目录第一章 概述11.1研究背景11.2游戏的意义与内涵11.3课题内容21.4论文组织结构3第二章 相关知识52.1基本工具52.2开发语言52.2.1 C+52.2.2 wxWidgets6第三章 系统分析83.1 需求分析83.2 分析建模93.2.1游戏设计分析93.2.2 功能分析93.2.3 注意事项103.2.4 游戏流程10第四章 系统设计124.1游戏程序的构架设计124.2 类图分析124.3游戏程序的模块设计154.3.1 模块设计154.3.2 模块解析164.3界面设计234.4游戏规则和基本操作24第五章 系统实现265.1开发环境265.2系统流程图285.3算

6、法设计285.3.1方块的存储285.3.2方块变形的实现295.3.3向下移动295.4系统展示30第六章 总结及展望32致谢33参考文献34第一章 概述1.1研究背景随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。于是我着手开始设计一个这样的游戏软件。由莫斯科数学家亚历克西帕杰诺夫(Alexey pajitnov)所设计的“俄罗斯方块”被公认为有史以来最畅销的游戏,至今魅力不减。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新,演变出各种类似游

7、戏,深受广大玩家喜爱。这个游戏有的简单,有的复杂,但其根本原理是一样的:都是对运动的方块进行组合,来训练玩家的反应能力。谈到游戏软件,大多数人都认为其神妙莫测,高不可及,而一般游戏软件也确实具有很高的技术难度,随着开发工具及软件开发方法学的不断发展,动手开发游戏也不是十分困难的。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。1.2游戏的意义与内涵游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好

8、比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。 “游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。1、行为模式: “游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏” 吗?所以不管游戏的流

9、程有多么复杂还是多么简单,一定要有特定的行为模式。2、条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。3、娱乐身心:一种游戏所带来的娱乐

10、性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。4、输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。1.3课题内容为了使毕业设计如期顺利的完成,制定了一个工作

11、安排,从定题到实现,以及系统的调试与运行。如图1-1所示。概要设计详细设计功能模块开发功能模块测试系统调试定题调查研究资料查询开发环境熟悉研究关键技术系统试运行和修改图 1-1 课题内容工作安排1.4论文组织结构论文组织如下:第一章概述。简短的描述了本设计研究的背景及意义,并阐述了本设计所研究的内容。第二章相关知识。本章对此次毕业设计中所用到的知识进行了简介。从以下几个方面:毕业设计中所使用的工具的简介。介绍了开发语言C+,并着重介绍了wxWidgets开发库第三章系统分析。描述了对系统的分析,如需求分析,业务流程分析,数据流程分析等,通过用例图形象描述。第四章系统设计。通过四个方面讲述了设计

12、的过程:结构设计、界面设计、功能设计以及数据库的设计,同时也描述了前后台各页面之间的关系。第五章系统实现。本章讲述了系统的实现,说明系统实现所必须的环境,如何布署,并以截图的方式将系统运行展示出来。第六章总结与展望。在本章总结了此次毕业设计的成果,并对该课题作进一步展望。第二章 相关知识2.1基本工具Microsoft Visual Studio .NET 2003 Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。2.

13、2开发语言C+、wxWidgets开发库(wxWidgets 2.8.8)2.2.1 C+1、简介C+是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。C+的设计原则:C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。2、语言发展C+语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C+语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工

14、业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流程序设计语言中最复杂的一员。12.2.2 wxWidgets1、简介wxWidgets是一个开源的跨平台的C+构架库(framework),它

15、可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。wxWidgets的主体是由C+构建的,但你并不是必需通过C+才能使用wxWidgets.wxWidgets拥有许多其它语言的绑定(binding),使你在用其它语言编写程序的时候也可以使用wxWidgets。22、优势1)(不得不放在第一位的)就是他无论对于个人还是对于商业应用都是免费的!它的主体框架的授权协议支持商业免费应用,其外围功能库中很多也是lgpl授权的,这无疑对于我等“0资本”的人来说是天大的好事。不同于gt之类的

16、跨平台gui库。2)他是跨平台的gui库,支持的操作系统很全面,甚至支持pda(说不定过一段时间他都能够支持symbian了)。 此跨平台非彼跨平台,它虽然不像java那样是“全面”的,而仅仅是gui库,但是gui是计算机编程中,最为麻烦、耗费时间、容易出现bug的部分,特别当你想要自己的软件运行在多个操作系统上的时候,开发和维护的难度让人难以想象。其实c+也是支持“跨平台”的,因为c+可以在任何平台上编译运行,之所以没几个人说他是跨平台的,主要问题就出在变量长度和各操作系统的gui(这里的“界面”我指得是很广义的)上,如果解决了gui的问题,基本上就解决了c+的“跨平台”问题至少不用为每种平

17、台都维护一份源代码了。3)wxwidgets提供的gui是大量使用宏的,这就意味着它是在尽可能的使用目标系统native的gui样式。你可以访问wxwidgets网站,看看那些开发的软件的截图,全是系统native级别的。如果你开发了一个xp系统的软件的话,你的软件会仍然以“xp专有的小贱人级别”的面貌展现在你面前。4)它支持的编译器也很多,而且borland也曾声明将在c+builderx2里边提供对wxidgets的支持预览版都出来了。其实我就是看到borland在c+不景气的时候,这么看重这个东东,甚至用它来做“王牌”,才开始注意到他的。当然,反过来,也正是borland的支持,才使他活

18、力大发的。5)自然,有牛X支持,而且是开源的,wxwidgets一直都在快速稳健的开发中,其周边工具也越来越多。 随着m$开始全力支持他的.net,c+成了“没落”的语言,但是不可否认,c+还是有很多用武之地的,所以根本不可能真正没落。没有了超牛X的支持,地球人自然开始寻求新的发展方式,wxwidgets这种开源免费,且允许商业应用的好东东,自然会被人们所重视。3第三章 系统分析俄罗斯方块这个游戏,做为一个玩家,游戏至少要有速度控制模块,才可以吸引玩家来玩。本游戏在总设计上,加入了游戏的速度模块、积分模块等可供玩家操作的模式。对游戏界面的设计,采用比较简单的设计思想。3.1 需求分析俄罗斯方块

19、是一个比较简单的游戏。它游戏过程仅需要玩家将不断下落的各种形状的方块移动、翻转,如果某一行被方块充满了,那就将些行消掉;而当窗口中无法再容纳下落的方块时,就宣告游戏的结束。根据本人的了解,俄罗斯方块游戏的需求分析是做为一个玩家来讲,需要此游戏所据有的功能。随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下:游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,

20、既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置三关,每关方块下落的速度不同。接口控制:本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘

21、的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。开发俄罗斯方块程序中,根据本人的认识和玩家的需求分析,要解决的技术难题如下:下落时,如果确定方块是否可以下落,即是否已经落到“地”。当玩家移动方块时,如何判断时方块是否可以移动,即是否由于左右边界和其他方块阻挡不能移动。当玩家翻转方块时,如果翻转方块同时要判断是否可以翻转。尤其是当条状方块在接近边界和其他方块时。如何判断一行已经填满并消掉,上面的一行下落一层。3.2 分析建模3.2.1游戏设计分析1、分析对象从面向对象的观念出发,本程序可分为以下几个对象:方块类型数据程序运算逻辑绘图显示平台分析对象的技巧在于它的重复利用及维护效率。试

22、想,若要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。42、方块类型数据方块类型虽然运送不同,但状态与行为都是相同的,如下表3-1所示。表3-1方块的状态与行为对 象 要 素说 明状态记录方块形状的变量行为方块根据x=y;y=2-x进行旋转3.2.2 功能分析图3-1为本游戏的功能分解图,从玩家的角度分析游戏应该有的功能。图3-1 功能分解图3.2.3 注意事项游戏在设计时除了将程序切割成多个对象外,在

23、游戏的逻辑运算上应尽可能做到弹性化。所谓弹性就是方块地图的长与宽应该可以用参数来改变。3.2.4 游戏流程图3-2为俄罗斯方块游戏的顶层图。游戏通过键盘控制,循环运行。按S键关开1.游戏开始控制游戏开关2.键盘控制台循环运行程 序 运 行图3-2 顶层图俄罗斯方块的详细流程图(图3-3)。否是否是否是游戏开始接受按钮的控制信息1. 检查满行2. 删除满行3. 重新装载方块产生控制方块下降的执行信息移动方块显示方块于屏幕中,检查方块在屏幕上是否有阻碍发生方块移动时是否有阻碍方块是否无法下移游戏结束图3-3 系统流程图(详细)下图为键盘的按键触发时的判断流程。无效有效按键保持不动可动2.1检查按键

24、2.2检查可移动性图3-4 键盘触发判断第四章 系统设计4.1游戏程序的构架设计源文件名: Game主窗口:main()方法装载所有的内容。游戏框架:GameFrame;游戏面板:GamePanel按钮:“开始”:重新开始游戏;“暂停”:暂停游戏;“停止”:停止正在进行的游戏;“升高等级”, “继续”:继续当前的游戏;“加速”使游戏速度减小“减速”,使游戏速度减小。布局:GridLayout(边界布局)。4.2 类图分析1、类图图4-1 系统类图2、类图说明表4-1 TetrisMain类类名称TetrisMain类描述俄罗斯方块主程序类。包描述main函数描述public static vo

25、id main(String args)俄罗斯方块主程序类。表4-2 BlockPane类类名称BlockPane类描述显示下两个块类。包描述frm函数描述public BlockPane()显示下2个方块的缺省构造函数。public void paint(Graphics g)完成下2个方块的绘制。表 4-3 GamePane类类名称GamePane类描述游戏面板类。练习使用Swing组件、ActionListener、内部类的使用。包描述frm函数描述public GamePane()缺省构造一个宽10,高20,每个格子高度为20的俄罗斯方块面板。public GamePane(int g

26、ridw,int gridh,int pixelWidth)按照指定的宽度、高度、格子高度构造俄罗斯方块面板。private void registerKey(AbstractAction a1,AbstractAction a2,AbstractAction a3,AbstractAction a4,AbstractAction a5)注册上、下、左、右方向键及快速下降的方法。public void removeKey()移除注册的上、下、左、右方向键事件。public void addKey()添加注册的上、下、左、右方向键事件。public void gameStart()游戏开始。pu

27、blic void gameStop()游戏结束。public void gamePause()暂停游戏。public void gameContinue()继续游戏。private void clearGrids()清空方框。public void paint(Graphics g)完成方块的绘制。public void actionPerformed(ActionEvent e)方块的下降事件。private void MoveFailed()当方块到底无法移动时的处理。private void showNextBlock()刷新显示下2个图形。private void changeGri

28、ds()无法移动时,把方块的非0的格子赋给方框。此处的逻辑比较复杂,考虑清楚再写!思路:循环将4*4的方块对应非0的格子颜色赋给方框对应的格子。难度:方块和方框如何对应。private String hasFullRow()检测新增加方块后,是否有满行。private void moveDownRows(String str)消除满行的方块。private void changeScore(int rowNum)修改成绩。内部类private class MoveLeftListener extends AbstractAction左移事件。内部类private class MoveRight

29、Listener extends AbstractAction右移事件。内部类private class MoveDownListener extends AbstractAction下移事件。内部类private class OneMoveDownListener extends AbstractAction快速下降事件。内部类private class ChangeListener extends AbstractAction方块变换事件。表 4-4 InfoPane类类名称InfoPane类描述成绩和下2个方块显示区。包描述frm函数描述public InfoPane()成绩显示面板构造

30、函数。public void setLevel(int level)设置当前级数。public void setLines(int lines)设置已消行数。public int setScore(int score)设置成绩。public BlockPane getBPane()获取该面板。public void clearScore()清空成绩。public int getLevel()获取当前级数。类名称TetrisFrame类描述俄罗斯方块主窗体。包描述frm函数描述public TetrisFrame()俄罗斯方块装窗体构造函数。public void actionPerformed

31、(ActionEvent e)按钮事件。表 4-5 Block类类名称Block类描述方块类。理解面向对象的思想。包描述data函数描述public Block(int type,int dir,Color color,int gridx,int gridy,int pixelWidth)按照指定的类型、方向、颜色、坐标、格子宽度构造一个方块。public boolean collide(Color grids)返回检测方块和格子的碰撞后的结果。碰撞有2个思路:1.分别检测左侧、右侧、下部的碰撞,底下注释的部分已实现。2.直接检测和方块交集的格子。public boolean moveLeft

32、(Color grids)方块的左移。public boolean moveRight(Color grids)方块的右移。public boolean moveDown(Color grids)方块的下移。public boolean changeDir(int dir,Color grids)变换方块。public void panit(Graphics2D g)方块的绘制。public void panitSmall(Graphics2D g,int n,int x,int y)小方块的绘制。getter/setter方法表 4-6 BlockCreater类类名称BlockCreate

33、r类描述块产生器。练习使用单子模式、工厂模式。包描述data函数描述private BlockCreater()块产生器私有构造方法。public static BlockCreater getBlockCreater()块产生器,的静态方法,也是块产生工厂。private void addBlock()向队列中添加块。public Block getNextBlock()得到队列中的下一个块。public Block getFirstBlock()得到队列中的第一个块。public Block getLastBlock()得到队列中的最后一个块。表 4-7 publicData类类名称pub

34、licData类描述成绩、级数的判断级别包描述data函数描述public publicData()设置升级、成绩、级数的判断的构造函数。4.3游戏程序的模块设计4.3.1 模块设计GameApp:应用程序类,相当与WinMain或main,为程序的入口控制类,负责创建应用程序实例和窗口线程。GameFrm:窗口类,为GUI,负责将用户的操作请求提交给游戏引擎(GameCore),同时将GameCore处理后的数据反馈出来主要是获取GameCore产生的当前游戏状况图和同时信息图,并将它们贴在窗口上。SetWindowShape方法设置窗口为不规则现状;OnLeftDClick方法处理鼠标右键

35、双击事件;OnMouseMove方法处理鼠标移动事件;OnLeftDown方法处理鼠标左键按下事件;OnLeftUp方法处理鼠标左键弹起事件;OnPaint方法处理窗口绘图事件OnTimer1Timer、OnTimer2Timer方法为游戏提供时钟支持;OnKeyDown方法处理键盘按键事件;GameCell:游戏引擎类,“俄罗斯方块”的核心,正是它才体现了“俄罗斯方块”的特别性。InitWall方法初始化游戏的参数NewBrick方法负责生成新砖块UpdateWall方法负责更新游戏显示数据CleanupBrick方法负责进行砖块消减可行性判断和消减砖块ShapeBrick方法负责进行砖块变

36、形可行性判断和变形MoveToLeft方法负责进行砖块左移可行性判断和向左运动MoveToRight方法负责进行砖块右移可行性判断和向右运动MoveToDown方法负责进行砖块下移可行性判断和向下运动bool GameOverTest方法负责检测游戏是否终止int GetCurrentScore方法获取当前成绩PlayMusic(int music_type)方法播放声音wxBitmap GetMsgBitmap()方法获取提示信息的图像wxBitmap GetCurrentWall()方法获取当前墙的图像。4.3.2 模块解析1)InitWall()方法(图4-2)图4-调用InitWall

37、()开启游戏,InitWall()是变量初始化,也是游戏的入口判断是 否按下空格或双击显示开启游戏的方法tip2 InitWall()方法InitWall()方法是游戏初始化,用双重循环把定义游戏地图的二维数组ShowWallYX和TrueWallYX赋为0,即清空游戏地图中的所有方块。也把每行方块数初始化,分数初始化,打开游戏地图清屏开关,再调用装载游戏方块Game_Start。2)方块的装载(NewBrick ()(图4-3)是否7654321随机抽取一个数随机数一字形Z字形反Z形7字形反7形倒T形田字型游戏是否结束保存当前方块坐标显示方块于屏幕上游戏结束调用destroy()关数初始化返

38、回开始界面图4-3方块的装载(NewBrick ()方块装载(NewBrick ()方法)定义一个随机变量,然后调用随机函数(rand=(int)(Math.random()*7)+1),所取得的随机数在1到7之间,用这7个数字表示7中常见的方块,并从7种方块中随机抽取图形。每一种方块都是由两个一维数组(x,y)表示的,其中一个用来保存方块所在行,另一个数组用来保存方块所在列,这样有利于方块在屏幕上准确而有活动的定位。所有7种图形都是在三行三列的地图中研究后给出的坐标,给出的坐标也是方块在游戏地图中靠最顶行的坐标。这就好象方块存在于一个三行三列大小的图形中而够成的一张图片。图片的运动也就是方块

39、的运动,这样,要实现方块的变形,就要在三行三列的图形中定义一个最左上角的基点,方块运动,基点也跟着运动。基点坐标在加载方块是加载,基点的存储空间在加载每个方块数组的最后定义。这样使得方块在游戏地图中的每一个地方都可以变形。也不会因为变形而方块在游戏地图中的变动很厉害,出现瞬移的现象。图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游戏地图的顶端,游戏将结束。没有则先把方块坐标保存,这是为了在方块向下移动的时候在它的后面不会有虚假的方块,因为方块向下运动,记录的是新一行的方块坐标,但旧一行的没有消掉,所以要先旧方块的坐标保存起来,搽掉旧方块再显示方块。这样也会减少屏幕的

40、闪烁问题。3)处理键盘事件(OnKeyDown())(图4-4)上左右下是否判断是否按空格键且游戏游戏还没开始按键等待开启游戏开关判断按键图形变化调用change()方法1. 判断可移动性2. 可以则移动1.判断可移动性2.可以则移动1.判断是否能再向下移2.可以则向下移调用OnPaint()将发生变化后的方块显示在屏幕上用save()保存原有坐标 图4-4 键盘事件功能图(OnKeyDown ())OnKeyDown ()是处理按键的事件,刚开始运行程序时,游戏还没有开始,这时除空格键(解键盘锁的键)是有用外,其他的键都给锁住,这样可以避免键盘过早的控制游戏。在判断是否在S键的语句中还加了对

41、游戏锁取反并判断是否为真的语句,两个语句同时成立时,才会解开游戏锁,程序开始时,游戏还没有开始,游戏锁是关的,但是取反后它就是真的,所以只要按下空格键后,两个语句都成立。这样做是为了在游戏开始时再按下S键,游戏不会重新开始,即游戏开始后,S键就没有用了。按下空格键后,游戏锁才被解开,键盘也被解开。每当有按键,也就是方块要产生变化时,先保存方块的坐标,便于清理旧方块,显示新方块。当方块要进行上(变形)、下、左、右变化时,先对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键执行相关的操作。再把方块的位置显示在屏幕上。方块的移动其实也只是对行或列坐标的增减而己

42、。4) 方块变化(ShapeBrick ())不可变可变采用x=y;y=2-x的逆时针旋转规则产生新坐标新点坐标赋给控制方块变量方块变化(按向上键)检查可变性不发生任何改变图4-5方块变化(ShapeBrick ())当按下向上键时,将会执行方块变化事件(ShapeBrick ())。常见的方块有7种(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),所有图形都是用两个一维数组来统计它的横坐标和纵坐标,每个方块有4种不同的变化形状,所以我对7种图形都做要详细的研究和分析,得到了一个方块逆时针旋转结论:x1=y;y1=2-x;其中x,y代表方块变化前的坐标,x1,y1代表方块变化后的坐标

43、,这样使方块成功的变化。这里的变量和游戏中的无关,只用于此处说明。但田字形的方块用上面的变化规则时,方块晃动的厉害,所以上面的规则只能作用与其他6种图形。因为田字形本身的变化也是原来的图形,有变化和没变化一样,可以对它不作改变,即按下向上键时,不对田字型的做改变。这样就可以解决田字形变化的问题。还有两个Z字形和一字形变化不是很规范,但没有太大的问题,所以为了避免麻烦我就没有处理这些问题。当图形要改变时,它将先判断变化后的位置是否没有任何小方块,或是否已到达游戏地图的边缘,如果有小方块或到达边缘,则不执行方块变化,这也是一种障碍物的判断;如果没有的才处理方块变化。至于处理障碍物的方式与处理方块向

44、左运动的方式差不多,所以在这不做详细的解说。5)控制游戏速度与自动下降(MoveToDown())(图4-6)否是是否游戏是否开始游戏暂停判断方块是否到达底行或下面己有方块调用到达事件方块向下移动一行调用显示控制OnPaint()图4-6 控制游戏速度与自动下降(MoveToDown())6) 判断满行及消行(图4-7)是否是否否是是否判断当前行是否为空判断当前行是否为满判断是否有满行判断移动行方块是否为空当前行向上推动一行将要移动行所有数据移至当前行将当前行的所有数据初始化统计连续几行为满如果有消行,则开启消行锁。接上图2点堆积方块,统计每行方块数目图4-7判断满行及消行图满行判断及消行是到

45、达事件中的一部分,是方块堆积,并对每个小方块所在行个数统计后,利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断是不是空行,如果那一行是空行则证明它以上的所有行都将不会有方块,也就不必要向上查找了。不是则判断当前行是否满行的,如果满行则看有个连续几个满行的在一起。然后再判断是否有行满的情况,否的话就继续检查上一行。不然就进行消行处理及方块下移。最后再向上查找满行情况直到本行为空时为止。消行及方块下移:当有行满时,则说明需要消行,有消行那么所有方块则要下移。当本行满时,则以间隔为1向上查找,当遇到所查找的行也是满行,那么它的间隔自增1,然后继续向上查找,直到那一行不是满行的情况,则将此行所有数据信息移到本行,以后本行以上的每行都会以这个间隔去判断它将获得的那行数据,可以则继承,不然和上述一样操作。如果将获得的那行数据为空行,则只须对本行的数据清空即可,那么方块下移也就完成。4.3界面设计1、游戏界面(图4-8)图4-8游戏界面上部分显示游戏说明和下一个出现的方块的形状,下半部分为游戏部分。图4-9游戏界面(上)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号