“RUN” それは魔法の言葉

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

105.HSPでゲーム&ウォッチのパラシュートを作ろう その5

いよいよ再現のキモ、GAME Bのスカイダイバーの処理を作る。

もう一度整理すると、GAME Bでは、一番右端のラインで、ヤシの木に引っかかるギミックがある。
そして、プラプラと左右に揺れて、適当なタイミングで元のラインに戻ってくる。当然キャッチできなければミスになる。

と、ここまではネットや参考文献から調べられた。
どんなロジックかをもう少し詳しく調べたかったが、YouTubeにアップされているのは、紹介レベルのものしかなかった。
仕方ないので、見たものからロジックを想像して作ることにした。

右端のラインの落下パターンは、5カ所。その4番目の位置まで進んだら、ヤシの木に引っかかるかを判定する。
引っかかるかどうかの判定は、ランダムでよさそう。引っかかる確率は調整しなくてはならないが、とりあえず、30%ぐらいから始める。
引っかかったダイバーは、右端ラインからはいったん削除するので、4番目の位置を表す 8 を引く。さらに落下総人数には数えないため、現在の落下人数から1を引く。

f:id:CORO3:20211103010809j:plain

引っかかったら、左右にプラプラと揺れる。これは4ライン目のダイバー落下処理で行う。
そして、左側に揺れたときに、これまたランダムで元のラインの4パターン目として戻る。
戻った後は、通常の右端ラインと同じように動かす。

戻るときもランダムというのもあるが、右端ラインも、ヤシの木に引っかかっている間に、ダイバーは追加される。なので、ダイバーがいる・いないも判断しないといけない。

f:id:CORO3:20211103010831j:plain

うん。書いてるだけでプログラム組むのが面倒だと思ったw
が、結局はそのタイミングに合わせて、論理積で空き判定してあげるだけだったのだが。

できたプログラムはこんな感じ。

〇 ヤシの木に引っ掛ける判定と処理

   ;3ライン目、ヤシの木に引っかかる?(GAME Bのときだけ)
   if gamemode=1 and diverlinecnt=2 {
    ;引っかかる条件
    ;3ライン目の4番目のポジションになったとき、4ライン目にダイバーがおらず
    ;2分の1の確率で引っかかる
    if rnd(2)=0 and (diverline(diverlinecnt)&8)=8 and diverline(3)=0 {
     diverline(3)=1 ;4ライン目にダイバーを追加
     diverline(diverlinecnt)=diverline(diverlinecnt)-8 ;3ライン目からダイバーを消す
     falldivers- ;4ライン目は総落下ダイバー数には入れないのでカウントダウン
    }
   }

〇 ヤシの木から戻る判定と処理

} else { ;4ライン目の処理
 if gamemode=1 { ;GAME Bのみ処理
  if diverline(diverlinecnt)=1 and caughtcnt>2 { ;ダイバーが左に揺れてるとき
  ;3ライン目の人が2~5番目のポジションにおらず、2分の1の確率で元のラインに戻す
   if (diverline(2)&30)=0 and rnd(2)=1 { 
    diverline(2)=diverline(2)+8 ;3ライン目の4番目のポジションに戻す
    diverline(3)=0 ;4ライン目は空にする
    falldivers+
   }
  }
  ;4ライン目の処理は左右に揺らす 
  if diverline(diverlinecnt)>0 {
   diverline(diverlinecnt)=diverline(diverlinecnt)^3
   caughtcnt+
  }   
 }
}

テストプレイしてみると、3ライン目のダイバーが、ヤシの木に引っかかって、次の移動処理のタイミングで、すぐ3ライン目に戻って落下してくることが結構あった。
最低でも1往復はぶらぶらwしてもらおうと、カウンタを設けて、判定を行った。
感覚的には、うまく再現できたと思う。

これでほぼ完成。
あとは、音、バイブレーション、落下スピードの調整を行って仕上げよう。