编辑: 865397499 2013-05-07
您还未登录!|登录|注册|帮助 CSDN首页资讯论坛博客下载搜索更多CTO俱乐部学生大本营培训充电移动开发软件研发云计算程序员TUPguocai_yao的专栏 条新通知 登录注册欢迎 退出 我的博客 配置 写文章 文章管理 博客首页 全站 当前博客 空间博客好友相册留言用户操作 [留言] [发消息] [加为好友] 姚国才ID:guocai_yao 共19660次访问,排名9473,好友29人,关注者35人.

态度决定一切 姚国才的文章 原创

47 篇 翻译

0 篇 转载

13 篇 评论

25 篇 订阅我的博客 [编辑]guocai_yao的公告 [编辑]文章分类 APUE(Advanced Programming In The Unix Environment C C++ Programming Tips skills The C Programming Language Unix环境高级编程)读书笔记 VC及其IDE 单片机 数据结构 琐碎 他山之玉 小想法 硬件电路的那些事儿 [编辑]EmbeddedSystem Aquarius (其中还有英文网站) [编辑]高手&

大师 ammana_babi Richard Stallman Roland McGrath steedhorse taodm 侯捷 周立功 徐艺波个人网站 艺术编程 陈莉君 [编辑]好书推荐 C++学习推荐书目 c语言的提高 [编辑]好友 袁东 存档 2010年05月(8) 2010年04月(2) 2010年01月(5) 2009年08月(1) 2009年06月(1) 2009年05月(4) 2009年04月(5) 2009年03月(8) 2009年02月(1) 2009年01月(1) 2008年05月(21) 2008年04月(3) 公告: CSDN 产品事业部开设官方博客了!来关注我们的一举一动吧![意见反馈][官方博客] C语言实现有限状态机 收藏 以下是转载内容: 传说中的分隔符 来源1:http://www.cnblogs.com/swingboat/archive/2005/07/27/201488.html 【转载1】有限状态机的实现 <

type= text/javascript >

有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机. 最近看了一些游戏编程AI的材料,感觉游戏中的AI,第一要说的就是有限状态机来实现精灵的AI,然后才是A*寻路,其他学术界讨论比较多的神经网络、模糊控制等问题还不是很热. FSM的实现方式: 1) switch/case或者if/else 这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对庞大的状态机难以维护. 2) 状态表 维护一个二维状态表,横坐标表示当前状态,纵坐标表示输入,表中一个元素存储下一个状态和对应的操作.这一招易于维护,但是运行时间和存储空间的代价较大. 3) 使用State Pattern 使用State Pattern使得代码的维护比switch/case方式稍好,性能上也不会有很多的影响,但是也不是100%完美.不过Robert C. Martin做了两个自动产生FSM代码的工具,for java和for C++各一个,在http://www.objectmentor.com/resources/index上有免费下载,这个工具的输入是纯文本的状态机描述,自动产生符合State Pattern的代码,这样developer的工作只需要维护状态机的文本描述,每必要冒引入bug的风险去维护code. 4) 使用宏定义描述状态机 一般来说,C++编程中应该避免使用#define,但是这主要是因为如果用宏来定义函数的话,很容易产生这样那样的问题,但是巧妙的使用,还是能够产生奇妙的效果.MFC就是使用宏定义来实现大的架构的. 在实现FSM的时候,可以把一些繁琐无比的if/else还有花括号的组合放在宏中,这样,在代码中可以3)中状态机描述文本一样写,通过编译器的预编译处理产生1)一样的效果,我见过产生C代码的宏,如果要产生C++代码,己软MFC可以,那么理论上也是可行的. 【评】:状态表的实现方法,《C专家编程》第8章有具体说明,转载【6】 传说中的分隔符 来源2:http://hi.baidu.com/juneshine/blog/item/6bff718bd5902f13c9fc7a14.html 【转载2】有限状态机的c实现 2007-05-11 15:12 网络上可以搜索到很多有限状态机的代码和理论分析,这儿仅仅是做一个简单的例子,仅供入门参考. 这儿以四位密码校验作为状态机的例子,连续输入2479就可以通过密码测试.一个非常简单的例子,在实际的状态机实例中,状态转移表要更复杂一些,不过方式非常类似.在状态查询的地方可以做优化,同时对于输入量也可以做有效性优化.具体代码如下: view plaincopy to clipboardprint? c.h typedef enum{ STATE1 = 1, STATE2, STATE3, STATE4, STATE5,//password pass //...ADD here }STATE;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题