「LineConstructor」に関する日記

ソーティングとDirectMusic

こないだの限界突破したLineConstructorとByteEdit、今日アップしました。

NeoMuplのDirectMusicをどのように使うか決めるため調べものしてました。
MIDIの再生にはDirectShowよりもDirectMusicのほうが、読み込みが速かったり演奏が正確だったりして適しているのですよ。
で、DirectMusicですが、DirectX 7 for Visual Basicが、機能面や手軽さからよさそうだったので使うことにしました。
そうそう、自動ソート機能も実装しました。
ファイル名順、タイトル順、再生日時順の3つを、昇順と降順の2種類用意したので、合計で6種類のパターンから選べます。
曲を追加したときに並べ替えられるのはもちろんのこと、再生日時順のときだけ、再生するたびに並べ替えが実行されます。

LongScroll

VB6のスクロールバーの最大値を32767から2147483647に仮想的に引き上げるクラスを作ってみました。
方法としては、従来のスクロールバーの値域0~最大32767を0~好きな値にマッピングしているので、指定した値が32767を超えるとスクロールバーの指す値が大雑把になってきます。
例えば最大値を65534にすると、スクロールバーで指定できる値は、0、2、3、4、8・・・となりますが、もちろんその間の値もプログラム側で数値指定してやれば取ることができます。

とりあえず、これをByteEditとLineConstructorにつけてやって、ファイルサイズ制限や読み込み行数制限を取っ払ってやりました。
ByteEditのほうはヘルプも最新のスタイルシートを使ってリニューアルです。

行動計画

日記とプログラムに関する私の生活リズムを見てみると、10時ごろ、日記に書くため何かをしようとする、11時ごろ、結局何もできず計画だけ日記に書く、12時過ぎてから、ようやく作業に取り掛かる、翌朝、眠い、という悪いサイクルになっているようです。
今日はキャスパーを見ていたためこの時間になったのですが、このサイクル、10時の分をなくして11時の分を持ってきたら良いペースでできそうな気がしてきました。
つまり、今日明日の行動計画をさっさと日記に書いてしまう。
なんだか私、切羽詰るかすることを宣言するとペースが上がるようなので、あせるだけで何もしない時間を日記に当ててその後の時間を有効に使えるようにしたいです。

昨日の日記に書いていたディレクトリ統一、日記を書いた後に急いでやりました。
日付は今日です。
きちっと前のファイルのリダイレクトもできているはずですので、あとは解析用のファイルを作って、リスト生成プログラムを完成させるだけです。

そうそう、LineConstructorバージョンアップしました。
横スクロールがなんだかニョキニョキしてカッコ悪いのですがまあただ単に右側を見るためだけに作ったので気にしません。
貴方も気にしないでください。

ところで先ほど言っていたキャスパー、何度か見ていたんですが面白いですよね。
殺すのを思いとどまった次の瞬間勝手に死んでるパパさんナイスです。

縦横スクロール

LineConstructor、選択した場所が変わったときスクロールが付いてきていなくて不便だったので追随するようにしてみました。
今のところマウスのボタンを押したまま画面外までカーソルを持っていってスクロールさせる方法が中途半端にしかできていないのでSetCapture/ReleaseCapture系のAPIを用いて画面外でも正しく位置を検知できるようにするのが当面の課題、って、すぐできますが。
ByteEditでもそのうち同じ機能をつけるつもりです。
それと、必要なのは閉じるときの保存確認ですね。
ついつい保存を忘れて閉じちゃいます。
そうそう。横スクロールもつけないと。

ミディビ受信プログラムの正規表現の件、バッチリOKみたいです。
\x00のような記法でバイナリデータ全部問題なく正規表現に使えそうです。
テキストを抜き出すのも比較的簡単にできそうですよ。

セキュリティと大小関係

ミディビで保存ができなかった原因がほぼ特定できました。
http://support.microsoft.com/default.aspx?scid=kb;ja;175622で見てみると、どうも我々のアプレットは信頼されていないため、クライアントであろうとサーバーであろうと関係なく保存できないようです。
お絵描き掲示板はどうなっているのかと見てみると、アプレットから画像ファイルのデータの中身がそっくりそのまま送られてきていて、それをCGI側で保存するようになっていたのですが、これは今回のようなセキュリティの問題だったのかもしれません。
そこで自分もそれに倣ってCGIにデータを渡す方法を考えることにしました。
MidiSystemのwriteメソッドにはFileクラスを渡して直接ファイルに書き出してもらうものともう一つ、OutputStreamの派生クラスを渡して自分で作った出力ルーチンに書き出すものがあって、それを使うと、出力先を自由に変えることができるんですね。
ここで、Socket通信によってデータ受け取りCGIに出力すると、セキュリティに問題の無いCGIから保存ができるようになるということです。
アプレットからCGIにデータを渡す方法などについてはhttp://www.sm.rim.or.jp/~shishido/cgij.htmlなど。

