【问题标题】:c# picturebox inheritance for card game时间:2018-10-10 标签:c#picturebox继承纸牌游戏
【发布时间】:2009-09-17 02:01:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# inheritance picturebox playing-cards


    【解决方案1】:

    您可以创建一个继承自 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 是非常有意义的。正如您已经注意到的那样,这将使应用程序更简单,让您的生活更轻松。

    【讨论】:

    • 谢谢你们!我不会在有任何继承权的情况下交出它;我只是好奇它会对游戏产生什么变化(行数、性能等),当然还有如何做到这一点。
    【解决方案2】:

    可以做卡吗 类继承图片框 控制所以屏幕上的内容是 “实际上”是卡片的一个实例 calss(而不是一个装有 它的图像价值)这将 大大减少了他的篮球数量 一个人必须跳过去 获取卡片的其他相关信息。

    是的,但你愿意吗?不会。它将您的业务逻辑和模型与您的 GUI 层紧密结合。

    如果您正在撰写有关 OOP 的论文,您应该鼓励养成良好的编程习惯并避免偷工减料。最好使用快速的 MVC,以便您的 GUI 在您对模型进行更改时自动更新。

    【讨论】:

    • 我认为他正在写一篇论文他正在学习的 OOP 课程介绍,而不是写一篇论文来教授该主题。
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2023-03-11
    • 2014-11-13
    • 2017-09-02
    • 2015-04-29
    相关资源
    最近更新 更多