■文字列表示で再帰コール

『おたすけ忍風伝』に限らず、多くのゲームでは文字列をメッセージ欄に1文字ずつ表示する。そして、よほど気の利かないゲームでなければ、文字表示速度を調整できるようになっている。こう書くと、プレイヤーが好みに応じて表示速度を選択する機能を想像してしまうかもしれないが、ここでイメージしてほしいのは「文字列中の指定部分だけを一気表示する」というプログラム上のテクニックだ。

文字列を1文字ずつ表示するのは、タイマーコントロールで1文字表示用のプロシージャを管理するだけなので、さして難しいことはない。具体的なプログラムは、拙著にもいろいろなタイプのものが示されているので省くが、要するに文字列をMid関数で1文字ずつ読み出して、タイマーイベントのたびに表示していけばよいのだ。この1文字表示プロシージャ名を、仮にMessageとしておこう。

プレイヤーが選択する文字表示速度は、基本的にはタイマーインターバルの値を調整すればよい。ただし、それだけでは速度的な限界があるので、より高速にするためには1度のタイマーイベントで複数回 Messageをコールするなど、ちょっとした工夫も必要だ。もちろん、それは『おたすけ忍風伝』でもやっている。

さて、肝心の「文字列中の指定部分だけを一気表示する」というテクニックだが、これも表示そのものは1文字ずつ行わなければならない。自前の文字表示ルーチンでピクチャボックスに文字を表示する際は、複数文字列の一括表示はできるだけ避けるべきなのだ。というのは、指定部分の中に文字以外のコントロールコード(文字色や改行……といった独自の指定コード類)が含まれている可能性があるし、表示エリアの右端をチェックして強制改行をしなければならないこともあるからだ。そこで、このような場合はMessageプロシージャの中で再帰コールを使うとよい。



これは、Messageプロシージャの中で Select Caseステートメントを使って、1文字の内容をチェックしている部分だ。ここでの意味が「文字列中の"{"と"}"で囲まれた指定部分を一気に表示する」というものであることは、あえて強調するまでもないだろう。このように自分で自分をコールすることを再帰コールという。プログラムテクニックとしては、どちらかというと高度な部類に属するが、実際に利用するチャンスはあまりない。それだけに、これは格好のサンプルといえる。

ちなみに、この"{"と"}"のように自分で使わないと決めた文字を、独自のコントロールコードにすることは、文字列表示では日常茶飯事である。もちろん、そのために完全な汎用性には欠けてしまうが、『おたすけ忍風伝』では"\"や"@"など多くの独自コントロールコードがある。そういった文字列表示のアイデアを盗み取るのも、実をいうと『おたすけ忍風伝』の隠された楽しみなのである。