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」イベントでそのロジックを実行します。
このソリューションは機能しましたが、間違っていると思います。より良い方法はありますか?