2012年03月03日

ナイト(騎士)巡回問題

   Clip to Evernote   このエントリーをはてなブックマークに追加      
ナイト巡回問題とは、チェスのナイトを、チェス盤の上を動かし、すべてのマスを通り、
最初の場所に戻ってくる経路を求めるというものです。

Gushwell's C# Programming Pageに掲載しました。
ナイト(騎士)巡回問題
C#+ Silverlightで解いています。

KnightTour

  

Posted by gushwell at 22:30Comments(0)TrackBack(0)

2011年12月05日

Silverlightアプリをブログ上で動かす

   Clip to Evernote   このエントリーをはてなブックマークに追加      
このエントリは、Silverlight Advent Calendar 2011への参加記事です。

ウェブサイトでは、比較的簡単にSilverlightアプリをホストすることが可能ですが、
ブログだと、画像以外をアップロードできなかったりして、Silverlightアプリをホストすることができない場合が
多いと思います。

しかし、せっかくだから、ブログでSilverlightアプリをホストしたいわけです。
僕はブログとウェブサイトの両方を運営していますが、圧倒的にブログの方が訪れる人の数が
多いですから余計にそう思います。
せっかく作ったSilverlightアプリを、以下のようにブログのページ上でも動かすことができれば、
それだけ、多くの人に見てもらえるというわけです。

Startボタンを押せば、プログラムが動き出します。



このプログラムは、以前「凸多角形の完全グラフ(一筆書き) 」で紹介したものです。
以前にも、このブログで載せています。


僕がやっている方法は、Webサイトにアップしたxapファイルを
ブログサイトから参照することで、ブログのページ上でSilverlightアプリを動かすというものです。

他の人に役に立つ情報かどうかはわかりませんが、 その方法を簡単にに示します。


まず、ウェブサイトにSilverlightアプリを配置します。
実際に配置するのは、
htmlファイル、silverlight.jsファイル、そして、ClientBinフォルダの下にあるxapファイルの3つです。
htmlファイルは、Visual StudioがSilverlightのプロジェクトを作成する時に、自動的に生成するホスト用のhtml ファイルです。

なお、このhtmlファイルの先頭近くにある body { } のスタイル指定は、以下のように、overflow指定を
追加しておきます。こうすることで、Silverlightをホストした部分でスクロールバーが出なくなります。



xapファイルは、デフォルトのまま、ClientBinフォルダの配下に配置します。
こんな感じです。


ちなみに、僕は、忍者ホームページというサービスを利用しています。
無料プランと有料プランがありますが、無料プランでも500MBのディスク容量がありますから、通常の利用なら
ばまったく問題ないと思います。

次にやることは、このSampleApp.html をウェブサイトの別のページからリンクを貼り辿れるようにすることです。
これは省略します。

最後に、ブログページに上記のSampleApp.html を埋め込みます。
記述するhtmlは、以下のような感じです。


もちろん、Webサイトの方でも、Topページから、リンクをたどっていくことで、
そのSilverlightアプリのページにたどり着けるようにしています。
大抵のWebサイトのサービスでは、そういった約束事があるので、どこからもリンクされていない
ファイルを、他のドメインのページからリンクさせることはやらないほうが良いと思われます。
ただ、結構面倒なので、最近はこの手法は使わないで、単にブログからウェブページへのリンクを
貼るだけのこともあります。

  
Posted by gushwell at 22:30Comments(0)TrackBack(0)

2011年11月13日

パズル Magic Star をC#で解く

   Clip to Evernote   このエントリーをはてなブックマークに追加      
WebSite に、
パズル Magic Star を解く
の記事を新たに追加しました。

MagicStar とは、下の図の12 個ある○に 1 から 12 までの数字をひとつずつ入れていき、
直線上の4個の数字の合計が、すべて 26 になるように、数字を配置するというパズルです。

MagicStar01


