MSXでプログラミングの限界を知る①
ホビーパソコンと言えばMSX。買ってきたROMカセットでゲームが出来て雑誌のプログラムをひたすら打って遊ぶ事も出来る。
自分でプログラミングするぞとなればBASICの入門書を買えばいい。画面に線を描きましょう、丸を描きましょうと用意された命令を使えば簡単にお絵かき出来る。
本を買うと高いから図書館に行って借りてきたら違うパソコンのBASICでそのまま実行できなかった。
入門書は良く出来ていて順番に進めて行くと色んな事が出来るようになる。MSXの画面はショボいのに挿し絵が凝ってて想像をかき立てられる。効果音が出せたり音楽が演奏出来るようになると面白くなる要素が登場、スプライトだ。
16進数とは?みたいな説明があってキャラクターが作れますよと。
丸や線で描いた背景にオリジナルキャラが動きまわる。アニメのセル画みたいなものと説明されてもアニメのセル画がわかっていない。ほえー。
カーソルキーの入力でスプライトが動く。敵も用意してスペースキーで弾を撃つ。当たり判定があれば撃墜。
本の最後まで来れば自機と敵機一対一のシューティングゲームが完成。すごい。だが売ってるゲームとは程遠いんだな。インベーダーゲームやギャラガは敵がいっぱい出てくる。
まずは敵を2機にするとなるとやらなきゃいけない処理が格段に増える。試行錯誤が始まりそれはそれで楽しいもの。
ただしMSXは居間のテレビを使ってやるもの。家族みんなのテレビを独占出来ない。そこでMSXの電源が入っていないときもプログラムの事を考える。
本体についてきたコマンドリファレンスを読み漁り何か今実行したい事のヒントがないかを探す。
方眼用紙にドットを描いて16進数の計算をする。
やっとこさ敵が2機に出来たとなると遅くてゲームにならない。命令を足して足して無駄を省かないから重くてしょうがない。市販のゲームは普通に動いてるのになんで?
入門書の時はスプライトの当たり判定を使っていた。弾と敵以外の衝突は無いから当たり判定の割り込みがあれば敵が撃墜される処理だけ。
敵が2機となると話が変わってくる。弾がどっちの敵に当たったかを判定しないといけない。敵と敵がぶつかることもある。
用意されている当たり判定は単純なのでスプライトが重なっているかどうかで割り込みが走る。自機を2色で描きたいから2つのスプライトを重ねるとずっと衝突してる扱いになって使い物にならない。
仕方がないので全部のキャラクター同士XY座標の絶対値を引き算してある数値以下に近くなったら衝突の処理をするという。そりゃ重いはずだ。
以外とこういった早々にハマるような問題の解決法が書いてある本が無い。人が作ったプログラムでシンプルに解決してたりすると頭がいい人は違うななんて思った。
通常時は座標の計算なんてしないでキャラを動かしておいてスプライトが重なって割り込みが発生してから座標の計算でも良かったのかも。普通みんなそうしてるの?
続く…