2009-06-18 15 views
3

WPFカスタムコントロールの世界に飛び込んで、HexGridコントロールを設計する最良の方法は何でしょうか?あなたのお気に入りのテーブルトップ戦争ゲームを考えてみてください。テーブルトップ戦争ゲームの誇らしげな歴史からデザインを盗むあなたの好きなビデオゲームです。WPF "hex grid"コンポーネント

基礎となるモデルは、Mapクラスの一環として、一つの重要な方法を公開します。

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

Hexがすべての関連データ(現時点では、1マップする地形列挙含まれています。背景色に1を、小さく始める...)。

おそらく関連する制約:
マップのサイズが変更されません& 16進数データは予測可能な時間(常にユーザーアクションに直接応答します)で変化します。

コンポーネントは、コンテナをきれいに塗りつぶし、XAMLで直接宣言できることが理想的です。

私が探しているのは、準備が整ったコンポーネントではなく、これを構築するために必要なことの概要です。

*私はこのアドレッシングスキームではかなり賢明でしたが、明らかに私はlate to the partyです。

答えて

1

編集:ここには、六角形のグリッドサンプルを持つPeteのプロジェクトページへのリンクがあります。 http://blois.us/Projects.html Path Findingと呼ばれるプロジェクトには、Hexグリッドがあり、おそらくminesweeperと同じ基本コードを使用しています。私はまだそれを見ていない。 Silverlight 3ですので、アップグレードする必要があります。掃海艇はかなりエレガントだった。

ラルフ

ORIGINAL: 掃海艇の六角形のバージョンのピーターブロワにより、Silverlight 2のためのサンプルがありました。

ソースコードが含まれています。彼は、grid上のmeasureoverrideとarrangeoverrideをオーバーライドすることによって、非常に上手な方法を実行しました。マウスオーバーなどはうまくいきました。非常に小さなコードがありました。

Googleは六角掃海艇のSilverlightのソースコードを検索することによって、それへの古いリンクを持っているが、私は、ウェブ、それ以上のプロジェクトを見つけることができませんので、

ピーター・ブロワは、以下のアドレスで、現在のブログを持っているブロワここに彼に連絡しようとするかもしれません... http://blois.us/Projects.html

幸運と私はそれがどう動くか教えてください、私は何か似ているつもりです。

+1

残念ながら、リンクは '404'で応答しています。この答えは基本的に役に立たない。 – IAbstract

+0

https://web.archive.org/web/20141217013339/http://blois.us/を試してくださいフッターは自分のメールアドレスに似ています –

+0

SO.GameDevelopmentセクションにこの問題に対処する別の質問があります: http://gamedev.stackexchange.com/questions/2338/clickable-hex-grid-in-c-net –

0

私の意見では、WPFでは、HexGridをPanelとして設計し、UserControlとして設計するのは妥当です。パネルは視覚的表現を持たず、子要素を適切に配置するだけでよい(ハニカムパターンのHexGridの場合)。これらの子要素は、順番に六角形をしている必要があります。

コンセプトの証明:私のHexGridプロジェクト(ここに投稿するには大きすぎる)

CodeProject article

GitHub repository

HexList:セレクタのItemsControl HexGridパネルにHexItemコンテナ内のアイテムを表示します

HexGrid:子要素を配置するパネルハニカムパターン

HexItem:宣言型の使用方法の六角形のContentControlに

例:

<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> 

hex color selector

私は質問はオールディーズであることを理解しちょうど私の解決策を共有します場合の場合