基于状态模式的状态机
什么是状态机 有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。 FROM JavaScript与有限状态机 - 阮一峰的网络日志 简单来说,状态机是一张有向图 stateDiagram-v2 direction LR [*] --> s1 s1 --> s3: e1 s1 --> s2: e2 s2 --> s1: e3 s2 --> s3: e4 状态机的基本要素 SEA模型 State 状态。在编程中,类比于一个类、对象 Event 事件,类比于函数签名 Action 动作,类比于函数体、方法体 怎样实现一个状态机? 问题 Q: 下图是一个游戏中角色状态转换的状态图,请编程实现以下的状态机 stateDiagram-v2 direction LR [*] --> A A --> B: "x, +100" B --> C: "x, +100" C --> A: "z, -50" B --> D: "y, +200" D --> C: "z, -50" C --> D: "x, +100" [!NOTE] 通常来说,实现一个状态模式有三种方式 if-else方法 查表法 状态模式 if-else方法 class Context: def __init__(self): self.score = 0 def my_machine(ctx: Context, state: str, action: str) -> (Context, str): """return: (new_ctx, new_state)""" if state == "a": if action == "x": ctx.score += 100 state = "b" elif action in ("y", "z"): raise TransitionNotAllow() elif state == "b": if action == "x": ctx.score += 100 state = "c" elif action == "y": ctx....