c # picturebox Erbe für Kartenspiel
-
07-07-2019 - |
Frage
ich auf einem Kartenspiel bin woking für mein Intro Papier OOP. Das Spiel selbst erfüllt die Spezifikationen, aber ich bin jetzt zu spielen, um mit ihm für meine eigene Befriedigung und zu lernen.
Ich habe eine Karte Klasse, die enthält und Bild, seinen Rang und Suite. Auf der GUI verwende ich Bildrahmen das Bild in den jeweiligen Karten so,
(die in einem Karten-Array in dem Deck Klasse gespeichert werden) gespeichert ist, anzuzeigencardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc
Wäre es möglich, die Karte Klasse zu machen eine PictureBox Kontrolle erbt so was auf dem Bildschirm ist „eigentlich“ eine Instanz der Karte calss (statt einer Box, die den Bildwert davon halten), die verringern würde dramaticall er Menge von Reifen würde man durch springen müssen, um die Karten andere relevante Informationen zu erhalten.
Lösung
Statt eine Karte Klasse hat, können Sie ein Benutzersteuerelement (mit dem Namen Karte oder ucCard oder was auch immer) erstellen, die von PictureBox (statt erben von Usercontrol) erbt. Der einfachste Weg, dies in C # zu tun ist, einen Usercontrol mit Ihrem gewünschten Namen hinzuzufügen, und dann in dem Code ändern, um die oberste Zeile von
public partial class ucCard : UserControl
public partial class ucCard : PictureBox
Ihre ucCard Kontrolle haben dann alle Eigenschaften eines PictureBox (einschließlich Bild, wo Sie die Karte des Bitmap speichern würde). Wenn Sie Ihr Projekt erstellen, wird der Compiler auf einer Linie barf, die Autoscale verweist -. Nur diese Zeile löschen und neu erstellen
Sie können dann fügen Sie alle zusätzliche Eigenschaften und Methoden die Karten benötigen, wie Farbe und Rang und Bitmaps für die Vorder- und Rückseite der Karte (die Rückseite statisch sein könnte, so dass alle Karten, es würden teilen), und vielleicht einen Flip ( Verfahren) zwischen den vorderen und hinteren Bildern wechseln.
Was OOP geht, scheint das vergessene Teil der dreifaltigkeit Encapsulation zu sein. In diesem Fall, da eine Karte ein visuelles Element in der Benutzeroberfläche ist, dass der Benutzer mit interagiert, macht es durchaus Sinn, es als ein Usercontrol zu verkapseln. Wie Sie vielleicht schon bemerkt haben, ist dies die Anwendung einfacher und Ihr Leben leichter machen.
Andere Tipps
Wäre es möglich, die Karte zu machen Klasse ein vererben die PictureBox Steuerung so, was auf dem Bildschirm ist „Eigentlich“ eine Instanz der Karte calss (statt einer Box, die die halten Bildwert davon), die würden dramaticall er-Menge von Reifen reduzieren man müßte bis zum Sprung erreichen die Karten andere relevante Informationen.
Ja, aber würden Sie wollen? Nein. Es verbindet Ihre Geschäftslogik und Modell sehr fest an Ihrer GUI-Schicht.
Wenn Sie ein Papier auf OOP schreiben, sollten Sie gute Programmier Gewohnheiten fördern und entmutigen Ecken schneiden. Es wäre besser für einen schnellen MVC peitschen, so dass Ihre GUI sich automatisch aktualisiert, wenn Sie eine Änderung an Ihrem Modell zu machen.