« [解剖記]敵弾の生成と移動 | トップページ | [解剖記]その他の画面効果 »

[解剖記]敵弾と自機の当り判定

続いて、敵弾と自機の当り判定です。基本は自機弾と敵機の当り判定と全く同じです。二重ループを使わない分、こっちの方が簡単かもしれません。ポイントは同じく、座標差(絶対値)を求め、その差によって判定するというところです。


;■ 敵弾移動 & 当り判定
*tekitamamove
repeat tmax
if tf.cnt<1 : continue
tx.cnt=tx.cnt+txv.cnt
ty.cnt=ty.cnt+tyv.cnt
if tx.cnt>640 : tf.cnt=0 : continue
if tx.cnt<-25 : tf.cnt=0 : continue
if ty.cnt>480 : tf.cnt=0 : continue
if ty.cnt<-25 : tf.cnt=0 : continue
pos tx.cnt,ty.cnt : gcopy 2,175,0,25,25
dx=(mx+25)-(tx.cnt+12) : if dx<0 : dx=-dx
dy=(my+25)-(ty.cnt+12) : if dy<0 : dy=-dy
if (dx>=0)&(dx<10)&(dy>=0)&(dy<10) {
repeat tmax : tf.cnt-- : loop
pos tx.cnt,ty.cnt
gcopy 2,175,25,25,25
bgcolor=128
snd 1
mf--
}
if (dx>=10)&(dx<40)&(dy>=10)&(dy<40) : score++
loop
return

これも計算式に無駄がありますね。自機弾と敵機の当り判定と全く同じです。絶対値を求めてるのだから、ゼロ以下になる事はありえませんね。こんな感じで充分です。

if (dx<10)&(dy<10)

自機と敵弾が当ったときの処理でちょっと変わってるのが、ダメージを受けたらその瞬間に敵弾が全て消えるという部分です。これによって、ゲーム難易度を落としています。非常に短い記述でこういうことが簡単にできるのです。例えば敵弾を全て消すフラッシュボムのようなものにも使えますね。

ダメージを受けたときの処理でもう一つのポイントが、画面を赤くフラッシュさせる処理です。これは、メインルーチンの部分で画面クリアをする色をダメージを受けたフレームだけ変更する事によって実現しています。メインルーチンのこの部分です。


;■ メインルーチン
*main
redraw 2
color bgcolor,0,0 : bgcolor=0
boxf 0,0,640,480
------------------------------------------------------------
goto *main

これによって、普段は(color 0,0,0)で画面更新を、ダメージを受けたときは(color 128,0,0)で画面更新を行うようになります。

もう一つ、画面効果を行わなかったので気づかない人も多いかと思うのですが、カスリボーナスの処理を 行っています。これも当り判定の応用で、一定範囲以下であれば得点を加算する、という処理だけをしています。例えば「Distance」の場合、カスった ら火花のようなものが飛ぶようになってるので、カスリボーナスの存在にも気づかれやすいです。が、このサンプルではあえてやらなかったので、実装してても 気づいてもらえなかったのではないでしょうか?プログラムの構造のところでも話をしましたが、プログラムの流れは

ユーザーからの入力その結果がどうなったかを判定画面に表示(音声の出力)

こういった形になっています。「入力」→「判定」部分は基本になってくるので、それほど違いを持たせることはできませんが、「表示(出力)」部分に関して は、力いっぱい凝ることもできますし、シンプルにしちゃうこともできます。あまり凝りすぎると処理速度の問題なんかも出てきてしまいますが、せっかく実装 している判定をユーザーに分かってもらえないというのも悲しいものです。サンプルの場合、わざと(面倒だったからじゃないです^^;)得点にだけ反映させ てます。が、こういう小さな部分に凝る事で、ゲーム自体の面白みが増す事もあるということを覚えておきましょう。

« [解剖記]敵弾の生成と移動 | トップページ | [解剖記]その他の画面効果 »

2.解剖記」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67538/57445612

この記事へのトラックバック一覧です: [解剖記]敵弾と自機の当り判定:

« [解剖記]敵弾の生成と移動 | トップページ | [解剖記]その他の画面効果 »