制作中のPICO-8スネークゲーム「ピコニョロ」。
敵のカエルの数が少なくなると、移動量を増すルールを設けたのですが、その変更タイミングのルールを考えました。
チェックするのは、以下の2つで、
- カエルの数が何匹になったか
- ステージ数
で決まるようにします。
チェックするカエルの数も、ステージ数が高くなると、数が多くなるようにします。
そうすることで、ステージ数が上がると難易度が上がり、クリアしにくくなります。
昔のアクションゲームでよくあるアルゴリズムです。
で、実際にどの様なタイミングで変更するかを説明すると、カエルの移動量は3種類あるので、条件を3つ用意します。
- ゲームスタート時の状態(デフォルト)、一番移動量が少ない=移動が遅い
- ある程度カエルの数が少なくなったら、二番目に移動量が多い状態=移動が普通の速さ
- 更にカエルの数が少なくなったら、一番移動量の多い状態=移動が最高速
となり、実際書いたコードはこちらになります。
-- frog distance table update
if #frogs + #ascensions <= mid( 1, flr(sys.stage_no/4)*2+1, 5 ) then
frog.fdistp = 3
elseif #frogs + #ascensions <= mid( 3, flr(sys.stage_no/4*5), 10) then
frog.fdistp = 2
end
#frogsは、ステージ上にいるカエルの数
#ascensionsは、昇天しているカエルの数
mid( )関数は、3つの引数のうち真ん中の数を返します(最大と最小の範囲内の数値を取得できる)。
flr( )関数は、小数点を切り捨てて整数を返す
sys.stage_noは、ステージ数
frog.fdistpは、移動量が入っているテーブルの添字です(1移動量:0.5、2移動量:1、3移動量:2)
なので、
- 3ステージまでは、残り3匹で移動量1、残り1匹で移動量2
- 4〜7ステージまでは、残り5匹で移動量1、残り3匹で移動量2
- 8ステージ以後は、残り10匹で移動量1、残り5匹で移動量2
となります。
実行結果です。
右上に表示されている「DISTANCE」が1から2へ変わったタイミングが、カエルが昇天して消えるタイミングになっているのがわかります。
最近は、トークンギリギリでコードを修正&追記しているので、コード削減とも戦っています。
次は、カエルの色を移動量に合わせて、変えてみたいと思います。
コメント