2012年03月03日
ナイト(騎士)巡回問題
ナイト巡回問題とは、チェスのナイトを、チェス盤の上を動かし、すべてのマスを通り、
最初の場所に戻ってくる経路を求めるというものです。
Gushwell's C# Programming Pageに掲載しました。
ナイト(騎士)巡回問題
C#+ Silverlightで解いています。

最初の場所に戻ってくる経路を求めるというものです。
Gushwell's C# Programming Pageに掲載しました。
ナイト(騎士)巡回問題
C#+ Silverlightで解いています。

2011年12月05日
Silverlightアプリをブログ上で動かす
このエントリは、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サイトのサービスでは、そういった約束事があるので、どこからもリンクされていない
ファイルを、他のドメインのページからリンクさせることはやらないほうが良いと思われます。
ただ、結構面倒なので、最近はこの手法は使わないで、単にブログからウェブページへのリンクを
貼るだけのこともあります。
ウェブサイトでは、比較的簡単に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サイトのサービスでは、そういった約束事があるので、どこからもリンクされていない
ファイルを、他のドメインのページからリンクさせることはやらないほうが良いと思われます。
ただ、結構面倒なので、最近はこの手法は使わないで、単にブログからウェブページへのリンクを
貼るだけのこともあります。
2011年11月13日
パズル Magic Star をC#で解く
WebSite に、
「パズル Magic Star を解く」
の記事を新たに追加しました。
MagicStar とは、下の図の12 個ある○に 1 から 12 までの数字をひとつずつ入れていき、
直線上の4個の数字の合計が、すべて 26 になるように、数字を配置するというパズルです。

これを C# で解いています。
Silverlight で作成しているので、実際に動かして答えを見ることができます。
「パズル Magic Star を解く」
の記事を新たに追加しました。
MagicStar とは、下の図の12 個ある○に 1 から 12 までの数字をひとつずつ入れていき、
直線上の4個の数字の合計が、すべて 26 になるように、数字を配置するというパズルです。

これを C# で解いています。
Silverlight で作成しているので、実際に動かして答えを見ることができます。
2011年09月13日
コッホ曲線をSilverlightで作成
コッホ曲線を描くプログラムをSilverlight で作成しました。
コッホ曲線とは、フラクタル図形の一種で、線分を3等分し、分割した真ん中の線分を底辺とする
正三角形を描く(ただし底辺は消す)ことを無限に繰り返すことによって得られる図形です。

実際に動くプログラムと、そのソースコードは、Gushwell's C# Programming Page - コッホ曲線 をご覧ください。
ある直線(線分)から、次の点(正三角形の頂点)を求めるロジックが意外と面倒でした。
角度の変換とか、2点間の長さを求めるとか、Sin, Cos関数を使うとかは 普段のプログラムではやっていないので...
コッホ曲線とは、フラクタル図形の一種で、線分を3等分し、分割した真ん中の線分を底辺とする
正三角形を描く(ただし底辺は消す)ことを無限に繰り返すことによって得られる図形です。

