1

単純な Windows フォーム ベースのゲーム プロジェクトでクラスを編成する際に概念的な問題があります。Windows フォームを使用して、もぐらたたきゲームを実装する必要があります。モグラ塚はチェックボックスで表されます。チェックボックスがチェックされている場合、モグラ塚にモグラがいます。チェックボックスをオンにすることでモグラを殺すことができます。

GamePlayiaクラスを含むクラスを作成することができました:(チェックボックスの配列にGameBoard基づくゲームボード表現)、 (確率率、1ラウンド中のモルの最大数、ラウンドの持続時間など)。クラスには(これまでに何匹のもぐらが殺されたか)もあります。私のソリューションにはさらに多くのクラス/構造がありますが、この問題のコンテキストでは重要ではありません。TableLayoutPanelRulesGamePlayPointsCounter

ゲーム ボードのサイズは構成ウィンドウで設定できるので、 Start Gameボタンをクリックした後、 TableLayoutPanelに動的にチェックボックスを作成します。チェックボックスの配列とそれらのイベント ハンドラーはクラスに配置されます。ほくろを殺した後、更新する必要があります(実際には、クラスから呼び出される適切な値を追加する必要があります)。しかし、私はそのようなクラスモデルではできません。イベントハンドラーチェックボックスのマウスクリック(クラス内)から(クラス内)へのアクセスはありません。GameBoardpointsForMoleKillingRulesPointsCounterGamePlayGameBoard

クラス間の依存関係を再編成するにはどうすればよいですか?
私の一時的な解決策はRulespointsForMoleKillingおよびscore()GamePlayクラスからも)staticを作成することです。

4

2 に答える 2

1

あなたと Peekay の答えは逆だと思います。あなたGameBoardはビュー(ゲームの状態の特定の表現)であり、クラスに直接依存するべきではありませんGamePlay。これは、コントローラークラスのように聞こえます。また、ゲーム モデルの概念をそのモデルのビューと混同しないでください (これは で行っているようですGameBoard)。MVC パターンを確認することをお勧めします。

ユーザーが途中でゲームを保存したい場合、どの要素をディスクに保持するかを検討してください。rulesおそらく、その特定のゲームのscore、 、現在のtime、および の状態を保存する必要がありboardます。これらはあなたのモデルです: GameModelhas rulesscoretime、およびstate

さて...このモデルを何らかの視覚的表現でユーザーに表示できるようにしたいと考えています。これはビューと呼ばれます。Aは、使用している Windows フォームをGameView表示します。GameModelおそらくこれは、スコアを でScoreView、時間を でTimeView、ボードを で、BoardViewまたはその他の区切りで表示することによって行われます。

最後に、UI イベント (モグラ叩き、ゲームの一時停止/終了など) に応答する必要があります。このクラスは、UI イベントをサブスクライブし、モデルを更新してそれらのイベントを処理します。コントローラーとして知られています。

状態をグローバルにするという理由でクラスを静的にすることは、通常、オブジェクト指向の世界では最良のアイデアではありません。

于 2012-04-09T15:58:12.383 に答える
0

C#(XNAを使用)の単純なゲームでクラスの依存関係を設計するための優れた方法を見つけました。
それは一種のテンプレートです。これはゲーム状態管理と呼ばれ、 ungoodの概念と非常によく似ています。

詳細:

于 2012-04-22T16:05:41.670 に答える