「プログラミング」に関する日記(25)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

ウィンドウサイズ保持

CharaBox3の微妙な改良を行っていました。
CharaBox3の以前のバージョンでは、終了するときに最大化状態や最小化状態だとそのときの大きさを記録してしまうため、最大化と同じ大きさの通常サイズや、最小化と同じ大きさの通常サイズがあったりしました。
今度のは、記録するのはあくまでも通常時のサイズであって、最大化や最小化状態で終了した場合は、それとは別にウィンドウ状態を記録することで、次の起動からは、通常時のサイズを保持したまま最大化や最小化などのウィンドウ状態も復元します。
で、ただこれだけなら別段日記に書くほどのことではないのです。
この実現方法として、安直な考え方だと、終了直前にウィンドウを通常サイズに戻すとか、フォームのイベント中にサイズを記録する処理を書くとかするのですが、今回は、フォームそのものとは分離して、ウィンドウサイズ記録専用クラスを作ったのです。
分離したら何が嬉しいのかというと、まず、メインウィンドウ内で書くべきウィンドウサイズ保持用のコードが少なくなり、また、他のプログラムへも組み込みやすくなります。
一応CharaBox3ではプログラムそのものの設定ファイル内部にサイズ情報を自前で埋め込んだため、本当にウィンドウサイズの一時的な保持しかしていませんでしたが、他のプログラムに持っていく前には、ファイルに記録、そして読み込んでウィンドウサイズ復元を、一つの命令で自動的に行えるようにしたいところです。
ちょっとしたものなのですが便利だと思うので出来上がったらこちらも公開したいと思います。

3rdは使えない!?

yaneSDK.NETのことですが、セットアップが煩雑すぎるということで使わないことにしました。
コピーすべきファイルがソースファイルだけじゃないとか、初期設定が多いとか、ちょっとした事を色々試すにはあまりに面倒です。
同じような理由でyaneSDK3rdも使いません。
先にコンパイルしましょうとか、面倒すぎます。
まあ、3rdのほうは割と単体でも使いまわせそうなものが多いので、こちらは存在意義が.NETよりはありそうですが。

日記管理をPHPに移植中です。
現在は管理者の認証までできていて、これから管理者用の処理を書くところです。

ドット絵離れ…?

まずはC#とGDI+の組み合わせを試してみました。
それが今日の画像です。
この拡大方式、自然画や写真などには威力を発揮するのですが、ドット絵に使うにはちょっと絵の端っこが問題となりそうです。
これはこれで全体としてはある意味見栄えがするので工夫次第で何とかなりそうだし、もしかしたらオプションをつけてもっといい拡大方法が選べるのかもしれないので、もう少し調べてみてもよさそうです。
あとyaneSDK.NETも一応…。

1166798025.png

プログラミング>MIDI作成アプレット

タイトルにあるコンテンツの最初の一言の「お絵描き掲示板と同じ要領でMIDIを作って投稿できる掲示板システムを作っているのだ。」を「MIDIを作れるJavaアプレットを作っているのだ。」に変更しました。
ちょっとね。「Java」という単語を入れたかったんですよ。
どうにもGoogleで「ShortMessage MIDI -Java」というキーワードで検索して来てくれた人がいるようなんですね。
「Java」を除くというオプションにしているにもかかわらず、トップに来るのはJavaそのもののページ。
うちはあまり検索エンジン最適化のことを考えるつもりは無いのですが、さすがに完全に来る目的から外れている内容かどうかは伝えていかないといけないと思うのでこのあたりはきっちり表記しておきたいと思います。

でも結論は出ていない

とりあえずスクリプトの今後の方針を考えてましたよ。
値型のポインタがどうのこうのということでですね。
実体を保持しておくのは難しそうなのでポインタを保持しておこうと思うのですが、だったらメモリ解放はどうすればいいのかという話で。

方針が間違っていたのか

う~む……。
スクリプト講座に書いたこと……。
行き当たりばったりで書いたので、ちょっと……。
間違えただけなら訂正すればいいんですよ。
だけど、ちょっと方向性を間違えたかな、という気がするんですよ。
もしかしたら何回か分を丸ごと取り消すかもしれません。
それでも考えた軌跡として何らかの形で残すことにはしますが。
というより第10回以降はもうこっちの世界に入っちゃってるのでプログラミングのコンテンツとしての有用度はがた落ちなんですが。

