Design patterns 状态机实现
我正在尝试建立一个棋盘游戏。。。看起来它必须使用状态机来实现Design patterns 状态机实现,design-patterns,state-machine,Design Patterns,State Machine,我正在尝试建立一个棋盘游戏。。。看起来它必须使用状态机来实现 我从GoF知道,但我确信一定有其他方法来实现状态机。请让我知道。。如果您知道任何文章或书籍包含关于不同实现的详细信息(每种实现的权衡),请直接告诉我。。谢谢以下是一个非常简单的FSM实现: public delegate void ProcessEvent<TEvent>(TEvent ev); public abstract class StateMachine<TEvent> { private
我从GoF知道,但我确信一定有其他方法来实现状态机。请让我知道。。如果您知道任何文章或书籍包含关于不同实现的详细信息(每种实现的权衡),请直接告诉我。。谢谢以下是一个非常简单的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);
}
}
公共委托无效处理事件(TEvent ev);
公共抽象类状态机
{
私有事件状态;
受保护的ProcessEvent状态
{
获取{返回this.state;}
设置{this.state=value;}
}
公共无效处理事件(TEvent ev)
{
本州(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);
}
}
公共类MyFsm:StateMachine
{
公共多年筹资机制()
{
this.State=this.Started;
}
私有无效已启动(字节ev)
{
控制台写入线(ev);
如果(ev==255)
{
this.State=this.Stopped;
}
}
私有无效已停止(字节ev){}
}
班级计划
{
静态void Main(字符串[]参数)
{
MyFsm fsm=新的MyFsm();
fsm.ProcessEvent((字节)0);
fsm.ProcessEvent((字节)255);
fsm.ProcessEvent((字节)0);
}
}
请查看。我们使用了哈雷尔的状态图(类似于/相当于状态机,但更容易思考),有一本好书叫做。有限状态机提供了实现所有事件驱动的游戏的最佳平台
由于您的目标是构建状态机,因此可以使用现有框架,而只需添加事件提取器和操作
一个示例框架见:
您确定状态机适合棋盘游戏吗?对我来说似乎很奇怪。你想实现一个游戏服务器,还是一个游戏的电脑播放器?在第一种情况下,状态机是有意义的,而在第二种情况下,它就没有那么有意义了?这将有助于澄清哪种语言(看起来不像Java或C++),请务必仔细阅读。另外请注意,每次链接到自己的站点/产品时,都需要发布免责声明。看起来statesoft.org域现在已停止?