C # наследство Picturebox для карточной игры - PullRequest
2 голосов
/ 17 сентября 2009

Я просыпаюсь в карточной игре для моего вступления к ООП. Сама игра соответствует спецификациям, но сейчас я играю с ней для собственного удовольствия и обучения.

У меня есть класс карт, содержащий и изображение, его ранг и набор. В графическом интерфейсе я использую графические блоки для отображения изображения, хранящегося на соответствующих картах (которые хранятся в массиве карт в классе колод), поэтому

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

Можно ли сделать класс карты наследующим элементом управления PictureBox, так что на экране «фактически» является экземпляром калибровки карты (а не ящиком, в котором хранится ее значение изображения), что значительно уменьшило бы Количество обручей, которое нужно было бы перепрыгнуть, чтобы получить карты и другую необходимую информацию.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2009

Вместо того, чтобы иметь класс Card, вы можете создать UserControl (с именем Card или ucCard или любым другим), который наследуется от PictureBox (вместо того, чтобы наследовать от UserControl). Самый простой способ сделать это в C # - добавить UserControl с желаемым именем, а затем в коде изменить верхнюю строку с

public partial class ucCard : UserControl

до

public partial class ucCard : PictureBox

В этом случае ваш элемент управления ucCard будет иметь все свойства PictureBox (включая изображение, где вы будете хранить растровое изображение карты). Когда вы строите свой проект, компилятор отключит строку, которая ссылается на AutoScaleMode - просто удалите эту строку и перестройте.

Затем вы можете добавить любые дополнительные свойства и методы, которые требуются картам, такие как масть и ранг и битовые карты для лицевой и оборотной сторон карты (оборотная сторона может быть статической, чтобы все карты могли ее использовать), и, возможно, Flip ( ) метод переключения между передним и задним изображениями.

Что касается ООП, то забытая часть святой троицы представляется инкапсуляцией. В этом случае, поскольку карта является визуальным элементом в пользовательском интерфейсе, с которым взаимодействует пользователь, имеет смысл инкапсулировать ее как UserControl. Как вы уже заметили, это упростит приложение и облегчит вашу жизнь.

2 голосов
/ 17 сентября 2009

Можно ли сделать карту класс наследовать PictureBox контролировать, так что на экране «на самом деле» экземпляр карты Calss (а не коробка, которая содержит значение этого изображения), который будет значительно сократить количество обручей нужно было бы прыгнуть до получить карты другую соответствующую информацию.

Да, но вы бы хотели? Нет. Он очень тесно связывает вашу бизнес-логику и модель с вашим графическим интерфейсом.

Если вы пишете статью о ООП, вы должны поощрять хорошие привычки программирования и препятствовать сокращению углов. Было бы лучше, если бы вы быстро взбили MVC, чтобы ваш графический интерфейс автоматически обновлялся каждый раз, когда вы вносите изменения в модель.

...