私はボードゲームを構築しようとしています...そして、ステートマシンを使用して実装する必要があるようです..
GoFのState パターンについては知っていますが、ステート マシンを実装する方法は他にもあるはずです。お知らせください..異なる実装 (それぞれのトレードオフ) に関する詳細を含む記事や本を知っている場合は、私に指示してください.. ありがとう
私はボードゲームを構築しようとしています...そして、ステートマシンを使用して実装する必要があるようです..
GoFのState パターンについては知っていますが、ステート マシンを実装する方法は他にもあるはずです。お知らせください..異なる実装 (それぞれのトレードオフ) に関する詳細を含む記事や本を知っている場合は、私に指示してください.. ありがとう
Ragelをチェックしてください。
Harel のステートチャートを使用しました (ステート マシンに類似/同等ですが、考えるのはやや簡単です) 。 Practical Statecharts in C/C++という優れた本があります。
非常に単純な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);
}
}
有限ステート マシンは、すべてイベント駆動型のゲームを実装するための最適なプラットフォームを提供します。
目標はステート マシンを構築することなので、既存のフレームワークを使用できます。あとは、イベント エクストラクタとアクションを追加するだけです。
フレームワークの例は次の場所にあります。