ルール/検証設計パターン


8

チェスのようなゲームのルール/検証システムを作成するために使用できるデザインパターン(これは単なる例であり、実際のゲームにはより難しいルールのセットが必要です)

私はこのサイトでいくつかの質問を読みましたが、決定的な答えも、正しい方向に向かっている答えも見つかりませんでした。

このシステムには次のものが必要です。

  • ルールが適用されているすべてのオブジェクトは、検証の開始点であるメソッドを持つ特定のインターフェースを実装する必要があります
  • ルールは2つのステップで適用する必要があります。まず、検証する必要があります(ポーンAが正方形D4に移動できます)。trueの場合はメソッドAを実行し、falseの場合はメソッドBを実行します。
  • すべてのオブジェクトには、特定の順序で適用する必要がある複数のルールを含めることができます。ルール1が終了すると、ルール2が検証を開始します。
  • すべての個別のルール(たとえば、1つの正方形のみを移動でき、斜めにしか移動できないなど)は、独自のクラスに属し、再利用可能で、ルールを必要とするオブジェクトに適用できる必要があります。
  • これはバックエンドのマルチプレイヤーゲームで使用されることに注意してください
  • すべてのルールは、その有効性をテストするために複数のオブジェクトを必要とすることに注意してください。たとえば、通常、ポーンは1マス移動できますが、今度はゲームボードの次のスクエアが対戦相手のポーンで埋められます。結果:ポーンは移動できません。ポーンには、他のポーンの位置、または検証にゲームボードを含める必要があります。

これらのルールの別の言葉は、行動の制限です。


質問を参照してください。stackoverflow.com/questions/14356851/...
トーマス・

回答:


3

ゲームは、動きで区切られた一連の状態と考えてください。プレーヤーが移動するたびに、新しい状態が生成されます。

ここに画像の説明を入力してください
(これはこのXKCDコミックのようなものです!)

どうやって

1人のプレーヤーによる1つの動きMoveを表すクラスを作成します。(リバーシでは、十分な説明は、駒が置かれるボード座標の1つのセットです。チェスでは、出発地と目的地の座標で十分です。)

いつでもゲームGameState状態を表すクラスを作成します。(リバーシでは、十分な説明がボードの内容とそれがどのプレイヤーのターンであるかです。チェスでは、各プレイヤーがキングサイドまたはクイーンサイドを城に置くことがまだ可能かどうかを保存する必要があります。)

今、あなたはおそらくメソッドGameStateを持つことを想像することができますisMoveLegal(Move)。結局のところ、その決定を行うために必要なすべての情報が含まれています。

なぜ

この設計は、ルールロジックを明確に分離し、コンポーネント間の依存関係を減らします。

また、AIも簡単になります。あなたは自明のすべての可能な動きを生成することができGameState、彼らがしている、より多くの法的発生した場合、チェックをGameStateものと、基本的に構築するからだ木をあなたが使用できるミニマックス多分に、アルファ・ベータ法

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.