第15章

最初に書いたフローチャートは、メイン部分のもののほか、 敵の移動ルーチン、スクロールサブ、音出しルーチンのものがあった。

この中で、敵の移動ルーチンが、間違いなくこの 企画 の核心部である。 一番作りたい部分、そして一番難しい部分がここである。 音出しルーチンをプログラムした後、私は早速このルーチンにとりかかった。

敵の移動アルゴリズムは、「向いている方向が空白ならばまっすぐ進み、 壁にぶつかったらランダムに右折または左折する」というものである。 ただ、この当時は乱数発生ルーチンなどという高度なものは知らなかったので、 「自分の5つ先の番号の敵の方向を見て決める」という方法をとった。 これならある程度ランダムっぽく見える筈である。

このほか、ミサイルに当たったかの判定などを加え、これを20回繰り返せば 終了である。ちなみに、敵を倒したときの判定は、 ミサイル処理ルーチンで敵の位置に「*」というキャラを描く →敵の移動ルーチンの時に、敵の位置に「*」が描かれていれば 死んだとして処理する、という具合になっていた。こうすれば 敵を倒したかどうかの判定を移動ルーチンに組み込めて楽だ、 というものであった。マシン語プログラミングをするとき、 こういう小細工を弄すると大抵あとでハマるのだが…。

また、敵の方向を、「1=左、2=上、3=右、4=下」というように、 一つの数字で表せるようにした。マシン語でマイナスを表すのは面倒そうだし、 2つ組の数字を扱うよりは1つの数字にしたほうが楽そうだ、というのが 理由である。そして、こういう小細工を弄すると、大抵あとでハマるのである。 (ちなみに、方向が0のときは、「死んだ」状態であった。)

そして、プログラミングは開始された。例によって、 ノートに プログラム(ニーモニック)を書いていく。 しかし、想像すればわかると思うが、これまで音出しルーチンとスクロールルーチン しか作ったことのない人間が、敵の移動ルーチンに挑戦しようというのである。 そこにあるギャップは、かなりキツいものがある。 何度も試行錯誤(試行といっても、実際に動かしてみたわけではないが)を 繰り返しながら、少しずつプログラムを組んでいく。あとのほうになって 前のほうのプログラムでの見落としに気付き、消しゴムで消して書き直す、 ということが何度も続く(ちなみに、書き直すときのプログラムは、 大抵前に書いてあったものより大きいので、前に書いてあった部分のスペースに 入りきらず、無理矢理押しこめる形になってしまうのであまり気分が よくない)。

ニーモニックを書き終えたら、こんどはアセンブルである。 もちろんアセンブラなど持っていないのでハンドアセンブルである。 相対ジャンプなどにも苦しみつつ、表を見ながら地道にニーモニックをマシン語に 置き換えていく。 一度ハンドアセンブルしたあとに見落としに気付いたりすることもあったりして、 そうなると絶対ジャンプの番地はもちろん、相対ジャンプの値も何気に変わったりして 大変、などというのも誰もが体験していることであろう。

…とまあ、アルゴリズム自体はそれほど複雑ともいえないようなルーチンでも、 やはり実際にやってみるといろいろと考えなくてはならないことも多くて、 そのうえ最初に雑なフローチャートを書いた後は行きあたりばったりで プログラムしていたため、泥沼にはまっていくのであった。 秋に始めたはずのプログラミングだったが、季節はいつのまにか冬になり、 学期はいつのまにか3学期になっていた。(このときの冬休みは、 よく炬燵の中でプログラムだったかハンドアセンブルだったかを やっていた憶えがある。まあとにかく当時の私には膨大な量で、 やってもやっても終わらないという感じであった。)

そして話をさらにややこしくしていたのがスクロール・ルーチンである。 これは一見、マウンテン・クライマーのときの下スクロールを 上下スクロールにすればいいだけだから簡単そうだ、と思うのであるが、 実はそう簡単にはいかないのである。画面がスクロールするということは、 同時に、敵の位置も変化するということである。もちろん今だったら 敵の座標を「迷路のどこにいるか」という絶対座標で表しておくところであるが、 当時はキャラの座標といえば画面上の座標そのままを使うのが当然で、 そんな面倒な事はやってみようとも思わなかったのである。そのため、 スクロールするごとに、敵の座標をそれに合わせて変化させ、 画面外に出たらそのための処理を行なわなくてはならず、さらにそのとき、敵の 現在進んでいる方向まで考慮しなければならない、という悲惨な 状態になってしまったのである。だいたい敵の移動ルーチンで ヒイヒイ言っているときにそんな複雑な処理まで考慮しなければならないと なったら、もう完全に小学生の頭の許容量を越えてしまっている。 方向を1つの数字で表すとか、敵がやられた事をキャラ「*」を介して伝達 するとかいった奇抜なアイデアも、 こうなってみるとより一層事態を悪化させるだけの代物であった。

しかし、そのようにパニックになりながらも、なんとか敵の移動ルーチンと スクロールサブを書き終えることができた。もっとも、「書き終えた」というだけで、 動くかどうかは神のみぞ知る、という状態だったのだが…。


16章へ
14章へ

戻る