サボり。
今週は長かったなぁ。
Pascalがわかった。というよりは、動的配列の取り方がわかった。
var a : array of Integer; b : array of Integer;
とやると、相互に代入は出来ないらしい。
var a, b : array of Integer;
とやるか、
type IntArray = array of Integer; var a : IntArray; b : IntArray;
とかやるかすると良いみたい。なんで上のコードだと型に互換性がないんだろう。ポインタでも型付なら代入はできるし、クラス型なんてほとんどポインタなのに代入も可能。動的配列はスマートポインタみたいな扱いなんでしょ。それなのになんで…。
まあ、文法としての納得はいかない点は多々あるものの、今は作り進めるのが先決。文法は少しづつ理解しながらだけど、C++Builder使ってたんでVCLの使い方はほぼ完璧。プログラム組むのも速いのよーん。でもC++と違ってSTL見たいな便利なライブラリがなくて大変。vectorとかdequeみたいなのがないのは動的配列で我慢。auto_ptrみたいなスマートポインタがないのは痛いなぁ。mapもないし。TStringListが結構使えるから良いものの、それがなかったら逃げてますな。TListは…ポインタしか入らないのが痛い。VCLはヴィジュアルなのは良いけど、ヴィジュアルしかないんじゃDelphiもいまいちだな。コンパイルはすごく速いし文法もきれいなほうだと思うんだけど。
VCLはよく気合の入ったクラスライブラリとかいわれるけど、GUI関係だけだね。それ以外は設計的に怪しいところかなり多いし。GUI関係でもオブジェクトの構築とか破棄ではタイミングがシビアな部分とかあるしな。まあ、そんなシビアなこと要求するのが悪いんだけど、使ってるほうの要求は天井ないからね。いいものがあればどこまでも要求してしまうのよ。
ひとにパソコンを教えるのって大変。突然メールがきたと思えば「ネットにつながらない。たすけろ」。相手は素人なんで詳しい話聞いても無理だろうし、無論詳しい状況がわからなきゃこちらにもわからない。世間一般ではパソコンは知識があればわかるものだと思われてるのだろうか。この世界も他の世界と違わず「経験と感」がものをいう。経験と感を言葉で伝えるのは非常に難しい。だから近くのわかる人に教わるってのはそもそも間違ってるんだよね。その人はパソコンわかるかもしれないけど、教えられるかというとまた別だし。それに、理解もしないでやってても本当に使えるわけにはならないし。格ゲーでも技が出せるのと技を使うのは別だろう。出すだけだったら誰でもできるって。つまるところ、…俺に聞くな。何でも俺に聞きゃいいと思うんじゃねぇよぉっ!
ちゃんと理解する気がある人に教えるのは楽しいんですけどね。
サボり。
がっこいって、れぽーと書いて、一日おわり。うわぁぁぁ。
Pascalわかんねーよぉ。
Pascalで動的配列の使い方がまったくわからん。なんでCopyじゃ駄目なの?VCLのソースでも見ようかと思ったんだけどProfessionalじゃなかったんで、ほとんどソースがついていない。散々悩んだ挙句C++に逃げる(爆)。だめじゃん。だって、C++の方がわかってるし、STLと参照使えばポインタとかあんまり関係ないし。UIも簡単なものならダイアログで良いでしょ。どうせWTLつかえば簡単だし…。ああ、だめじゃん。Delphi6ダウンロードしてこよ。
近くのホームセンターに買い物。はんだとはんだ吸い取り線とメッキ線が必要なのだ。が、メッキ線は見つからず。エナメル線じゃ意味ないしなぁ。仕方ないのではんだと吸い取り線を買う。20Wのこても欲しかったけど、必要というわけではないので我慢。色つきのクリアケース10枚200円のやつも買う。手ごろなサイズの引き出し(?)が安かったので買う。300円だもん。MageKnightをごたごたと突っ込んでおく。さすがにシャドウドラゴンは入らなかったけど。
Ridge。Hashを継承じゃ駄目だ。Cloneとかで支障が出ることをあとから気づく。DelegateClass(Hash)から継承してHashを保持して委譲ことにする。ん?DeletgateClassって__getobj__定義してないのね。@objで得られるのか。まあ、いいでしょ。
今日は祝日。建国記念日なのか…。
Ridgeを作るにあたって、RubyUnitを使うかと考えてみる。ダウンロードしてインストールっと、あれ。以前に一回ダウンロードしてたみたい。そういえばドキュメント作れなくてあきらめた覚えが。今回はそうはならない。makehtml.rbをちょっと書き換えれば大丈夫。あ、system使ってる…でも、``*1で囲む方はmswin版でも動くみたい。不思議。何はともあれドキュメント作成は成功。使い方がよくわからないので紅玉制覇編をみる。おお、c2t.rbを使えばいいんですね。で、使ってみる。ん?できてくるコードが本と違う。もしかしてテスト実行コードって自分で書くわけですか。とかおもって、requireしてるrubyunitの中身を見てみると…ENDブロック使ってるのか。しかしc2tで出来たコード見て、これをそのまま実行すればいいんだな、と思うやつはまずいない。だって、rubyunitをrequireしてクラス定義してるだけじゃん。これを実行してテストが行われると思うやつはいないわな。Rubyの基本は驚きは少なく、じゃなかったのかな。
propertyが微妙。どうやってインプリメントしようか。Hashそのままでは、変更の際にちゃんと更新できなくなる。継承しても全削除とかの要らんメソッドがついてくる。じゃあ、ということで、ObservableをincludeしたHash継承のクラスにすることに。適当なところで監視者に通知するようにオーバーライドすればいいんだね。どうせ、Ridgeのコントロールには全部updateメソッドつけるつもりだったから。
今日は日記を早めに切り上げよう。
今日はBeから。
Ruby1.7のnewにブロックを付ける件。実は、newにブロックがつくんじゃ無くて、ModuleとClassのinitializeでブロックを呼ぶらしい。つまり、新しいクラスやモジュールが動的に作りやすくなったって訳だ。もちろんそれじゃあRidgeの助けにはならない。ProcWithでもつくって凌ぐかな。
ところで実装の面での話。ボタンがクリックされた時などの動作はボタンのオブジェクトに決めさせるのが当然だと思う。で、OSの方からは当然Rubyのオブジェクトは見えない。だから大抵はそのオブジェクトの親のウィンドウにメッセージを送ってくる。さて、それを送られたウィンドウはどうやって正しいRubyオブジェクトを見つけよう。まず、Messageにオブジェクトを関連づけられたら簡単だ。BeOSだとそれができる。しかし、Windowsではそんな便利な仕組みはない。そこで、次に考えられるのがOS側から見たオブジェクトにRubyのオブジェクトを関連づける方法だ。これもBeOSからだと簡単である。Interface Kitのクラスを継承してRubyのメンバを持たせれば良いだけだから。面倒ではあるかも知れないが難しくはない。でもWindowsだと‥。SetWindowlongでも使えば良いのかな。それぞれのクラスをサブクラス化して‥あ、結局それでもSetWindowlongとか使わなければデータは持たせられないか。Palmだとウィジェット側にデータ持たせるのは無理だった気がするなぁ。その辺はもっと考えてみる余地があるね。
ブルーローズ。キャラクターつくってみる。うあぁ。作り方が分からん。いや、作り方は簡単なんだけど、計算なんかが大変。戦闘能力の計算方法が載ってません。どこにありますか。経験点10点貰いましたね。どうやってつかうんでしょうか。武器のカスタマイズのデータは‥あれ、武器のデータ近くに無いんですか。‥せめて索引付けてくれれば良かったのに(泣)。いったんルール理解して、何処に何が書いてあったか分かっていれば問題無いでしょうけど、それまではかなり苦戦すること間違い無し。そんなに難しいルールでは無いけど、2、3回通読しないと分からないかも。でも、キャラクタ作成とか武器のカスタマイズとか楽しい。とくに武器のカスタマイズは、武器に武器として以外の要素も付けられるのが良い。由来、とか好きです。強い武器だけが良いとは限らないね。
あとは久し振りにN◎VA。まあ、そんなもんでしょ、と言った感じのゲームになりました。
んー、今日はこんなもん。
*1バッククォート…って読むのかな。