実際に動くプログラムと、そのソースコードは、Gushwell's C# Programming Page - コッホ曲線 をご覧ください。
ある直線(線分)から、次の点(正三角形の頂点)を求めるロジックが意外と面倒でした。
角度の変換とか、2点間の長さを求めるとか、Sin, Cos関数を使うとかは 普段のプログラムではやっていないので...
2011年05月29日
交通流のモデル (ASEPモデル) のプログラム
Webサイト「Gushwell's C# Programming Page」の「C#プログラム小品集」に、「交通流のモデル (ASEPモデル)」のプログラムを掲載しました。
一本道を多くの人が一列で歩く場合のシミュレーションをするというものです。
Silverlightで作成しています。
開始ボタンを押せば、プログラムが開始します。
ソースコードも掲載しています。
一本道を多くの人が一列で歩く場合のシミュレーションをするというものです。
Silverlightで作成しています。
開始ボタンを押せば、プログラムが開始します。
ソースコードも掲載しています。
2011年03月31日
N寄生数
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の時の値を求めてみてください。
C#のソースコードも載せています。
N寄生数とは、
ある整数をA 、Aの一桁目の数値を N としたときに、 A を N 倍すると、右へ一桁分ローテートシフトし、
Nが最上位桁に移る数 のなかで最小の数を言います。 ただし、2<=N<=9 とします。
例えば、N=4 の時は、102564 となります。
102564 * 4 = 410256
となり、右にローテートシフトします
興味のある方は、N=6の時の値を求めてみてください。
2011年03月27日
Silverlight:画面に表示されたRichTextBox を印刷する
画面表示用のページに配置されたRichTextBox の変数名がrtb だとすると、
rtbをPageVisual に 直接セットすると、印刷はできるけど、
幅を印刷用紙に合わせることができません。
RichTextBoxの複製を作って、それをPageVisualに設定して、印刷すればいいはずと思って、
調べたんだけど、どうやって複製を作るのかが、なかなか分かりませんでした。
やっとたどり着いた答えは、xaml プロパティを使えばいいということ。
これがわかるまで、結構時間がかかってしまいました。
別の方法もあるかも知れないけど、これ以外の方法がわかりません。
1ページ限定だけど、以下のようにすれば印刷できます。
rtbをPageVisual に 直接セットすると、印刷はできるけど、
幅を印刷用紙に合わせることができません。
RichTextBoxの複製を作って、それをPageVisualに設定して、印刷すればいいはずと思って、
調べたんだけど、どうやって複製を作るのかが、なかなか分かりませんでした。
やっとたどり着いた答えは、xaml プロパティを使えばいいということ。
これがわかるまで、結構時間がかかってしまいました。
別の方法もあるかも知れないけど、これ以外の方法がわかりません。
1ページ限定だけど、以下のようにすれば印刷できます。
2011年02月20日
Silverlight4でドラッグ&ドロップ
Silverlight4では、ドラッグ&ドロップができるようになったので、
ここ「Drag and Drop Files in Silverlight 4」を参考に、テストプログラムを作成し、
デバッグ実行したのですが、エクスプローラからのファイルのドラッグ&ドロップができません。
ファイルをドロップしようとしても、マウスカーソルの形状が禁止マークになっています。
いくらプログラムを見直してみても、おかしそうな箇所はありません。
IEの設定も、ちゃんとドラッグ&ドロップを有効にしてあるし...
ためしに、IE以外のブラウザ(Chrome, firefoxなど)を起動し、アドレスをコピーして、
作成したプログラムを動かしてみると、今度はドラッグ&ドロップができます。
理由がわからず、かなり悩みました。
原因は、Visual Studio 2010を管理者権限で起動していたためでした。
そういえば、以前も同じ問題で悩んだことがあったっけ。
成長してませんね。
ところで、Visual Studio を 管理者権限にしなければいけない理由ってなんだったんだっけ?
思い出せないので、管理者権限で起動するのをやめてみることにしました。
ちなみに、Silverlight4でエクスプローラからのDrag&Dropを可能にするには、
コントロールの AllowDrop を "True" にし、
Dropイベントハンドラで、次のようなコードを書くだけです。
ここ「Drag and Drop Files in Silverlight 4」を参考に、テストプログラムを作成し、
デバッグ実行したのですが、エクスプローラからのファイルのドラッグ&ドロップができません。
ファイルをドロップしようとしても、マウスカーソルの形状が禁止マークになっています。
いくらプログラムを見直してみても、おかしそうな箇所はありません。
IEの設定も、ちゃんとドラッグ&ドロップを有効にしてあるし...
ためしに、IE以外のブラウザ(Chrome, firefoxなど)を起動し、アドレスをコピーして、
作成したプログラムを動かしてみると、今度はドラッグ&ドロップができます。
理由がわからず、かなり悩みました。
原因は、Visual Studio 2010を管理者権限で起動していたためでした。
そういえば、以前も同じ問題で悩んだことがあったっけ。
成長してませんね。
ところで、Visual Studio を 管理者権限にしなければいけない理由ってなんだったんだっけ?
思い出せないので、管理者権限で起動するのをやめてみることにしました。
ちなみに、Silverlight4でエクスプローラからのDrag&Dropを可能にするには、
コントロールの AllowDrop を "True" にし、
Dropイベントハンドラで、次のようなコードを書くだけです。
2010年12月05日
Silverlightでプロジェクトに追加したファイルの一覧を得る
Silverlightでプロジェクトに追加したファイルの一覧を得る方法を調べてみました。
例えば、複数のイメージファイルをプロジェクトに追加し、 ListBoxのその画像を表示する C# プログラムを考えます。
まず、Silverlightプロジェクトに追加したイメージファイルは、
プロパティのビルドアクションで、「埋め込まれたリソース」に設定します。
こうすると、プログラムコードでは、
でその名前の一覧を得ることができます。
ここで得られたリソースの名前は、
で、Streamオブジェクトとして取り出すことができます。
このstreamをBitmapImageに変換するには、
とします。
ここまでくれば、Imageコントロールに、このbitmapを割り当てればOKです。
具体的には、
というImageを格納するListを用意し、
とすれば、リソースにあるイメージを LIstBix に表示することができます。
最初は、どうやったら、stream から Imageオブジェクトを作成できるのかがわからず、
このコードにたどり着くまでに思いのほか時間をかけてしまいました。
下の画像がその実行結果です。

