卡片游戏的c#picturebox继承

时间:2009-09-17 02:01:49

标签: c# inheritance picturebox playing-cards

我正在为我的OOP介绍纸牌游戏。游戏本身符合规格,但我现在正在玩它以获得自己的满足和学习。

我有一个包含和图像的卡片类,它的等级和套件。在GUI上我使用图片框来显示存储在相应卡片中的图像(存储在卡片类中的卡片阵列中),所以,

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

是否可以使卡类继承PictureBox控件,因此屏幕上的内容实际上是卡calss的一个实例(而不是一个包含它的图像值的框),这将大大减少他必须跳过一定数量的箍来获得其他相关信息。

2 个答案:

答案 0 :(得分:3)

您可以创建一个继承自PictureBox的UserControl(名为Card或ucCard或其他),而不是继承自UserControl,而不是拥有Card类。在C#中执行此操作的最简单方法是使用所需名称添加UserControl,然后在代码中更改顶行

public partial class ucCard : UserControl

public partial class ucCard : PictureBox

您的ucCard控件将具有PictureBox的所有属性(包括Image,您将存储卡的位图)。在构建项目时,编译器将在引用AutoScaleMode的行上进行barf - 只需删除此行并重建。

然后,您可以添加卡片所需的任何其他属性和方法,例如卡片正面和背面的套装和等级以及位图(背面可以是静态的,以便所有卡片可以共享它),也可以是翻转( )在前后图像之间切换的方法。

就OOP而言,神圣三位一体中被遗忘的部分似乎是封装。在这种情况下,由于卡是用户与之交互的UI中的可视元素,因此将其封装为UserControl是完全合理的。正如您已经注意到的,这将使应用程序更简单,您的生活更轻松。

答案 1 :(得分:2)

  

是否可以制作卡片   class an继承PictureBox   控制所以屏幕上是什么   “实际上”是卡片的一个实例   calss(而不是一个容纳的人   它的图像价值)   戏剧性地减少了他的篮球数量   一个人必须跳过去   获得其他相关信息。

是的,但你想要吗?不。它将您的业务逻辑和模型非常紧密地耦合到您的GUI层。

如果您正在撰写关于OOP的论文,您应该鼓励良好的编程习惯并且不鼓励偷工减料。你可以更好地制作一个快速MVC,这样当你对模型进行更改时,你的GUI就会自动更新。