“RUN” それは魔法の言葉

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

106.HSPでゲームを作ろう:Digi Mole Attack! その5

モグラの出現タイミングに関するロジックの全面作り直しを開始した。
前回洗い出したタイミングを元に、ステータスで管理することにした。
ステータスごとに何カウント分回すかを決めておいて、0になったり、モグラをたたいたりしたタイミングでステータスを変更して、次のカウントを開始する。
こうすれば、モグラをたたいたあとに次にモグラが出現するまでのタイミングを均一化できる。

  • モグラがステージ最初に出現するタイミング
  • モグラを叩いて、 数字モグラが出現するタイミング
  • モグラが出現して、叩けず消すタイミング
  • 数字モグラを叩けず消すタイミング
  • モグラが出現するタイミング
  • モグラを叩けず消すタイミング

それぞれのタイミングごとに、何フレーム後に発生するかを直前のイベント終了時に決めるようにした。
ステータスは単純に数字にするとわかりづらいので、プログラムの冒頭で#constを使って、定数として定義した。

定数はそのまま数値として判定できるので、switch文で、わかりやすく書けた。

#const FIRSTARV (0)
#const CMOLEARV (1)
#const CMOLEITV (2)
#const NMOLEARV (3)
#const NMOLEITV (4)
#const PMOLEARVITV (5)
#const PMOLEARV (6)
#const PMOLEITV (7)

molestate=FIRSTARV ;モグラの状態(ソース先頭に定数定義)
dim molecnt,8 ;モグラの表示タイミング(フレームベース)
molecnt=30,90,90,90,90,90,90,90
gamespeed=molecnt(CMOLEARV)

*molearrival
//モグラの出現、ミス処理
if gamecount=0 {
  switch molestate
    case FIRSTARV ; 一番最初と、子モグラが表示される時間が過ぎたとき
      molestate=CMOLEARV
      gamecount=molecnt(molestate)
      molenum=10
      molepos=rnd(8)+1
      swbreak
    case CMOLEARV ; 子モグラが表示される時間が過ぎたとき
      molestate=CMOLEITV
      gamecount=molecnt(molestate)
      molepos=0
      swbreak
    case CMOLEITV
      moleattackcnt=0 ;連続退治のカウントクリア
      moleattackflg=1 ;ループを抜けるためのフラグをセット
      swbreak
    case NMOLEARV ; 数字モグラが表示される時間が過ぎたとき
      molestate=NMOLEITV
      gamecount=molecnt(molestate)
      molepos=0
      swbreak
    case NMOLEITV ; 数字モグラを見逃しても、親モグラを表示する場合あり
      if pmoleflg=0 {
        moleattackflg=1 ;ループを抜けるためのフラグをセット
      } else {
        molestate=PMOLEARVITV
        gamecount=molecnt(molestate)
        molenum=0
      }
      swbreak
    case PMOLEARVITV ; 親モグラ表示
      molestate=PMOLEARV
      gamecount=molecnt(molestate)
      molenum=11
      molepos=rnd(8)+1
      pmoleflg=0
      swbreak
    case PMOLEARV ; 親モグラが表示される時間が過ぎたとき
      molestate=PMOLEITV
      gamecount=molecnt(molestate)
      molepos=0
      swbreak
    case PMOLEITV
      moleattackflg=1 ;ループを抜けるためのフラグをセット
      swbreak
  swend
} else : gamecount-

*showmole
  if molepos>0 {
    pos mtx(molepos-1),mty(molepos-1)
    celput 2,molenum
  }

return

モグラを叩いた時の判定時もステータスとそのフレーム数をセットしてやることで、均一タイミングでモグラが出現するようにコントロールできた。
実機で遊んだのは、小学校の低学年。そのころの記憶と感覚を頼りにするのならば、満足のいく挙動になったと思う。
なので、オリジナルをそのまま再現ということはやっていない。それでも面白く遊べたらいいのだw