ゲームの骨格は、某大学のアマチュアラジオクラブさんのサイト(らしい)を見ました。今はそのサイトが消滅しています。それ故、Sec-2.でプログラムの骨格(昔、上記で見たもの)を載せておきます。本物のキャラクター端末(Xを立ち上げない時の画面)では動きません。動くのはターミナルエミュレータだけです。コマンドを使っている関係です。Sec-2.プログラムの骨組みまず、下の図を見てください。プログラムの骨格(概要)を示しています。(某大学のウェブサイトにあったやり方です)要するに、キー入力を待っていて、入力があれば(J、L、space)それに応じて処理をし、先に進む。入力がなければ先と書いてあるところに進んで、その後の処理をする。それを、グルグル回りながら続ける。簡単に言えば、ゲームの骨格はこれだけです。後は、シューティングゲームらしくなるように敵も自動的に動き回る。(できれば乱数発生させてランダムに動くようにする)自分の打つ弾は、複数可能なようにする。敵も複数の爆弾を落として、自分を攻める。ゲームのスピードコントロールに時間を使う(ストップウォッチ)自分か敵のどっちかに弾が当たったら、それでゲーム終了となるようにする。こんな具合に、少しずつ改良していくだけです。ライブラリが必要です。主たる処理系として利用していた。ライブラリがあるが、私はうまく使いこなせなかった。他の処理系にも同様にライブラリが見られるが、やはり使いこなせない。ライブラリを使いこなすためにドキュメントを懸命に読むくらいなら、作った方が早そうです。ライブラリもどき」を自作することにした。ライブラリはフレームバッファに必要な事柄を書き込んでいき、一定のサイクルでこれをディスプレイに描画しているらしい。すれば、キャラクター端末だけではなく、ドットディスプレイにも使える。自作するにはこれはちと難しすぎる。そこで、自作するライブラリもどきはキャラクター端末専用にした。この場合は、VT100用のエスケープシーケンスを直接画面に出してゆけば良いはずである。ネット上にはVT100エスケープシーケンスについてのウェブサイトが沢山あるので、それらを適当に参考とした。エスケープシーケンスだけではうまくいかないものについては、それぞれネット上で情報を集めてエスケープシーケンスもどきを作った。これには、カーソルの視覚・消去(visible)、エコーの制御(echo)、バッファリングの制御(cbreak)がある。Sec-4.読み飛ばしについて一般に以下のようなプログラムだと、入力があるまでプログラムは入力待ち状態で停止する。}上記のプログラムで、キー入力しないと、そこで止まったままになる。シューティング・ゲームだと、キーボードからの入力がなければこれを放っておいて、先に進む必要がある。そこで、読み飛ばす・・・というか、入力がなければ放っておいて先に進む処理を実現しなくてはならない。Yというコマンドがこれを実現するらしい。試してみたら、うまく読み飛ばすことが出来ます。他の処理系でも、いくつかはこれが出来ました。やり方がちょっと面倒だし、処理系ごとに出来たり出来なかったりする。できればどんな処理系でも安定して出来るやり方が望ましい。これって、ひょっとしたら読み飛ばせるようにするものか?試してみるとうまく行きます。このような関数を作れば、基本的にどの処理系でも読み飛ばすことが出来ました。)を利用することにしました。Sec-5.ミリセコンドの時間計測について次に、プログラム中で時間を計測することを考えます。時間を計測しながらプログラムの進行速度を調整するためです。ゲームが早く動き、低速なCPUだとゲームがゆっくり動いてしまいます。ゲーム速度の調節は時間でやるしかないです。時間計測の単位はミリセコンドくらいが良さそうです。各処理系のドキュメント類を読みました。ここでまた問題が出ました。ミリセコンドの時間計測が出来ないようです。すべてミリまたはそれ以下の細かい単位で計測出来ます。変えることにしました。(汗)各処理系の時間計測の関数は以下のとおりです。(current-milliseconds)これらの関数をそのまま使っていてはコードが処理系依存になってしまいます。そこで自分の関数を作り、これをインターフェイスにして処理系の違いを吸収しました。これはデータ構造のなかに手続きを持つもので、いわゆる「メッセージ渡し」によって必要な処理をします。複数の実体を作ることが出来ます。と二つのストップウォッチが出来ます。その時までの経過時間を測ります。興味があれば、プログラム本体をご覧ください。Sec-6.ゲームについて「J」キーと「L」キーで自分が左右に動き、スペースバーでビーム発射です。敵は一定数動くとワープして別の場所に現れます。ワープする場所、歩く歩数、右に動くか左に動くか、の三点は乱数により決めています。自分が打つビームは一画面に3つです。4つ目は最初の1個が画面から消えないと打てません。敵が動く速度やビームの数、敵が打つ爆弾の数は定数で調整出来ますが、自分で試した限りでは、これくらいが一番面白いと思います。自分の動くスピードはキー入力次第なので、調節できません。プロンプトに戻ります。