こんにちは、ハブル!
ビジネスに取り掛かりますが、少し背景がまだ必要です。1年半前に、大学の理論を備えた単純なステートマシン(ステートマシン)を実装することが必要になりました。
既存のソリューションには致命的な欠陥があるだけでなく、複雑な構造やドキュメントの欠如など、他にも多くの重大な欠点があるため、Googleで費やした時間は結果なしで通過しました。
私はすぐにこの記事に出くわし、便利な解決策がないことを確認しました。
その後、あなたは何をしましたか?
タスクは(いつものように)すばやく解決する必要があったので、私の有限状態マシンは辞書を使用して実装されました。
- 状態のリストがあります(列挙型)
- ( )
- (map): --
, « » , , ( )
?
« » . , , , - .
: .
, .
...
wpf ReactiveUI.
.
, xml .
, — . gif .
機会
2つのテーマ
:
- ( )
/ / xml
<?xml version="1.0" encoding="utf-8"?>
<StateMachine>
<States>
<State Name="Start" Position="37, 80" IsCollapse="False" />
<State Name="State 1" Position="471, 195.54" IsCollapse="False" />
<State Name="State 2" Position="276, 83.03999999999999" IsCollapse="False" />
</States>
<StartState Name="Start" />
<Transitions>
<Transition Name="Transition 2" From="State 2" To="State 1" />
<Transition Name="Transition 1" From="Start" To="State 2" />
</Transitions>
</StateMachine>
PNG/JPEG
:
- .
StateMachine stateMachine = new StateMachine("scheme.xml");
- , «» , .
stateMachine.GetState("State1").OnExit(Action1); stateMachine.GetState("State2").OnEntry(Action2); stateMachine.GetTransition("Transition1").OnInvoke(Action3); stateMachine.OnChangeState(Action4);
- .
stateMachine.Start(parameters);
, , , , export , .
?
, Entry/Exit , :
StateMachine.InvokeTransition("Transition1", parameters);
, , , .
?
- .
- Data — , StateMachine .
, .
:
- /
- / / xml
, .
.
, — , !
. :
. , .
:
stateMachine.GetState("State1");
stateMachine.State1;
, dynamic .
- -, .
. :
- .
- ノードの
自動割り当て-キャンバス上の要素の自動レイアウトのための魔法のボタン - クロス
- プラットフォーム-AvaloniaUIでのプロジェクトの翻訳
結論
- ステートマシンは3つのステップで作成しますが、マシンの構造はいつでも視覚的に表示および編集できます。
- プロジェクトのさらなる発展
参考文献
グラフィックエディター、GitHubのソース:SimpleStateMachineNodeEditor
ライブラリ、GitHubのソース:SimpleStateMachineLibrary