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/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...
随机推荐
- jQuery 效果 – 淡入淡出
在在jQuery中可以通过四个方法来实现元素的淡入淡出,这四个方法分别是:fadeIn().fadeOut().fadeToggle() 以及 fadeTo(),本文通过实例来为你讲解如何在jQuer ...
- Arrays的二分查找
二分查找也称为折半查找,是对有序元素查找的一种算法,在查找的过程中,不断的将搜索长度减半,因此效率不错.Java的JDK提供了二分法查找的算法,使用的方法是Arrays.binarySearch(). ...
- dynamic initializer和全局变量
"慎用全局变量,包括全局静态变量" 是众所周知的原则,因为全局变量除了会增加程序的维护成本. 如果全局变量是个复杂的对象,并且还使用其他的全局变量,那情况就变得复杂的多.因为全局变 ...
- Android 实现串口的移植
安卓串口的实现,需要底层C++配合,不过这次我们根据framework中的思想,直接用API修改提供给JAVA层调用,这个就比较简单了. DEV项目需要,要实现在Android中实现串口的收发功能,有 ...
- Dynamics CRM 构建IN查询
CRM中有3种查询数据的方式,分别是QueryExpression.fetchxml.linq,本篇讲述的条件IN的查询只支持前两种,linq并不支持. QueryExpression的写法如下,示例 ...
- Spring MVC 实践 - Component
Spring MVC 实践 标签 : Java与Web Converter Spring MVC的数据绑定并非没有任何限制, 有案例表明: Spring在如何正确绑定数据方面是杂乱无章的. 比如: S ...
- chromium出现输入密码解锁登录密钥环
chromium出现输入密码解锁登录密钥环 在ubuntu 16.04上安装了Chromium出现对话框,如下所示: 因为密码框截图困难,这个是网上图片. 点取消就可以使用,但是每次都这样很烦,百度后 ...
- Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)
Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...
- 并发计算模型BSP与SEDA
1 BSP批量同步并行计算 BSP(Bulk Synchronous Parallel)批量同步并行计算用来解决并发编程难的问题.名字听起来有点矛盾,又是同步又是并行的.因为计算被分组成一个个超 ...
- maven跳过单元测试的两个参数区别
maven在打包过程中需要执行单元测试.但有些时候单元测试已经通过只是想打包时,想跳过测试.maven提供了两个参数跳过测试:maven.test.skip=true 和skipTests. 例子 m ...