例えば、複数のイメージファイルをプロジェクトに追加し、 ListBoxのその画像を表示する C# プログラムを考えます。
まず、Silverlightプロジェクトに追加したイメージファイルは、
プロパティのビルドアクションで、「埋め込まれたリソース」に設定します。
こうすると、プログラムコードでは、
でその名前の一覧を得ることができます。
ここで得られたリソースの名前は、
で、Streamオブジェクトとして取り出すことができます。
このstreamをBitmapImageに変換するには、
とします。
ここまでくれば、Imageコントロールに、このbitmapを割り当てればOKです。
具体的には、
というImageを格納するList
とすれば、リソースにあるイメージを LIstBix に表示することができます。
最初は、どうやったら、stream から Imageオブジェクトを作成できるのかがわからず、
このコードにたどり着くまでに思いのほか時間をかけてしまいました。
下の画像がその実行結果です。

2010年07月25日
ナイト(騎士)の最適配置問題
チェスのナイト(騎士)を以下の規則に従って配置するパズルです。
1.すべての空きがどれかのナイトの効き筋になっていること。
複数のナイトから効いていてもかまわない。
2. ナイト同士は互いに効き筋にはない。
3. なるべく少ない数のナイトで配置する。
「プログラミング小品集」に掲載する中では、久しぶりに長めのプログラムでした。
そして実行時間も...
この手のパズルは解を求めるのに時間がかかるのは仕方がないとは思うけど、もう少し速くしたかったなー。
求まった解を見てみると、対称性をもったきれいな配置だなーって思います。
ところで、デバッグ中に、chromeで動かしてみたら、ブラウザがエラーを表示してしまいました。
どうも、長時間 Silverlightからの応答がないのが理由のようでした。
そのため、Backgroundworkerを使い、応答なしを回避しました。IEだと大丈夫なのにね。
ソースコードはこちらに掲載しています。
1.すべての空きがどれかのナイトの効き筋になっていること。
複数のナイトから効いていてもかまわない。
2. ナイト同士は互いに効き筋にはない。
3. なるべく少ない数のナイトで配置する。
「プログラミング小品集」に掲載する中では、久しぶりに長めのプログラムでした。
そして実行時間も...
この手のパズルは解を求めるのに時間がかかるのは仕方がないとは思うけど、もう少し速くしたかったなー。
求まった解を見てみると、対称性をもったきれいな配置だなーって思います。
ところで、デバッグ中に、chromeで動かしてみたら、ブラウザがエラーを表示してしまいました。
どうも、長時間 Silverlightからの応答がないのが理由のようでした。
そのため、Backgroundworkerを使い、応答なしを回避しました。IEだと大丈夫なのにね。
ソースコードはこちらに掲載しています。
2010年06月21日
ラングトンのアリ
「ラングトンのアリ」のプログラムは、多くのサイトで動くものが公開されていますが、
Silverlightで公開している方は、いないようなので、昔作ったものを Silverlightに移植してみました。
Silverlightで別スレッドから、BeginInvokeを呼び出し、UIスレッドで描画するサンプルとしてどうぞ。
ソースコードはこちらに掲載しています。
ランダムに動いているアリが、突然規則的に直線の道を作り出すのって不思議ですね。
2010年05月27日
Silverlight:RGBを指定してColorオブジェクトを生成する
RGBを指定してColorオブジェクトを生成する方法です。
指定の 8 ビット カラー値 (赤、緑、青) から Color オブジェクトを作成します
ARGB値 を指定することもできます。
第1引数がアルファ値となります。アルファ値は、透明度を意味し、 0 が完全透明、255が完全不透明です。
2010年05月17日
Silverlight : クリックしたマウスの位置を得る
MouseLeftButtonDownイベントで、マウスポインタの位置を求めるコードです。
これで、GetPositionメソッドの引数で与えた UIElement(ここでは、canvas1)を基準にした相対位置を得ることができます。
2010年05月12日
Silverlight : UIElementを消去する
Rectangleを消去する例です。
name変数で与えた名前を FindNameで該当するRectangleオブジェクトを 見つけます。
見つかったら、Children.Removeメソッドを呼び出し、Panelの子要素から削除します。
これで、画面からもRectangleが消去できます。
当たり前ですが、Rectangleオブジェクトが事前に分かっていれば、Findで見つける必要はありません。
なお、panel変数には、Canvasなどのオブジェクトが設定されているものとします。
name変数で与えた名前を FindNameで該当するRectangleオブジェクトを 見つけます。
見つかったら、Children.Removeメソッドを呼び出し、Panelの子要素から削除します。
これで、画面からもRectangleが消去できます。
当たり前ですが、Rectangleオブジェクトが事前に分かっていれば、Findで見つける必要はありません。
なお、panel変数には、Canvasなどのオブジェクトが設定されているものとします。
2010年05月11日
Silverlight : 動的にUIElementを描く
前回の記事「ヒルベルト曲線」で、
Lineを描く例です。
Lineオブジェクトを生成し、プロパティに値を設定した後に、
Panelオブジェクト(Canvas, Grid, StackPanelなど)のChildrenプロパティに、
Lineオブジェクトを追加することで、Lineを描画できます。
panel変数には、Canvasなどのオブジェクトが設定されているものとします。
Line以外のUIElementもみな同じ方法で描画することができます。
コードによるUIElementの追加などのサンプルとしてどうぞ。 ソースコードはこちらに掲載しています。なんて、書いたけど、該当箇所を探すのも面倒だろうなと思い、こちらにコードの抜粋載せます。
Lineを描く例です。
Lineオブジェクトを生成し、プロパティに値を設定した後に、
Panelオブジェクト(Canvas, Grid, StackPanelなど)のChildrenプロパティに、
Lineオブジェクトを追加することで、Lineを描画できます。
panel変数には、Canvasなどのオブジェクトが設定されているものとします。
Line以外のUIElementもみな同じ方法で描画することができます。
2010年05月09日
ヒルベルト曲線