ところで昨日の記録の話の続きですが、じゃあ自分のソフトではどんなことを記録すべきでどんなことを記録せざるべきなのか、そんなことを考えていました。
私の場合は基本的に記録しなさ過ぎるほうに偏っているような気がするのですが。
特に今作っているのはRPGであり、言ってみればデータの固まりなんです。
基本的にゲームの進行度や手に入れたアイテム、主人公たちの強さのパラメータや健康状態などは考えるまでもなく全て記録すべきなのですが、例えば進める必要の無いイベントや取る必要の無いコレクションアイテム、ゲームをより奥深くする様々なパラメータなどは記録すべきなのか、すなわち登場させるべきなのか、そのあたりが問題なのです。
特に思いつくままたくさんのイベントを作ってしまいましたからね、どれを入れてどれを削るべきなのか、あるいは全部入れて苦痛にならない工夫を頑張るか、そのあたりが考えどころです。

パーサを作ろう

プログラミングコーナーのスクリプト講座を書いてます。
いよいよ次からはパーサ作りに入ります。
予定としては、いつでも好きに拡張できるようにパーサを作っておいて、まずは数式だけ認識できるパーサを作って、後から細かい言語仕様を考えながらパーサやスキャナを拡張していく、という方式にしようと思っています。

地球防衛軍

FNチェンジャーに不具合が見つかったので修正してアップしておきました。
リネーム条件に当てはまらない場合リネーム前とリネーム後の名前が同じになりエラーとなっていましたのでそれを直しました。
一応アップしておきましたが、詰め合わせのほうは更新してません。
ごめんなさい。

弟がSIMPLE2000のTHE地球防衛軍を買ってきました。
2じゃないほうです。
これを見るといかに2が簡単に作られたものかというのがよくわかりますね。
音楽使いまわし、画面使いまわし、システム使いまわし、敵使いまわし、主人公使いまわし、ステージ使いまわし、ミッション使いまわし、2は新作というよりは新バージョンといった感じだったんですね。

どうでもいい話ですが、秀丸のバージョンが6になって機能拡張されたのに伴ってPHPの書き方も変更しました。
以前は、

// コメント
function 関数() {
関数の中身
}
だったのですが、

function 関数() // コメント
{
関数の中身
}
にしました。

ダブルに愛二つ

今日は家電量販店に来年発売されるWindows Vistaを触りに行きました。そういうことにしておいてください。
Vistaは、XPにも増して余計な演出が増えたなという印象です。
サムネールとか3Dでウィンドウ切り替えとかは良い感じでしたが、タイトルバーが透けて後ろのウィンドウが見えるというのはぼやけてて後ろに何があるのかがわからず正直言って役に立ちませんでした。
ガジェットは出したり入れたりするときにすっと入れられるので便利です。
で、ソリティアを勝つまで十数回粘って、店を後にしました。

スーパーマリオ64のコイン取らないプレイは今日完了しました。
難しいと思っていたチックタックロックとレインボークルーズが意外に簡単だったので助かりました。
どこからどう行けばどこに届いてどこに届かないのか、とか、どのアイテムがどこにあるのかなど、かなり考える部分がありましたね。
取れそうで実は取れないアイテムにこだわったり、ノーダメージで突っ切ろうなどと考えているとなかなか進みません。
そんなわけで、取ったのはクリアに必要な最低限の70個ですが、もう1つ取れそうなので全部で71個になりそうです。

スクリプト講座を一気に2回分更新しました。
のんびりしてて時間が遅くなっちゃってごめんなさい。

マウンテンスライダー

マリオ64のたかいたかいマウンテンのスライダー難しいです。
コイン取らないで行こうとすると。
ショートカットを使ってコインを取らずにクリアはできたんですが、一応ショートカットなしでもいけそうな手応えはありました。

スクリプトのほうはなかなか良い感じに書けています。
明日更新ですよ。
ただ、次の更新分がかなり難しそうな気がするのですが…。

来月2日

明日にでもスクリプト作成のページ更新できそうなんですが、そこはあえて12月2日に更新することにします。
今日はパーサのことをあまり考えていないスキャナの実装を改善する話を書いています。
12月中にはせめて動くところまでは作り上げてしまいたいのですが……。

