首页 [ 游戏娱乐 ] 打方块游戏源码
一键分享

打方块游戏源码

  • 免费

2010-09-08 10:29:32

  • 源码类型: C/S
  • 开发环境: VS2010 + 无数据库
  • 开发语言: C#
  • 标签: GDI 线程 游戏源码
  • 评分:
收藏 282 次|关注 5583 次|下载 385 次

免费


交付物: 源码包
    商家已实名认证
  • 分享者:51asp***
  • 访问次数:   312674 次
  • 源码数量:   1241 套
  • 通过比率:   97%
  • 活跃于:   三个月前
  • TEL:   13*******71
  • 最新IP属地:杭州市
  • 微信扫码咨询
.net

源码介绍

源码参数

  • 源码类别:【游戏娱乐】
  • 源码类型:C/S
  • 适合人群: 进阶
  • 授权类型:免费版
  • 开发语言:C#
  • 数据库:无数据库
  • 源码大小:305K
  • 相关网址: 【免费浏览】
  • 源码指数:
  • 完整度:
  • 游戏界面
  • 游戏进行
  • 游戏暂停
  • 游戏界面
  • 游戏进行
  • 游戏暂停
  • Aspx.Query.CodeImageQueryModel
  • Aspx.Query.CodeImageQueryModel
  • Aspx.Query.CodeImageQueryModel

打方块游戏源码

游戏的玩法很简单,两个或两个以上连接在一起的方块可以用鼠标点击消除并获得分数,连接的方块数越多获得的分数越高。游戏的目标是在计时器倒计时结束之前内尽可能多的获得分数,当分数到达一定的目标分数后,计时器重置,当然此时目标也会提高。当剩下的方块已经不能再消除时,会自动重新填充,并且等级上升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移动设备上。

责任编辑:wxc

下载记录(Only Recent 100)

用户名 推荐指数 下载时间

源码评论

单击更换

评论列表

全部评论
  • 暂无评论 …

最近更新

      下载排行