Silverlight3 + C#でヒルベルト曲線を描くプログラムを書いてみました。
再帰処理、イベント、BackgrowndWorker、コードによるUIElementの追加などのサンプルとしてどうぞ。
ソースコードはこちらに掲載しています。
2010年03月22日
1次元ランダムウォークは株価の動きと似ているのか
以前、2次元ランダムウォークのプログラムをこちらに掲載しましたが、
このページ意外とアクセスがあるようなので、こういった需要はあるのかなと思い、
今度は、1次元ランダムウォークのプログラムを書いてみました。
株価がランダムウォークの動きに従っているという説を確かめてみたかったというのもあります。
このプログラムでは、±5%の範囲で値を変動させています。
確かに想像以上に良く似たグラフになりますね。
このプログラムでは、SilverlightのWriteableBitmapクラスを使っていますが、WriteableBitmapでUIElement(ここではLineオブジェクト)を描画するには、以下のように、Renderメソッドを利用します。
WriteableBitmapクラスにDrawLineなどのメソッドがあれば便利なのですが、すべてRenderメソッドで統一できるよ、というその潔さは素敵です。
ソースコードは、こちらに掲載しています。
このページ意外とアクセスがあるようなので、こういった需要はあるのかなと思い、
今度は、1次元ランダムウォークのプログラムを書いてみました。
株価がランダムウォークの動きに従っているという説を確かめてみたかったというのもあります。
このプログラムでは、±5%の範囲で値を変動させています。
確かに想像以上に良く似たグラフになりますね。
このプログラムでは、SilverlightのWriteableBitmapクラスを使っていますが、WriteableBitmapでUIElement(ここではLineオブジェクト)を描画するには、以下のように、Renderメソッドを利用します。
WriteableBitmapクラスにDrawLineなどのメソッドがあれば便利なのですが、すべてRenderメソッドで統一できるよ、というその潔さは素敵です。
ソースコードは、こちらに掲載しています。
2010年03月14日
C#で8クィーンゲームを作成 (あなたは勝てますか?)
Gushwell C# Programming Pageに、「8クィーン・ゲーム」を掲載しました。
Silverlightで実際に対戦できるようにしています。
8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。
なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。
※ボタンをクリックするとゲームが始まります。
この手の思考ゲームの基本の基本だけでプログラムが書けるので、学習用としては、なかなか良い題材だと思います。
ソースコードはこちらで掲載しています。
Silverlightで実際に対戦できるようにしています。
8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。
なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。
※ボタンをクリックするとゲームが始まります。
この手の思考ゲームの基本の基本だけでプログラムが書けるので、学習用としては、なかなか良い題材だと思います。
ソースコードはこちらで掲載しています。
2010年02月28日
Silverlight : Despatcher.BeginInvokeメソッド
SilverlightにはControl.Invokeがありません。
代わりにDependencyObject.Dispatcher プロパティを経由して、BeginInvokeメソッドを呼び出します。
BeginInvokeは、2つのoverloadメソッドがありますが、 通常は、Actionデリゲートを受け取るメソッドを使えばよいと思います。
もうひとつの BeginInvokeの書き方
代わりにDependencyObject.Dispatcher プロパティを経由して、BeginInvokeメソッドを呼び出します。
BeginInvokeは、2つのoverloadメソッドがありますが、 通常は、Actionデリゲートを受け取るメソッドを使えばよいと思います。
もうひとつの BeginInvokeの書き方
2010年02月14日
ナノピコ教室のプログラムをSilverlightアプリへ (3)
ナノピコ教室のプログラムをSilverlightアプリへ (2)」で示した
Boardクラスと、BoardCanvasクラスを使ったSilverlightプログラムの第一弾ができました。
梅花碁というゲーム(連珠の一種)の勝ち判定をするプログラムです。
ボード上をクリックすると、黒石→白石→消去を繰り返します。
ソースコードはこちらに掲載しています。
ナノピコ教室では、さらに、「黒-白-黒と打って勝ちになる手を出力するプログラムを書いてください」という問題が掲載されています。こちらも手が空いたときにSilverlightでプログラムを書いてみようと思います。
また、「8クイーンゲーム」「オセロ最短詰め」「面積最大の領域」「拾い碁」「数独」なども、順次Silverlightにしてゆくつもりです。
梅花碁というゲーム(連珠の一種)の勝ち判定をするプログラムです。
ボード上をクリックすると、黒石→白石→消去を繰り返します。
ソースコードはこちらに掲載しています。
ナノピコ教室では、さらに、「黒-白-黒と打って勝ちになる手を出力するプログラムを書いてください」という問題が掲載されています。こちらも手が空いたときにSilverlightでプログラムを書いてみようと思います。
また、「8クイーンゲーム」「オセロ最短詰め」「面積最大の領域」「拾い碁」「数独」なども、順次Silverlightにしてゆくつもりです。
2010年02月07日
ナノピコ教室のプログラムをSilverlightアプリへ (2)
1月10日に、「ナノピコ教室のプログラムをSilverlightアプリへ」というエントリで、以前書いた「オセロ最短詰め」「数独を解く」「梅花碁」「8クイーンゲーム」「面積最大の領域」などのプログラムを Silverlightアプリに移植するのに、盤データを扱う共通のクラスを作成するつもり、と書きましたが、昨日、今日はまとまった時間が取れたので、なんとか形になりました。
Boardクラスと、BoardCanvasという2つのクラスが中心となるクラスです。
Boardクラスは、盤データを扱うモデルクラス。
BoardCanvasクラスは、描画を担当するビュークラス。
このクラスの動作を確認するのに簡単なプログラムを書いたのがこれ。
ボード上をクリックすると、黒石→白石→消去を繰り返します。
Boardクラスと、BoardCanvasのソースコードはこちらに掲載しています。
デモプログラムのソースコードは、こちらです。
描画は、カスタムコントロールで、Boardオブジェクトとバインドできれば良かったのですが、まだSilverlightの知識が足りないので、通常のクラスとして、BoardCanvasクラスを作成しています。
ここまで出来れば、各プログラムのSilverlightへの移植は、それほど難しくないかなーと思ってます。
Boardクラスと、BoardCanvasという2つのクラスが中心となるクラスです。
Boardクラスは、盤データを扱うモデルクラス。
BoardCanvasクラスは、描画を担当するビュークラス。
このクラスの動作を確認するのに簡単なプログラムを書いたのがこれ。
ボード上をクリックすると、黒石→白石→消去を繰り返します。
Boardクラスと、BoardCanvasのソースコードはこちらに掲載しています。
デモプログラムのソースコードは、こちらです。
描画は、カスタムコントロールで、Boardオブジェクトとバインドできれば良かったのですが、まだSilverlightの知識が足りないので、通常のクラスとして、BoardCanvasクラスを作成しています。
ここまで出来れば、各プログラムのSilverlightへの移植は、それほど難しくないかなーと思ってます。
2010年01月17日
シェルピンスキーのギャスケット
2009年12月28日
自然数 142857
2009年12月19日
SilverlightのWriteableBitmap クラス
例えば、Silverlightで、点を描画したい場合、どうやってやるのだろうか?
まさかRectangleを使うということは無いよな。
ということで調べたら、WriteableBitmap クラスというものがあった。
でも、このクラスには、GetPixel とか SetPixel とかが無い。
Pixelsプロパティがあるので、これを使うみたいだ。
でも、これって1次元配列だし、int型じゃないですか。
面倒くさいですね。
ということで以下が作成した2次元ランダムウォークのプログラムです。
ソースコードはこちらに掲載しています。
まさかRectangleを使うということは無いよな。
ということで調べたら、WriteableBitmap クラスというものがあった。
でも、このクラスには、GetPixel とか SetPixel とかが無い。
Pixelsプロパティがあるので、これを使うみたいだ。
でも、これって1次元配列だし、int型じゃないですか。
面倒くさいですね。
ということで以下が作成した2次元ランダムウォークのプログラムです。
ソースコードはこちらに掲載しています。
2009年12月06日
2009年11月22日
Silverlightアプリをブログに張り付ける(多角形の完全グラフ)
「Silverlight StreamingでSilverlightアプリを公開する」で、
多角形の完全グラフを描くSilverlightアプリケーションを掲載したのですが、Silverlight Streamingのサービスが終了してしまったので、
http://gushwell.ifdef.jp/のWebサイト(NINJA TOOLSの無料ホームページスペース)に掲載したものを、こちらのブログに張り付けてみました。
SilverlightのWebプロジェクトの 「xxxxPage.html」と「ClientBinフォルダ」をサーバーにアップロードしておいて、Blog には、以下のような記述をします。。
これで、動きのあるプログラムをブログで公開できます。 なぜか右側の枠線が隠れてしまっていますが、それは御愛嬌ということで...
SilverlightのWebプロジェクトの 「xxxxPage.html」と「ClientBinフォルダ」をサーバーにアップロードしておいて、Blog には、以下のような記述をします。。
Startボタンを押してみてください。簡単なアニメーションが始まります。
これで、動きのあるプログラムをブログで公開できます。 なぜか右側の枠線が隠れてしまっていますが、それは御愛嬌ということで...
2009年07月20日
Silverlight StreamingでSilverlightアプリを公開する
[パズル]多角形の完全グラフで掲載したWPFアプリケーションをSilverlightアプリケーションに書き換え、
Silverlight Streamingのサービスを使って、このページで動作するようにしてみました。
数字を入れて、ボタンを押すとアニメーションが始まります。
参考にしたサイト:[Silverlight 2]アプリケーションをインターネットで公開するには?
WPFアプリからSilverlightアプリに変更するのに必要な修正箇所は、XAMLで1箇所、C#のコードで1箇所でした。
を
と変更。(ボタンのContentは、ButtonからStartに変更)
C#のコードでは、
を
に変更。
Silverlightでは、Brushes.LightSteelBlueクラスが定義されていないので、 これをどうやって他のコードで置き換えるのかがわからずに、調べるのに思いのほか時間がかかりました。
数字を入れて、ボタンを押すとアニメーションが始まります。
参考にしたサイト:[Silverlight 2]アプリケーションをインターネットで公開するには?
WPFアプリからSilverlightアプリに変更するのに必要な修正箇所は、XAMLで1箇所、C#のコードで1箇所でした。
を
と変更。(ボタンのContentは、ButtonからStartに変更)
C#のコードでは、
を
に変更。
Silverlightでは、Brushes.LightSteelBlueクラスが定義されていないので、 これをどうやって他のコードで置き換えるのかがわからずに、調べるのに思いのほか時間がかかりました。



