0

次のシステムを設計する方法について頭を悩ませようとしています。これは、有限状態マシンとして定義できると思います。

城を形成する 16 個のビルディング ブロック (塔、壁、ゲート) の山があるとします。プレーヤーは、ブロックをフロアプランの 16 か所にドラッグできます。正しく行うと、城全体が表示されます。すべての塔 (4 つある) は同じなので、4 つの角のどこにでも行くことができます。一部の壁についても同様です。

全体として、フロアプランにはビルディング ブロックを配置できる 16 のスポットがあり、各スポットには 17 の「状態」があります: 空 + 16 のビルディング ブロックのいずれか 1 つ。いくつかの計算を行うと、これは 17^16=たくさんの組み合わせにつながります。

プログラムは、空のフロアプランとビルディング ブロックの山から始まります。次に、「自分の城を建てて、塔から始めましょう」のようなメッセージが表示されます。ユーザーがタワーを正しく配置すると、「よくできました。今度は 4 つのタワーをすべて構築します」と表示されます。あなたはアイデアを得る。

問題は、プレイヤーができることが非常に多いことです。ブロックを間違った場所に置いたり、ブロックを取り除いたり、与えられた指示を無視してフロアプラン全体に壁や塔を正しく配置したりします。

何千もの if-then ステートメントを使用して、次のステップに進むか、エラー メッセージを表示するか、プレーヤーの動作に基づいて前のステップに戻るかを決定する必要がないようにできれば、素晴らしいことです。

構築シーケンスの各ステップの NEXT、PREVIOUS、および ERROR 条件をどのように説明しますか? このための設計方法はありますか?ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

0

これを宣言的に行うようにしてください。ブロックの種類を記述する列挙型 (場合によってはクラス) を定義します。各位置で許容される種類のブロックのセットを記述する 4x4 2D 配列を定義して構築します (セットをリスト、ビットフィールドなど、最適なものとして実装します)。プレーヤーがブロックを配置しようとするときはいつでも、それが 2D 配列に対して許容されるかどうかを確認してください。位置が正しく入力されている特定のメッセージが必要な場合は、それらも同じ配列に入れます。

FSM が本当にあなたが求めているものであるかどうかはわかりません。どのような種類のシーケンス制約を検証しようとしていますか? 塔が最初に建てられるかどうかは重要ですか? あなたの説明の残りの部分から、上記の目標状態の説明がより適切であるように思えます。

于 2010-02-18T14:38:11.397 に答える