ちょっとだけ手の込んだことをしてみる
(表示されるポリゴンモデルが違っている場合は「init all」としてください)

メモリージャグラーをお持ちの方は、ここで使用しているソースをダウンロードして使用できます。
今度はもう少しゲームらしい形のモノを作ってみます。 とりあえず基本的な表示と移動だけを作ってみました。フィールド内を自由に動き回れますが、まだゲームにはなっていません。
このソースでは570行あたりから左右旋回、640行あたりから前後移動を記述しています。また、戦車の移動に伴ってカメラも動きます(510行付近)。カメラが動くことで、常に画面手前下に戦車が位置することになります。
実はかなりプログラム的には無駄な記述も多いのですが、とりあえずこのまま公開してみます。

さてコレをゲームにしようと思ったら、
・何かを撃つ
という要素を加えるのが手っ取り早いところです。別に戦車で立体パズルアクションみたいなのを作るのもアリかもしれませんが、ここは素直にシューティング路線でいくことにします。
さて、何かを撃つということでとりあえずターゲットとしてトラックを何台か入れてみました。 急にソースが長くなってしまいましたが、追加したのは「トラックの動作」と「ビーム処理」です。それ以外にも微妙な修正やrenumberが入ってたりするので、前回とはあちこち変わっています。
トラックの動作については「enmove」サブルーチンにまとめてあります。前進・後退を主にし、壁にぶつかったら進行方向を切り替えます(1430行付近)。前進の場合のみ、ランダムに左右旋回をやっています(1500行付近)。なんだか酔っぱらった蛇行運転みたいですが。
ビームは壁かトラックに当たるまでまっすぐ進み、トラックに当たると10点入ります。ついでに得点表示も画面左上に出るようにしてみました。現在のところビームは1発しか打てず、何かに当たって消えるまで次のビームは撃てません。

少しはゲームらしくなってきましたが、現段階ではゲームとして大きな問題があります。
・ゲームオーバーがない
という点です。
ゲームオーバーの条件としてはいろいろな事柄が考えられますが、やっぱりシューティングの王道としては「敵にぶつかったら終わり」でしょう。
そういうわけで、動き回るトラックに衝突されたらゲームが終わるようにしてみます。しかし衝突するにしても、後ろからいきなりぶつかられたのではわけが解らないうちに終わってしまいます。そういう仕様も場合によってはアリですが、周囲の状況が解るようにしたほうが親切ではあります。
後方などの周囲情報を提示する手段としては、
・レーダー表示
・バックミラー表示
などの手法があります。ここでは前者を採ることにします。ちなみにBSではカメラ2つを使えるので、後者も比較的容易に実装可能と思われます。
ついでに、せっかく命中したんだからトラックには爆発してもらうことにしました。せっかくサンプルモデルに「爆発球」があるのだから、これを使わない手はありません。しかしこのトラックはわりと丈夫らしく、いくら爆発しても消滅せずに走り続けます(笑)。
終わりが生じたことで、少しはゲームらしい緊張感が出てきたでしょうか?

さてレーダー表示には、tile関数を使っています。その位置指定をするためにsetradarサブルーチンを設けました(2090行付近)。ここで自機などのx,z座標を画面上のx,y座標に変換して、tileposを行っています。
爆発表示には、「爆発球」をmodoptで徐々に拡大していってドカーンな感じを出しています(1800行付近)。
まだまだ物足りないながらもいちおうゲームとしての体裁が整いましたが、ついでだから2人対戦プレイを実装してみます。

その前に、修正の報告をしておきます。
公式BBSでご指摘いただいて修正したのですが、バック走行時に壁にめり込んでしまうという不具合がありました。余計な計算を削除することで改修できましたが、なかなか自分の書いたソースでは見えにくい不具合も他人に見ていただくとよく見えることもあるものですね。本当に感謝です。
今までの1人プレイモードも削除するのは忍びないので、開始時にどちらかを選択するようにしました(170行以降)。
さて2人プレイです。サンプルの「カルネージヒート」にもあるように、カメラ2つの設定さえしておけばscreenコマンドを使うだけで画面分割表示が可能です。このカメラ処理も含めて、戦車の操作や移動に関する処理を2プレイヤー分まとめるためにサブルーチン化しました(2600行以降)。
2人プレイは、少々仕様を変えてみました。まずSHIELD値というものを設け、1発当たっただけで終わることがないようにしてあります。100から始まって1発当てられるごとに10減っていくので、つまり先に10発当てたほうが勝ちということになります。それと、レーダー表示もなくしてみました。
こういうゲームだと「相討ち」状態というのも考慮しなければなりません。いちおう一瞬でも早く当たれば先に当てたほうが勝ちとなりますが、本当に同時に当たってしまった(メインループ内の同じタイミングで両者のSHIELDが0になった)場合は両者とも爆発するようにしてあります(1870行付近)。
効果音や振動も追加してみました。これもBBSで提案いただいたものです。

トップへ