これを C# で解いています。
Silverlight で作成しているので、実際に動かして答えを見ることができます。
  
Posted by gushwell at 22:26Comments(0)TrackBack(0)

2011年09月13日

コッホ曲線をSilverlightで作成

   Clip to Evernote   このエントリーをはてなブックマークに追加      
コッホ曲線を描くプログラムをSilverlight で作成しました。
コッホ曲線とは、フラクタル図形の一種で、線分を3等分し、分割した真ん中の線分を底辺とする
正三角形を描く(ただし底辺は消す)ことを無限に繰り返すことによって得られる図形です。


24


実際に動くプログラムと、そのソースコードは、Gushwell's C# Programming Page - コッホ曲線 をご覧ください。


ある直線(線分)から、次の点(正三角形の頂点)を求めるロジックが意外と面倒でした。
角度の変換とか、2点間の長さを求めるとか、Sin, Cos関数を使うとかは 普段のプログラムではやっていないので...

  
Posted by gushwell at 22:49Comments(0)TrackBack(0)

2011年05月29日

交通流のモデル (ASEPモデル) のプログラム

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Webサイト「Gushwell's C# Programming Page」の「C#プログラム小品集」に、「交通流のモデル (ASEPモデル)」のプログラムを掲載しました。

一本道を多くの人が一列で歩く場合のシミュレーションをするというものです。
Silverlightで作成しています。
開始ボタンを押せば、プログラムが開始します。



ソースコードも掲載しています。   
Posted by gushwell at 20:45Comments(0)TrackBack(0)

2011年03月31日

N寄生数

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Webサイト Gushwell's C# Programming Pageに『N寄生数』の記事を掲載しました。
C#のソースコードも載せています。

N寄生数とは、

ある整数をA 、Aの一桁目の数値を N としたときに、 A を N 倍すると、右へ一桁分ローテートシフトし、
Nが最上位桁に移る数 のなかで最小の数を言います。 ただし、2<=N<=9 とします。

例えば、N=4 の時は、102564 となります。
102564 * 4 = 410256
となり、右にローテートシフトします

興味のある方は、N=6の時の値を求めてみてください。


  
Posted by gushwell at 21:26Comments(0)TrackBack(0)

2011年03月27日

Silverlight:画面に表示されたRichTextBox を印刷する

   Clip to Evernote   このエントリーをはてなブックマークに追加      
画面表示用のページに配置されたRichTextBox の変数名がrtb だとすると、
rtbをPageVisual に 直接セットすると、印刷はできるけど、
幅を印刷用紙に合わせることができません。

RichTextBoxの複製を作って、それをPageVisualに設定して、印刷すればいいはずと思って、
調べたんだけど、どうやって複製を作るのかが、なかなか分かりませんでした。

やっとたどり着いた答えは、xaml プロパティを使えばいいということ。
これがわかるまで、結構時間がかかってしまいました。
別の方法もあるかも知れないけど、これ以外の方法がわかりません。
1ページ限定だけど、以下のようにすれば印刷できます。

  
Posted by gushwell at 22:06Comments(0)TrackBack(0)

2011年02月20日

Silverlight4でドラッグ&ドロップ

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Silverlight4では、ドラッグ&ドロップができるようになったので、
ここ「Drag and Drop Files in Silverlight 4」を参考に、テストプログラムを作成し、
デバッグ実行したのですが、エクスプローラからのファイルのドラッグ&ドロップができません。
ファイルをドロップしようとしても、マウスカーソルの形状が禁止マークになっています。

いくらプログラムを見直してみても、おかしそうな箇所はありません。
IEの設定も、ちゃんとドラッグ&ドロップを有効にしてあるし...

ためしに、IE以外のブラウザ(Chrome, firefoxなど)を起動し、アドレスをコピーして、
作成したプログラムを動かしてみると、今度はドラッグ&ドロップができます。

