MVC_俄罗斯方块

首先是MVC 架构 降低耦合度 分为三层
Model层:存取数据,数据相关操作
View层:处理视图,交互部分
Control层:控制游戏逻辑,通过Control来控制Model与View层
Model与View不直接交互 而是通过Control来交互 (不知道是不是像中介者模式) 降低耦合度
几乎UI的动画都在View层里面制作的 涉及到数据的修改 就放到Model里面去
例如清空记录 数据的更新等 




游戏有限状态机
初步理解:就是设计游戏中的几个状态,通过条件控制游戏在这几个状态中跳转,并且只能处在一个状态
菜单状态  游戏状态 暂停状态 游戏结束状态
FSM有限状态机:
四个部分
  1.Transition  枚举类型 条件 即发生状态装换的条件
  2.StateID     枚举类型 状态 即所有的状态
  3.FSMState    抽象类 
     数据成员: Dictionary<Transition, StateID>  用字典表示当前可以用某个条件转换到某个状态
                StateID stateID   当前的状态
     方法成员: AddTransition(Transition trans, StateID id) 将当前条件 状态 添加到字典
                DeleteTransition(Transition trans)  将当前条件 状态 从字典删除
                StateID GetOutputState(Transition trans)  从给定的条件找到对应的状态
                virtual void DoBeforeEntering()  进入当前状态时调用
                virtual void DoBeforeLeaving()   离开当前状态时调用


 4.FSMSystem   实体类 管理所有的状态
     数据成员:List<FSMState> states; 所有的状态
               StateID currentStateID;   当前的状态  这个可以不需要 
               FSMState currentState;     当前FSMState


     方法成员: FSMSystem()  构造函数
                AddState(FSMState s)  添加状态
                DeleteState(StateID id) 删除状态
                PerformTransition(Transition trans)  提供一个转变条件 到转变状态

使用方法: 首先构造你需要的状态 并且设置当前状态和(键值对(装换条件和状态))

                 构造有限状态机 添加所有的状态 

                设置默认状态 将FSMSystem里面的设置迷人状态的代码去除

                 给每个状态添加ID

                通过 状态---->状态

               每个State要引用FSMSystem


游戏实现的原理:
用一个Transform数组存储地图 
当Shape每下落一个单位 就检查当前位置是否可用 
不可用 回退一个单位 将当前的Shape停止运动 
将Shape装入Transform数组中
检查是否有行可以消除
可以消除  销毁当前行的物体 Map中代表当前行的置空 上面的所有行向下移动一个单位 继续检查当前行
不可以销毁 继续向上检查
 


其他:
对于一个图片怎么设置他在Scene中的单位呢 因为图片是以像素来计算的,Pixels Per Unit的值为50表示在这个场景中50像素代表一米


在设计基本shape的时候用一个物体来保存旋转点。


一个父物体 下面有几个子物体 如果遍历父物体的Transform 就可以得到父子物体的Transform


扩展方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值