2

私は、OOP の入門論文のカード ゲームに取り組んでいます。ゲーム自体は仕様を満たしていますが、今は自分の満足と学習のために遊んでいます。

イメージ、ランク、スイートを含むカード クラスがあります。GUI では、ピクチャ ボックスを使用して、それぞれのカード (デッキ クラスのカード配列に格納されている) に格納されている画像を表示します。

cardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc

カード クラスに PictureBox コントロールを継承させることは可能でしょうか。これにより、画面上にあるのは「実際には」カード カルスのインスタンス (イメージ値を保持するボックスではなく) になり、その量が劇的に削減されます。カードの他の関連情報を取得するには、フープを通過する必要があります。

4

2 に答える 2

3

Cardクラスを使用する代わりに、(UserControlから継承する代わりに)PictureBoxから継承するUserControl(CardまたはucCardなどの名前)を作成できます。C#でこれを行う最も簡単な方法は、目的の名前でUserControlを追加し、コードで一番上の行を次のように変更することです。

public partial class ucCard : UserControl

public partial class ucCard : PictureBox

ucCardコントロールには、PictureBoxのすべてのプロパティ(カードのビットマップを保存するImageを含む)が含まれます。プロジェクトをビルドすると、コンパイラはAutoScaleModeを参照する行をバーフします。この行を削除して再構築するだけです。

次に、カードに必要な追加のプロパティとメソッドを追加できます。たとえば、カードの前面と背面のスーツとランク、ビットマップ(背面は静的で、すべてのカードが共有できるようにすることができます)、およびFlip()メソッドを追加できます。前面と背面の画像を切り替えます。

OOPに関する限り、聖なる三位一体の忘れられた部分はカプセル化であるように思われます。この場合、カードはユーザーが操作するUIの視覚要素であるため、UserControlとしてカプセル化することは完全に理にかなっています。すでにお気づきのように、これによりアプリケーションがよりシンプルになり、作業が楽になります。

于 2009-09-17T02:40:45.570 に答える
2

カード クラスに PictureBox コントロールを継承させることは可能でしょうか。これにより、画面上にあるのは「実際には」カード カルスのインスタンス (イメージ値を保持するボックスではなく) になり、その量が劇的に削減されます。カードの他の関連情報を取得するには、フープを通過する必要があります。

はい、でもしたいですか?いいえ。ビジネス ロジックとモデルを GUI レイヤーに非常に緊密に結び付けます。

OOP に関する論文を書いているのであれば、良いプログラミングの習慣を奨励し、手抜きを思いとどまらせる必要があります。モデルに変更を加えるたびに GUI が自動的に更新されるように、MVC を簡単に作成した方がよいでしょう。

于 2009-09-17T02:08:24.107 に答える