4

Visual C# 2010 を使用して Pokemon Trading Card Game をプログラミングしようとしていますが、ちょっとした問題が発生しました。私は3つのオブジェクトを持っています:

Game : ゲームのすべてのデータとルールを処理します。

Form1 : プレイヤーに表示されるウィンドウ。プレイヤーがゲームについて見ることを許可されているすべての情報を表示し、プレイヤーがゲームを操作できるようにします。

ComputerAI : このオブジェクトは、コンピューターが認識すべきことを追跡し、AI のロジックを保持します。

物事を動かし続けるために、ゲームは「PriorityChanged」イベントを発生させ、プレイヤーと AI の両方に、優先度が変更されたことと、どちらがそれを受け取ったかを (EventArgs で) 知らせます。フォームはこの情報をログに報告し、必要に応じて「あなたを待っています」と「対戦相手を待っています」というメッセージを表示します。computerAI はこれを使用して、ロジックを実行するかどうかを決定します。私が遭遇した問題は、イベントが発生したときに AI に通知され、そのロジック (トランプなど) が実行されたため、プレイヤーが優先順位を取得し、AI が取得して何もしなかった別の PriorityChanged イベントが発生したことでした (これは、正しい)。次に、フォームは両方の PriorityChanged イベントを次々に取得しましたが、順序が間違っていました。

これを修正するために、「PriorityChanged」イベントを「PriorityChanged」と「PriorityRecieved」の 2 つに分割しました。フォームは「PriorityChanged」イベントで表示を更新し、AI は「PriorityRecieved」イベントでそのロジックを実行します。

このソリューションは機能しましたが、間違っていると思います。より良い方法はありますか?

4

1 に答える 1

0

何が起こっていたかは次のとおりだと思います。

PriortyChanged (Start)
  AI -> Process
  AI -> Raise Priority Changed
    Priority Changed (Start)
      AI -> DoNothing
      UI -> Process
    Priority Changed (End)
  UI -> Process
PriorityChanged (End)
于 2012-07-25T22:33:33.920 に答える