タグ:プログラム ( 7 ) タグの人気記事
  C# - TreeViewでエクスプローラ風
ナンプレ解読プログラムも完成し、
次はツール的なものを作って遊んでみようかと思います。

ツールと言っても「これを作りたい!」みたいな決まった物はないので、
ツールで使えそうなエクスプローラぽい機能を先に作っておくことにします。
具体的には、エクスプローラでフォルダがツリー構造になったアレです。
フォルダを選択するときにとても便利ですから、後から何かに使えるはず。

.NET Frameworks に便利なクラスが用意されてるのかと思ったら、
さすがに無かった。そこまで楽はさせてくれないらしい。
似たようなもので、FolderBrowserDialogクラスがあるけど、
これはフォルダを選択させるダイアログを表示するクラスで、
常にフォルダツリーを表示させておくことは出来ないみたい。

仕方ないので今回は、
ツリー構造で表示できるTreeViewクラスを使用し、
フォルダ情報を読み取り、自前でフォルダツリーを作ることにしました。

これが今回作ってみたサンプル。
e0012883_0482498.gif
エクスプローラに準じてトップノードをデスクトップにしてあります。
特殊フォルダやアイコンも全て同じように作りたかったので、
IShellFolderインターフェースを使ってアイテムID情報を取得、
Win32APIのSHGetFileInfoを使い、属性情報やアイコンハンドルを取得しています。

参考資料が英文ばかりで苦労しましたが、なんとか形になりました。
でも、ここまで作っておいて思うんですが、
C#で作り始めたのは失敗だった気がする。
C++ならヘッダファイルをインクルードすれば簡単に作れるけど、
C#だと全部自分で宣言しないといけないし。
なにより.NETの利点を自ら殺してるような…。

ま、とりあえず、このまま突き進みます。
IShellFolderやWIN32APIを使う関数はクラスライブラリ(.dll)にしておきました。

さて、次はこれを使って何をするか…。


