Domanda

Sto scherzando su un gioco di carte per la mia introduzione su OOP. Il gioco stesso soddisfa le specifiche, ma ora ci sto giocando per la mia gratificazione e il mio apprendimento.

Ho una classe di carte che contiene e immagine, il suo grado e la sua suite. Sulla GUI utilizzo caselle di immagini per visualizzare l'immagine memorizzata nelle rispettive carte (che sono archiviate in un array di carte nella classe del mazzo), quindi,

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

Sarebbe possibile fare in modo che la classe card erediti il ??controllo PictureBox, quindi ciò che è sullo schermo è "in realtà" un'istanza del calss della carta (piuttosto che una scatola che ne detiene il valore dell'immagine) che ridurrebbe drasticamente la quantità di cerchi che si dovrebbero saltare per raggiungere le altre informazioni rilevanti.

È stato utile?

Soluzione

Invece di avere una classe Card, puoi creare un UserControl (chiamato Card o ucCard o qualsiasi altra cosa) che eredita da PictureBox (invece di ereditare da UserControl). Il modo più semplice per eseguire questa operazione in C # è aggiungere un UserControl con il nome desiderato, quindi nel codice cambiare la riga superiore da

public partial class ucCard : UserControl

a

public partial class ucCard : PictureBox

Il tuo controllo ucCard avrà quindi tutte le proprietà di un PictureBox (incluso Image, dove si memorizzerebbe la bitmap della scheda). Quando compili il tuo progetto, il compilatore apparirà su una riga che fa riferimento a AutoScaleMode: basta eliminare questa riga e ricostruire.

Puoi quindi aggiungere eventuali proprietà e metodi aggiuntivi richiesti dalle carte, come seme e rango e bitmap per la parte anteriore e posteriore della carta (la parte posteriore potrebbe essere statica in modo che tutte le carte la condividano) e forse un Flip ( ) per alternare tra le immagini anteriore e posteriore.

Per quanto riguarda OOP, la parte dimenticata della trinità santa sembra essere l'incapsulamento. In questo caso, poiché una scheda è un elemento visivo nell'interfaccia utente con cui l'utente interagisce, ha perfettamente senso incapsularla come UserControl. Come hai già notato, questo renderà l'applicazione più semplice e la tua vita più semplice.

Altri suggerimenti

  

Sarebbe possibile creare la carta   class an eredita PictureBox   controllo quindi ciò che è sullo schermo è   & Quot; effettivamente " un'istanza della carta   calss (piuttosto che una casella che contiene il   valore dell'immagine)   ridurre drasticamente la quantità di cerchi   si dovrebbe saltare a   ottenere le carte altre informazioni pertinenti.

Sì, ma vorresti farlo? No. Associa la logica aziendale e il modello strettamente al livello della GUI.

Se stai scrivendo un documento su OOP, dovresti incoraggiare le buone abitudini di programmazione e scoraggiare gli angoli da tagliare. Sarebbe meglio per te montare un MVC veloce, in modo che la tua GUI si aggiorni automagicamente da sola ogni volta che apporti una modifica al tuo modello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top