FSM之SMC使用总结

FSM之SMC使用总结

Part1: Smc.jar state machine compiler usage

Reference:
     http://smc.sourceforge.net/

(Updated February 16, 2015)
   
 Downloads:
     http://sourceforge.net/projects/smc/files/

1) show help:

$ java -jar ./Smc.jar -help

2) generate java (c, cpp, js, python, object-c ...) classes from user_defined.sm file:

$ java -jar Smc.jar -c++ user_defined.sm
$ java -jar Smc.jar -graph -glevel 1 user_defined.sm

A Filename.dot file also generated (Filename should replaced by actural dot filename).

$ java -jar ./Smc.jar -java7 user_defined.sm

3) generate a workflow map

You need graphviz installed first, and add path to .../bin/dot.exe into system environments. in my pc, that is:

C:\DEVPACK\graphviz-2.38\release\bin

Now enter folder of Filename.dot generated in step 2), and type:

 $ dot Filename.dot -Tpng -o Filename.png

Enjoy it!

Part2: Example

1) user_defined.sm. The only file we should created by hands

///////////////////////////////////////////////////////////////////////
// ColorTable.sm
//   -- ColorTable State Map for C++ classes auto-generation
//
// 1) generate c++ classes:
//   $ java -jar Smc.jar -c++ ColorTable.sm
//
// 2) generate graphviz dot graph:
//   $ java -jar Smc.jar -graph -glevel 1 ColorTable.sm
//
// see also:
//   http://graphviz.org/
//
// Author: cheungmine
// Copyright 2015-?, All rights reserved.
//
///////////////////////////////////////////////////////////////////////
%class ColorTable
%header ColorTable.h
%start ColorTableMap::Shuffle
%map ColorTableMap
%%
/**
* State {
*     Transition [Guard Condition]
*         EndState {
*             Action(s)
*         }
*
*     Transition [context.getOwner().is_valid()]
*         EndState {
*             Action(s)
*         }
*     ...
* }
*/
Shuffle
Entry {
    enterShuffle();
}
Exit {
    leaveShuffle();
}
{
    Next [ context.getOwner().shuffleDone() ]
        Swappable {
			//=>user swap actions
        }
}

Swappable
Entry {
    enterSwappable();
}
Exit {
    leaveSwappable();
}
{
	Next [context.getOwner().swapDone() && context.getOwner().canErase()]
        Erasable {
        }
	Next [context.getOwner().swapDone()]
		Shuffle {
		}
}

Erasable
Entry {
    enterErasable();
}
Exit {
    leaveErasable();
}
{
	Next [ context.getOwner().eraseDone() ]
        Collapse {
        }
}

Collapse
Entry {
    enterCollapse();
}
Exit {
    leaveCollapse();
}
{
	Next [context.getOwner().collapseDone() && context.getOwner().canErase()]
		Erasable {
		}
	Next [context.getOwner().collapseDone()]
		Crash {
		}
}

Crash
Entry {
    enterCrash();
}
Exit {
    leaveCrash();
}
{
    Next [ context.getOwner().crashDone() && context.getOwner().canErase() ]
        Erasable {
        }
    Next [ context.getOwner().crashDone() ]
        Swappable {
			//=>user swap actions
        }
}
%%

2) generate all derived files(default is c++):

$ java -jar Smc.jar -graph -glevel 1 ColorTable.sm

3) generate flow map using graphviz:

$ dot ColorTable.dot -Tpng -o ColorTable.png

没图你说个毛! 以下上图:

Game Over!

时间: 2024-11-25 09:36:50

FSM之SMC使用总结的相关文章

SMC --- COCOS2D-X 状态机代码生成工具

一.简介 利用有限状态机来控制对象的行为,其原理就是利用多态,常常我们自己写代码,需要很大篇幅,万一需要再加一个或者几个状态,那么我们自己维护时就会很麻烦,SMC这个工具可以帮助我们解决这个问题. 使用这个工具之前我们需要jdk环境,最新版的SMC支持jdk1.7,之前版本的SMC支持jdk1.6,要想中间没有问题,我们一定要将电脑上的jdk版本与SMC的jdk版本对应起来. 下载地址:http://sourceforge.net/projects/smc/files/ SMC可以通过一个配置文

