发表于: 2017-03-31 23:09:21

4 1555


web小课堂----有限状态机是什么?

1.背景介绍

什么是有限状态机?

定义:描述有限个状态 以及在这些状态之间的 转移和动作等行为 的数学模型(1)

2.知识剖析

在js中,新建一个对象,
用这个对象的属性来模拟元素的状态,
                       用这个对象的方法模拟元素在不同状态的转变,
那么这个对象就是一个有限状态机

是否可用有限状态机来描述,却决于:
                       当前状态确定,有限个状态,响应事件,在不同状态间有规律的转变。

常见问题

有限状态机有哪些应用场景?

解决方案

满足3点即可用:所需状态确定,有事件触发转变状态,总状态有限且转变有规律。

页面可用有限状态机的元素较多且有规律时可用:例如:开关按钮,下拉菜单,

举例:《杀人游戏的玩家死活状态、白天黑夜状态、》

编码实战
定义一个有三个状态的有限状态机

扩展思考

  • 有限状态机有哪些优点,解决了工程中的什么问题?
  • 有限状态机里的this是如何指向的。
  • 有限状态机的其他写法

参考文献

ppt链接:https://ptteng.github.io/PPT/PPT/js-03-finiteStateMachine.html#/

demo链接:https://ptteng.github.io/PPT/demo/js-03-finiteStateMachine/js-03-finiteStateMachine.html#/

视频链接:https://v.qq.com/x/page/l0389copf7a.html

文本链接:http://jnshu.com/daily/19278?uid=6039



今日完成:

1 日常任务:回复日报,小课堂-有限状态机,wiki视频链接。

2 杀人游戏的核心逻辑,试着用有限状态机来描述,

》一个玩家的有限状态机的工厂函数。没有经过实验。描述了玩家的所欲状态和转换逻辑,可以用来作为游戏的核心逻辑,没有经过实验。

function createGamer(name){//玩家的状态机 的工厂函数
   var o={
       state:{
             name:name,
             identity:"平民",//"杀手"
   aliveState:"alive",///null
   deadState:null,//"killDead"."voteDead"
   deadTime:null,
       },
       trans_identity:function(){
           if(this.identity=="平民"){this.identity="杀手"}
           else(this.identity="平民")
       },
       trans_aliveState:function(){
             if(this.aliveState=="alive"){this.aliveState=null}
             else{this.aliveState="alive"}
       },
       trans_deadState:function () {
             switch (localStorage.pageType) {
                 case "killerPage":
                     this.deadState = "killDead";
                     break;
                 case "votePage":
                     this.deadState = "voteDead";
                     break;
                 default:
                     break;
             }
       },
       trans_deadTime:function () {this.deadTime=localStorage.day},
       event_Kill:function () {
             this.trans_aliveState();
             this.trans_deadState();
             this.trans_deadTime();
       },
       event_assignIdentity:function () {this.trans_identity()}
   };
   return o;
}

明日计划“:

1 日常任务:回复日报,小课堂上传,官网视频。

2 任务9,图片上传,应该能完成原生方法的上传,然后换用angular插件上传。

问题:收获:

对有限状态机了解的更深入了。

小课堂要从3方面由浅入深,由抽象到具体:

》定义 == 》代码实例  ==》在任务中的应用

这样才能让别人理解和运用。是要教会别人,而非向别人做汇报。






返回列表 返回列表
评论

    分享到