次はチェーンソーの処理。
アタックボタンを押しているときだけ、チェーンソーを表示するのはフラグ管理で問題なし。
今回は、押しっぱなしにしていると、チェーンソーがオーバーヒートして、使えなくなるようにする。
まずは、ボタンを押したら温度を上げ、離したら下げる処理を、アタックボタンの押した判定、離した判定のところに入れる。
どれくらいの加減がよいのか分からないので、とりあえず±1ずつしてみる。
温度の最大値(オーバーヒート)は、とりあえず1000にして、変数で変えられるようにしておく。
温度の上昇時には、オーバーヒートの判定処理を加える。
オーバーヒートは、状態が二段階あって、
- チェーンソーが点滅する状態。ボタンを離して温度が下がれば解除される
- 点滅状態でサメを倒すと、消えてしまい、温度が下がっても復活しない→次のサメ落下でミス確定
これらを、1つのフラグで処理することにした。
オーバーヒートフラグ → 0:通常、1:オーバーヒート状態、2:消滅状態
ここまでは、サメの落下や、キャッチの判定を作っていなかったので、細かな調整はしなかった。
そして、温度の状態を示す温度メーター。4段階に目盛りが増える。
オーバーヒート状態になったら、チェーンソー同様、点滅表示させる。
目盛りの増減は、いつもの除算の余りを使って制御。
点滅は、これまた何度も出てきたXOR(排他的論理和)を使って、0と1を繰り返し変更するフラグを作って、片方(今回は0の時)だけ、チェーンソーを表示するようにした。
こんな感じで、if文だらけの汚いソースにw
;チェーンソーを表示する if attackflg=1 and ohflg<2 { if ohflg=1 and gamecnt\30=0 : sawflash=sawflash^1 if sawflash=0 { pos sawx(ppos),sawy(ppos) gmode 2 : celput 4,ppos } } ;チェーンソーの温度計表示 tmpstep=sawtmp/(maxtmp/4)+1 tmpstep=limit(tmpstep,0,4) if sawflash=0 and tmpstep>0 and sawtmp>0 { pos 632,540 gmode 2 : celput 16,tmpstep-1 }