理由がわからず、かなり悩みました。
原因は、Visual Studio 2010を管理者権限で起動していたためでした。

そういえば、以前も同じ問題で悩んだことがあったっけ。
成長してませんね。

ところで、Visual Studio を 管理者権限にしなければいけない理由ってなんだったんだっけ?
思い出せないので、管理者権限で起動するのをやめてみることにしました。

ちなみに、Silverlight4でエクスプローラからのDrag&Dropを可能にするには、
コントロールの AllowDrop を "True" にし、
Dropイベントハンドラで、次のようなコードを書くだけです。


  
Posted by gushwell at 21:30Comments(0)TrackBack(0)

2010年12月05日

Silverlightでプロジェクトに追加したファイルの一覧を得る

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Silverlightでプロジェクトに追加したファイルの一覧を得る方法を調べてみました。

例えば、複数のイメージファイルをプロジェクトに追加し、 ListBoxのその画像を表示する C# プログラムを考えます。

まず、Silverlightプロジェクトに追加したイメージファイルは、
プロパティのビルドアクションで、「埋め込まれたリソース」に設定します。
こうすると、プログラムコードでは、
でその名前の一覧を得ることができます。
ここで得られたリソースの名前は、
で、Streamオブジェクトとして取り出すことができます。
このstreamをBitmapImageに変換するには、
とします。
ここまでくれば、Imageコントロールに、このbitmapを割り当てればOKです。
具体的には、
というImageを格納するListを用意し、
とすれば、リソースにあるイメージを LIstBix に表示することができます。

最初は、どうやったら、stream から Imageオブジェクトを作成できるのかがわからず、
このコードにたどり着くまでに思いのほか時間をかけてしまいました。
下の画像がその実行結果です。
imagelist
  
Posted by gushwell at 22:22Comments(0)TrackBack(0)

2010年07月25日

ナイト(騎士)の最適配置問題

   Clip to Evernote   このエントリーをはてなブックマークに追加      
チェスのナイト(騎士)を以下の規則に従って配置するパズルです。

1.すべての空きがどれかのナイトの効き筋になっていること。
  複数のナイトから効いていてもかまわない。
2. ナイト同士は互いに効き筋にはない。
3. なるべく少ない数のナイトで配置する。


「プログラミング小品集」に掲載する中では、久しぶりに長めのプログラムでした。
そして実行時間も...
この手のパズルは解を求めるのに時間がかかるのは仕方がないとは思うけど、もう少し速くしたかったなー。


求まった解を見てみると、対称性をもったきれいな配置だなーって思います。

ところで、デバッグ中に、chromeで動かしてみたら、ブラウザがエラーを表示してしまいました。
どうも、長時間 Silverlightからの応答がないのが理由のようでした。
そのため、Backgroundworkerを使い、応答なしを回避しました。IEだと大丈夫なのにね。

ソースコードはこちらに掲載しています。   
Posted by gushwell at 22:39Comments(0)TrackBack(0)

2010年06月21日

ラングトンのアリ

   Clip to Evernote   このエントリーをはてなブックマークに追加      

「ラングトンのアリ」のプログラムは、多くのサイトで動くものが公開されていますが、
Silverlightで公開している方は、いないようなので、昔作ったものを Silverlightに移植してみました。

Silverlightで別スレッドから、BeginInvokeを呼び出し、UIスレッドで描画するサンプルとしてどうぞ。

ソースコードはこちらに掲載しています。

ランダムに動いているアリが、突然規則的に直線の道を作り出すのって不思議ですね。



  
Posted by gushwell at 23:12Comments(0)TrackBack(0)

2010年05月27日

Silverlight:RGBを指定してColorオブジェクトを生成する

   Clip to Evernote   このエントリーをはてなブックマークに追加      

RGBを指定してColorオブジェクトを生成する方法です。


指定の 8 ビット カラー値 (赤、緑、青) から Color オブジェクトを作成します

ARGB値 を指定することもできます。

