【C++】50.编程中切换状态的【有限状态机】

对于有限状态机的知识,这里推荐浅墨毛星云大佬的博客【游戏设计模式】之三 状态模式、有限状态机 & Unity版本实现,博客里做了具体的代码讲解。

状态机是表示有限个状态以及在这些状态之间的转移动作等行为的数学模型。有限状态机是其中最简单的成员。


以下是我看了该博客之后的一点心得:

对于有很多状态切换的功能,我们可能会不假思索的使用if-else直接把所有可能的情况都列举出来,这样会产生一大堆代码,并且因为漏掉某个细节,然后又修补bug,添加代码,进而就会破坏代码结构。
这种方式明显不可取。

虽然if-elseswitch-case有时候可以通用,但是某些时候,输入不是表达式或者是没有定义成枚举型的,所以这种情况下就使用if-else,例如if(num>5)你定义成什么东西转化成switch-case?如果刻意定义成bool转化成switch-case反而会更麻烦。

switch-case只能是针对"表达式",例如数字、枚举和bool型,case 3:case KEY_UP:case true:


  • 我们一般思维就是,输入来了什么动作,我们就根据这个输入动作,来具体分析这个输入动作在各种状态下分别做什么处理,可能会需要使用很多的bool型的状态值(如果你使用了枚举定义这些状态值,就不需要这些bool状态值了),这是if-else的做法。

  • 但是,我们可以换一种思维方式,先判断当前是在什么状态(多种状态值可以定义成枚举型)下,然后再根据输入动作来进行相应的处理,可能会简洁高效很多。这就是switch-case的方法。

两种方法你自己实践一下,在相对复杂的状态切换操作下,我们要想一下,怎样的逻辑会使得代码更简洁,然后搭配switch-case使用,代码肯定可以更简洁。

至于浅墨大佬博客最后讲解的状态模式,博客中我没有看得很明白,就不做记录了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值