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, anzuzeigen
cardPictureBox1.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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top