Pregunta

Estoy trabajando en un juego de cartas para mi introducción al papel OOP. El juego en sí cumple con las especificaciones, pero ahora estoy jugando con él para mi propia satisfacción y aprendizaje.

Tengo una clase de tarjeta que contiene una imagen, su rango y suite. En la GUI, uso cuadros de imagen para mostrar la imagen almacenada en las tarjetas respectivas (que se almacenan en una matriz de tarjetas en la clase de mazo), entonces,

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

¿Sería posible hacer que la clase de tarjeta herede el control PictureBox, de modo que lo que está en pantalla es "en realidad"? una instancia del calss de la tarjeta (en lugar de un cuadro que contenga el valor de la imagen) que reduciría drásticamente la cantidad de aros por los que uno tendría que saltar para obtener otra información relevante de las tarjetas.

¿Fue útil?

Solución

En lugar de tener una clase Card, puede crear un UserControl (denominado Card o ucCard o lo que sea) que herede de PictureBox (en lugar de heredar de UserControl). La forma más fácil de hacer esto en C # es agregar un UserControl con su nombre deseado y luego, en el código, cambiar la línea superior de

public partial class ucCard : UserControl

a

public partial class ucCard : PictureBox

Su control ucCard tendrá todas las propiedades de un PictureBox (incluida la imagen, donde almacenaría el mapa de bits de la tarjeta). Cuando compila su proyecto, el compilador vomitará en una línea que hace referencia a AutoScaleMode; simplemente elimine esta línea y vuelva a generarla.

A continuación, puede agregar cualquier propiedad y método adicional que requieran las tarjetas, como palo y rango y mapas de bits para el frente y el reverso de la tarjeta (el reverso podría ser estático para que todas las cartas lo compartan), y tal vez un Volteo ( ) método para cambiar entre las imágenes frontal y posterior.

En lo que respecta a OOP, la parte olvidada de la santa trinidad parece ser la Encapsulación. En este caso, dado que una tarjeta es un elemento visual en la interfaz de usuario con el que interactúa el usuario, tiene mucho sentido encapsularla como UserControl. Como ya has notado, esto hará que la aplicación sea más simple y tu vida más fácil.

Otros consejos

  

¿Sería posible hacer la tarjeta   clase y hereda el PictureBox   controlar así que lo que está en pantalla es   " en realidad " una instancia de la tarjeta   calss (en lugar de una caja que contiene el   valor de la imagen de la misma) que lo haría   dramaticall reduce la cantidad de aros   uno tendría que saltar a   obtener las tarjetas otra información relevante.

Sí, pero ¿quieres? No. Combina la lógica y el modelo de su negocio muy estrechamente con su capa de GUI.

Si está escribiendo un artículo sobre OOP, debe fomentar los buenos hábitos de programación y desalentar los recortes. Sería mejor para usted crear un MVC rápido, para que su GUI se actualice automáticamente cada vez que realice un cambio en su modelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top