我正在尝试建立一个棋盘游戏。并且看起来它必须使用状态机来实现。
我从GoF那里知道了State pattern,但我相信肯定还有其他方法来实现状态机。请告诉我..如果您知道有任何文章或书籍包含关于不同实现的详细信息(权衡每个实现),请与我联系。谢谢
发布于 2008-12-29 20:56:18
查看Ragel。
发布于 2008-12-29 21:04:29
我们已经使用了Harel的状态图(类似于/等价于状态机,但更容易理解),有一本很好的书叫做Practical Statecharts in C/C++。
发布于 2008-12-29 20:05:48
下面是一个非常简单的FSM实现:
public delegate void ProcessEvent<TEvent>(TEvent ev);
public abstract class StateMachine<TEvent>
{
private ProcessEvent<TEvent> state;
protected ProcessEvent<TEvent> State
{
get { return this.state; }
set { this.state = value; }
}
public void ProcessEvent(TEvent ev)
{
this.state(ev);
}
}您可以按如下方式使用它:
public class MyFsm : StateMachine<byte>
{
public MyFsm()
{
this.State = this.Started;
}
private void Started(byte ev)
{
Console.WriteLine(ev);
if (ev == 255)
{
this.State = this.Stopped;
}
}
private void Stopped(byte ev) { }
}
class Program
{
static void Main(string[] args)
{
MyFsm fsm = new MyFsm();
fsm.ProcessEvent((byte) 0);
fsm.ProcessEvent((byte) 255);
fsm.ProcessEvent((byte) 0);
}
}https://stackoverflow.com/questions/398458
复制相似问题