2

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

我有一个包含图像、等级和套件的卡片类。在 GUI 上,我使用图片框来显示存储在各个卡片中的图像(存储在卡片组中的卡片数组中),所以,

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

是否有可能使卡片类继承 PictureBox 控件,因此屏幕上的“实际上”是卡片类的一个实例(而不是保存它的图像值的框),这将大大减少他的数量箍必须跳过才能获得卡片的其他相关信息。

4

2 回答 2

3

您可以创建一个继承自 PictureBox(而不是继承自 UserControl)的 UserControl(命名为 Card 或 ucCard 或其他),而不是拥有 Card 类。在 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 的论文,你应该鼓励良好的编程习惯,而不是偷工减料。最好快速创建一个 MVC,以便您的 GUI 在您对模型进行更改时自动更新。

于 2009-09-17T02:08:24.107 回答