LineConstructorを使っていたら、大きなファイルを開いたときにエラーが起こりました。
機能の足りない部分があってもバグはない自信があったので少しショックだったのですが、原因はどうやらスクロールバーが大きな数に耐えられなかったことが原因だったようです。

今日はチャットにクッキー保存機能をつけました。
本当ならGBBSのプロフィール機能と連動させたかったのですが、それぞれで必須とされている要素が異なり、GBBSのプロフィール自体もまだ発展途上であるため、連携するようにするのは控えておくことにしました。
まあそんなこんなでアルニックはレベル24達成。
目指せレベル30です。

爆ボンのための3Dマップソフトを作成中です。
3Dマップはどの方向にどのようにマップが広がるか分からないし、マップのほとんどの部分は空白状態なので、2Dのときのように二次元配列を用意してそれぞれにマップチップを、というわけにはいかないので、STLのsetに、マップ上の位置とチップ情報を詰め込んだクラスを入れて、順序付けされた配列として扱っています。
なぜ順序付けされた配列にする必要があるかというと、描画段階において確実に奥のチップから表示するためには奥行きでのソート(Zソート)が不可欠であり、マップチップが動かず、視点も動かないことを考えると、描画の時点でソートするより、最初からソートされた配列に順序を狂わさないようにデータを入れてゆけばそのまま最初の要素から順番に描画してゆくことで簡単に描画ができるようになるためです。
しかし、クラスはそのままでは大小関係を見て順序付けすることができないので、operator<だとかoperator>だとかを使って大小関係をつける関数を自作(いや、この場合演算子を定義か)。
なにしろsetにぶち込んで利用するからには値のように扱えるようにしなければならないので、他にもコピーコンストラクタやらoperator=なども考える必要があったりして、結構いい刺激になりました。
もっとも、コピーコンストラクタとoperator=についてはC++が勝手に書いてくれてるので自分で書く必要はないはずですが。

うなぎ完成

LineConstructorアップしました。
おそらくつけ忘れの機能も無いはずだし、これでおそらく完成版になるものと思われます。

Lunascape3インストールしました。
インターフェースはまあまあ改善されているようです。
そのほかは別によくなったとか悪くなったとかは実感できず。

ふにゃさん、ウナギカズラが完成しました。
風などがゲームに実装されていないのでその点はまだなのですが、まあ現状ではこれ以上できることがないので。

1127399889.png

メテオスの強さ

今日は爆ボンのレインボーパレスのマップを引き続き。
レインボーパレス3面のフルパワー全ブロック破壊マップ切り替え無しでのクリアに成功しました。
後日攻略ページに掲載します。

LineConstructorに検索を実装しました。
結局ショートカットキーは思いつかなかったので1・2・3にしてしまいました。
明日にでもアップします。

メテオスやってます。
弱いメテオスも難しさ5になれば圧倒的、でも無いけど強いです。
何しろ難しさに関わらずカタマリの落下が遅いのです。
難しさ5でも上まで積みあがってからそこそこ耐えますし、時々大きく飛ぶのでそのときに点火の素材が沢山出てきます。

延期

今日はものすごく久しぶりにマリオゴルフ64をやりました。
いやー。ゲーム内容はもう既に9割方忘れていたんですが、思い出す必要が無いくらい簡単ですね~。
昔のプレイを見られるメモリアルホールというモードがあるのですが、それでルイージのホールインワンを見ただけで操作方法を理解しました。
このころのルイージはよかったなぁ。ドジやるときもさり気ない。
オープニングムービーでは主役がルイージになってしまったかのような勢いがあります。
ヨッシーの声もよかった。

そして、ゼルダの伝説時のオカリナを突然始めました。
名前は「まだねむいのに」。
「よく来た。まだねむいのに。」とか言われちゃいます。
でも、よく考えたら「もうねむいけど」のほうが面白い名前だったかな、と思います。

ラインコンストラクタ、アップしました。
ショートカットキーを考えるのがそろそろ大変になってきたので、検索は付けられなくなりました。
ショートカットキーを思いつき次第バージョンアップしようと思います。