第1引数がアルファ値となります。アルファ値は、透明度を意味し、 0 が完全透明、255が完全不透明です。

  
Posted by gushwell at 23:10Comments(0)TrackBack(0)

2010年05月17日

Silverlight : クリックしたマウスの位置を得る

   Clip to Evernote   このエントリーをはてなブックマークに追加      

MouseLeftButtonDownイベントで、マウスポインタの位置を求めるコードです。


これで、GetPositionメソッドの引数で与えた UIElement(ここでは、canvas1)を基準にした相対位置を得ることができます。
  
Posted by gushwell at 22:59Comments(0)TrackBack(0)

2010年05月12日

Silverlight : UIElementを消去する

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Rectangleを消去する例です。


name変数で与えた名前を FindNameで該当するRectangleオブジェクトを 見つけます。
見つかったら、Children.Removeメソッドを呼び出し、Panelの子要素から削除します。
これで、画面からもRectangleが消去できます。
当たり前ですが、Rectangleオブジェクトが事前に分かっていれば、Findで見つける必要はありません。
なお、panel変数には、Canvasなどのオブジェクトが設定されているものとします。

  
Posted by gushwell at 22:33Comments(0)TrackBack(0)

2010年05月11日

Silverlight : 動的にUIElementを描く

   Clip to Evernote   このエントリーをはてなブックマークに追加      
前回の記事「ヒルベルト曲線」で、
コードによるUIElementの追加などのサンプルとしてどうぞ。 ソースコードはこちらに掲載しています。
なんて、書いたけど、該当箇所を探すのも面倒だろうなと思い、こちらにコードの抜粋載せます。

Lineを描く例です。
Lineオブジェクトを生成し、プロパティに値を設定した後に、
Panelオブジェクト(Canvas, Grid, StackPanelなど)のChildrenプロパティに、
Lineオブジェクトを追加することで、Lineを描画できます。


panel変数には、Canvasなどのオブジェクトが設定されているものとします。
Line以外のUIElementもみな同じ方法で描画することができます。

  
Posted by gushwell at 22:29Comments(0)TrackBack(0)

2010年05月09日

ヒルベルト曲線

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Hilbert

Silverlight3 + C#でヒルベルト曲線を描くプログラムを書いてみました。

再帰処理、イベント、BackgrowndWorker、コードによるUIElementの追加などのサンプルとしてどうぞ。

ソースコードはこちらに掲載しています。

  
Posted by gushwell at 23:51Comments(0)TrackBack(0)

2010年03月22日

1次元ランダムウォークは株価の動きと似ているのか

   Clip to Evernote   このエントリーをはてなブックマークに追加      
以前、2次元ランダムウォークのプログラムをこちらに掲載しましたが、
このページ意外とアクセスがあるようなので、こういった需要はあるのかなと思い、
今度は、1次元ランダムウォークのプログラムを書いてみました。
株価がランダムウォークの動きに従っているという説を確かめてみたかったというのもあります。
このプログラムでは、±5%の範囲で値を変動させています。
確かに想像以上に良く似たグラフになりますね。


このプログラムでは、SilverlightのWriteableBitmapクラスを使っていますが、WriteableBitmapでUIElement(ここではLineオブジェクト)を描画するには、以下のように、Renderメソッドを利用します。


WriteableBitmapクラスにDrawLineなどのメソッドがあれば便利なのですが、すべてRenderメソッドで統一できるよ、というその潔さは素敵です。
ソースコードは、こちらに掲載しています。  
Posted by gushwell at 22:09Comments(0)TrackBack(0)

2010年03月14日

C#で8クィーンゲームを作成 (あなたは勝てますか?)

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Gushwell C# Programming Pageに、「8クィーン・ゲーム」を掲載しました。
Silverlightで実際に対戦できるようにしています。

8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。
なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。


※ボタンをクリックするとゲームが始まります。

