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!
FSM之SMC使用总结的更多相关文章
- 三消游戏FSM状态机设计图
三消游戏FSM状态机设计图 1) 设计FSM图 2) smc配置文件 ///////////////////////////////////////////////////////////////// ...
- cocos2d-x 游戏开发之有限状态机(FSM) (四)
cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...
- 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack
因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...
- FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”, ...
- SMA、SMB、SMC封装的二极管
以常见的贴片肖特基二极管SS14 SS24 SS34为例,三种管子区别主要在电流上,有三种封装:SMA.SMB.SMC. 从成本和体积来说,优先选用最小尺寸的SMA/DO-214AC封装,其他封装一般 ...
- 有限状态机(FSM)
在游戏开发中,AI是个永恒不变的话题,如果你要的AI只是很简单的一个逻辑 那么有限状态机是一个很好的解决方案,尽管在实际开发中,AI的设计并不是一个简单的逻辑, 如果用有限状态机,维护起来会非常麻烦, ...
- FSM 浅谈
之前写过一篇关于状态机的,上一篇讲过的我也就不再罗嗦了,不知道欢迎去查看我的上一篇随笔,主要是感觉上次自己封装的还是不行,所以又进行修改了一番! 我本人是个菜鸟,最开始接触状态机的时候,状态机一个可厉 ...
- Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx
Atitit.java expression fsm 表达式词法分析引擎 v2 qaa.docx C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\Java ...
- 实现简易而强大的游戏AI——FSM,有限状态机
http://blog.friskit.me/2012/05/introduction-of-fsm/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...
随机推荐
- Codeforces Round #396(Div. 2) A. Mahmoud and Longest Uncommon Subsequence
[题意概述] 找两个字符串的最长不公共子串. [题目分析] 两个字符串的最长不公共子串就应该是其中一个字符串本身,那么判断两个字符串是否相等,如果相等,那么肯定没有公共子串,输出"-1&qu ...
- Java课程设计常见技术问题(程序部署、数据库、JSP)
1. 部署方法 Eclipse下打包 右键点击项目-Export-Runnable JAR file,选择正确的Launch configuration,接下来根据提示可以将项目中用到的jar打入包中 ...
- Bootstrap3 表单-被支持的控件:输入框
输入框包括大部分表单控件.文本输入域控件,还支持所有 HTML5 类型的输入控件: text.password.datetime.datetime-local.date.month.time.week ...
- Dynamics 365 你所期待的子网格编辑终于来了
Dynamics 365的online版本已经在11月1号发布了,on-premises版也在没几天后发布,今天略看了一眼 what's new 一眼就看到了 editable grids,这个不用我 ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...
- AsnycTask的内部的实现机制
AsnycTask的内部的实现机制 写在前面 我们为什么要用AsnycTask. 在Android程序开始运行的时候会单独启动一个进程,默认情况下所有 这个程序操作都在这个进程中进行.一个Androi ...
- mysql-workbench工具update(更新)失败的解决办法
是因为安全模式的保护,所以我们需要设置一下: 如下:windows下是edit–>preferences–>SQL Editor 把右边的最后一行,"safe update&qu ...
- 插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903 前言:为什么要了解系统Activity,Service,BroadCas ...
- TCP的发送系列 — tcp_sendmsg()的实现(二)
主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函 ...