; シフトアップネット ; 下記コマンドのサンプル ; keydown hit region group weight FPS = 20 rate FPS ; フレームレート指定 msg ロード中・・・ . ; 背景画像 load "fore1_1b" grpBack 100 fit grpBack paint grpBack ; 標的 SUU_TGT = 10 MAX_TGT < SUU_TGT - 1 wk2 = 1000 for i = 0 to MAX_TGT load "yadokari.png" grpTarget[i] wk2 group grpTarget[i] wk2 ; グループ指定 region grpTarget[i] 40 40 ; 衝突サイズ指定 wk2 + 1 endfor ; ショット noShot = 0 SUU_SHOT = 8 MAX_SHOT < SUU_SHOT - 1 wk2 = 2000 for i = 0 to MAX_SHOT load "gun1.gif" grpShot[i] wk2 locateCenter grpShot[i] 0 -500 addAnimRotateLoop grpShot[i] 0 3 180 0 addAnimMove grpShot[i] 1 20 -600 0 addAnimLocate grpShot[i] 1 1 0 -500 group grpShot[i] wk2 ; グループ指定 region grpShot[i] 50 50 ; 衝突サイズ指定 wk2 + 1 endfor ; 自機 load "0at.gif" grpShip 3000 move grpShip 200 0 SPD = 10 ; 移動スピード ; 爆発エフェクト SUU_BOMB = 10 MAX_BOMB < SUU_BOMB - 1 wk2 = 4000 for i = 0 to MAX_BOMB load "circle.gif" grpBomb[i] wk2 locateCenter grpBomb[i] -500 0 addAnimAlpha grpBomb[i] 0 3 0 addAnimZoom grpBomb[i] 1 3 150 150 addAnimAlpha grpBomb[i] 0 1 100 addAnimZoom grpBomb[i] 0 1 100 100 addAnimLocate grpBomb[i] 1 1 -500 0 wk2 + 1 endfor ; 効果音 loads SE_ATK loads SE_POW msg 0 *hitコマンド、keydownコマンド等のサンプル  移動:矢印キー ショット:Zキー  終了:スペースバー . menu flgBgm 音を出さない 音を出す endmenu flgMode = 0 ; 0でhitコマンド使用、1で自力判定(遅い) ; ゲーム毎の初期化 *init cntMDown = 0 maxCntMDown = 3 ; 連射間隔 clear paint grpShip wkX = 200 for i = 0 to MAX_TGT clearAnim grpTarget[i] rand 1 jouge if jouge = 0 then wkY = -300 else wkY = 300 endif locateCenter grpTarget[i] wkX wkY rand 200 wkY2 wkY2 - 100 ; -100〜100 if jouge = 0 then wkTime < ( wkY2 - wkY ) / 10 else wkTime < ( wkY - wkY2 ) / 10 endif wkWait < i * 10 addAnimLocate grpTarget[i] 1 wkWait wkX wkY addAnimLocate grpTarget[i] 1 wkTime wkX wkY2 addAnimRotateLoop grpTarget[i] 1 20 60 jouge addAnimCruise grpTarget[i] 1 40 20 addAnimLocate grpTarget[i] 1 1 0 -600 wkX - 50 paint grpTarget[i] startAnim grpTarget[i] endfor if flgBgm = 1 then music B16_079 endif ; メインループ *loop gosub isOkFire if ret > 0 then gosub lblFire endif gosub idou if flgMode = 0 then gosub ckAtari else gosub ckAtariOld endif ;wait 1 ;wait 0 weight 1 keydown 32 isDown ; DEBUG if isDown = 0 goto loop stopm menu flgMode もう1度 処理落ちを体験 リロード endmenu if flgMode < 2 goto init end ; 当たり判定 ------------------------------------------------------------------------------------------ *ckAtari for j = 0 to MAX_SHOT ; 全てのショット hit grpShot[j] wk 1000 1999 ; grpShot[j]に衝突しているグループ1000〜1999までの画像をチェック if wk >= 0 then ; 衝突している場合、その画像のグループが戻り値。衝突していなければ-1 msg 当たり! group=$wk$ . if flgBgm = 1 then sound SE_POW endif ; 消滅アニメ getGrpPos # arg0 arg1 ; ※hitの結果の画像IDが#に gosub effectBomb ; 標的を消す stopAnim # locateCenter # 0 -600 ; 画面外 ; ショットを消す stopAnim grpShot[j] locateCenter grpShot[j] 0 -500 ; 画面外 endif endfor return ; 自力当たり判定(比較のため) ------------------------------------------------------------------------------------------ *ckAtariOld GUN_SIZE_HURF = 50 for i = 0 to MAX_TGT ; 全ての敵 getGrpPos grpTarget[i] wk0 wk1 ; 画像の情報(X、Y、) if wk1 > -500 then for j = 0 to MAX_SHOT ; 全てのショット getGrpPos grpShot[j] mx my if my > -500 then wk < mx - GUN_SIZE_HURF if wk <= wk0 then wk < mx + GUN_SIZE_HURF if wk >= wk0 then wk < my - GUN_SIZE_HURF if wk <= wk1 then wk < my + GUN_SIZE_HURF if wk >= wk1 then msg 当たり! no=$i$ . if flgBgm = 1 then sound SE_POW endif ; 消滅アニメ getGrpPos grpTarget[i] arg0 arg1 gosub effectBomb ; 標的を消す stopAnim grpTarget[i] locate grpTarget[i] 0 -600 ; 画面外 ; ショットを消す stopAnim grpShot[j] locateCenter grpShot[j] 0 -500 ; 画面外 endif endif endif endif endif endfor endif endfor return ; 自機の移動 ------------------------------------------------------------------------------------------ *idou getGrpPos grpShip x y keydown 38 isDown if isDown > 0 then y - SPD if y < -200 then y = -200 endif endif keydown 40 isDown if isDown > 0 then y + SPD if y > 200 then y = 200 endif endif keydown 37 isDown if isDown > 0 then x - SPD if x < -300 then x = -300 endif endif keydown 39 isDown if isDown > 0 then x + SPD if x > 300 then x = 300 endif endif locateCenter grpShip x y return ; 発射可能か(ret=0,1) ------------------------------------------------------------------------------------------ *isOkFire ret = 0 keydown 90 isDown ; Zキー if isDown > 0 then cntMDown - 1 if cntMDown < 0 then ret = 1 cntMDown = maxCntMDown endif else cntMDown = 0 endif return ; 発射 ------------------------------------------------------------------------------------------ *lblFire ; 効果音 if flgBgm = 1 then sound SE_ATK endif ; 位置セット getGrpPos grpShip x y locateCenter grpShot[noShot] x y paint grpShot[noShot] ; 移動開始 startAnim grpShot[noShot] if noShot = MAX_SHOT then noShot = 0 else noShot + 1 endif return ; 指定位置に爆発エフェクト(引数:arg0=x、arg1=y)------------------------------------------------------------------------------------------ *effectBomb arg2 = 0 for arg5 = 0 to MAX_BOMB getGrpPos grpBomb[arg5] arg3 arg4 if arg3 <= -500 then arg2 = arg5 arg5 = MAX_BOMB endif endfor locateCenter grpBomb[arg2] arg0 arg1 paint grpBomb[arg2] startAnim grpBomb[arg2] return