次はサメの落下処理。
これは、ほぼ今までのGW再現シリーズと同じ。特に各ラインの落下コマ数を変えたので、「パラシュート」のプログラムがほぼそのまま使えた。
今回は、ヤシの木にダイバーが引っかかるような、タイミング外しのギミックは入れる(考える)余裕がなかったので、GAME Bでは4ライン目を追加してみた。
そして、パラシュートでは、ずいぶんと間抜けな処理を入れていた…
2のn乗を計算するのに、Powf命令を使って、実数だからと、intでキャストしないといけないね、とか…
右シフトとか、左シフトとか、シフト演算を偉そうに語って使っていたのに、2のn乗をシフト演算でできるって考えてないというね…
ま、そこは凡人のオッサンということでお許しをww
もちろん、今回はシフト演算に作り替えておきました。
閑話休題。
処理の流れは、特定のフレーム数になったら、1ラインずつ動かす(右シフト)する、その時最大のサメ出現数に達しておらず、出現条件(三分の一の確率、1マス以上空いている)を満たしたら、サメを足す。
と、日本語一文で書くと、何言ってんの?この人って言われそうww
プログラムだと、こんな感じ。
if gamecnt\g_speed=0 { ;サメの落下処理フレームなら ;1ライン分だけ、サメを落とす sharkline(sharklinecnt)<<1 ;落下した判定 falldef=sharkfall(sharklinecnt)<<1;ラインごとに落下位置が違うため計算 if (sharkline(sharklinecnt)&falldef)=falldef { ;落下したときの処理 sharkline(sharklinecnt)=sharkline(sharklinecnt)-falldef ;ラインからサメを消す fallsharks-- ;落下するサメの数を1減らす } ;サメを追加する? if fallsharks < maxsharks { if rnd(10)>3 and (sharkline(sharklinecnt)&3)=0 { ;必ず1つ以上あける sharkline(sharklinecnt)++ fallsharks++ } } ;動かすサメのラインを進める sharklinecnt++ if sharklinecnt>=4 : sharklinecnt=0
あとは落下したときの処理部分に、ミスの判定や、ミス時演出のためのフラグ、変数を設定する処理を書いていく。