現在STGを作っています。右球と左球の処理をして敵の処理も出来ました。
ですが全部の敵を「右球と左球」両方に当たり判定を書いてしまうと長いスクリプトになってしまいます。
言葉では説明しずらいのでミニプログラムを出します (このプログラムだけでは動作しません、全部だすと200行近くあるので( ̄▽ ̄;)
〜処理の流れ〜
自機の弾を変数に収納。
14行以降 → 敵と自機弾の当たり判定 (自機弾は100発)
---------------------------------------------------------
------------------------------------------------------------------
;****************敵VS玉****************** *敵VS玉 ;mytmx = 自機弾のフラグ repeat MYTMMAX ;自機弾の最大数,100 ;←球 MY_ct = cnt ;自機弾についてのカウント数 ttx = mytmx.MY_ct : tty = mytmy.MY_ct ;自機弾の座標 ;→球 MY_ct2 = cnt ;自機弾についてのカウント数 aax = mytmx2.MY_ct2 : aay = mytmy2.MY_ct2 ;自機弾の座標 gosub *tugi loop *tugi ;****************敵VS玉********************** repeat ENEMYMAX ;敵の最大数,5 ;←球 ;teki.cnt = 敵フラグ ;mytm = 自機弾フラグ if teki.cnt = 1 and mytm.MY_ct { if (tekix.cnt < ttx+8) and (tekix.cnt+32 > ttx) and (tekiy.cnt < tty+16) and (tekiy.cnt+32 > tty){ ;リセット ;敵の存在 ;自機弾 teki.cnt = 0 : mytm.MY_ct = 0 } } ;→球 if teki.cnt = 1 and mytm2.MY_ct2{ if (tekix.cnt < aax+9) and (tekix.cnt+32 > aax) and (tekiy.cnt < aay+9) and (tekiy.cnt+32 > aay){ ;リセット ;敵の存在 ;自機弾 teki.cnt = 0 : mytm2.MY_ct2 = 0 } }loop return
あたり前ですが敵は一種類だけではありません。4匹のグループ、3匹のグループ・・・と沢山種類があります。
それらを全て追加してしまうととんでもない長さになります。
追加するとこんなかんじです(さっきのソースの一番下に追加)(追加する場合29行目のreturnを削除)
------------------------------------------------------------------
----------------------------------------------------------------------
;****************4グループの敵************************ repeat MAX_F ;敵の最大数,4 ;←球 if teki2.cnt = 1 and mytm.MY_ct{ if (tekix2.cnt < ttx+8) and (tekix2.cnt+32 > ttx) and (tekiy2.cnt < tty+16) and (tekiy2.cnt+32 > tty){ ;リセット ;敵の存在 ;自機弾 teki2.cnt = 0 : mytm.MY_ct = 0 } } ;→球 if teki2.cnt = 1 and mytm2.MY_ct2{ if (tekix2.cnt < aax+8) and (tekix2.cnt+32 > aax) and (tekiy2.cnt < aay+16) and (tekiy2.cnt+32 > aay){ ;リセット ;敵の存在 ;自機弾 teki2.cnt = 0 : mytm2.MY_ct2 = 0 } }loop return
んでこれが3グループ2グループとなると・・・・
なので、関連性を見て「左の弾と右の弾」をまとめられそうな気がしましたが非力な自分には無理でした・・・orz
(当たり判定の所だってきっと小さくできるはず・・・)
そこで色々考えてみたのですが、プログラミング経験が少ない自分には3つぐらいしか思い浮かびませんでした・・・
■1 変数を使ってまとめてみる
MY_M = MY_ct
MY_M = MY_ct2
→プログラミングルールでNG
■2 orを使ってみる
ヒット数がおかしくなる
■3 その他
・フラグ?
・else → 「違う場合」じゃないし
この場合どのようにしたら短くできますでしょうか?
それとも自分のような経験が少ない人はガンガン付け加えた方がいいのでしょうか?
ってか以前に小さくするっといのは無理なんでしょうか?
なんかアルゴリズムの相談で申し訳ないです (´・ω・`)
わかる方いましたら教えてください。