カードゲームのc#pictureboxの継承
-
07-07-2019 - |
質問
OOP論文のイントロのカードゲームで目が覚めています。ゲーム自体は仕様を満たしていますが、私は自分の満足と学習のためにそれで遊んでいます。
画像とそのランクとスイートを含むカードクラスがあります。 GUIでは、ピクチャボックスを使用して、それぞれのカード(デッキクラスのカード配列に格納されている)に格納されている画像を表示します。
cardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc
カードクラスにPictureBoxコントロールを継承させて、画面上に「実際に」表示されるようにすることは可能でしょうか。カードcalssのインスタンス(画像の値を保持するボックスではなく)は、他の関連情報を得るために跳躍する必要があるフープの量を劇的に削減します。
解決
Cardクラスを使用する代わりに、(UserControlから継承する代わりに)PictureBoxから継承するUserControl(CardまたはucCardなど)を作成できます。 C#でこれを行う最も簡単な方法は、希望する名前のUserControlを追加し、コードの先頭行を
から変更することですpublic partial class ucCard : UserControl
to
public partial class ucCard : PictureBox
ucCardコントロールは、PictureBoxのすべてのプロパティ(カードのビットマップを保存するイメージを含む)を持ちます。プロジェクトをビルドすると、コンパイラーはAutoScaleModeを参照する行でbarfします。この行を削除して再構築するだけです。
その後、カードの前面と背面のスーツとランク、ビットマップなどのカードが必要とする追加のプロパティとメソッドを追加できます(背面はすべてのカードが共有できるように静的にすることができます)。 )前面画像と背面画像を切り替える方法。
OOPに関する限り、聖三位一体の忘れられた部分はカプセル化のようです。この場合、カードはユーザーが操作するUIの視覚的な要素であるため、カードをUserControlとしてカプセル化するのが最適です。既にお気づきのように、これによりアプリケーションがシンプルになり、生活が楽になります。
他のヒント
カードを作ることは可能でしょうか クラスはPictureBoxを継承します 画面上にあるものを制御します 「実際に」カードのインスタンス calss(保持するボックスではなく それの画像値) 劇的にフープの量を減らす に飛躍する必要があります カードのその他の関連情報を取得します。
はい、でもよろしいですか?いいえ。ビジネスロジックとモデルをGUIレイヤーに緊密に結合します。
OOPに関する論文を執筆している場合は、プログラミングの習慣を身に付け、コーナーを切り抜けることを推奨します。モデルに変更を加えるたびにGUIが自動的に更新されるように、クイックMVCをホイップする方が良いでしょう。