unity 3消 游戏
3消游戏跟着智能手机流行到现在已经有很长一段时间,unity实现的3消 https://github.com/textcube/match3action
截图如下:

在阅读源码的时候不难发现,GameSystem所负责的东西太过繁重,很多时候总是要很费力去分清哪些是对ui进行处理,哪些是进行数据处理,哪些又是在进行逻辑判断。
源码类图如下:

要注意的是,Cell是引用类型。 MatchItem 里面所存放的cell,和GameSystem中所存放Cell[,]对应的cell项是指向同一内存地址的。修改其中一个会影响到另外一个。稍不注意便会引发错误。
于是尽管源码条理清晰,命名规范,还是决定动手重构。
大致方向是抽象多一个数据操作层CellDataManager出来,进行数据初始化,检测是否符合三消条件,数据交换等操作,供GameSystem。
关于分层,开发群里面有个“演员”的比喻可以跟大家分享一下:
“只把u3d的东西当作显示对象来用的话,就没必要太过纠结.
逻辑对象和显示对象身份不混合,各干各的,相安无事.
比如说碰撞,有一种方法叫代理碰撞检测,就是演员在这演着,在看不见的地方,只有几个粗糙的布偶在做碰撞的交互,一旦有交互同步告知演员即可.
虽然各个问题都需要具体分析.不过能把各个问题清晰的分开,就不要混在一块儿,混了之后妄图通过什么设计模式来解决是行不通的.”
在3消游戏里面也是差不多的道理:
底层一个2唯数组存放着信息,在进行ui操作的时候调用对应的 数据操作api。判断是否符合3消条件,符合返回消除项的id,进行对应的ui逻辑处理,不符合则进行其他ui处理。
重构后类图如下:

重构后项目地址:https://coding.net/u/fatlin/p/Match3Game/git
unity 3消 游戏的更多相关文章
- Unity中制作游戏的快照游戏支持玩家拍快照
Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...
- Unity塔防游戏开发
Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...
- unity开发android游戏
环境搭建: Unity+JDK+Android Studio+Android SDK(+NDK) 教程:unity开发android游戏(一)搭建Unity安卓开发环境 注意“Build System ...
- Siki_Unity_1-8_使用Unity开发2D游戏_PongGame
Unity 1-8 使用Unity开发2D游戏 PongGame 任务1:演示 http://pan.baidu.com/s/1pKUHsev; up2i 任务2:案例介绍 创建PongGame,注意 ...
- unity开发android游戏(一)搭建Unity安卓开发环境
unity开发android游戏(一)搭建Unity安卓开发环境 分类: Unity2014-03-23 16:14 5626人阅读 评论(2) 收藏 举报 unity开发androidunity安卓 ...
- Unity破窗游戏制作(简易版)
Unity破窗游戏制作(简易版) 参考:"对不起,我选择摸鱼"-<扫雷>小游戏开发实战,算法.源代码,基于Unity3D开发 - 掘金 (juejin.cn) 到&qu ...
- Unity 3D学习之《Unity 3D 手机游戏开发》1
P10: 设置断点步骤02,在Project窗口右键(是在下图中的红色区域,点右键)选择[Sync Mono Develop Project],打开MonoDevelop编辑器 P11: " ...
- Unity关于获取游戏对象
我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能直接找到你,你也能直接找到我.我看很多人喜欢在类里面去保存GameObject对象.解决G ...
- 总结使用Unity 3D优化游戏运行性能的经验
原地址:http://www.gameres.com/msg_221889.html 作者:Amir Fasshihi 流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow ...
随机推荐
- 你所不知到的C++ 系列
http://blog.csdn.net/doon/article/category/2926337
- Perl 内部结构详解
PerlGuts Illustrated Version 0.49, for perl 5.20 and older This document is meant to supplement the ...
- IOS UIView子类UIScrollView
转自:http://www.cnblogs.com/nightwolf/p/3222597.html 虽然apple在IOS框架中提供了很多可以直接使用的UI控件,但是在实际开发当中我们通常都是要自己 ...
- 基于jquery的侧边栏分享导航
今天给大家分享一款基于jquery的侧边栏分享导航.这款分享钮一直固定于左侧,鼠标经过的时候凸出显示,这款分享按钮适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...
- The Kernel Newbie Corner: Kernel Debugging Using proc "Sequence" Files--Part 1
转载:https://www.linux.com/learn/linux-career-center/37985-the-kernel-newbie-corner-kernel-debugging-u ...
- 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较 ...
- mongodb 安装为windows服务
mongodb 安装为windows服务: 以管理员身份运行下面的命令: mongod --install --rest --dbpath e:\data\mongo --logpath e:\dat ...
- (搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)
(搬运)<算法导论>习题解答 Chapter 22.1-1(入度和出度) 思路:遍历邻接列表即可; 伪代码: for u 属于 Vertex for v属于 Adj[u] outdegre ...
- pyenv的安装和使用
1. 先安装crul和git sudo apt-get install curl git-core 2. 安装pyenv curl https://raw.github.com/yyuu/pyenv- ...
- AngularJs指令(一)
AngularJs应用现在越来越流行了,谷歌都与微软合作支持AngularJS2.0,这是要逆天了,说明AngularJs将来大势所趋.最近想跳槽,又重新拾起了AngluarJs(之前由于缺少项目应用 ...