Creazione di un controllo UI dragamine?
-
22-07-2019 - |
Domanda
Sono stato impegnato a lavorare su un programma in grado di risolvere enigmi di Minesweeper (per nessun altro motivo che penso sia divertente). Quando si tratta dell'interfaccia utente, tuttavia, non mi piace molto l'idea di creare un'istanza di oltre cento dello stesso controllo, uno per cella. Devo creare un controllo personalizzato che gestisca tutto il suo disegno e si inserisca da solo? Quale approccio suggerite voi ragazzi?
Sto usando WPF e sono abbastanza nuovo. Qualsiasi suggerimento sarebbe fantastico.
Soluzione
Sì, un controllo personalizzato sarebbe una buona idea. Inoltre, M-V-VM è un must in una situazione come questa; ridurrà notevolmente la complessità della tua app.
Prendo un UniformGrid e uso i pulsanti come quadrati. Dovresti creare un pulsante personalizzato in tre stati se desideri aggiungere il "? & Quot; stato intermedio.
Il modello per il pulsante sarebbe simile
public class MineSquare : INotifyPropertyChanged
{
// exploded, number, or nothing
pubic ImageSource ButtonImage {get;private set;}
// true, then goes to false when clicked
public bool CanClick {get; private set;}
// bound to the Command of the button
public ICommand Click {get; private set;}
}
Gestisci il modello in codice anziché i controlli. Inserisci nove MineSquares in ObservableCollection sul tuo ViewModel associato a UniformGrid e avrai un gioco dragamine 3x3. Ogni pulsante gestisce la propria logica. Puoi agganciarti ai modelli tramite il modello di visualizzazione per scorrere su tutti i quadrati e determinare se è stato fatto clic su tutti.
Altri suggerimenti
Penso che dovresti creare un unico controllo disegnato dal proprietario. WPF è interessante, ma un'app WPF ha ancora le stesse limitazioni per quanto riguarda il numero totale di controlli in un modulo, quindi avere un controllo separato per ogni cella in Minesweeper sarebbe comunque problematico.
Minesweeper è abbastanza giocato, per quanto io lo adoro da solo. Forse potresti divertirti di più rendendo le celle esagonali invece che rettangolari e organizzando le miniere in modo che sillabino parole sporche o qualcosa del genere.