卅川的状态机之路(创作中,不定时上传)

川的第一篇干货,将从讲述FSM(有限状态机)开始。

川第一次接触状态机这种东西,还得追溯到刚到畅游工作,破解了别的游戏的代码(游戏程序就是这么没节操和底线,嗯!)才知道有这么个东西的。虽然大学学习过相关思想,可是第一次见了真材实料还是很震撼的(请原谅我用"震撼"这个词,因为我理想中的程序,就应该和机械一样各司其职分工明确,然后才能正确运行得到结果)。

现在有很多论调,当然集中的也只是一些特定的环境下,有限状态机已经不合时宜了,觉得低效且无法完整实现功能(比如最近就看过几篇文章,关于游戏AI,大家似乎对之前使用FSM去实现很有些看法)。可是正如排序算法一样,快排再快,也一样有去写选择排序的人(仅仅是打比方,非要跟我掰扯快排和选择的速度和应用场景我也没办法)。FSM并不一定执行效率最高,但是以工程的角度来看,FSM却可以比较清晰地阐述程序运行流程(请注意"比较",因为我也见过一个总逻辑分成2-30个状态的,那就简直是天书了)。

所以,来看一个核心问题:什么是有限状态机?川不想去网上搬一堆关于有限状态机的定义,他们都对,但是并不是我的思想。

FSM(Finite-state machine)是有限状态机的缩写,全称中的machine,那可是机器啊喂!所以还想什么呢,FSM就是一台用代码构建的机器呀(不得不说,我到现在都对工程制图学念念不忘,漂亮机械图纸在我眼中就是艺术品)!既然是机器,它就会运转,去完成它在被设计制造出来之后被赋予的任务。举个栗子:城市道路都愿意开自动挡(因为省事儿呀,面对堵车时候那一脚又一脚的离合绝对是对左腿强有力的锻炼),它的变速箱就是一台机器,它需要在我们开车时根据我们行驶的路况、速度变更不同的挡位(否则要么发动机带不动汽车,要么就等着烧机油吧,哈哈)。

好吧,扯了一堆有的没的。状态机就是在不同的状态不同的条件下,去执行对应状态或条件下代码的机器(如有需要,请自行深入了解,摊手)。

时间: 2024-12-31 10:35:45

卅川的状态机之路(创作中,不定时上传)的相关文章

如何在Linux中使用sFTP上传或下载文件与文件夹

如何在Linux中使用sFTP上传或下载文件与文件夹 sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全;它通过加密 SSH 传输处理所有操作.在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件). 作者:Aaron Kili来源:Linux中国|2017-03-09 14:42 移动端 收藏 分享 51CTO诚邀您9月23号和秒拍/国美/美团元专家一起聊智能CDN的优化之路

SF:salesforce中,文件上传的接收对象

使用Attachment,做文件的上传: 上传的内容,最终会存放到sf的Attachment对象里. 使用<apex:inputFile>组件上传文件: 上传的内容,会存放到sf的Document对象里. 使用sf中的,Content App中的Library来存放Content文件: 上传的文件,会在ContentWorkspace对象(Library),ContentVersion对象(Content)来存放具体的文件的内容(包括,二进制的文件等等,但是,它需要一个ContentDocum

struts2中实现文件上传功能

在web项目中,文件上传.头像上传这样的功能经常是要用到的,下面就以在struts2中实现文件上传功能为例子,简单地理一下文件上传功能的编码思路. 项目目录结构 项目源代码 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:x

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

umask设置导致的weblogic中的应用上传的文件没有权限打开

去年,在公司的某一weblogic上部署的web应用上传文件后却没有读的权限.因为weblogic在Linux上部署,上传文件是mount到了一台安装了NFS的Windows Server上. 当时本人刚毕业,没多少经验,查了很久原因才查到原因是出在了weblogic上.只要修改weblogic的启动shell脚本或者weblogic 节点启动shell脚本中的umask即可. linux中,weblogic上传的文件或者创建的目录,默认只有自己读或者组员读,但web访问目录时,通常需要执行权限

在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件

在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件 引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过"我现在可以通过WebBrowser实现对各种Html元素的操控,唯独无法控制Html的上传控件",出于安全原因,IE没有对上传控件提供操控支持,这使得我们没法像控制其他控件一样用简单的代码进行赋值. 比较实际的解决方案就是模拟操作了,下面我就将演示

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

Java中的文件上传和下载

文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文件,这是由jsp运行机制所决定的.jsp中通过将表单元素设置Method="post" enctype="multipart/form-data" 属性,让表单以二进制编码的方式提交,在接收次请求的Servelet中用二进制流来获取内容,从而实现文件的上传. 表单的en

PHP中,文件上传实例

PHP中,文件上传一般是通过move_uploaded_file()来实现的.  bool move_uploaded_file ( string filename, string destination ) 本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的).如果文件合法,则将 其移动为由 destination 指定的文件. 如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_fi