ふにゃさん、10月1日に公開する予定でしたが、このペースだととても充分なクオリティで提供することができないと考え、公開を延期することにしました。
とはいえ、無期延期すると、ありがちなパターンでいつまで経っても完成しなくなってしまいそうなので、3ヶ月伸ばして、1月1日に公開することにしました。
とにかく、ステージデータを用意するのとBGM&隠し機能をつけるのが結構大仕事なので、こいつらを集中攻撃します(攻撃?)。
一応、今日はウナギカズラほぼ完成形ができました。

1126708154.gif

ラインコンストラクタ完成!?

LineConstructor完成しました。
VBの命令のInputBoxだとPaintイベントが呼び出されないからInputBoxと同じ機能を自前で作って(うちで配布しているInputBoxExね)、OCXのコモンダイアログコントロールだと同じく再描画されなくてAPIを使って直接呼び出して、指定したフラグがおかしなことになって瞬時に終了されたりして、いろいろあったようななかったようなで、必要な機能は全て揃いました。
行ごとの編集、並び替え、追加削除、あっ検索が無かった!
とにかく、明日検索を追加してドキュメントを付属してアイコンを作ってアップします。
うわー。紹介ページもまだだぁ。

爆ボンのMIDI、一応聞けるようにだけはして置きました。
でも、実際のところ、聞かれたくはないのだけれど…。

そして、エアライドのページも更新しました。
各種記録を!

ヒュージィ、負ける

LineConstructorの基本機能があっという間に出来上がりました。
要素の追加・削除・更新はもちろんのこと交換・並び替え・シャッフルも用意して、ファイル入出力もほぼ出来上がり、あとは細かいところを調整したら完成です。
配色はウィンドウズの設定をそのまま使用するので基本的にユーザーの好きな配色で使えます。

ヒュージィのMIDI追加しました。
打ち上げまくったけど結局滅亡しちゃったバージョン。

ふにゃさんのウナギカズラの絵を描いていました。
でも意外となかなか難しいものです。

1126536792.gif

LineConstructor

まあ、引き続きアルニックの辞書を拡充。
めでたくレベル19までレベルアップしました。
しかしそろそろ辞書がごちゃごちゃになってわかりにくくなってきたので整理のためにデータを五十音順に並べるため、行ごとにさまざまな操作をするLineConstructorの開発を始めました。
しかし、それを実現するにはVBに最初から入っている配列操作では貧弱すぎたので、独自に勝手に配列処理を作ることにし、結構他でも使えそうな気がしたので、ライブラリとして作ってみようかなと思ったり。
エラーが出ないという欠点があったりもしますが、サイズが0(ということになっている)の配列も作れたりして、それなりに便利にはなっているような気がします。
あと、Push、Pop、Shift、Unshift、Spliceなどの操作も当然実現、シャッフルしたりランダムな要素を取り出したりもできる…ようにする予定です。

ふにゃさん、愛夢の代わりにウナギカズラを出すことにしたのでこれから絵を描くことにします。

1126362698.gif

理不尽なエラーが多すぎる

学校のActiveBasicで、行単位でデータが格納されたファイルを整理する「LineConstructor」を作っていたのですが、メニューを作成すると謎のエラーが出てコンパイルが通らなくなるという事態が発生。
もちろんエラーの原因を究明しようと思ったのですが、ヘルプにも公式サイトにもエラーの解説はなく、該当するエラーをクリックしても存在しないFドライブのファイルを参照してデバッグも糞もない状態。
一応それらしきファイルを探してきて覗いては見たのですが、エラーの原因となっている部分と関係のありそうなところは確認できず。
VS.NETがだめ、JBuilderもだめ、ActiveBasicもだめとなればもう残りはさっぱりわからないDelphiのみ。
こりゃ学校じゃプログラミングはできそうもありません。

「パネルγ」のマウスクリック感知の部分を作って、タイトルを動かせるようにできました。
まずは終了処理を作成。
ウィンドウを直接閉じると強制終了がかかってデータが破損する可能性があったので正規の終了方法を用意ということで。
これでゲームメインへのシーン移動もできるようになったのでこれからはメインのほうを集中的に作っていこうと思います。

ActiveBasic

アクセス解析に表示件数制限の機能をつけてみました。
何万件もあるログを一度に表示して全部見ようなんて人はいないでしょうから、無駄に表示時間やメモリを費やす必要もないわけです。
あと、必要ない情報をカットする機能が必要か。
今回の利用目的と明らかに関係ない項目は最初からないほうが絶対に都合がいいのです。

行ごとにデータの並んだテキストファイルの内容を整理する「LineSort」を学校のActiveBasicで作り始めました。
各行を五十音順に並べ替えたり、逆にシャッフルしたりできます。