この手の思考ゲームの基本の基本だけでプログラムが書けるので、学習用としては、なかなか良い題材だと思います。
ソースコードはこちらで掲載しています。  
Posted by gushwell at 22:54Comments(0)TrackBack(0)

2010年02月28日

Silverlight : Despatcher.BeginInvokeメソッド

   Clip to Evernote   このエントリーをはてなブックマークに追加      
SilverlightにはControl.Invokeがありません。
代わりにDependencyObject.Dispatcher プロパティを経由して、BeginInvokeメソッドを呼び出します。
BeginInvokeは、2つのoverloadメソッドがありますが、 通常は、Actionデリゲートを受け取るメソッドを使えばよいと思います。


もうひとつの BeginInvokeの書き方


  
Posted by gushwell at 23:52Comments(0)TrackBack(0)

2010年02月14日

ナノピコ教室のプログラムをSilverlightアプリへ (3)

   Clip to Evernote   このエントリーをはてなブックマークに追加      
ナノピコ教室のプログラムをSilverlightアプリへ (2)」で示した Boardクラスと、BoardCanvasクラスを使ったSilverlightプログラムの第一弾ができました。
梅花碁というゲーム(連珠の一種)の勝ち判定をするプログラムです。


ボード上をクリックすると、黒石→白石→消去を繰り返します。
ソースコードはこちらに掲載しています。

ナノピコ教室では、さらに、「黒-白-黒と打って勝ちになる手を出力するプログラムを書いてください」という問題が掲載されています。こちらも手が空いたときにSilverlightでプログラムを書いてみようと思います。
また、「8クイーンゲーム」「オセロ最短詰め」「面積最大の領域」「拾い碁」「数独」なども、順次Silverlightにしてゆくつもりです。
  
Posted by gushwell at 22:53Comments(0)TrackBack(0)

2010年02月07日

ナノピコ教室のプログラムをSilverlightアプリへ (2)

   Clip to Evernote   このエントリーをはてなブックマークに追加      
1月10日に、「ナノピコ教室のプログラムをSilverlightアプリへ」というエントリで、以前書いた「オセロ最短詰め」「数独を解く」「梅花碁」「8クイーンゲーム」「面積最大の領域」などのプログラムを Silverlightアプリに移植するのに、盤データを扱う共通のクラスを作成するつもり、と書きましたが、昨日、今日はまとまった時間が取れたので、なんとか形になりました。

Boardクラスと、BoardCanvasという2つのクラスが中心となるクラスです。
Boardクラスは、盤データを扱うモデルクラス。
BoardCanvasクラスは、描画を担当するビュークラス。

このクラスの動作を確認するのに簡単なプログラムを書いたのがこれ。
ボード上をクリックすると、黒石→白石→消去を繰り返します。


Boardクラスと、BoardCanvasのソースコードはこちらに掲載しています。
デモプログラムのソースコードは、こちらです。

描画は、カスタムコントロールで、Boardオブジェクトとバインドできれば良かったのですが、まだSilverlightの知識が足りないので、通常のクラスとして、BoardCanvasクラスを作成しています。

ここまで出来れば、各プログラムのSilverlightへの移植は、それほど難しくないかなーと思ってます。
  
Posted by gushwell at 18:33Comments(0)TrackBack(0)

2010年01月17日

シェルピンスキーのギャスケット

   Clip to Evernote   このエントリーをはてなブックマークに追加      
1次元セルオートマトンで、シェルピンスキーのギャスケットを描くプログラムを書いてみました。



Silverlightで、BackgroundWorker 、WriteableBitmap を使うサンプルコードとしてどうぞ。
ソースコードは、こちらに載せています。

面白いのは、このプログラムのデータ部を変えるだけで、こんな図も描けます。




こちらは、1次元セルオートマトンのルール30と言われているものです。
このプログラムのソースコードは、 こちらです。
  
