Domanda

Saltare nel mondo dei controlli personalizzati WPF e ti chiedevi quale sarebbe il modo migliore per progettare un controllo HexGrid? Pensa al tuo gioco di guerra da tavolo preferito; o, altrettanto probabilmente, il tuo videogioco preferito che ruba il design da un'orgogliosa storia di giochi di guerra da tavolo.

Il modello sottostante espone un metodo significativo, come parte di una classe Map:

Hex GetHex(int x, int y, int z)*;

Hex contiene tutti i dati rilevanti (al momento, un elenco Terrain che associa 1: 1 a un colore di sfondo; iniziando in piccolo ...).

Eventuali vincoli rilevanti:
La mappa non cambia in dimensioni e amp; I dati esadecimali cambiano in momenti molto prevedibili (sempre in risposta diretta all'azione dell'utente).

Idealmente il componente si espanderà per riempire il suo contenitore in modo pulito ed essere dichiarabile direttamente in XAML.

Quello che sto cercando è uno schema abbozzato di ciò che devo fare per costruire questo, non un componente pronto.

* Pensavo di essere abbastanza intelligente con questo schema di indirizzamento, ma apparentemente sono in ritardo alla festa .

È stato utile?

Soluzione

EDIT: ecco un link alla pagina del progetto di Pete che ha un esempio di griglia esadecimale. http://blois.us/Projects.html Esiste un esempio di pathfinding che mostra un progetto chiamato pathfinding che ha una griglia esadecimale e probabilmente utilizza lo stesso codice di base utilizzato da dragamine. Non l'ho ancora visto. È Silverlight 3, quindi potrebbe essere necessario aggiornarlo. Il dragamine era piuttosto elegante.

Ralph

ORIGINALE: C'è stato un campione per Silverlight 2 di Peter Blois di una versione esagonale di dragamine.

Includeva il codice sorgente. Aveva un metodo molto elegante per farlo ignorando la misura override e organizza override sulla griglia. Mouseover, ecc. Ha funzionato bene. C'era un codice notevolmente piccolo.

Non riesco più a trovare il progetto sul web, anche se Google ha un link non aggiornato ad esso, cercando blois codice sorgente esagonale minesweeper silverlight

Peter Blois ha un blog attuale all'indirizzo qui sotto, quindi potresti provare a contattarlo qui ... http://blois.us/Projects.html

Buona fortuna e dimmi come va, ho intenzione di dong qualcosa di simile.

Altri suggerimenti

Secondo me in WPF è più ragionevole progettare un HexGrid come Panel e non come UserControl. I pannelli non hanno una rappresentazione visiva e devono solo disporre correttamente gli elementi figlio (nel caso di HexGrid - in un modello a nido d'ape). A loro volta, quegli elementi figlio dovrebbero avere una forma esagonale.

Una prova di un concetto: il mio progetto HexGrid (troppo grande per postare qui)

Articolo CodeProject

repository GitHub

HexList : selettore ItemsControl che visualizza gli elementi nel contenitore HexItem su un pannello HexGrid

HexGrid : pannello che dispone gli elementi figlio in un modello a nido d'ape

HexItem : ContentControl a forma esagonale

esempio di utilizzo dichiarativo:

<hx:HexList Name="HexColors" Orientation="Vertical"
            Grid.Row="1"
            Padding="10"
            SelectedIndex="0"
            Background="{Binding Path=SelectedItem.Background, RelativeSource={RelativeSource Self}}"
            RowCount="5" ColumnCount="5">
    <hx:HexItem Grid.Row="0" Grid.Column="1" Background="#006699"/>
    <hx:HexItem Grid.Row="0" Grid.Column="2" Background="#0033CC"/>
    <hx:HexItem Grid.Row="0" Grid.Column="3" Background="#3333FF"/>
    <!--...-->
    <hx:HexItem Grid.Row="4" Grid.Column="1" Background="#CC9900"/>
    <hx:HexItem Grid.Row="4" Grid.Column="2" Background="#FF3300"/>
    <hx:HexItem Grid.Row="4" Grid.Column="3" Background="#CC0000"/>
</hx:HexList>

 selettore colore esadecimale

Comprendo che la domanda è vecchia, ma condivido la mia soluzione nel caso

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