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!

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

  1. 三消游戏FSM状态机设计图

    三消游戏FSM状态机设计图 1) 设计FSM图 2) smc配置文件 ///////////////////////////////////////////////////////////////// ...

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

    cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...

  3. 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack

    因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...

  4. FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别

    游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”, ...

  5. SMA、SMB、SMC封装的二极管

    以常见的贴片肖特基二极管SS14 SS24 SS34为例,三种管子区别主要在电流上,有三种封装:SMA.SMB.SMC. 从成本和体积来说,优先选用最小尺寸的SMA/DO-214AC封装,其他封装一般 ...

  6. 有限状态机(FSM)

    在游戏开发中,AI是个永恒不变的话题,如果你要的AI只是很简单的一个逻辑 那么有限状态机是一个很好的解决方案,尽管在实际开发中,AI的设计并不是一个简单的逻辑, 如果用有限状态机,维护起来会非常麻烦, ...

  7. FSM 浅谈

    之前写过一篇关于状态机的,上一篇讲过的我也就不再罗嗦了,不知道欢迎去查看我的上一篇随笔,主要是感觉上次自己封装的还是不行,所以又进行修改了一番! 我本人是个菜鸟,最开始接触状态机的时候,状态机一个可厉 ...

  8. Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx

    Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\Java ...

  9. 实现简易而强大的游戏AI——FSM,有限状态机

    http://blog.friskit.me/2012/05/introduction-of-fsm/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...

随机推荐

  1. Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence

    [题意概述] 找两个字符串的最长不公共子串. [题目分析] 两个字符串的最长不公共子串就应该是其中一个字符串本身,那么判断两个字符串是否相等,如果相等,那么肯定没有公共子串,输出"-1&qu ...

  2. Java课程设计常见技术问题(程序部署、数据库、JSP)

    1. 部署方法 Eclipse下打包 右键点击项目-Export-Runnable JAR file,选择正确的Launch configuration,接下来根据提示可以将项目中用到的jar打入包中 ...

  3. Bootstrap3 表单-被支持的控件:输入框

    输入框包括大部分表单控件.文本输入域控件,还支持所有 HTML5 类型的输入控件: text.password.datetime.datetime-local.date.month.time.week ...

  4. Dynamics 365 你所期待的子网格编辑终于来了

    Dynamics 365的online版本已经在11月1号发布了,on-premises版也在没几天后发布,今天略看了一眼 what's new 一眼就看到了 editable grids,这个不用我 ...

  5. Android存储之SQLite数据库

    Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...

  6. Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...

  7. AsnycTask的内部的实现机制

    AsnycTask的内部的实现机制 写在前面 我们为什么要用AsnycTask. 在Android程序开始运行的时候会单独启动一个进程,默认情况下所有 这个程序操作都在这个进程中进行.一个Androi ...

  8. mysql-workbench工具update(更新)失败的解决办法

    是因为安全模式的保护,所以我们需要设置一下: 如下:windows下是edit–>preferences–>SQL Editor 把右边的最后一行,"safe update&qu ...

  9. 插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903 前言:为什么要了解系统Activity,Service,BroadCas ...

  10. TCP的发送系列 — tcp_sendmsg()的实现(二)

    主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函 ...