cocos2d-x 游戏开发之有限状态机(FSM) (四)

cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge.net/)就是这样的工具.下载地址: http://sourceforge.net/projects/smc/files/latest/download 在bin下面的Smc.jar是用于生成状态类的命令行工具.使用如下命令: $ java -jar Smc.jar Monkey.sm 1 真实世

从FSM到正则表达式

本文以一个有限状态自动机(FSM)为例来介绍几种从有限状态自动机转化为正则表达式的方法. 有一个FSM能接受能被3整除的二进制串(如字符串0,其十进制为0(考虑其到初始状态,认为读到0,亦为可接受状态):字符串11,其十进制为3:字符串110,其十进制为6:......这些都可接受).这个有限自动机的图形表示如图1所示: 下面讲叙将图1所表示的FSM转化为正则表达式. 第一种方法,从实质出发: 其实质为:从A状态出发经过若干次(包括0次)转移(途径),最终恰好回到状态A.所谓求正则表达式,即对这

网络仿真中的有限状态机(FSM)

最近在看<OMNET++ User Mannul>,了解到了有限状态机的工作机制.相比早之前看过的<OPNET xxx>教材中讲解FSM不明不白,<OMENT++ User Mannul>讲解的更为清晰简洁,且有偏底层的代码做实例,更易理解. FSM是指完成模块功能的一种手法(例如OMNET++中的模块功能可选择是否由FSM完成),下文的FSM均指模块中的FSM. 构成FSM的主体为状态(State)和状态跳转(State Transition),其中状态分为两种:1)

有限状态自动机FSM实现(二)--State模式

基于switch结构的有限状态自动机的实现已经在前一篇博文中给出,请猛击. State模式适用于如下情况: 1)一个对象的行为取决于它的状态,并且必须在运行时根据状态改变它的行为. 2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态. State模式包含如下对象: Context对象 1)定义客户感兴趣的接口. 2)维护一个State子类的实例,这个实例定义当前状态. State状态对象 定义一个接口封装与Context的一个特定状态相关的行为. 以下图为例:TCPConne

Unity3D 利用FSM设计相机跟随实现

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 FSM有限状态机前面已经跟读者介绍过,使用Unity3D引擎实现了动作状态以及技能切换,FSM使用的条件是有限个状态切换,我们可以将FSM应用到相机中,很多人会问在相机中如何使用FS

Unity FSM 有限状态机

翻译了一下unity wiki上对于有限状态机的案例,等有空时在详细写一下.在场景中添加两个游戏物体,一个为玩家并修改其Tag为Player,另一个为NPC为其添加NPCControl脚本,并为其将玩家角色和路径添加上去.(该案例利用状态机简单的实现了一个NPC的简单AI---巡逻---看到玩家----追逐玩家----丢失玩家----巡逻) 效果: 状态机: 1 using System; 2 using System.Collections; 3 using System.Collection

FSM有限状态机的实现

参考原地址:http://www.manew.com/thread-48266-1-1.html 在查看了这么多状态机的文章后,终于找到个看懂的了,在此很感谢那位作者.果然还是要把代码下载下来慢慢分析才知道. 普通的AI逻辑都很简单,都是switch/case这样的形式,这个形式跟简单工厂模式非常类似,然而我们的工作是把模式改为工厂模式,即把那些case改为单独的状态类. 先从最简单的状态类来说明,先来一个状态抽象基类:FSMState.所有的状态类都继承自这个基类,比如巡逻类.攻击类.作为所有

三段式fsm

1.状态转移的always中CS,同步ouput的always中NS. 2.3段fsm vs 2段fsm:output逻辑是组合逻辑和同步时序逻辑(消除里不稳的和毛刺). 3.3段fsm vs 1段fsm: output都是同步时序逻辑,直接根据NS描述output和另外还要考虑状态转移条件描述output. 4.段式划分不是数always个数,而是每种段式对应有固定的描述内容和格式化的结构.强调的是建模思路. 5.3段fsm,解决了2段fsm中不改变时序要求的前提下用寄存器做状态输出的问题.