资源大小: 344KB
发布时间: 2011-08-03
文件格式: zip
下载次数: 4
分享到:

下载地址:

下载地址1
(本站为飞网专业下载站,域名:down.cfei.net)

资源简介:

打方块游戏源码游戏的玩法很简单,两个或两个以上连接在一起的方块可以用鼠标点击消除并获得分数,连接的方块数越多获得的分数越高。游戏的目标是在计时器倒计时结束之前内尽可能多的获得分数,当分数到达一定的目标分数后,计时器重置,当然此时目标也会提高。当剩下的方块已经不能再消除时,会自动重新填充,并且等级上升1级,每5个等级增加一种颜色的方块。不过目前一共只有5种颜色,因此在15级以上就不会再增加新的颜色了。游戏中设置了三种道具,从截图可以看出来有炸弹、闪电和数字三种。炸弹的功能是消除半径为两格内的方块,闪电的功能是让消除面积扩展一格,数字的功能是让获得的分数翻倍。这些道具是通过消除方块取得的分数累加来获取的,不同颜色的方块获取不同的道具。红色方块获得炸弹,黄色方块获得闪电,绿色方块获得数字。所获得的道具不会在本级生效,而要到下个级别才会出现。技术部分先说明几个程序中主要用到的类型:BlockGameEngine 游戏引擎类,这是整个游戏的根元素,用于对游戏进行总体控制,它本身并没有什么业务逻辑。 BlockMap 方块分布图,用于存储方块的位置信息。 Block 这是方块的基类,包含了方块的类型、位置、状态等信息。其派生类MultipleBlock, ExplosionBlock和SpreadingBlock分别实现了道具的相关功能。 RenderingContext 绘制图形的上下文,其中包含了图形界面中各个部件的布局参数。 Canvas 这是游戏与桌面窗口交互的Windows控件。 ILayer 表示游戏图层的接口,它的主要方法Render由Canvas调用,进行图形的绘制。 IAnimatable 表示动画元件的接口,它的主要方法Move由AnimationController类调用,进行动作控制。 BlockRenderer 用于方块绘制的静态类,主要功能是绘制和生成方块。由于目前方块都是程序在运行时生成的,因此该类型会在初始阶段生成所有方块的图形以进行缓存。 简单解释一下程序的实现方式。程序中设置了两个主线程,一个在Canvas中用于图形绘制,主要侧重于图像的绘制,如画方块、文字、图片什么的;另一个在BlockGameEngine中用于动作控制,侧重于时间的控制,在此线程中,各种不同的IAnimatable根据时间控制自身的位置、大小、帧编号等,这些信息都会在图形绘制线程中用于呈现。为了更方便地控制图形显示,我将图形的绘制分为N个层(ILayer),每个层负责绘制自己的内容。现在用到的主要有这样几个层:背景层(BackgroundLayer):用来绘制背景,如截图中的紫色部分。方块层(BlocksLayer):用于绘制方块,以及方块的动画,并提供了与用户的交互。分数层(ScoreLayer):用于绘制当前游戏过程中用户所获得的分数等情况。考虑到每一层与用户的交互有所不同,因此交互部分也是由层来实现的。IInteractiveLayer接口提供了这种交互的几个成员,OnMouseActive、OnKeyboardActive用于提供用户的动作。现在仅有BlocksLayer实现了该接口。 不得不说说动画部分。最初的考虑是为每一个动画创建一个线程,不过我担心动画一旦多了会导致线程数量很大反而影响性能,因此考虑用上述两个线程来控制和绘制动画。为了提供比较灵活的控制方式,我把动画部分分成了两类,一类是动作(MotionBase),一类是动画(AnimationBase),它们都实现了IAnimatable接口。IAnimatable只提供了一个成员,就是Move方法,在动作控制线程中,我不断调用每个IAnimtable对象的Move方法以实现动作的变更。MontionBase注重的是动作的分解,它的每一帧持续时间都相同,在Move方法中根据时间推算出当前的帧编号和百分比。而Animation注重的是帧的变化,在Move方法中根据每一帧的持续时间来计算当前帧编号。程序现在还有许多功能没有实现,同时还存在一些BUG,罗列如下:* 没有美工支持,界面比较单调,方块(特别是道具)画得有点粗糙。* 排行榜没做,没法记录最高分什么的。* 本地化还没有做。* 有些效果没有实现,比如获得奖励分数什么的。* 音乐和音效没有。* 图形菜单没有实现。* 线程同步上可能会出现问题。* 时间计算不够精确,并且存在致命BUG。(试试在游戏运行时更改系统时间)* 将来考虑移植到Windows移动设备上。


飞网下载站,免费下载共享资料,内容涉及教育资源、专业资料、IT资源、娱乐生活、经济管理、办公文书、游戏资料等。