Posted by gushwell at 23:46Comments(0)TrackBack(0)

2009年12月28日

自然数 142857

   Clip to Evernote   このエントリーをはてなブックマークに追加      
142857という数字を見て、「あれね」とピンとくる人は、かなり数字好きの人ですね。
142857にはとても面白い性質があります。
そのひとつが、巡回数です。ダイアル数、循環数といも言うらしいです。

ということで、巡回数を求めるプログラムを書いてみました。
こちらに書いたものを一部変更し、Silverlightアプリとして書き直したものです。



ソースコードはこちら の「巡回数」の ページに載せています。

142857をWebで検索してみると、そのほかの面白い性質があることが分かります。

  
Posted by gushwell at 23:20Comments(0)TrackBack(0)

2009年12月19日

SilverlightのWriteableBitmap クラス

   Clip to Evernote   このエントリーをはてなブックマークに追加      
例えば、Silverlightで、点を描画したい場合、どうやってやるのだろうか?
まさかRectangleを使うということは無いよな。
ということで調べたら、WriteableBitmap クラスというものがあった。
でも、このクラスには、GetPixel とか SetPixel とかが無い。
Pixelsプロパティがあるので、これを使うみたいだ。
でも、これって1次元配列だし、int型じゃないですか。
面倒くさいですね。
ということで以下が作成した2次元ランダムウォークのプログラムです。



ソースコードはこちらに掲載しています。  
Posted by gushwell at 23:13Comments(0)TrackBack(0)

2009年12月06日

凸多角形の外周 (Silverlight)

   Clip to Evernote   このエントリーをはてなブックマークに追加      
以前、凸多角形の外周で、掲載したプログラムをSilverlightアプリに移植しました。

マウスクリックで点を打って、実行ボタンを押してください。


ソースコードは、こちらに掲載しています。   
Posted by gushwell at 21:46Comments(0)TrackBack(0)

2009年11月22日

Silverlightアプリをブログに張り付ける(多角形の完全グラフ)

   Clip to Evernote   このエントリーをはてなブックマークに追加      
Silverlight StreamingでSilverlightアプリを公開する」で、 多角形の完全グラフを描くSilverlightアプリケーションを掲載したのですが、Silverlight Streamingのサービスが終了してしまったので、 http://gushwell.ifdef.jp/のWebサイト(NINJA TOOLSの無料ホームページスペース)に掲載したものを、こちらのブログに張り付けてみました。

SilverlightのWebプロジェクトの 「xxxxPage.html」と「ClientBinフォルダ」をサーバーにアップロードしておいて、Blog には、以下のような記述をします。。

  Startボタンを押してみてください。簡単なアニメーションが始まります。


これで、動きのあるプログラムをブログで公開できます。 なぜか右側の枠線が隠れてしまっていますが、それは御愛嬌ということで...  
Posted by gushwell at 23:07Comments(0)TrackBack(0)

2009年07月20日

Silverlight StreamingでSilverlightアプリを公開する

   Clip to Evernote   このエントリーをはてなブックマークに追加      
[パズル]多角形の完全グラフで掲載したWPFアプリケーションをSilverlightアプリケーションに書き換え、 Silverlight Streamingのサービスを使って、このページで動作するようにしてみました。

数字を入れて、ボタンを押すとアニメーションが始まります。


参考にしたサイト:[Silverlight 2]アプリケーションをインターネットで公開するには?

WPFアプリからSilverlightアプリに変更するのに必要な修正箇所は、XAMLで1箇所、C#のコードで1箇所でした。




と変更。(ボタンのContentは、ButtonからStartに変更)

C#のコードでは、



に変更。

Silverlightでは、Brushes.LightSteelBlueクラスが定義されていないので、 これをどうやって他のコードで置き換えるのかがわからずに、調べるのに思いのほか時間がかかりました。
  
Posted by gushwell at 22:05Comments(0)TrackBack(0)