来月2日
明日にでもスクリプト作成のページ更新できそうなんですが、そこはあえて12月2日に更新することにします。
今日はパーサのことをあまり考えていないスキャナの実装を改善する話を書いています。
12月中にはせめて動くところまでは作り上げてしまいたいのですが……。
マリオ64コインなしプレイのクリア可否の書き方を難易度表記に変更しました。
必須コースに限って難しいです。
明日にでもスクリプト作成のページ更新できそうなんですが、そこはあえて12月2日に更新することにします。
今日はパーサのことをあまり考えていないスキャナの実装を改善する話を書いています。
12月中にはせめて動くところまでは作り上げてしまいたいのですが……。
マリオ64コインなしプレイのクリア可否の書き方を難易度表記に変更しました。
必須コースに限って難しいです。
うむ、たかいたかいマウンテンはきつい場所が連続しているので難しいですね。
しかしたかいたかいマウンテンを飛ばすとなるとスターが集まらなくてますます大変なわけで。
あるいは取れないといっていたメタル帽子に再び挑戦するか。
若干スタイルシートを変更しました。
変更内容は、リスト関係の階層構造が見えやすくなるように薄い赤でグラデーションを施したこと、です。
こんな単純な内容ですが、どうすれば見やすくなるかということを結構考えて作ったんですよ。
今日はプログラミングコーナーの次の更新分も書いてました。
小数やら指数やらを解析します。
そして先日言っていたマリオ64をコインなしでクリアするというプレイ、今日始めてみました。
必須コースのクッパのステージが異様に難しいです。
元々そんなに難しくないゲームなんですが、ここだけ難易度レベルが一桁上がってます。
他はわりと無理なく取れるものは取れる、取れないものは取れないと割り切って進めるのですが。
というわけで、現状クリアしているところまではゲーム記にアップしておきました。
スマブラDXのシンプルモードを全員EASYでクリアしました。
今まではVERYEASYでしかクリアしてないキャラが多かったので合計点のアイコンがVERYEASYを示す青色だったんですよ。
この色をEASYを示す緑色に変えようというわけで。
ポケモン軍団はピチューが先にNORMALでクリアしていたという手前意地でもNORMALでクレイジーハンドと戦いましたが。
今まで甘く見てたけどガノンドロフはかなり強そうです。
4人目のVERYHARD達成者になるかもしれません。
遅さを補って余りあるパワーですよ。
そういえば秀丸がまたメジャーバージョンアップしてました。
今度は最近の開発ツールではよくあるプログラムのまとまりの折りたたみ機能がついていました。
少々Perlのヒアドキュメントに弱い感がありますが、そこそこ使えそうではあります。
一昨日のミディビに続いてGBBSも迷惑書き込み対策をつけました。
ほぼミディビのコピーですが、掲示板のシステム上こちらは書き直しがきかなくなってしまいました。
なんというか、事実上開発終了なのであんまり大きな仕様変更をするつもりはないんですよ。
というわけでもっとしっかりした対策は次のTGBBSからですね。
のんびりナマライザ、ファイル読み込みのテストを実際のログでやってみたのですが、思ったほどVB版と比べて速くなってはいませんでした。
やはりnewを大量に繰り返すためでしょうかね。
あるいはコンテナをLinkedListから別のものに切り替えるのも効果的かもしれません。
昨日の一件でマリオ64のキノコ封印プレイは撃沈したわけですが、今度はコインを取らないプレイに挑戦してみようと思います。
こちらの場合は1UPキノコと違ってたくさん配置されているし、記録にも残るのでやりがいがありそうです。
しかもプレイ内容も、回復が出来ないのでよりテクニカルになりますし。
問題はといえば1コースあたり7つあるスターのうち2つが絶対に取れなくなるので取れるスターがクリアに足りるかどうかですね。
状況次第では赤コインだけは封印解除するかもしれません。
スマブラの過去のお知らせを見ていたらシンプルとアドベンチャーのベリーハードのクリアの記録があったのにオールスターだけは無かったので今日やってみました。
いやぁ、スマブラのマゾゲーっぷりが遺憾なく発揮された最悪のゲームでした。
コインが540枚ほどあったから事実上コンティニューし放題だと思ってマルスを使って始めたら、途中1対2のところまでは1バトルあたりコンティニュー1回以内と言うまあまあいいペースで進んでいたのですが、1対3になると難易度が異常上昇、全く勝てないんですよ。
特に最後から3番目のリンク・ガノン・ピーチとのグレートベイでの戦いは厳しいものでした。
一気にみんな群がってきて、逃げる間もなくダメージが蓄積されて気付けば体は画面外で、何万点もあった得点も、気付けば1点と2点を行ったり来たり。
それでステージ下部の離れた二つの足場の間を行き来して追いかけさせ、自滅させる作戦に出たのですが、穴を飛び越えるという発想の無いコンピュータは安全な上の足場を歩くばかりで自滅するのは自分ばかり。
さりとてステージ下部を往復してないと確実に群がられて終わりなので、1対1だった頃はそれなりに戦えていたことを思い出し、とにかく往復して追いかけさせることで足の速さの違う敵たちをばらけさせ、一人だけ先にやっていたところをたたいては集まってくる前に反対側へ逃げるという戦法を取って数を減らし、最後の一人、体重が重く攻撃も重いガノンドロフだけになると、やっと1対1になると、それまでの戦いで満身創痍の体を気遣い接近戦は避け、壁越しに攻撃を繰り返すことで安全に倒しました。
この戦いで20回ぐらいはコンティニューしましたが、この戦いで一人用ゲームでは特に相手の弱点を見つけ出すのが大事だということを思い知らされました。
そして残りコインも心もとなくなった残りの2戦ですが、次の戦いはアイスクライマー・ネス・クッパとのアイシクルマウンテン、自滅の名所での対戦でした。
普通に戦っていてもいけそうな手応えがあったのですが、幸いにして2~3回のコンティニューの後に、CPキラーの猛烈スクロールが始まったので、無理に戦わず、コンピュータを落ちるに任せて倒さずに勝利しました。
最後のゲーム&ウォッチの大群は上強攻撃で楽勝でした。
それに気付くまでは横スマッシュで頑張っていて何度かコンティニューしたのですが。
そんなこんなで最後に残ったコインは130枚程度。
実に400枚以上もコインを使ってしまいました。
マリオ64、炎の海のクッパで撃沈しました。
1階から2階に上る途中のポールの先で追跡型キノコが出てきましてね。
どうにも逃げ切れません。
所詮マリオはキノコが無いと生きられぬ運命なのか…。
Lunascape4のデザインいじりは順調です。
昨日言っていた再起動のことは、フォルダの設定を間違えていて認識されなかったためで、再起動とは全然関係なかったようです。
Luna4のスキンの特徴として、topleft.bmpがないとタイトルバーのスキンが無いと判定されるようで、逆にtopcenter.bmpはなくても問題なく表示されました。
そんなわけで、今の私のLuna4は右上のボタン以外はWindowsXPほぼそのままです。
もっとも、非アクティブのときのデザインが設定できなくて気持ち悪い部分があったりするのですが。
そうそう、LineBreaker2はなかなか感動的な速さです。
VBで作っていた1では処理中他の作業をして時間を潰していたのに、2はわずか2秒で終了なので他の作業をする暇がないんです。
そうそう、ミディビの迷惑書き込み対策はこっそり完了です。
問題のある内容であれば問題がなくなるまで書き直しさせます。
文章投稿と返信記事でのみ動作確認済みですが、多分MIDI投稿のときにもちゃんと動いてくれてると思います。
先日いっていたマリオシリーズのキノコ取らないプレイ、スーパーマリオ64でやってみました。
まず黄色いブロックは危険。
坂道も、穴も、ポールの先っぽも、隠しコースも、危険。
杭の周りを回るのも、チョロプーを倒すのも、木の上で逆立ちするのも、危険。
とにかく危険なところほどキノコが出やすいので、できるだけ前半の簡単なステージの簡単なスターのみでクリアに必要なスターを集めてしまいたいところです。
というわけで現在のスターはウォーターランドに入る直前で40個。
チックタックロックは上る途中で必ず取らされてしまい非常に危険なので可能な限り2階以下の3フロアで集めてしまいたいところです。
それにしても、データを消すときの音がなかなかいいですね。
今までもったいないからと消さずにいたのですが、今回のプレイのために一つ消してみると、マリオが高いところから落ちる声で「ウワァ~ッ!」と。
持っている人は是非一度消してみましょう。
Lunascape4の正式版が出たそうなのでさっそくインストールしてみました。
起動速度は遅くて元々なので別に速くなっても気にならなかったんですが、検索バー周りはかなりよくなっていました。
そして注目すべきは自由度の高いスキン。
そのためにウィンドウ左右上端の挙動が普通のウィンドウズのソフトと変わってしまったのはやや不満ですが、標準のスキンが気に入らなくてスキンのフォルダを見たときはその内容に驚かされました。
ウィンドウの部品とかがビットマップで全部用意できるんですね。
例えば標準のスキンではWindowsVista風のシステムボタン(と呼べばいいのかな?)なのですが、これがスキンを用いてできたもので、WindowsXP風のスキンを用意すればいつも見るXPのデザインに戻せるわけですよ。
それどころかウィンドウの形状自体もある程度制御できるようで、いっそOSに組み込んじゃってもいいんじゃないかと思える内容です(Windows以外のOSは知らなかったりしますが)。
ただ、スキンの適用にいちいち再起動が必要なのは重量級ブラウザだけにかなりつらいところですね。
本格的にスキンをいじり倒すのは明日以降になりそうです。
それはそうと、なんかうちのミディビにも迷惑書き込みが来たようです。
やっぱりフォームをちょっとやそっといじったようじゃなかなか迷惑書込み防止には繋がらないようですね。
そこで、Perl用とPHP用で、それぞれメッセージの妥当性チェックモジュールを作っています。
まあ、その内容は外国語SPAMの防止用にひらがなの使用を強制したりSPAM書き込みによく見られる問題のある単語をNGワードとして設定したりする程度の単純なものですが、それなりの効果はあるんじゃないかと思っています。
とりあえず、条件をやや厳しめにして、許容範囲の問題であれば、ユーザーに問題を無視して投稿させることができるようにして利便性との両立を図りたいと思っています。
楽しいことがあったのに、書く気が起きない。
明日書きます。
シュークリーム。
昨日スマブラをやりすぎたせいか、足が痛くなっちゃいましたよ。
一番疲れたのは鬼のようにZトリガーを連打しまくった右手人差し指だったはずなんですが…。
ファイルのプロパティにタブを追加する方法を探しています。
まあ、今の時点である程度調べはついているんですけどね。
IShellPropSheetExtというのがポイントみたいです。
爆ボンのバトルステージ2のページを書いてみました。
ちょっとまだはっきりしていない部分があるのでアップしていませんが、ステージ1ぐらいのボリュームで書いてますよ。
スリザーリンク、前に出していたURLのところにあった問題は全部解き終わりました。
問題集の問34なんかは画面からはみ出るほどの大きさで、何度かいいところで失敗したりしつつ、解くのに何日もかかってしまいましたが、なんとか今日解けました。
最後のほうともなると一本の線を引くために全部の線を見ていかなければならなかったりして、かなりてこずりました。
で、それが終わってからゼルダの伝説時のオカリナの、ケポラ・ゲボラのテーマを聞いてたんですが、今更ながらですが、すごくいい曲ですね。
正体がわからないけど、出会えると少し安心する、そんな雰囲気でしょうか。
ずっとループで聴いてます。
そういえば久々にスマブラDXをプレイしてみました。
本当は風のタクトのフィギュア集めをしようと思っていたのですが、最近スマブラをやっていなかったのでそちらを選んでみました。
久々だけど相手は全員レベル9(最大)のコンピュータでやってみて、大負けしたり、たまには勝ったり、常に勝ち負けの見えない勝負になりましたが、とても楽しいひと時でした。
最近データ作りのためにゲームをプレイしていることが多くて、楽しいには楽しいんだけど心から楽しむことはできないことが多かったので、久々に思いっきり楽しめたような気がします。
こう考えると、やりこみ要素やコレクション要素がやたら多いのも考え物かなぁ、と思ったりします。
絶空やらなにやらの超絶テクニックを身につけて日々勝つための戦いをしている人は果たして楽しめているんでしょうか…。
今日の画像はスリザーリンクの完成画面です。
ネタバレが嫌じゃない人はどうぞ。
マイクロソフトの「よく寄せられる質問 : Visual Studio と Windows Vista」を見ていました。
何せWindowsXPとは全く異なるOSがもうすぐ出るっていうときに、開発に時間がかかり、なおかつ長い間プレイしてほしいゲームをWindowsXPで作ろうとしているのですから、気になるってものです。
これを見てまず驚いたのが、WindowsVistaでもまだ現役としてVisualBasic6.0が使えるということ。
こうなったのは修得の容易さからVB6を使う人が未だ多いためにしぶしぶといったところだそうですが、もうすぐ本格的にVB6とはお別れしなければいけないと思っていたところなのでちょっぴりうれしい気持ちです。
もっとも、VB6以外については、最新のVS2005と極端に変わらないと言う理由でVistaからはサポートしなくなるそうですが。
ただ、VB6やVS2005がWindowsVistaで使えるようになるのは2007年第1四半期からだそうで、そうなるとWindowsVistaの導入もそれにあわせて4月以降になってしまいそうです。
もちろん導入できればの話ですが。
WindowsVistaでは、.NET2のプログラムがそのまま動かせるそうで、また、WindowsXPでも.NET2をインストールすれば使えるということで、今後の開発は.NET2が中心になっていきそうです。
次のバージョンの.NET3も.NET2を完全にサポートするようですし。
それで気になるのが、今から作ろうとしているBomber丸Worldです。
まだ作り直しはききますし、C++からC#への移行はある程度容易です。
しかし今現在の状況では、開発環境が重い、ウィンドウ切り替え直後の再描画がなぜか遅い、などの欠点がありますし、そもそもVC#2005での本格的なゲームの開発経験は皆無です。
しかしその代わり、標準ライブラリは確実にVC6よりは充実していますし、開発環境も重くなった分やはり圧倒的に強力になっています。
すでに1割を切った古いウィンドウズの利用者を切り捨てて自分だけさっさと先に行ってしまうか、将来動くかどうかわからないプログラムをそのまま作り続けるべきか、悩みどころではあります。
それはそうと、今日はナマライザのファイル読み込みを作りました。
テスト用の小さなファイルで動作を確認したのですが、とりあえず現状ではうまく動いていそうです。
実はコピーして一部変更しなければならなかったコードをコピーだけして変更しないという初歩的なミスを犯したりしていたのですが。
更新しましたー。
本当は今日中に小数を読み込むところまでできる時間はあったのですが、サンプルプログラムを別のものとして用意したかったので複数回に分けました。
今回は何も考えずにトークンをCMSTokenクラスに入れてしまっていたので、次回ではもうちょっと適切なクラスに入れたりもしようと思います。
そろそろ更新したいのでスクリプト講座の続きを書いていました。
明日にでも、更新しようかと。
ゼルダの新作の発売が近付いてきて、任天堂ホームページでも早くからスタッフインタビューがあって、「ゼルダらしさ」について考えることがありまして。
で、ゼルダらしさの一つに、「文字の少なさ」というのがあると思うんですよ。
セルフ表示枠に表示されるテキストはせいぜい2~3行までで、説明的過ぎず、かといって足りなくもない、必要十分のテキストが表示されてるんです。
そして、セリフを一度に表示する量が元々少ないがゆえに、「ミンナニハナイショダヨ」や「うふっ」ぐらいの短いセルフでさえ充分な存在感を持っているんです。
で、ここから自分の話になりますが、それを考えるとBomber丸Worldのセリフはどのくらい表示すべきか、ということが問題になるんです。
ゼルダは、ある種、セリフが短くても成り立つようにできているからセリフが短くても成り立つんであって、Bomber丸Worldの場合長いテキストをしっかり表示しないといけないかもしれない、あるいは文字が小さくてたくさん表示できるスペースを設けたとしても小さなセリフが存在感を失わないでいてくれるかもしれない、そんなことを考えていました。
今日はのんびりしておりました。
最近目を酷使しすぎなのです。
で、バリエーションデータの、どのデータをどのタイミングで読み込むか、というのを考えてました。
Aという基本データと、Aと少し違うBのデータがあったとして、BにはAと同じ内容のデータは記載せずに、Aとの関連と差分のみを記録するという方式でデータを扱うのがバリエーションデータなのですが、記録するほうはそれでいいとして、Bを読み込むときにはどうすればいいのか、という問題があるわけです。
基本となるAを読み込むならただ読み込むだけでいいのですが、Bを読み込むとき、同時にAをも読み込む必要はあるのか、ということです。
同時にAを読み込んで初めから完全なBのデータを用意しておくのはプログラム的にも簡単なのですが、例えばBがAとほとんど違っていた場合や、Aから派生したBから更に派生したCからまた派生した……Zなんてデータが来た場合、Zには最早Aの面影は残っていなくて、YやXまでさかのぼれば充分な場合、そもそもデータを参照する回数が少ない場合など、つまり、さかのぼりがあまり頻繁には起こらない場合などには、いちいち全部用意していると読み込み負荷ばかりが余計にかかる可能性が高いわけです。
もちろん現実的にはさかのぼるのはせいぜい5回程度までのはずなので、そんなに神経質になる必要は無いのでしょうが、auto_resourceとの相性なども考えていきたいのです。
先程とは逆にBを読み込んだときにAを読み込まない方式としては、Bのデータを参照して、該当するデータが無かったときにそのつどAを読み込んで該当するデータを探す方法を考えています。
当然のことながら性質も逆で、さかのぼりが少なければ少ないほど、効率的になります。
とりあえず前者をA方式、後者をB方式と呼ぶことにすると、基本データよりも派生データが圧倒的に多いときのメモリ効率で考えた場合、A方式だと末端に行くにつれてデータが追加されるので、メモリ消費が多くなりがちですが、逆にB方式では本当に最小限のメモリ消費しかないはずです。
とにかく、データの性質によってかなり変わりそうではあります。
Bomber丸Worldの最初に表示される画面、すなわちよく言われるところのタイトル画面について考えてみました。
最初の予定では、2002/10/05(Sat)の日記や、2003/11/19(Wed)の日記で書いていたように、普通にタイトル画像を用意しておいて、それをドカンと出す方式にしようかと思っていたのですが、どうにもこの方式だとまず画像が必要だし、タイトルからゲームに入るところのインターフェイスをどうするかに迷うし、なんとなくだけど「らしくない」気がしたりするので、よくある正攻法のタイトル画面とは違う方式にしてみようと思いました。
そこで考えたのが、ゲーム画面を最初から出しておくという方式。
具体的に言うと、タイトル画面用のマップを用意しておいてそこを自由に動き回れるようにしておいて、マップ内にある特定のオブジェクトを調べることで実際にゲームが開始されるようにします。
もちろんタイトル画面というからにはタイトルも表示しなきゃいけませんが、マップ上にタイトルを表示するのは別に難しくないと思うのでこの方法で検討してみようと思います。
そして、データをXMLとかで管理しようと考えていたのですが、目的から考えるとやっぱりXMLである必要はなさそうに思えてきました。
Bomber丸Worldに必要なデータは、多重に階層化されていて、それぞれの階層にはデータがあって、末端の階層にあるべきデータを参照して該当するデータがその階層に無ければ上位の階層に該当するデータが無いか見に行き、あればそのデータを使うという、すなわち、もっとわかりやすく例で言えば、例えば、「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードを調べたいとき、「困った顔」というのには困った顔のデータしか無くて、歩くスピードがわからないので「ふにゃ」の歩くスピードを見に行くんだけれどもふにゃの歩くスピードが標準的なカイモチ民と変わらないから特には設定されてなくて、最終的に「カイモチ民」まで見に行って、最終的には「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードは「カイモチ民」の歩くスピードとして得られるわけです。
これを使えば何がうれしいかというと、ほとんど同じだけど一部が少し違うようなデータを簡単に作れるんです。
オブジェクト指向とかがわかる人ならクラスの継承のようなもの、といえばわかるでしょうか。
詳しい実装方法は後で考えることにします。
なんだか任天堂のゲームのマリオというキャラクターの印象というのが、キノコという印象が強いらしいので、マリオシリーズでキノコ封印プレイに挑戦してみようかと思っています。
スーパーマリオブラザーズ1はどうせ誰かがやってるだろうからほっとくとして、ワールド、RPG、64あたりが特に面白そうです。
とりあえずルールとしては、キノコの効果を出さない、つまり、通常のキノコであれば入手そのものを禁止、RPGなど、使わずにストックしておけるものなら使わなければ所持OKでいきたいと思います。
カート系では一度入手してしまうとテレサに持っていってもらわない限りどのアイテムも使用不可になるのである意味かなり厳しいかもしれません。
ふにゃさんの新ステージを作ってました。
とにかく無茶苦茶なステージばかりで、一見するとクリア不可能そうに見えて実はバグに近い仕様、すなわち裏技を使えばクリアできるというステージが多くなっています。
吊天井式に上からとげとげが一度に落ちてきたり、アイスゾーンもバナナもびっちりヒートゾーンに囲まれていたり、ブロックで完全に行く手が遮られていたりします。
中には逆に簡単にクリアできそうに見えてものすごくシビアだったり、ただネタだけで簡単だったりするステージも紛れ込んでいます。
ギャラリーには一部のステージの写真を載せておきました。
ラインブレイカ2の動作は良好です。
もう少し速くてもいいかと思ったのですが、とりあえずは許容範囲内でした。
もっと速くしようと思ってクラスの動作を調べるためMSDNライブラリを調べようとしたのですが、今日はサーバーに繋がらず、結局わかりませんでした。
とりあえずまずまずの速度は出ていたのでいったん開発が中断されるかもしれません。
ラインブレイカの中核となる処理を書き終えました。
最初構想していた素晴らしいアルゴリズムは若干面倒臭そうだったので、実装の簡単そうなやや非効率的なアルゴリズムで作ってみました。
後は動作テストが済めば自分で使う分には充分な出来になります。
ただ、改行コードの設定がまだできなかったり、設定の保存も後回しになっていたりするので、一般公開までにはまだ時間がかかりそうです。
ラインブレイカ2のエンコードの種類を選ぶ画面はできました。
初期状態ではUS-ASCIIが選択されていますがたくさんあるエンコードから日本語を選ぶこともできます。
改行コードと削除対象は今までに入力したものの履歴を残すことができますが、エンコードだけはその性質上履歴は残さず最後に使ったものだけが次の起動時に考慮されます。
ラインブレイカの新バージョンはC#で作ることにしました。
まず、VBでは高速化があまり期待できないこと、C++では面倒すぎること、そして、見つけたOLEドラッグ&ドロップのサンプルがたまたまC#だったことなどがあって、C#に決まりました。
C#ならば起動は遅くなりますが、ライブラリが充実していて多機能化も容易ですし、メインフォームを作るのも簡単なので、そこそこはかどりそうです。
Cで考えたアルゴリズムもC#ならばほぼ問題なく使えます。
ただ問題があって、それは、C#で通常使う文字コードがUNICODEなんです。
ただ、これを対象となるファイルの文字コードに変換することができれば、逆に様々な文字コードに対応も出来るということになります。
ダウンロードのトップページを軽量化しました。
THタグの中身をスタイルシートで改行しないようにしたのを忘れてNOBRを入れっぱなしにしていました。
PHPでのギャラリーページの書き換えが完了しました。
JavaScriptに依存しないブラウザに優しい形式で、コンテンツ管理もしやすく、画像一覧だけでなく別の場所でランダムイメージとして利用したりもできます。
とりあえずふにゃさんとBomber丸Worldのページに使ってみましたが、音楽も混在しているパネルγでは別の配慮が必要そうです。
新しいラインブレイカ、早くもダイアログ作成の段階で手間取ってます。
グループボックス(VBでいうフレーム)の中にコントロールを入れてもグループ化されないんですよね。
それにエクスプローラからのドラッグ&ドロップの方法もわかってませんし。
ふにゃさんの13面の攻略ページが出来上がりました。
最難関ステージだけあって画像点数もトップクラスです。
そうそう、ふにゃさんのページのギャラリーとトップを改装中です。
JavaScriptに依存せず画像表示ができて、ギャラリーページの内容を他にも使いまわせるように、PHPで書いてみようかと考えています。
Bomber丸Worldのバトル2の曲をハーモニックマイナースケールにしてみたら暗い曲から怖い曲になりました。
特に出だし部分の印象が激しく変わるのですが、逆に後半部分は何も変わりませんでした。
更新しました。
結局書いたコードをどう扱うかでちょっと延びてしまったということなんです。
ラインブレイカのことなんですが、未来を見据えてここは.NETでやってみるか、それともマイナーバージョンアップということでVBのままいってみるか、予定通りC++でゴリゴリ書くか、迷っているところです。
C++が現実的だとは思うけど、ダイアログ作りから何から自分で作らなきゃいけないし…。
Bomber丸Worldのデータ構造読み込み機能、実は無理にXMLにする必要は無いんです。
うん、MSXMLのバージョンとかインストールとかがややこしそうだったので。
TGscriptを作っているときに見つけたPHPのserialize関数がなかなか便利なんですよ。
配列などのデータ構造をそっくりそのまま文字列にして出力できて、unserializeで復元できるんです。
で、その結果というのがいかにもコンピュータに優しい形式で、構造を表すだけならXMLよりむしろ作りやすいような気がするんです。
頑張れば今日中に更新できないでもないんですけどね。
まあ、つまり、明日です。
今日プログラミングのところを更新しようかなと思ったのですが、今回から本当にインタープリタを作り始めることになるのでもうちょっときっちり作りこみながら書いていかないといけなさそうなので、もう一日ぐらいおいておいてからアップしようということになりました。
今度の更新分は「値」に焦点を絞って話をします。
もうちょっと何かを書こうと思ったのですが、まあ、あまりよいことではないので書かないでおきます。
悪いことがあったわけではありません。
TGscriptのIDをどうするか考えていました。
例えばIDをファイル名として記録していた場合、不正利用者がLinuxのコマンドをIDの代わりに送信してきた場合に非常にまずいことになるのです。
ですから通常CGIなどでは外部からの入力をそのままファイル名として開くようなことはしません。
しかし今回はたくさんあるかもしれないIDをファイル名として扱ったほうが非常に都合がいいと思われるのです。
そこで、IDを数字にすることで、コマンド実行をできなくすることにしました。
もちろん数字じゃなくてもコマンド実行をできなくすることは簡単ですが、ID生成のとき乱数をそのまま使えたり、IDに使われる文字の種類が少ないというだけでも充分に意味はあります。
さらに、ID偽装防止のためのキーも用意したりしました。
もっとも、ID偽装防止のキーを使うのはIDを使って悪さができる段階、つまり書き込みのタイミングのみですが。
久々にスリザーリンクやってました。
2004/09/15(Wed)の日記でも取り上げてましたが結構難しいです。
ラインブレイカ、やはりかなり効率の悪いプログラムでした。
とりあえずCで書く方法は漠然とは思い浮かんでいます。
一行読み込んでは一行書き出して、というプロセスでやると行数に正比例する時間で済むようになるのです。
そして更に、1バイトずつ読みながら1バイト単位で文字列を比較するアルゴリズムも考えています。
メモリ使用量も、核となるアルゴリズムの部分では、一行のデータと、削除対象の文字列と、文字列の一致状況の分のデータだけなので、かなり少ないはずです。
少なくとも元のファイルサイズ+変換後のファイルサイズとなる現状と比べれば圧倒的に。
マザー2のページにギーグのセリフを追加しました。
ギーグのセリフって14種類あるんですね。
知らない人が14種類と聞いたら少ないと思うかもしれませんが、実際にやった人からすれば意外と多い数字じゃないでしょうか。