先ほどは失礼なことになり申し訳ございませんでした。
「変なところ + 前スレッドで言われた画像の件」 を直しました。
--本編--
「STG制作」 でつまずいたのが 「2匹敵を倒した場合、1匹につき2個アイテム出す」
細かく言うと 「1匹倒したら2個アイテム出す」 を 「2回以上繰り返したい」 です。
繰り返してソースを大きくしないようにしたいのですが、その繰り返しの仕方も悪いような気がします・・・
原因はわかってて配列なんですが、配列じゃないと別々にHPを管理できません。
っていうか配列じゃないと、敵を個別に置けないので配列でやってます。
(1匹だけ存在しそれを倒した場合、2個以上アイテムを出すことなら出来ます)
配列 → 「配2:ア4」 とかの場合、配列を4個置かないといけない (でも1匹に1個しか出ない)
リピート&ループ → 同じ場所に敵が重なるだけ (乱数で誤魔化せるけどダメ)
という感じで行ったり来たりしてて泥沼にはまっている状態です・・・orz
なので 「アドバイスや考え方」 などがございましたら教えてもらえないでしょうか?
実はこれ前々から疑問に思ってたことで、今回避けれない壁になってしまったため質問させていただきました。
それではよろしくお願いいたします。
-仕様-
・アイテムは敵を倒したときに出てくる(点数アイテム、パワーアップなど)
・敵には耐久力があります
・弾はわざと貫通するようになってます(サンプルで戻す意味がないため)
・↓のプログラムは 「1匹を倒すと1個アイテムが出ます」
・主は初心者です
-やりたいこと-
・敵1匹倒すたびに、2個以上アイテムを出したい(例:1匹目=2個、2匹目=2個)
・ソースが大きくならないようにしたいです
--------------------------------------------
screen 0,605,450 myx = 170 : myy = 350 ;自機座標 mySpd = 4 ;自機スピード ;敵 TK_MAX = 2 dim TKf,2 ;フラグ dim TKx,2 : dim TKy,2 ;座高 dim HIT,2 ;ヒット数 dim GKf,2 ;撃破フラグ ;点数アイテム TEN_MAX = 2 dim TENf,2 ;フラグ dim TENx,2 : dim TENy,2 ;座高 ;*************メインループ************** *メイン redraw 2 : color 20,20,20 : boxf ;************カウンター***************** color 255,0,0 pos 360,230 : mes "HIT(0)(敵ヒット) " + HIT(0) pos 360,250 : mes "HIT(1)(敵ヒット) " + HIT(1) color 0,255,0 pos 350,280 : mes "【Zキーで自機弾を発射】" pos 350,300 : mes "【ア:アイテム】" ;*************************************** gosub *弾の移動 gosub *自機の移動 gosub *敵 gosub *敵VS弾 gosub *点数アイテム ;点数アイテム TKc = 0 repeat TEN_MAX ;2 if GKf(TKc) = 1 : color 255,0,0 : pos TENx.cnt,TENy.cnt : mes "ア" TKc++ loop ;敵 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 1 : color 0,255,0 : pos TKx(TKc),TKy(TKc) : mes "敵" TKc++ loop ;自機 pos myx,myy : color 0,255,255 : mes "自" ;自機弾 if SHOTf = 1 : color 255,255,0 : pos SHOTx.cnt,SHOTy.cnt : mes "弾" redraw : await 15 goto *メイン ;***********点数アイテム**************** *点数アイテム TKc = 0 repeat TEN_MAX ;2 if TENf.cnt = 0 : TENx.cnt = TKx(TKc) : TENy.cnt = TKy(TKc) : TENf.cnt = 1 TKc++ loop return ;****************敵********************* *敵 TK_x(0) = 170 : TK_x(1) = 250 TK_y(0) = 250 : TK_y(1) = 250 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 0 : TKx(TKc) = TK_x(TKc) : TKy(TKc) = TK_y(TKc) : TKf(TKc) = 1 if HIT(TKc) >= 2 : TKf(TKc) = 0 : GKf(TKc) = 1 ;体力なくなったら TKc++ loop return ;****************弾の移動*************** *弾の移動 getkey keyZ,90 ;キーチェック,Zキー if (keyZ) and SHOTf = 0 { SHOTf = 1 : SHOTx = myx : SHOTy = myy - 10 ;座高 } if SHOTf = 1 : SHOTy -= 10 ;スピード if SHOTy < 0 : SHOTf = 0 return ;***************敵VS弾**************** *敵VS弾 TKc = 0 repeat TK_MAX ;2 if TKf(TKc) = 1 { if (TKx(TKc) < SHOTx+9) and (TKx(TKc) > SHOTx-58) and (TKy(TKc) < SHOTy+8) and (TKy(TKc) > SHOTy-45){ HIT(TKc) += 1 ;ヒット数 } }TKc++ loop return ;**************自機の移動*************** *自機の移動 stick key,15 ;キー取得 if key & 1 : myx = myx - mySpd ;←のスピード if key & 2 : myy = myy - mySpd ;↑のスピード if key & 4 : myx = myx + mySpd ;→のスピード if key & 8 : myy = myy + mySpd ;↓のスピード return