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/ 在很久很久以前,受限于计算机性能和图形效果,游戏往往是以玩家为唯一主动对象的,玩家发出动作,游戏 ...
随机推荐
- Python实现爬取需要登录的网站完整示例
from selenium import webdriver dirver = webdriver.Firefox() dirver.get('https://music.douban.com/') ...
- admin的配置
当我们访问http://127.0.0.1:8080/admin/时,会出现: 执行命令: 生成同步数据库的脚本:python manage.py makemigrations ...
- 【SSH系列】Hibernate映射 -- 继承映射
开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...
- GirlFriendNotFoundException异常是怎样处理的?
GirlFriendNotFoundException异常是怎样处理的? 如果说要去创造这个异常,那么我们的JAVA程序里,肯定是继承Exception去处理,所有我们可以先实现一个自己的Except ...
- Linux 环境下的一些常用命令(三)
转载自 http://www.oschina.net/translate/20-advanced-commands-for-middle-level-linux-users 21. 命令: Find ...
- Android系统的安全设计与架构
Android系统的安全设计与架构 一.安全策略 1.Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层. Android框架层.Dalvik虚拟机层.用户空间原生代 ...
- Spark运行架构
http://blog.csdn.net/pipisorry/article/details/52366288 1. Spark运行架构 1.1 术语定义 lApplication:Spark App ...
- 使用jQuery AJAX读取二进制数据
READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-aj ...
- 混合开发(一)——WebView开发高级技巧之加载网页以及JavaScript,加载进度条
混合开发(一)--WebView开发高级技巧之加载网页以及JavaScript,加载进度条 现在关于混合开发也越来越多了,很多人喜欢跟随,比如HB,比如RN,其实这东西很早就有这么一个概念了,而且说实 ...
- Swift基础语法(常量变量、数据类型、元组、可选、断言)
本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...