CarnageHeart PORTABLE@Wiki カウンタ講座 その1
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

カウンタ講座 その1


定期ミサイル

諸君はミサイルを撃つ間隔をどう設定しているだろうか?
ランダム分岐で適当に撃っている人も多いかもしれない。
しかし、ミサイル発射をランダム分岐で決めてしまうと全然撃たなかったり、逆に連射してしまい
敵の誘導妨害装置を使い切らせる事ができなかったりと安定しない場合が多い。
そこでカウンタを使ってみよう。

Aに時間 → A-B演算 → Aが4以上? (YES)=> ミサ発射 → Bに時間 →
             →(NOなら外へ)

(注:カウンタA、Bの初期値は0)

解説
前回ミサイルを撃ったのが20秒の時だったとする。
そしてこのルーチンに入った時が25秒だとすると、カウンタAの値が25、カウンタBの値が20である。
そしてA-B演算でAの値が5となる。(25-20)
すると分岐条件がYESとなりミサイル発射チップへたどり着き、カウンタBに最終発射時間を代入する。
前回ミサイルを撃ったのが23秒だとすると、25-23でAの値が2となりミサイルを撃たずルーチンから外れる。
つまり、4秒以上間隔を空けないとミサイルを撃たないのだ。
このルーチンを組んでおけば敵機体の誘導妨害装置を効率的に減らす事が出来る。

このルーチンの問題点

二脚、多脚はジャンプでミサイル発射がキャンセルされてしまう。
その場合もBに時間が代入されるので、再度時間が経たないとミサイルが撃てない。
→動作完了待ちチップをつける?カウンタでミサイル残弾数を調べる?

発展

残弾数、経過時間、自機破損度、敵機体タイプによってミサイル発射本数や間隔を変えてみよう。

更なる発展

Aに時間 → A mod 好きな数 → A = 0? (YES)=> ミサ発射
             →(NOなら外へ)

(注:カウンタAの初期値は0)
にすれば、カウンタBが必要ないので上記の例よりも1チップ少なくて済みます。
ちなみに、modは前者を後者で割った余りを出すという演算です。

「好きな数」に0.5を入れれば、0.5で割り切れる数は0.5秒毎に現れるので0.5秒毎の発射となりますし、
「好きな数」に10.0を入れれば、10.0で割り切れる数は10.0秒毎に現れるので10.0秒毎の発射となりますね。

このように今作のカウンタ操作チップには基本的な四則演算以外にも様々な演算子が含まれているので、満遍なく試用する事をお勧めします。
もしかすると、更に更にソフトウェアをスマートな物に出来るかもしれませんよ。




スイッチ移動

たとえば敵弾をジャンプで回避する場合、右に飛ぶか、左に飛ぶか、どう判断しているだろうか?
初級者は「サイコロによるランダムジャンプ」か、「常に片側ジャンプで障害物がある場合のみ反対」
となっている人が多いだろう。
しかしその場合、エリア外周付近での回避率低下を招く恐れがある。
そこでカウンタを利用して組んでみる。

                  (NOなら外へ)
                   ↑
A=0? (YES)=> 右ジャンプ → 右に障害物等 (YES)=> Aに1代入 →
↓(NO)
左ジャンプ → 左に障害物等 (YES)=> Aに0代入 →
           ↓
         (NOなら外へ)

解説
まずカウンタAの値を見る。
そして0(初期値含む)ならば右にジャンプし続ける。
右に障害物などがあるとAに1を代入する。
すると、次にこのルーチンに入ったとき左に障害物が現れるまで、左にジャンプし続ける事となる。
これを壁スイッチという。
分岐条件に味方を入れると適度に味方と距離をとって戦う事もできる。(味方スイッチ)
このルーチンは応用次第でさまざまな行動を制御できる。
たとえば飛行形の高度調節に使えば、低空~高空を移動し続ける回避率の高い飛行型
が作成可能となるし、オフセット移動時も進路を柔軟に確保できる。

※発展
「右に3回ジャンプ後、左に2回ジャンプ」と組んでみよう。





カウンタを利用したループの制御

「某アニメのMSのように横移動しながら華麗にビームを撃つ様を再現したい。」
という話を良く聞く。
しかしCHでこれを再現しようとすると、射撃の間隔を空ける方法でつまずく事となる。
弾を頻繁に撃ちすぎると移動スピードが落ちるし、射撃間隔が空くと弾幕が薄くなる。
そこでカウンタの出番だ。

Aが5以上 (YES)=> Aに0を代入 → 射撃ルーチンへ
↓(NO)
Aに1を足す → 移動、回避ルーチンへ

解説
カウンタAが5以上でないと射撃ルーチンへ移行しない。
つまり、プログラム全体を5週しないと攻撃できないのだ。
この5週する間はもちろん横移動や敵弾回避を行う事となる。
このルーチンが上手く組めれば、横移動→射撃を適度な間隔で繰り返す事となる。
横移動の時間はカウンタの数で調整する。
カウンタの数を多くすれば攻撃頻度が低くなる。

応用すれば「5回に一回、あるルーチンを通らない」等も可能となる。
ループを組むときは、ループを脱する条件として利用するのも面白いだろう。