日記(953)

<前 次>

すりすりざりざり

スリザーリンク、前に出していたURLのところにあった問題は全部解き終わりました。
問題集の問34なんかは画面からはみ出るほどの大きさで、何度かいいところで失敗したりしつつ、解くのに何日もかかってしまいましたが、なんとか今日解けました。
最後のほうともなると一本の線を引くために全部の線を見ていかなければならなかったりして、かなりてこずりました。

で、それが終わってからゼルダの伝説時のオカリナの、ケポラ・ゲボラのテーマを聞いてたんですが、今更ながらですが、すごくいい曲ですね。
正体がわからないけど、出会えると少し安心する、そんな雰囲気でしょうか。
ずっとループで聴いてます。

そういえば久々にスマブラDXをプレイしてみました。
本当は風のタクトのフィギュア集めをしようと思っていたのですが、最近スマブラをやっていなかったのでそちらを選んでみました。
久々だけど相手は全員レベル9(最大)のコンピュータでやってみて、大負けしたり、たまには勝ったり、常に勝ち負けの見えない勝負になりましたが、とても楽しいひと時でした。
最近データ作りのためにゲームをプレイしていることが多くて、楽しいには楽しいんだけど心から楽しむことはできないことが多かったので、久々に思いっきり楽しめたような気がします。
こう考えると、やりこみ要素やコレクション要素がやたら多いのも考え物かなぁ、と思ったりします。
絶空やらなにやらの超絶テクニックを身につけて日々勝つための戦いをしている人は果たして楽しめているんでしょうか…。

今日の画像はスリザーリンクの完成画面です。
ネタバレが嫌じゃない人はどうぞ。

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

無題

今日はのんびりしておりました。
最近目を酷使しすぎなのです。

バリエーションデータの続き

で、バリエーションデータの、どのデータをどのタイミングで読み込むか、というのを考えてました。
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に必要なデータは、多重に階層化されていて、それぞれの階層にはデータがあって、末端の階層にあるべきデータを参照して該当するデータがその階層に無ければ上位の階層に該当するデータが無いか見に行き、あればそのデータを使うという、すなわち、もっとわかりやすく例で言えば、例えば、「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードを調べたいとき、「困った顔」というのには困った顔のデータしか無くて、歩くスピードがわからないので「ふにゃ」の歩くスピードを見に行くんだけれどもふにゃの歩くスピードが標準的なカイモチ民と変わらないから特には設定されてなくて、最終的に「カイモチ民」まで見に行って、最終的には「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードは「カイモチ民」の歩くスピードとして得られるわけです。
これを使えば何がうれしいかというと、ほとんど同じだけど一部が少し違うようなデータを簡単に作れるんです。
オブジェクト指向とかがわかる人ならクラスの継承のようなもの、といえばわかるでしょうか。
詳しい実装方法は後で考えることにします。

<前 次>