Question

Je m'amuse à jouer à un jeu de cartes pour mon article Intro to OOP. Le jeu lui-même répond au cahier des charges, mais je le joue maintenant pour ma propre gratification et mon apprentissage.

J'ai une classe de carte qui contient et image, son rang et sa suite. Sur l'interface graphique, j'utilise des zones d'image pour afficher l'image stockée dans les cartes respectives (qui sont stockées dans un tableau de cartes de la classe de cartes), donc,

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

Serait-il possible de faire en sorte que la classe de carte hérite du contrôle PictureBox de sorte que ce qui est affiché à l'écran est "réellement" une instance des cartes (plutôt qu'une boîte contenant la valeur de l’image) qui réduirait considérablement le nombre de cerceaux qu’il faudrait sauter pour obtenir les cartes avec d’autres informations pertinentes.

Était-ce utile?

La solution

Au lieu d’avoir une classe Card, vous pouvez créer un UserControl (nommé Card ou ucCard ou autre) qui hérite de PictureBox (au lieu d’hériter de UserControl). Pour ce faire, la méthode la plus simple consiste à ajouter un contrôle UserControl avec le nom souhaité, puis à modifier la ligne supérieure dans le code de

.
public partial class ucCard : UserControl

à

public partial class ucCard : PictureBox

Votre contrôle ucCard aura alors toutes les propriétés d’un PictureBox (y compris Image, où vous voudriez stocker le bitmap de la carte). Lorsque vous construisez votre projet, le compilateur affiche une ligne faisant référence à AutoScaleMode. Supprimez cette ligne et reconstruisez-la.

Vous pouvez ensuite ajouter les propriétés et méthodes supplémentaires requises par les cartes, telles que costume, rang et Bitmaps pour le recto et le verso de la carte (le verso peut être statique afin que toutes les cartes le partagent), et peut-être un Flip ( ) méthode pour basculer entre les images avant et arrière.

Pour ce qui est de la POO, la partie oubliée de la sainte Trinité semble être l’encapsulation. Dans ce cas, étant donné qu'une carte est un élément visuel de l'interface utilisateur avec laquelle l'utilisateur interagit, il est parfaitement logique de l'encapsuler en tant que UserControl. Comme vous l'avez déjà remarqué, cela simplifiera l'application et facilitera votre vie.

Autres conseils

  

Serait-il possible de faire la carte   classe un hériter de la PictureBox   contrôler ce qui est à l'écran est   " effectivement " une instance de la carte   calss (plutôt qu’une boîte contenant le   valeur de l'image de celui-ci) qui   dramatique réduire le nombre de cerceaux   il faudrait sauter à travers   atteindre les cartes autres informations pertinentes.

Oui, mais voudriez-vous? Non. Il associe votre logique métier et votre modèle à votre couche d'interface graphique.

Si vous écrivez un article sur la programmation orientée objet, vous devez encourager de bonnes habitudes de programmation et décourager les raccourcis. Il serait préférable pour vous de créer un fichier MVC rapide afin que votre interface graphique se mette à jour automatiquement chaque fois que vous modifiez votre modèle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top