■更新2010/08/19
ナンプレ解読プログラムはこちら(c#)

[PR]
by angrywaves | 2009-08-11 01:28 | 趣味・娯楽
  ナンプレ解読プログラム - C# 完成
C#バージョンも完成。

Excel VBA から Visual Basic .NET 、C# 2008 と移行し、
色々遊べました。
解読精度も納得できるレベルまで上げることもできたし、
VB版とは違い、きちんとスレッドセーフにしたし、
これにて完了!

白銀さんにはデバッグやユーザーインターフェースなどのアドバイスをして頂きました。
違うプラットホームでの動作など、とても助かりました。


それにしても今の開発環境って便利になりましたねぇ。
.NET Framework は逆コンパイルの問題はありますが、
クラスは充実してるし使いやすかった。

MS-DOSC言語アセンブラを使って組んでた時代とは比べ物にならないよ><
でも、昔はCPUパワーでゴリ押しできる環境ではなかったので、
アセンブラで極限までコードを最適化する楽しみがあったけど、
今はそれが出来ないのが残念。
286とか386時代だけど…。今の人に言っても分らないかも(・ω・`;
関数1つ1つに"愛情"を注ぎ込む喜びがあったのですよ。


さて、次は何をして遊ぶかなぁ。
何か面白い題材ないかな~。


■更新2010/08/19
ナンプレ解読プログラムはこちら

[PR]
by angrywaves | 2009-07-26 18:04 | 趣味・娯楽
  Visual Studio 2008 - C#
Visual Studio 2008 開発環境の使い勝手があまりにも良くて
.NETで作っていたナンプレ解読プログラムを2008に移行してしまいました。

ソースコードの変換ウィザードが用意されているので、簡単に移行できるのですが、
色んな小細工をしてあるので、そのままでは致命的なエラーが……orz
Frameworksも2.0から3.5にしたので、それが原因かも。
内部処理が結構変わってるみたい。

修正(というか骨組み作り変え)に思ったより時間を要しましたが、とりあえず完成!(`・ω・´)
e0012883_2534584.gif
実は…、別スレッドからフォーム上のコントロールへのアクセスがスレッドセーフになっていないのですが、
CheckForIllegalCrossThreadCalls = False
で誤魔化しました(・ω・`;)
再現できないほど極稀に、正常に描画されない事を確認。多分それが原因。
直すことはできるけど、少々面倒なので、のちのちという事で…。


そして!Frameworksに依存しないMFCを使ったC++で作り直そうと思いましたが、
なんというか…、Frameworksのクリスライブラリって便利だよね!
ってことで、C++の前にFrameworksを使ったC#で組んでみることに。

現在、少しずつ組み直しています。
C#はVBよりクラスやインスタンスなどをより意識しなければならない印象を受けます。
そういった面では、意識していなくてもそこそこ組めてしまうVBの方が手軽なのかもしれませんが、
それがゆえ認識が甘くなり混乱を招くデメリットを考えると、C#のほうが良いのかもしれません。

個人的にはC#のほうが演算処理が組みやすいので好き。
i++ や ++i のようにインクリメントが使い分けられ、
if文などと絡ませたときに、ぐっと簡潔に組みやすく、とても良い。

ただ、気に食わない点も。
VBは大文字と小文字は同一視され、メソッド名や変数名をどちらで書いても、
自動で正しい表記に修正してくれました。
C#は大文字と小文字が明確に区別されるので、AAとaaは別物と判断されます。
これがイラついてくる。
インテリセンス機能で候補が出るのでそれを選択すれば良いのですが、
VB慣れしていると修正にもたついてしまう。
まぁ、どうしようもないので慣れるしかないかぁ…。


■更新2010/08/19
ナンプレ解読プログラムはこちら(スレッドセーフ版)

[PR]
by angrywaves | 2009-07-12 07:06 | 趣味・娯楽
  Visual Studio 2008
Visual Studio 2008 を使ってみた。
これは良い。.NETより断然良い。

IDE(統合開発環境)の使い勝手が良い感じに改良されてる。
宣言したまま使用してない変数があると警告してくれたり、
インスタンスが作成されてない変数を使用しても警告してくれる。

細かな変更点だけど、これはなかなか侮れない。
特にインスタンスが作成されてない変数の使用は、
以前なら実行してデバッグしないとエラーにならなかった。
If文内でインスタンスを作成してIf文外で使用ってケースでも検知してくれる。

 Public Sub Sample(ByVal myValue As Integer)
   Dim myForm As Form
   If myValue = 0 Then
     myForm = New Form1
   End If
   myForm.Text = "test"    ' ← インスタンスが作成されていないとエラー
 End Sub

こんな感じのソースだと、変数myValue が0ならインスタンスは作成されてエラーにはならないが、
myValue が0以外ならインスタンスが作成されずにエラーになる。
これを検知し、警告してくれる。

 Public Sub Sample(ByVal myValue As Integer)
   Dim myForm As Form
   If myValue = 0 Then
     myForm = New Form1
   Else
     myForm = New Form2
   End If
   myForm.Text = "test"
 End Sub

このようにElseを使用した場合、
myValueの値がなんであれインスタンスが作成されるので、警告は出ない。
こんな所までサポートするのかと関心した。

とりあえず、ナンプレ解読プログラムが完成するまで.NETでやって、
満足できる物ができたら、2008を使って公開用にC++で組みなおしてみようかと思う。

.NET Frameworks使った言語だと逆コンパイルするとソース丸見えだしね…。
ソースを晒すなんて恥ずかしくて出来ない><
[PR]
by angrywaves | 2009-06-30 23:51 | 趣味・娯楽
  Visual Basic .NET - ナンプレ解読プログラム - の為のツール
解読プログラムですが、本格的に解析部のプログラムに取り掛かっています。
自分の手順はこんな感じ。


  1.サンプル問題を見つつ、頭の中で解読手順の確認。
    こんな解き方できるかも?と思ったら2へ

  2.メモ帳片手に起こりうるパターンと、それらの共通の法則を割り出し、条件や拡張性、矛盾などを検証。
    ここでミスがあると後々痛いので、じっくり時間をかける。
    欠陥があったら1へ。

  3.効率よく解析する為のデータ構造や処理の流れを決定。
    (仕様書~フローチャート作成。でも面倒なので実際は頭の中で完結。注意したい事だけメモ)

  4.プログラム作成。(仕様書がないので注釈多めに)

  5.実際に問題を解かしてバグがないかデバッグ。バグフィックス。
    アルゴリズムの欠陥が見つかった場合は……暫く「ずーん…orz」としてから泣く泣く2へ。

  6.自画自賛しながら達成感に浸る(*´▽`)オレ、ガンバッタ


デバッグ(アルゴリズムも)する為には法則を活かせる問題が何パターンも必要になってくるんですが、
都合の良い問題がなかなか無い。
そこでデバッグ用に自前で作ることになるわけですが…、
ナンプレ問題を作るのって、思った以上に難しいんですよ。
単純解析では解けないけど、法則使えば解ける!て問題は作るのに時間がかかってしまう。

そこで! 問題を作るのではなく、候補データを作ることにしました。
「2行4列のマスには1か2が入る」って感じです。
3~9は入れられませんが、それを裏付ける確定数字があるわけではありません

候補データを作るツールがこれ。
e0012883_5424380.gif
その名も「ナンプレ候補作成くん」
青い部分の数字が、そこに入る可能性がある数字の候補です。
下のほうにピンク色になっている所がありますが、それは候補が1つしかないので、
その数字に確定するマスです。

デバッグではこの候補データを読み込み解析を始めます。
これを使えば、法則を活かせる条件が簡単に作成できる上に、
敢えて矛盾が起こる条件をピンポイントで作成することも可能に。


プログラムを作るために、そのツールをプログラムする。場合によっては更にツールの為のルーツを…。
世には出ることの無いツールくん。
あぁ、なんか「プログラムしてる!」って感じがするよね!


■更新2010/08/19
ナンプレ解読プログラムはこちら

[PR]
by angrywaves | 2009-06-20 06:14 | 趣味・娯楽
  MSDN
e0012883_23521827.gif
MSDNって、こんな挿絵とかしちゃう雰囲気だったっけ??

VB.NET、かなり慣れてきた。
でもビット操作が不便。シフト機能くらい欲しかった。
古いVB.NETだからか。
[PR]
by angrywaves | 2009-06-06 23:56 | 趣味・娯楽
  Visual Studio .NET
1年半ぶりの更新です。
またブログ再開します。
過去の記事はすべて消して0から始めようかとも考えましたが、
いただいたコメントを消すのは忍びないので、
続けて書く事にします。
----------------------------


データ整理をしていたら、CDやDVDの山から Visual Studio .NET を発見。
子供の頃に使っていたオモチャを見つけた気分だ。

でもこれ、一度も使ったことないんだよね(ぇ
.NET は結構仕様が変わってて面倒だから使うのやめた記憶が…。


インストールしてみた。
手始めに Visual Basic でもやってみようかと思ったら、
結構忘れてる上に仕様変更もあり、鼻血出そうになった。

msdnで変更点をチェック中だけど、結構便利になってる。
早速使ってみたくなるようなワクワクする変更点がてんこ盛り。
これは楽しめそう。
[PR]
by angrywaves | 2009-06-05 14:37 | 趣味・娯楽