マリオ64コインなしプレイのクリア可否の書き方を難易度表記に変更しました。
必須コースに限って難しいです。

薄い赤

若干スタイルシートを変更しました。
変更内容は、リスト関係の階層構造が見えやすくなるように薄い赤でグラデーションを施したこと、です。
こんな単純な内容ですが、どうすれば見やすくなるかということを結構考えて作ったんですよ。

今日はプログラミングコーナーの次の更新分も書いてました。
小数やら指数やらを解析します。

そして先日言っていたマリオ64をコインなしでクリアするというプレイ、今日始めてみました。
必須コースのクッパのステージが異様に難しいです。
元々そんなに難しくないゲームなんですが、ここだけ難易度レベルが一桁上がってます。
他はわりと無理なく取れるものは取れる、取れないものは取れないと割り切って進めるのですが。
というわけで、現状クリアしているところまではゲーム記にアップしておきました。

プロパティシート

昨日スマブラをやりすぎたせいか、が痛くなっちゃいましたよ。
一番疲れたのは鬼のようにZトリガーを連打しまくった右手人差し指だったはずなんですが…。

ファイルのプロパティにタブを追加する方法を探しています。
まあ、今の時点である程度調べはついているんですけどね。
IShellPropSheetExtというのがポイントみたいです。

爆ボンのバトルステージ2のページを書いてみました。
ちょっとまだはっきりしていない部分があるのでアップしていませんが、ステージ1ぐらいのボリュームで書いてますよ。

1164206888.png

WindowsVistaとVisualStudio

マイクロソフトの「よく寄せられる質問 : 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の場合長いテキストをしっかり表示しないといけないかもしれない、あるいは文字が小さくてたくさん表示できるスペースを設けたとしても小さなセリフが存在感を失わないでいてくれるかもしれない、そんなことを考えていました。

msxml

更新しました。
結局書いたコードをどう扱うかでちょっと延びてしまったということなんです。

ラインブレイカのことなんですが、未来を見据えてここは.NETでやってみるか、それともマイナーバージョンアップということでVBのままいってみるか、予定通りC++でゴリゴリ書くか、迷っているところです。
C++が現実的だとは思うけど、ダイアログ作りから何から自分で作らなきゃいけないし…。

Bomber丸Worldのデータ構造読み込み機能、実は無理にXMLにする必要は無いんです。
うん、MSXMLのバージョンとかインストールとかがややこしそうだったので。
TGscriptを作っているときに見つけたPHPのserialize関数がなかなか便利なんですよ。
配列などのデータ構造をそっくりそのまま文字列にして出力できて、unserializeで復元できるんです。
で、その結果というのがいかにもコンピュータに優しい形式で、構造を表すだけならXMLよりむしろ作りやすいような気がするんです。

何でもかんでも値を持つ

今日プログラミングのところを更新しようかなと思ったのですが、今回から本当にインタープリタを作り始めることになるのでもうちょっときっちり作りこみながら書いていかないといけなさそうなので、もう一日ぐらいおいておいてからアップしようということになりました。
今度の更新分は「値」に焦点を絞って話をします。
もうちょっと何かを書こうと思ったのですが、まあ、あまりよいことではないので書かないでおきます。
悪いことがあったわけではありません。

トップページも更新

そんなわけで冷めないうちにプログラミングのところを更新してきました。
今回は1回分開いたので一度に2ページ更新です。
今度からはいよいよ長い長い前置きを終えて本番のスクリプト開発に入りますよ!!

そしてついでにトップページも更新。
コンテンツ名を見ればわかるような説明は省き、もっと内容を簡潔にわかりやすく、興味を持てるように書き換えました。
そして説明一つ一つの行数を必ず2行以内に収め、あまり使わないパーツを目立たないところに移動したりもしました。
そういえばずっと前からタグ名を間違っている部分があったのに今日初めて気が付いてしまいました。
その部分は丸ごと消すつもりの部分だったので今更気付いても意味が無かったのですが…。

爆ボンのブラックシティのページも更新しました。
やっぱりどきどきモードだとハートの制限が厳しいです。
そしてごうかくタイムもフルパワーであってさえ余裕が無い。
そんなこんなで後はレインボーパレスに突入するだけのようです。
これが済んだらいよいよ最速攻略のページなんかも作り始めますよ。

<前 次>