SSブログ

SpaghettiMazeMaker1.0A公開 [曲がった壁を持つ迷路の生成]

前回までFFTの実装とその評価をやってきた。これでCocoa Framework以外の外部ライブラリには依存しなくなった。せっかくなので曲がった迷路を作るアプリをちゃんと仕上げてリリースすることにした。

前回のver.0.8823からの変更点。
  1. Speckle計算のためのFFTをfftwライブラリから自前のものに変更
  2. 日本語リソースを作った
  3. アイコンをもっともらしいものに
  4. 壁を追加する反復計算を別Threadにして入力に対するレスポンスを向上
  5. いくつかのバグをFix
    1. 出入り口を同じ壁に作ると外壁が完成しない
    2. アルゴリズムの切り替え後、無駄に壁を作っては捨てていた
    3. その他表示に関する小さなバグ
などである。

内部的には、迷路生成のアルゴリズムはまったく変更していない。パラメータ設定が分散していたのでSMParameterHolderというクラスにやらせてそこに問い合わせる形式に変えただけ。Thread分離については10.4互換にしたかったのでNSOperationは使わずにNSThreadの+detachNewThreadSelector:toTarget:withObject:を使った。やっぱりNSOperationのほうがずっと簡単。特に同期はNSThreadでは難しい。結局NSTimerでステータスをポーリングした。ダサい。ついでに10.4とそれ以上でInfo Panelが違う。10.5以上ではHUDスタイルのパネルを表示するようにした。

一方、Document-Basedスタイルに関する部分は全面的に書き直した。いちばん大きな変更は、ver.0.8823ではNSDocumentControllerのサブクラスを作って-newDocumentで迷路のサイズなどを入力させるダイアログを開いていたが、サブクラス化をやめた点。NSDocumentControllerのサブクラス化はやっぱりCocoaらしくなくてわかりにくくなると思った。

ドキュメントの「新規」のときにダイアログを開くのはNSDocumentのサブクラスが、常駐のSMNewDialogControllerというオブジェクトにinit...で問い合わせる、と言う形式にした。

他のドキュメントウィンドウがあったときの動作をどうするか、と言う問題(ダイアログが後ろにまわった状態でもう一度「新規」が呼ばれると困る)があるのでSMNewDialogControllerが開くダイアログはアプリケーションモーダルにした。つまりNSApplicationの-beginModalSessionForWindow:メソッドを使うことにした。まあ、これでも動くけど動作がぎこちない。結局NSDocumentControllerのサブクラスにした方がユーザインターフェイス上はよかったかもしれない。こういう場合の標準的な対応をNSDocumentControllerがやってくれるとうれしいけど。

NSDocumentのサブクラスも整理してNSWindowControllerのサブクラスと仕事を分担した。でも切り分けがうまくいかない。迷路クラス群を一括して保持するオブジェクトをNSDocumentが持つようにした方がいいかもしれない。

FFTの実装を終わらせて4、5日で書き換えたけど、実は一番時間がかかったのはアイコンを作るところのような気がする。ver.0.8823に小さな迷路を作らせてPDFにしてそれをIllustratorで開いて3Dにした。ヤットコの絵を描いてそれに重ねた(ドキュメントのアイコンはヤットコなしの迷路の絵 にした)。こういう作業は本当に疲れる。センスの問題が大きいような気もする。OS9以前のドット絵を描くことに較べたらましだけど。

IconComposerで画像のまわりを透明にするためのマスクを作るやりかたがわからなくてずいぶん苦労した。苦労して作ったアイコンファイルをXcodeが「コピーできない」とかいうのでまたさらに困った。ビルドはできてるけど、これは結局解決してない。よくわからない。ソースファイルにアイコンが含まれていないのはこのせい。

ところで正直に言うとMacOS Xのアプリを作って日本語リソースをちゃんと作ったのは実は初めて。会社に入って最初に使ったHPのワークステーションは日本語が使えなかった。同時に使っていたDECのVAX/VMSは日本語が使える当時としては非常に珍しいOSだったけど日本語はTeXで使っただけでプログラムに日本語を使うということはなかった。

Macを使うようになってからもPowerPlantというMacOS7〜9で動いたC++のライブラリとMetrowerks C++コンパイラは日本語が通ったけどソースに日本語を埋めるとたまに動作がおかしかった。コンパイラのShiftJISパッチに限界があったらしい。

仕事で書くアプリは数値計算をやるためのMathematicaのバックエンドだったり、自作の測定器のフロントエンドだったりするくらいで、多くが結果が出ればおしまいの書き捨てだった。日本語化の要求は低かった。本社にいたときに若いやつに「ソースのコメントを英語で書かないでよ」と言われたことがあった。だって昔はこれでなきゃ動かなかったんだもん。

趣味で書くソフトも興味が満足されればほったらかしにしてばっかりで他人が使えるようにするための作業は苦痛に感じてしまい、そこまでのエネルギーはなかった。

ということで今回初めて日本語リソースを作った。MacOS XのLocalizationのメカニズムは非常によくできていることを実感した。考えた人は頭いいなあ。初めての僕でもLocalizationのドキュメントをちょろっと読むだけで簡単にできた。すばらしい。Windowsではどうなってるんだろう。

ということでまるで普通のアプリのようないかにももっともらしい(でもHTML手書き丸出しの)一見さん(「いちげんさん」と読む)向けホームページまでつくってダウンロードできるようにした。たまにはおもしろかろ。面白いフィードバックがあるとまた楽しいんだけど。

ダウンロードはその一見さん向けページからできる。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立10/03久しぶりに七ヶ浜 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。