“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

184.HSPでゲームを作ろう:竜巻鮫 その6

次はサメの落下処理。
これは、ほぼ今までのGW再現シリーズと同じ。特に各ラインの落下コマ数を変えたので、「パラシュート」のプログラムがほぼそのまま使えた。

coro3.hatenablog.jp

今回は、ヤシの木にダイバーが引っかかるような、タイミング外しのギミックは入れる(考える)余裕がなかったので、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

あとは落下したときの処理部分に、ミスの判定や、ミス時演出のためのフラグ、変数を設定する処理を書いていく。