HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0414
シューティングゲーム作成シューティングゲームの敵の弾のスクリプトを作っているが25未解決


シューティングゲーム作成

リンク

2022/4/14(Thu) 17:07:59|NO.95987

これでプログラムを起動すると弾丸に当たるスプライトがひとつしか表示されません。
これの改善方法はありますか。

screen 0,720,480 ebulmax=20 dim enebulxA,ebulmax : dim enebulyA,ebulmax : ebulmaxA=ebulmax :eneX=360 : eneY=60 : mope=0 *main repeat ebulmaxA : enebulxA(cnt)=1000 : enebulyA(cnt)=1000 : loop repeat ebulmax : enemxA(cnt)=1000 : enemyA(cnt)=1000 : loop : enebuladd=1 repeat redraw 0 color 0,0,0 : boxf ;pos eneX-30,eneY-50 : color 0,255,0: gmode 4,,,255 : celput 1 gosub *enemove gosub *ebul_move await 10 redraw 1 loop *enemove if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 return *ebul_move repeat ebulmaxA if enebulyA(cnt)=1000 : enebulxA(cnt)=eneX : enebulyA(cnt)=eneY loop if enebulyA!=1000{ repeat ebulmaxA enebulyA(cnt)+=10 //弾丸を上に向かって進ませる color 0,255,0: boxf enebulxA(cnt),enebulyA(cnt),enebulxA(cnt)+5,enebulyA(cnt)-5 if enebulyA(cnt)>480 : enebulyA(cnt)=1000 loop } return



この記事に返信する


kinokawa

リンク

2022/4/14(Thu) 21:20:47|NO.95988

同じところに20個重なって表示しているので

enebulyA(cnt)+=10 //弾丸を上に向かって進ませる
color 0,255,0: boxf enebulxA(cnt),enebulyA(cnt),enebulxA(cnt)+5,enebulyA(cnt)-5

のところを

enebulyA(cnt)+=10 //弾丸を上に向かって進ませる
color 0,255,0: boxf enebulxA(cnt)+cnt*10,enebulyA(cnt),enebulxA(cnt)+5+cnt*10,enebulyA(cnt)-5

に変更すると 解決にはなっていないと思うけど
とりあえずですが 20個 表示しますね



シューティングゲーム作成

リンク

2022/4/15(Fri) 14:55:48|NO.96001

ありがとうございます。
とりあえず試してみます。



シューティングゲーム作成

リンク

2022/4/15(Fri) 15:01:06|NO.96002

>>NO.95988
試したところたまの20個分が数珠繋がりになりなした…シューティングゲームによくあるような連続して弾が出続けるというのを期待したのですが…



kinokawa

リンク

2022/4/15(Fri) 18:36:11|NO.96003

break文をいれてみるっていうのも・・・
これでも根本的な解決にはなっていないと思うけど・・・

*ebul_move repeat ebulmaxA if enebulyA(cnt)=1000 : enebulxA(cnt)=eneX : enebulyA(cnt)=eneY : break loop

>シューティングゲームによくあるような
できればどんなシューティングゲームなのか教えていただきたいです



kinokawa

リンク

2022/4/15(Fri) 18:51:25|NO.96006

連投すいませんw
最初から20個重なっているのが問題なので
=1000を=cnt*10 にして
初期座標を縦にずらして設定してみました


*main repeat ebulmaxA : enebulxA(cnt)=1000 : enebulyA(cnt)=cnt*10 : loop

見た目はあまり変わらないけど、こっちのほうがよかったかも



シューティングゲーム作成

リンク

2022/4/18(Mon) 14:58:52|NO.96056

>>NO.96003
東方Project系とかそういう感じのシューティングゲームですね。



シューティングゲーム作成

リンク

2022/4/18(Mon) 15:34:36|NO.96057

@kinokawa
あなたのスクリプトを試したんですがなんか途中からとぎれとぎれになっちゃいました…



kinokawa

リンク

2022/4/18(Mon) 20:40:25|NO.96058

シューティングゲーム作成さんの
スクリプトをあまり変更したくなかったので
すこしだけ変えて弾が出続けるという感じにしたかったのですが
ちょっと無理があったので大幅に変更しました
東方Project系で東方紅魔郷以降の弾幕を出そうとすると
hgimg3以降でないと標準命令だけだとちょっときついかと思います

screen 0,720,480 enebulmax=50 dim enebulx,enebulmax dim enebuly,enebulmax dim enebulflg,enebulmax eneX=360 : eneY=60 : mope=0 *main repeat enebulmax enebulx(cnt)=0 : enebuly(cnt)=0 : enebulflg(cnt)=0 loop repeat redraw 0 color 0,0,0 : boxf gosub *ene_move gosub *enebul_shot gosub *enebul_move gosub *enebul_put await 10 redraw 1 loop *ene_move if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 return *enebul_shot repeat enebulmax if enebulflg(cnt)=0 : enebulflg(cnt)=1 : enebulx(cnt)=eneX : enebuly(cnt)=eneY : break loop return *enebul_move repeat enebulmax if enebulflg(cnt)=1 { enebuly(cnt)+=10 if enebuly(cnt)>480 : enebulflg(cnt)=0 } loop return *enebul_put repeat enebulmax if enebulflg(cnt)=1 { color 0,255,0: boxf enebulx(cnt),enebuly(cnt),enebulx(cnt)+5,enebuly(cnt)-5 } loop return



シューティングゲーム作成

リンク

2022/4/19(Tue) 14:55:21|NO.96062

>>NO.96058
hgimg3が必要なら別に入れても大丈夫ですし思いっきり改変しても問題ないですよ。



シューティングゲーム作成

リンク

2022/4/19(Tue) 16:59:30|NO.96063


/************************************************************************************************************************ *bulmax:弾薬の最大数,was(x,y,max):左側の弾,eas(x,y,max),右側の弾,lef(x,y,max):左に直進する弾,rig(x,y,max):右に直進する弾* *str(x,y,max):直進する弾,zig(x,y,max)* *************************************************************************************************************************/ screen 0,720,480 dim kakudE,2 : dim kakudW,2 kakudE(0)=2 : kakudE(1)=6 kakudW(0)=2 : kakudW(1)=6 bulmax=10 enemax=10 ebulmax=50 wesmax=bulmax : easmax=bulmax : wesBmax=bulmax : easBmax=bulmax : strmax=bulmax : zigmax=bulmax jikix=360 : jikiy=480 dim wesx,bulmax : dim wesy,bulmax : dim easx,bulmax : dim easy,bulmax : dim wesBx,bulmax : dim wesBy,bulmax : dim easBx,bulmax : dim easBy,bulmax : dim strx,bulmax : dim stry,bulmax : dim zigx,bulmax : dim zigy,bulmax dim enebulxA,ebulmax : dim enebulyA,ebulmax : dim enebulflgA,ebulmax : ebulmaxA=ebulmax :eneX=360 : eneY=60 : mope=0 ;redraw 0 *main repeat bulmax : wesy(cnt)=1000 : easy(cnt)=1000 : loop repeat ebulmaxA : enebulxA(cnt)=0 : enebulyA(cnt)=0 : enebulflgA(cnt)=0 :loop ;repeat ebulmax : enemxA(cnt)=1000 : enemyA(cnt)=1000 : loop : enebuladd=1 repeat redraw 0 color 0,0,0 : boxf color 255,128,0 : boxf eneX,eneY,eneX+60,eneY+100 color 0,255,128 : boxf jikix-15,jikiy,jikix+14,jikiy+45 gosub *naname gosub *Move_Key gosub *tama_Key gosub *enemove gosub *ebul_move gosub *ebul_shot gosub *ebul_put await 10 redraw 1 loop *Move_Key redraw 0 getkey hid,37 : getkey ue,38 : getkey mig,39 : getkey sit,40 if sit=1 { if sitcnt\1=0 : jikiy=limit(jikiy+5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 sitcnt+1 }if sit=0 : sitcnt=0 if ue=1 { if uecnt\1=0 : jikiy=limit(jikiy-5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 uecnt+1 }if ue=0 : uecnt=0 if mig=1 { if migcnt\1=0 : jikix=limit(jikix+5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 migcnt+1 }if mig=0 : migcnt=0 if hid=1 { if hidcnt\1=0 : jikix=limit(jikix-5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 hidcnt+1 }if hid=0 : hidcnt=0 repeat ebulmax ;if enebulxA(cnt)-jikix=0 && enebulyA(cnt)-jikiy=0 : dialog "a" : end loop redraw 1 return *tama_Key getkey tri,90 if tri=1 { if tricnt\15=0 : tama_tuika=1 if tama_tuika=1 { //弾丸追加するとき tama_tuika=0 //変数初期化 wesx(count)=jikix : wesy(count)=jikiy-5 : easx(count)=jikix : easy(count)=jikiy-5 : wesBx(count)=jikix : wesBy(count)=jikiy-5 : easBx(count)=jikix : easBy(count)=jikiy-5 : strx(count)=jikix : stry(count)=jikiy-5 : zigx(count)=jikix : zigy(count)=jikiy-5 //弾丸の最初の座標はプレイヤーの座標と同じ count++ //カウンタを進める(何個目の弾丸か数えるため) if count>bulmax-1 : count=0 //弾丸の最大同時存在数までカウンタが進んだら戻す } tricnt+1 }if tri=0 : tricnt=0 return *naname redraw 0 repeat wesmax //弾丸の最大同時存在数だけ繰り返す if wesy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 wesx(cnt)-=kakudW(0) wesy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,255: boxf wesx(cnt),wesy(cnt),wesx(cnt)+5,wesy(cnt)+10 if wesy(cnt)<-10 : wesy(cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easmax //弾丸の最大同時存在数だけ繰り返す if easy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 easx(cnt)+=kakudE(0) easy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf easx(cnt),easy(cnt),easx(cnt)+5,easy(cnt)+10 if easy(cnt)<-10 : easy(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat strmax //弾丸の最大同時存在数だけ繰り返す if stry(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 ;easx(cnt)+=kakudE stry(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf strx(cnt),stry(cnt),strx(cnt)+5,stry(cnt)+10 if stry(cnt)<-10 : stry(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat wesBmax //弾丸の最大同時存在数だけ繰り返す if wesBy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 wesBx(cnt)-=kakudW(1) wesBy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf wesBx(cnt),wesBy(cnt),wesBx(cnt)+5,wesBy(cnt)+10 if wesBy(cnt)<-10 : wesBy(cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easBmax //弾丸の最大同時存在数だけ繰り返す if easBy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 easBx(cnt)+=kakudE(1) easBy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf easBx(cnt),easBy(cnt),easBx(cnt)+5,easBy(cnt)+10 if easBy(cnt)<-10 : easBy(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop redraw 1 return *enemove if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 return *ebul_shot repeat enebulmax if enebulflgA(cnt)=0 : enebulflgA(cnt)=1 : enebulxA(cnt)=eneX : enebulyA(cnt)=eneY : ;break loop return *ebul_move repeat enebulmax if enebulflgA(cnt)=1{ enebulyA(cnt)+=4 if enebulyA(cnt)=480 : enebulflgA(cnt)=0 } loop return *ebul_put repeat enebulmax if enebulflgA(cnt)=1{ boxf enebulxA(cnt),enebulyA(cnt),enebulxA(cnt)+8,enebulyA(cnt)+8 } loop return ;redraw 1
なんか自機用のスクリプトと入れたら敵の方の弾が消えてしまっているんですが…



kinokawa

リンク

2022/4/19(Tue) 19:32:07|NO.96065


*ebul_shot repeat ebulmax if enebulflgA(cnt)=0 : enebulflgA(cnt)=1 : enebulxA(cnt)=eneX : enebulyA(cnt)=eneY : break loop return *ebul_move repeat ebulmax if enebulflgA(cnt)=1{ enebulyA(cnt)+=10 if enebulyA(cnt)>480 : enebulflgA(cnt)=0 } loop return *ebul_put repeat ebulmax if enebulflgA(cnt)=1{ boxf enebulxA(cnt),enebulyA(cnt),enebulxA(cnt)+8,enebulyA(cnt)+8 } loop return
変更部分を書きました、これで動くと思います



シューティングゲーム作成

リンク

2022/4/20(Wed) 15:24:38|NO.96070

なんか弾がチカチカしますね…



kinokawa

リンク

2022/4/20(Wed) 19:12:55|NO.96071

メインループ以外のredraw 0 とredraw 1 は削除してくださいー
ちらつきの原因になります
それとawaitはredraw 1のあとのほうがいいと思います



kinokawa

リンク

2022/4/21(Thu) 09:11:47|NO.96080

>hgimg3が必要なら別に入れても大丈夫ですし思いっきり改変しても問題ないですよ。
ありがとうございますー もしhgimg3が必要なら使わせていただきます。



シューティングゲーム作成

リンク

2022/4/21(Thu) 15:09:36|NO.96081

弾の動きを斜めにすることなく、縦なら縦、右下なら右下で固定しえきちんとした直線にするにはどうすればいいんですかねぇ



シューティングゲーム作成

リンク

2022/4/24(Sun) 22:22:19|NO.96117


/************************************************************************************************************************ *bulmax:弾薬の最大数,was(x,y,max):左側の弾,eas(x,y,max),右側の弾,lef(x,y,max):左に直進する弾,rig(x,y,max):右に直進する弾* *str(x,y,max):直進する弾,zig(x,y,max)* *************************************************************************************************************************/ screen 0,720,480 #define xcls0 color 0, 0, 0 : boxf 0, 0, 480, 480 #define xcls1 color 0, 30, 50 : boxf 480, 0 dim kakudE,2 : dim kakudW,2 kakudE(0)=2 : kakudE(1)=6 kakudW(0)=2 : kakudW(1)=6 bulmax=10 enemax=10 ebulmax=5 pllife=1000 : enelife=2000 wesmax=bulmax : easmax=bulmax : wesBmax=bulmax : easBmax=bulmax : strmax=bulmax : zigmax=bulmax jikix=360 : jikiy=480 dim wesx,bulmax : dim wesy,bulmax : dim easx,bulmax : dim easy,bulmax : dim wesBx,bulmax : dim wesBy,bulmax : dim easBx,bulmax : dim easBy,bulmax : dim strx,bulmax : dim stry,bulmax : dim zigx,bulmax : dim zigy,bulmax dim enebulx,3,ebulmax : dim enebuly,3,ebulmax : dim enebulflg,3,ebulmax : /*ebulmax=ebulmax*/ :eneX=360 : eneY=60 : mope=0 ;redraw 0 dim hit,5 *main repeat bulmax : wesy(cnt)=1000 : easy(cnt)=1000 : loop repeat ebulmaxA : enebulxA(cnt)=0 : enebulyA(cnt)=0 : enebulflgA(cnt)=0 :loop ;repeat ebulmax : enemxA(cnt)=1000 : enemyA(cnt)=1000 : loop : enebuladd=1 repeat redraw 0 color 0,0,0 : boxf color 255,128,0 : boxf eneX,eneY,eneX+60,eneY+100 ;xcls0 ;xcls1 color 0,255,128 : boxf jikix-15,jikiy,jikix+14,jikiy+45 repeat ebulmax if enebulflg(0,cnt)=1{ color rnd(256),rnd(256),rnd(256) : boxf enebulx(0,cnt),enebuly(0,cnt),enebulx(0,cnt)+8,enebuly(0,cnt)+8 } if enebulflg(1,cnt)=1{ color rnd(256),rnd(256),rnd(256) : boxf enebulx(1,cnt),enebuly(1,cnt),enebulx(1,cnt)+8,enebuly(1,cnt)+8 } if enebulflg(2,cnt)=1{ color rnd(256),rnd(256),rnd(256) : boxf enebulx(2,cnt),enebuly(2,cnt),enebulx(2,cnt)+8,enebuly(2,cnt)+8 } loop color 255,255,255 : pos 0,0 : mes pllife : mes enelife : repeat 5 : mes hit(cnt) : loop gosub *naname gosub *Move_Key gosub *tama_Key gosub *enemove gosub *ebul_move gosub *ebul_shot await 10 redraw 1 loop *Move_Key redraw 0 getkey hid,37 : getkey ue,38 : getkey mig,39 : getkey sit,40 if sit=1 { if sitcnt\1=0 : jikiy=limit(jikiy+5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 sitcnt+1 }if sit=0 : sitcnt=0 if ue=1 { if uecnt\1=0 : jikiy=limit(jikiy-5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 uecnt+1 }if ue=0 : uecnt=0 if mig=1 { if migcnt\1=0 : jikix=limit(jikix+5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 migcnt+1 }if mig=0 : migcnt=0 if hid=1 { if hidcnt\1=0 : jikix=limit(jikix-5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 hidcnt+1 }if hid=0 : hidcnt=0     //自機当たり判定ここから repeat ebulmax if enebulflg(0,cnt)=1 && (enebulx(0,cnt)-jikix)*(enebulx(0,cnt)-jikix)+(enebuly(0,cnt)-jikiy)*(enebuly(0,cnt)-jikiy)<800{ pllife-- } if enebulflg(1,cnt)=1 && (enebulx(1,cnt)-jikix)*(enebulx(1,cnt)-jikix)+(enebuly(1,cnt)-jikiy)*(enebuly(1,cnt)-jikiy)<800{ pllife-- } if enebulflg(2,cnt)=1 && (enebulx(2,cnt)-jikix)*(enebulx(2,cnt)-jikix)+(enebuly(2,cnt)-jikiy)*(enebuly(2,cnt)-jikiy)<800{ pllife-- } loop     //自機当たり判定ここまで redraw 1 return *tama_Key getkey tri,90 if tri=1 { if tricnt\15=0 : tama_tuika=1 if tama_tuika=1 { //弾丸追加するとき tama_tuika=0 //変数初期化 wesx(count)=jikix : wesy(count)=jikiy-5 : easx(count)=jikix : easy(count)=jikiy-5 : wesBx(count)=jikix : wesBy(count)=jikiy-5 : easBx(count)=jikix : easBy(count)=jikiy-5 : strx(count)=jikix : stry(count)=jikiy-5 : zigx(count)=jikix : zigy(count)=jikiy-5 //弾丸の最初の座標はプレイヤーの座標と同じ count++ //カウンタを進める(何個目の弾丸か数えるため) if count>bulmax-1 : count=0 //弾丸の最大同時存在数までカウンタが進んだら戻す } tricnt+1 }if tri=0 : tricnt=0 return *naname redraw 0 repeat wesmax //弾丸の最大同時存在数だけ繰り返す if wesy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 wesx(cnt)-=kakudW(0) wesy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,255: boxf wesx(cnt),wesy(cnt),wesx(cnt)+5,wesy(cnt)+10 //弾丸の表示 if wesy(cnt)<-10 : wesy(cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easmax //弾丸の最大同時存在数だけ繰り返す if easy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 easx(cnt)+=kakudE(0) easy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf easx(cnt),easy(cnt),easx(cnt)+5,easy(cnt)+10 //弾丸の表示 if easy(cnt)<-10 : easy(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat strmax //弾丸の最大同時存在数だけ繰り返す if stry(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 ;easx(cnt)+=kakudE stry(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf strx(cnt),stry(cnt),strx(cnt)+5,stry(cnt)+10 //弾丸の表示 if stry(cnt)<-10 : stry(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat wesBmax //弾丸の最大同時存在数だけ繰り返す if wesBy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 wesBx(cnt)-=kakudW(1) wesBy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf wesBx(cnt),wesBy(cnt),wesBx(cnt)+5,wesBy(cnt)+10 //弾丸の表示 if wesBy(cnt)<-10 : wesBy(cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easBmax //弾丸の最大同時存在数だけ繰り返す if easBy(cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 easBx(cnt)+=kakudE(1) easBy(cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: boxf easBx(cnt),easBy(cnt),easBx(cnt)+5,easBy(cnt)+10 //弾丸の表示 if easBy(cnt)<-10 : easBy(cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop redraw 1 return *enemove if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 //敵の当たり判定ここから repeat bulmax if wesy(cnt)!=1000 && (wesx-eneX)*(wesx-eneX)+(wesy-eneY)*(wesy-eneY)<2000{ enelife-=10 hit(0)=1 }else : hit(0)=0 if easy(cnt)!=1000 && (easx-eneX)*(easx-eneX)+(easy-eneY)*(easy-eneY)<2000{ enelife-=10 hit(1)=1 }else : hit(1)=0 if stry(cnt)!=1000 && (strx-eneX)*(strx-eneX)+(stry-eneY)*(stry-eneY)<2000{ enelife-=10 hit(2)=1 }else : hit(2)=0 if wesBy(cnt)!=1000 && (wesBx-eneX)*(wesBx-eneX)+(wesBy-eneY)*(wesBy-eneY)<2000{ enelife-=10 hit(3)=1 }else : hit(3)=0 if easBy(cnt)!=1000 && (easBx-eneX)*(easBx-eneX)+(easBy-eneY)*(easBy-eneY)<2000{ enelife-=10 hit(4)=1 }else : hit(4)=0 loop     //ここまで return *ebul_shot repeat ebulmax if enebulflg(0,cnt)=0 : enebulflg(0,cnt)=1 : enebulx(0,cnt)=eneX : enebuly(0,cnt)=eneY : break if enebulflg(1,cnt)=0 : enebulflg(1,cnt)=1 : enebulx(1,cnt)=eneX : enebuly(1,cnt)=eneY : break if enebulflg(2,cnt)=0 : enebulflg(2,cnt)=1 : enebulx(2,cnt)=eneX : enebuly(2,cnt)=eneY : break loop return *ebul_move redraw 0 repeat ebulmax if enebulflg(0,cnt)=1{ enebuly(0,cnt)+=4 if enebuly(0,cnt)>480 : enebulflg(0,cnt)=0 } if enebulflg(1,cnt)=1{ enebuly(1,cnt)+=4 : enebulx(1,cnt)+=4 if enebuly(1,cnt)>480 : enebulflg(1,cnt)=0 } if enebulflg(2,cnt)=1{ enebuly(2,cnt)+=4 : enebulx(2,cnt)-=4 if enebuly(2,cnt)>480 : enebulflg(2,cnt)=0 } loop redraw 1 return
当たり判定をもっと良いものにしたいのですが…



シューティングゲーム作成

リンク

2022/4/27(Wed) 16:27:59|NO.96143


/************************************************************************************************************************ *bulmax:弾薬の最大数,was(x,y,max):左側の弾,eas(x,y,max),右側の弾,lef(x,y,max):左に直進する弾,rig(x,y,max):右に直進する弾* *str(x,y,max):直進する弾,zig(x,y,max)* *************************************************************************************************************************/ screen 0,720,480 #define xcls0 color 0, 0, 0 : boxf 0, 0, 480, 480 #define xcls1 color 0, 30, 50 : boxf 480, 0 dim kakudE,2 : dim kakudW,2 kakudE(0)=2 : kakudE(1)=6 kakudW(0)=2 : kakudW(1)=6 bulmax=10 enemax=10 ebulmax=8 : ebul_spe=2 pllife=1000 : enelife=2000 wesmax=bulmax : easmax=bulmax : wesBmax=bulmax : easBmax=bulmax : strmax=bulmax : zigmax=bulmax jikix=360 : jikiy=480 dim pbulx,5,bulmax : dim pbuly,5,bulmax dim enebulx,3,ebulmax :: dim enebuly,3,ebulmax : dim enebulflg,3,ebulmax : dim enebulcnt,3,ebulmax :eneX=360 : eneY=60 : mope=0 ;redraw 0 dim hit,5 *main repeat bulmax : wesy(cnt)=1000 : easy(cnt)=1000 : loop repeat ebulmaxA : enebulxA(cnt)=0 : enebulyA(cnt)=0 : enebulflgA(cnt)=0 :loop ;repeat ebulmax : enemxA(cnt)=1000 : enemyA(cnt)=1000 : loop : enebuladd=1 repeat redraw 0 color 0,0,0 : boxf pos eneX-30,eneY-50 : color 0,128,256 : boxf eneX,eneY,eneX+60,eneY+100 ;xcls0 ;xcls1 pos jikix-15,jikiy-15 : color 255,0,255 : boxf jikix-15,jikiy,jikix+14,jikiy+45 repeat ebulmax if enebulflg(0,cnt)=1{ pos enebulx(0,cnt),enebuly(0,cnt) : : boxf enebulx(0,cnt),enebuly(0,cnt),enebulx(0,cnt)+8,enebuly(0,cnt)+8 } if enebulflg(1,cnt)=1{ pos enebulx(1,cnt),enebuly(1,cnt) : : boxf enebulx(1,cnt),enebuly(1,cnt),enebulx(1,cnt)+8,enebuly(1,cnt)+8 } if enebulflg(2,cnt)=1{ pos enebulx(2,cnt),enebuly(2,cnt) : : boxf enebulx(2,cnt),enebuly(2,cnt),enebulx(2,cnt)+8,enebuly(2,cnt)+8 } loop color 255,255,255 : pos 0,0 : mes pllife : mes enelife : repeat 5 : mes hit(cnt) : loop gosub *naname gosub *Move_Key gosub *tama_Key gosub *enemove gosub *ebul_move gosub *ebul_shot gosub *p_at await 10 redraw 1 loop *Move_Key redraw 0 getkey hid,37 : getkey ue,38 : getkey mig,39 : getkey sit,40 if sit=1 { if sitcnt\1=0 : jikiy=limit(jikiy+5,0,480) ;pos jikix-15,jikiy-15 : : celput 1 sitcnt+1 }if sit=0 : sitcnt=0 if ue=1 { if uecnt\1=0 : jikiy=limit(jikiy-5,0,480) ;pos jikix-15,jikiy-15 : : celput 1 uecnt+1 }if ue=0 : uecnt=0 if mig=1 { if migcnt\1=0 : jikix=limit(jikix+5,0,720) ;pos jikix-15,jikiy-15 : : celput 1 migcnt+1 }if mig=0 : migcnt=0 if hid=1 { if hidcnt\1=0 : jikix=limit(jikix-5,0,720) ;pos jikix-15,jikiy-15 : : celput 1 hidcnt+1 }if hid=0 : hidcnt=0 repeat ebulmax if enebulflg(0,cnt)=1 && (enebulx(0,cnt)-jikix)*(enebulx(0,cnt)-jikix)+(enebuly(0,cnt)-jikiy)*(enebuly(0,cnt)-jikiy)<800{ enebulflg(0,cnt)=0 pllife-- } if enebulflg(1,cnt)=1 && (enebulx(1,cnt)-jikix)*(enebulx(1,cnt)-jikix)+(enebuly(1,cnt)-jikiy)*(enebuly(1,cnt)-jikiy)<800{ enebulflg(1,cnt)=0 pllife-- } if enebulflg(2,cnt)=1 && (enebulx(2,cnt)-jikix)*(enebulx(2,cnt)-jikix)+(enebuly(2,cnt)-jikiy)*(enebuly(2,cnt)-jikiy)<800{ enebulflg(2,cnt)=0 pllife-- } loop redraw 1 return *tama_Key getkey tri,90 if tri=1 { if tricnt\15=0 : tama_tuika=1 if tama_tuika=1 { //弾丸追加するとき tama_tuika=0 //変数初期化 pbulx(0,count)=jikix : pbuly(0,count)=jikiy-5 : pbulx(1,count)=jikix : pbuly(1,count)=jikiy-5 : pbulx(2,count)=jikix : pbuly(2,count)=jikiy-5 : pbulx(3,count)=jikix : pbuly(3,count)=jikiy-5 : pbulx(4,count)=jikix : pbuly(4,count)=jikiy-5 //弾丸の最初の座標はプレイヤーの座標と同じ count++ //カウンタを進める(何個目の弾丸か数えるため) if count>bulmax-1 : count=0 //弾丸の最大同時存在数までカウンタが進んだら戻す } tricnt+1 }if tri=0 : tricnt=0 return *naname redraw 0 repeat wesmax //弾丸の最大同時存在数だけ繰り返す if pbuly(0,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 pbulx(0,cnt)-=kakudW(0) pbuly(0,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(0,cnt)-5,pbuly(0,cnt)-10 : color 255,255,255 : : boxf pbulx(0,cnt),pbuly(0,cnt),pbulx(0,cnt)+5,pbuly(0,cnt)+10 //弾丸の表示 if pbuly(0,cnt)<-10 : pbuly(0,cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easmax //弾丸の最大同時存在数だけ繰り返す if pbuly(1,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 pbulx(1,cnt)+=kakudE(0) pbuly(1,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(1,cnt)-5,pbuly(1,cnt)-10 : color 255,255,255 : : boxf pbulx(1,cnt),pbuly(1,cnt),pbulx(1,cnt)+5,pbuly(1,cnt)+10 //弾丸の表示 if pbuly(1,cnt)<-10 : pbuly(1,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat strmax //弾丸の最大同時存在数だけ繰り返す if pbuly(2,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 ;easx(cnt)+=kakudE pbuly(2,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(2,cnt)-5,pbuly(2,cnt)-10 : color 255,255,255 : : boxf pbulx(2,cnt),pbuly(2,cnt),pbulx(2,cnt)+5,pbuly(2,cnt)+10 //弾丸の表示 if pbuly(2,cnt)<-10 : pbuly(2,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat wesBmax //弾丸の最大同時存在数だけ繰り返す if pbuly(3,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 pbulx(3,cnt)-=kakudW(1) pbuly(3,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(3,cnt)-5,pbuly(3,cnt)-10 : color 255,255,255 : : boxf pbulx(3,cnt),pbuly(3,cnt),pbulx(3,cnt)+5,pbuly(3,cnt)+10 //弾丸の表示 if pbuly(3,cnt)<-10 : pbuly(3,cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easBmax //弾丸の最大同時存在数だけ繰り返す if pbuly(4,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 pbulx(4,cnt)+=kakudE(1) pbuly(4,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(4,cnt)-5,pbuly(4,cnt)-10 : color 255,255,255 : : boxf pbulx(4,cnt),pbuly(4,cnt),pbulx(4,cnt)+5,pbuly(4,cnt)+10 //弾丸の表示 if pbuly(4,cnt)<-10 : pbuly(4,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop redraw 1 return *enemove if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 repeat bulmax if pbuly(0,cnt)!=1000 && (pbulx(0,cnt)-eneX)*(pbulx(0,cnt)-eneX)+(pbuly(0,cnt)-eneY)*(pbuly(0,cnt)-eneY)<2000{ enelife-- : pbuly(0,cnt)=1000 hit(0)=1 }else : hit(0)=0 if pbuly(1,cnt)!=1000 && (pbulx(1,cnt)-eneX)*(pbulx(1,cnt)-eneX)+(pbuly(1,cnt)-eneY)*(pbuly(1,cnt)-eneY)<2000{ enelife-- : pbuly(1,cnt)=1000 hit(1)=1 }else : hit(1)=0 if pbuly(2,cnt)!=1000 && (pbulx(2,cnt)-eneX)*(pbulx(2,cnt)-eneX)+(pbuly(2,cnt)-eneY)*(pbuly(2,cnt)-eneY)<2000{ enelife-- : pbuly(2,cnt)=1000 hit(2)=1 }else : hit(2)=0 if pbuly(3,cnt)!=1000 && (pbulx(3,cnt)-eneX)*(pbulx(3,cnt)-eneX)+(pbuly(3,cnt)-eneY)*(pbuly(3,cnt)-eneY)<2000{ enelife-- : pbuly(3,cnt)=1000 hit(3)=1 }else : hit(3)=0 if pbuly(4,cnt)!=1000 && (pbulx(4,cnt)-eneX)*(pbulx(4,cnt)-eneX)+(pbuly(4,cnt)-eneY)*(pbuly(4,cnt)-eneY)<2000{ enelife-- : pbuly(4,cnt)=1000 hit(4)=1 }else : hit(4)=0 loop return *ebul_shot repeat ebulmax if enebulflg(0,cnt)=0{ enebulflg(0,cnt)=1 : enebulx(0,cnt)=eneX : enebuly(0,cnt)=eneY : break } if enebulflg(1,cnt)=0{ enebulflg(1,cnt)=1 : enebulx(1,cnt)=eneX : enebuly(1,cnt)=eneY : break } if enebulflg(2,cnt)=0{ enebulflg(2,cnt)=1 : enebulx(2,cnt)=eneX : enebuly(2,cnt)=eneY : break } loop return *ebul_move redraw 0 repeat ebulmax if enebulflg(0,cnt)=1{ enebuly(0,cnt)+=ebul_spe if enebuly(0,cnt)>480 : enebulflg(0,cnt)=0 } if enebulflg(1,cnt)=1{ enebuly(1,cnt)+=ebul_spe : enebulx(1,cnt)+=ebul_spe if enebuly(1,cnt)>480 : enebulflg(1,cnt)=0 } if enebulflg(2,cnt)=1{ enebuly(2,cnt)+=ebul_spe : enebulx(2,cnt)-=ebul_spe if enebuly(2,cnt)>480 : enebulflg(2,cnt)=0 } loop redraw 1 return *p_at repeat ebulmax loop return
なかなか敵のきれいな弾幕が出来上がりませんね…もしよろしければhgimg3を活用したこのスクリプトの改良方法を教えていただけたら嬉しいです。



kinokawa

リンク

2022/4/27(Wed) 19:57:09|NO.96145

>なかなか敵のきれいな弾幕が出来上がりませんね…もしよろしければ
>hgimg3を活用したこのスクリプトの改良方法を教えていただけたら嬉しいです。

私はきれいな弾幕になるというよりもどちらかというと
大量に弾幕を出しても処理が重くなりにくいという意味で書いたので

期待に沿うような弾幕はなかなか難しいかと思います

あと私はhgimg3初心者なので申し訳ないですが
教えるというレベルにはまだまだ達していません^^;



シューティングゲーム作成

リンク

2022/4/28(Thu) 16:27:05|NO.96151

>>96145
わかりました。私も自力で見つけていくつもりです。



シューティングゲーム作成

リンク

2022/5/25(Wed) 00:29:26|NO.96446

お久しぶりです。

/************************************************************************************************************************ *bulmax:弾薬の最大数,was(x,y,max):左側の弾,eas(x,y,max),右側の弾,lef(x,y,max):左に直進する弾,rig(x,y,max):右に直進する弾* *str(x,y,max):直進する弾,zig(x,y,max)* *************************************************************************************************************************/ /*celload "自機.png",1 celload "弾丸1.png",2 celload "ボスキャラ.png",3 celload "敵の弾.png",4 celload "アイテム1.png",5 celload "爆発(敵).png",6 celload "爆発2(敵).png",7 celload "爆発3(敵).png",8 celload "自機爆破.png",9*/ screen 0,720,480 #define xcls0 color 0, 0, 0 : boxf 0, 0, 480, 480 #define xcls1 color 0, 30, 50 : boxf 480, 0 sdim serifu,5,999 serifu(0)="「ここまで追いついたわ!あなたは私の先祖からの宿命の敵、今こそ観念なさい!」" : serifu(1)="「これはこれは恐ろしい。そなたの力もも我を脅かすほどにまで膨れ上がったか。だが、お前に我は\n倒せない!」" : serifu(2)="「それはどうかしら?私にはあなたの知らない力が眠っているはずよ!」" : serifu(3)="「ふっ、面白い。ならばその力を試してみようではないか!」" #include "hsp3util.as" #include "hgimg3.as" serifucnt=0 dim kakudE,2 : dim kakudW,2 kakudE(0)=2 : kakudE(1)=6 kakudW(0)=2 : kakudW(1)=6 bulmax=10 enemax=10 ebulmax=8 : ebul_spe=2 pllife=1000 : enelife=4500 wesmax=bulmax : easmax=bulmax : wesBmax=bulmax : easBmax=bulmax : strmax=bulmax : zigmax=bulmax jikix=360 : jikiy=480 dim pbulx,5,bulmax : dim pbuly,5,bulmax : dim itemex,4 dim enebulx,3,ebulmax : dim enebuly,3,ebulmax : dim enebulflg,3,ebulmax : dim enebulcnt,3,ebulmax :eneX=360 : eneY=60 : mope=0 pdeath=0 ;redraw 0 dim hit,5 *tex if serifucnt=0 : color 0,0,0 : boxf text 30 color 255,255,255 : emes serifu(serifucnt) gosub *okr *okr repeat getkey okuri,90 if okuri=1 : serifucnt++ : break await loop if serifucnt=4 : gosub *main gosub *tex *main repeat itemex : itemex(cnt)=0 : loop : itemcnt=1 repeat bulmax : wesy(cnt)=1000 : easy(cnt)=1000 : loop repeat ebulmaxA : enebulxA(cnt)=0 : enebulyA(cnt)=0 : enebulflgA(cnt)=0 :loop ;repeat ebulmax : enemxA(cnt)=1000 : enemyA(cnt)=1000 : loop : enebuladd=1 repeat redraw 0 color 0,0,0 : boxf pos eneX-30,eneY-50 : color 0,128,256 : boxf eneX,eneY,eneX+60,eneY+100 ;xcls0 ;xcls1 pos jikix-15,jikiy-15 : color 255,0,255 : boxf jikix-15,jikiy,jikix+14,jikiy+45 repeat ebulmax if enebulflg(0,cnt)=1{ pos enebulx(0,cnt),enebuly(0,cnt) : : boxf enebulx(0,cnt),enebuly(0,cnt),enebulx(0,cnt)+8,enebuly(0,cnt)+8 } if enebulflg(1,cnt)=1{ pos enebulx(1,cnt),enebuly(1,cnt) : : boxf enebulx(1,cnt),enebuly(1,cnt),enebulx(1,cnt)+8,enebuly(1,cnt)+8 } if enebulflg(2,cnt)=1{ pos enebulx(2,cnt),enebuly(2,cnt) : : boxf enebulx(2,cnt),enebuly(2,cnt),enebulx(2,cnt)+8,enebuly(2,cnt)+8 } loop color 255,255,255 : pos 0,0 : mes pllife : mes enelife : repeat 5 : mes hit(cnt) : loop : mes eneX : mes eneY gosub *naname gosub *Move_Key gosub *tama_Key gosub *enemove gosub *ebul_move gosub *ebul_shot if pdeath=1 : break await 1 redraw 1 loop *Move_Key redraw 0 getkey hid,37 : getkey ue,38 : getkey mig,39 : getkey sit,40 if sit=1 { if sitcnt\1=0 : jikiy=limit(jikiy+5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 sitcnt+1 }if sit=0 : sitcnt=0 if ue=1 { if uecnt\1=0 : jikiy=limit(jikiy-5,0,480) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 uecnt+1 }if ue=0 : uecnt=0 if mig=1 { if migcnt\1=0 : jikix=limit(jikix+5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 migcnt+1 }if mig=0 : migcnt=0 if hid=1 { if hidcnt\1=0 : jikix=limit(jikix-5,0,720) ;pos jikix-15,jikiy-15 : color 0,255,0: gmode 4,,,255 : celput 1 hidcnt+1 }if hid=0 : hidcnt=0 repeat ebulmax if enebulflg(0,cnt)=1 && (enebulx(0,cnt)-jikix)*(enebulx(0,cnt)-jikix)+(enebuly(0,cnt)-jikiy)*(enebuly(0,cnt)-jikiy)<100{ randomize : pllife-=rnd(5)+5 if plife<0 : pdeath=1 } if enebulflg(1,cnt)=1 && (enebulx(1,cnt)-jikix)*(enebulx(1,cnt)-jikix)+(enebuly(1,cnt)-jikiy)*(enebuly(1,cnt)-jikiy)<100{ randomize : pllife-=rnd(5)+5 if plife<0 : pdeath=1 } if enebulflg(2,cnt)=1 && (enebulx(2,cnt)-jikix)*(enebulx(2,cnt)-jikix)+(enebuly(2,cnt)-jikiy)*(enebuly(2,cnt)-jikiy)<100{ randomize : pllife-=rnd(5)+5 if plife<0 : pdeath=1 } loop redraw 1 return *tama_Key getkey tri,90 if tri=1 { if tricnt\15=0 : tama_tuika=1 if tama_tuika=1 { //弾丸追加するとき tama_tuika=0 //変数初期化 pbulx(0,count)=jikix : pbuly(0,count)=jikiy-5 : pbulx(1,count)=jikix : pbuly(1,count)=jikiy-5 : pbulx(2,count)=jikix : pbuly(2,count)=jikiy-5 : pbulx(3,count)=jikix : pbuly(3,count)=jikiy-5 : pbulx(4,count)=jikix : pbuly(4,count)=jikiy-5 //弾丸の最初の座標はプレイヤーの座標と同じ count++ //カウンタを進める(何個目の弾丸か数えるため) if count>bulmax-1 : count=0 //弾丸の最大同時存在数までカウンタが進んだら戻す } tricnt+1 }if tri=0 : tricnt=0 return *naname redraw 0 repeat wesmax //弾丸の最大同時存在数だけ繰り返す if pbuly(0,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 pbulx(0,cnt)-=kakudW(0) pbuly(0,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(0,cnt)-5,pbuly(0,cnt)-10 : color 255,255,255 : : boxf pbulx(0,cnt),pbuly(0,cnt),pbulx(0,cnt)+5,pbuly(0,cnt)+10;circle wesx(cnt)-5,wesy(cnt)-5,wesx(cnt)+5,wesy(cnt)+5 //弾丸の表示 if pbuly(0,cnt)<-10 : pbuly(0,cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easmax //弾丸の最大同時存在数だけ繰り返す if pbuly(1,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 pbulx(1,cnt)+=kakudE(0) pbuly(1,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(1,cnt)-5,pbuly(1,cnt)-10 : color 255,255,255 : : boxf pbulx(1,cnt),pbuly(1,cnt),pbulx(1,cnt)+5,pbuly(1,cnt)+10;circle easx(cnt)-5,easy(cnt)-5,easx(cnt)+5,easy(cnt)+5 //弾丸の表示 if pbuly(1,cnt)<-10 : pbuly(1,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat strmax //弾丸の最大同時存在数だけ繰り返す if pbuly(2,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 ;easx(cnt)+=kakudE pbuly(2,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(2,cnt)-5,pbuly(2,cnt)-10 : color 255,255,255 : : boxf pbulx(2,cnt),pbuly(2,cnt),pbulx(2,cnt)+5,pbuly(2,cnt)+10;circle easx(cnt)-5,easy(cnt)-5,easx(cnt)+5,easy(cnt)+5 //弾丸の表示 if pbuly(2,cnt)<-10 : pbuly(2,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop repeat wesBmax //弾丸の最大同時存在数だけ繰り返す if pbuly(3,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudW=rnd(36)-18 pbulx(3,cnt)-=kakudW(1) pbuly(3,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(3,cnt)-5,pbuly(3,cnt)-10 : color 255,255,255 : : boxf pbulx(3,cnt),pbuly(3,cnt),pbulx(3,cnt)+5,pbuly(3,cnt)+10;circle wesx(cnt)-5,wesy(cnt)-5,wesx(cnt)+5,wesy(cnt)+5 //弾丸の表示 if pbuly(3,cnt)<-10 : pbuly(3,cnt)=1000 //画面外に出た時に消す cntte=cnt } loop repeat easBmax //弾丸の最大同時存在数だけ繰り返す if pbuly(4,cnt)!=1000 {//弾丸が発射された後のとき randomize ;kakudE=rnd(36)-18 pbulx(4,cnt)+=kakudE(1) pbuly(4,cnt)-=10 //弾丸を上に向かって進ませる color 0,255,0: pos pbulx(4,cnt)-5,pbuly(4,cnt)-10 : color 255,255,255 : : boxf pbulx(4,cnt),pbuly(4,cnt),pbulx(4,cnt)+5,pbuly(4,cnt)+10;circle easx(cnt)-5,easy(cnt)-5,easx(cnt)+5,easy(cnt)+5 //弾丸の表示 if pbuly(4,cnt)<-10 : pbuly(4,cnt)=1000 //画面外に出た時に消す cnttw=cnt } loop redraw 1 return *enemove if mope=0{ if mop0cnt\5=0 : eneX=eneX+5 : eneY=eneY+5 : mop0int++ mop0cnt++ if mop0int=30 : mope=1 }if mope!=0 : mop0int=0 : mop0cnt=0 if mope=1{ if mop1cnt\5=0 : eneX=eneX-5 : eneY=eneY-5 : mop1int++ mop1cnt++ if mop1int=30 : mope=2 }if mope!=1 : mop1int=0 : mop1cnt=0 if mope=2{ if mop2cnt\5=0 : eneX=eneX-5 : eneY=eneY+5 : mop2int++ mop2cnt++ if mop2int=30 : mope=3 }if mope!=2 : mop2int=0 : mop2cnt=0 if mope=3{ if mop3cnt\5=0 : eneX=eneX+5 : eneY=eneY-5 : mop3int++ mop3cnt++ if mop3int=30 : mope=0 }if mope!=3 : mop3int=0 : mop3cnt=0 if enelife<3000 && mope=0 : mope=4 if enelife<3000 && mope=1 : mope=4 if enelife<3000 && mope=2 : mope=4 if enelife<3000 && mope=3 : mope=4 if mope=4{ if eneX>60 { eneX-- ;if eneX=360 && eneY=60 : mope=5 } if eneY>60{ eneY-- ;if eneX=360 && eneY=60 : mope=5 } if eneX<60 { eneX++ ;if eneX=360 && eneY=60 : mope=5 } if eneY<60{ eneY++ ;if eneX=360 && eneY=60 : mope=5 } if eneX=60 : eceX=1 if eneY=60 : eceY=1 if eceX=1 && eceY=1 : mope=5 : ebul_spe=4 :eceX=0 : eceY=0 } if mope=5{ if mop5cnt\3=0 : eneX=eneX+6 : mop5int++ if mop5int=100 : mope=6 }if mope!=5 : mop5int=0 : mop5cnt=0 if mope=6{ if mop6cnt\3=0 : eneX=eneX-6 : mop6int++ if mop6int=100 : mope=5 }if mope!=6 : mop6int=0 : mop6cnt=0 if enelife<2000 && mope=5 : mope=7 if enelife<2000 && mope=6 : mope=7 if mope=7{ if eneX>300 { eneX-- ;if eneX=360 && eneY=60 : mope=5 } if eneY>60{ eneY-- ;if eneX=360 && eneY=60 : mope=5 } if eneX<300 { eneX++ ;if eneX=360 && eneY=60 : mope=5 } if eneY<60{ eneY++ ;if eneX=360 && eneY=60 : mope=5 } if eneX=300 : eceX=1 if eneY=60 : eceY=1 if eceX=1 && eceY=1 : mope=8 : ebul_spe=12 : ebulmax=16 : dim enebulx,3,ebulmax : dim enebuly,3,ebulmax : dim enebulflg,3,ebulmax : dim enebulcnt,3,ebulmax } if mope=8{ if mop8cnt\12=0 : eneX=eneX : eneY=eneY+6 :mop8int++ if mop8int=20 : mope=9 }if mope!=8 : mop8int=0 : mop8cnt=0 if mope=9{ if mop9cnt\12=0 : eneX=eneX+6 : eneY=eneY :mop9int++ if mop9int=20 : mope=10 }if mope!=9 : mop9int=0 : mop9cnt=0 if mope=10{ if mop10cnt\12=0 : eneX=eneX : eneY=eneY-6 :mop10int++ if mop10int=20 : mope=11 }if mope!=10 : mop10int=0 : mop10cnt=0 if mope=11{ if mop11cnt\12=0 : eneX=eneX-6 : eneY=eneY :mop11int++ if mop11int=20 : mope=8 }if mope!=11 : mop11int=0 : mop11cnt=0 if enelife<1500 && mope=8 : mope=12 : eceX=1 : eceY=1 if enelife<1500 && mope=9 : mope=12 : eceX=1 : eceY=1 if enelife<1500 && mope=10 : mope=12 : eceX=1 : eceY=1 if enelife<1500 && mope=11 : mope=12 : eceX=1 : eceY=1 if mope=12{ if eneX>360 { eneX-- ;if eneX=360 && eneY=60 : mope=5 } if eneY>60{ eneY-- ;if eneX=360 && eneY=60 : mope=5 } if eneX<360 { eneX++ ;if eneX=360 && eneY=60 : mope=5 } if eneY<60{ eneY++ ;if eneX=360 && eneY=60 : mope=5 } if eneX=360 : eceX=1 if eneY=60 : eceY=1 if eceX=1 && eceY=1 : mope=13 : ebul_spe=20 : ebulmax=16 } if mope=13{ if mop13cnt\3=0 : eneX=eneX+5 : eneY=eneY+5 : mop13int++ mop0cnt++ if mop13int=30 : mope=14 }if mope!=13 : mop13int=0 : mop13cnt=0 if mope=14{ if mop14cnt\3=0 : eneX=eneX-5 : eneY=eneY-5 : mop14int++ mop14cnt++ if mop14int=30 : mope=15 }if mope!=14 : mop14int=0 : mop14cnt=0 if mope=15{ if mop15cnt\3=0 : eneX=eneX-5 : eneY=eneY+5 : mop15int++ mop15cnt++ if mop15int=30 : mope=16 }if mope!=15 : mop15int=0 : mop15cnt=0 if mope=16{ if mop16cnt\3=0 : eneX=eneX+5 : eneY=eneY-5 : mop16int++ mop16cnt++ if mop16int=30 : mope=13 }if mope!=16 : mop16int=0 : mop16cnt=0 repeat bulmax if pbuly(0,cnt)!=1000 && (pbulx(0,cnt)-eneX)*(pbulx(0,cnt)-eneX)+(pbuly(0,cnt)-eneY)*(pbuly(0,cnt)-eneY)<2000{ randomize : enelife-=rnd(8)+8 : pbuly(0,cnt)=1000 hit(0)=1 }else : hit(0)=0 if pbuly(1,cnt)!=1000 && (pbulx(1,cnt)-eneX)*(pbulx(1,cnt)-eneX)+(pbuly(1,cnt)-eneY)*(pbuly(1,cnt)-eneY)<2000{ randomize : enelife-=rnd(8)+8 : pbuly(1,cnt)=1000 hit(1)=1 }else : hit(1)=0 if pbuly(2,cnt)!=1000 && (pbulx(2,cnt)-eneX)*(pbulx(2,cnt)-eneX)+(pbuly(2,cnt)-eneY)*(pbuly(2,cnt)-eneY)<2000{ randomize : enelife-=rnd(8)+8 : pbuly(2,cnt)=1000 hit(2)=1 }else : hit(2)=0 if pbuly(3,cnt)!=1000 && (pbulx(3,cnt)-eneX)*(pbulx(3,cnt)-eneX)+(pbuly(3,cnt)-eneY)*(pbuly(3,cnt)-eneY)<2000{ randomize : enelife-=rnd(8)+8 : pbuly(3,cnt)=1000 hit(3)=1 }else : hit(3)=0 if pbuly(4,cnt)!=1000 && (pbulx(4,cnt)-eneX)*(pbulx(4,cnt)-eneX)+(pbuly(4,cnt)-eneY)*(pbuly(4,cnt)-eneY)<2000{ randomize : enelife-=rnd(8)+8 : pbuly(4,cnt)=1000 hit(4)=1 }else : hit(4)=0 loop return *ebul_shot repeat ebulmax if enebulflg(0,cnt)=0{ enebulflg(0,cnt)=1 : enebulx(0,cnt)=eneX : enebuly(0,cnt)=eneY : break } if enebulflg(1,cnt)=0{ enebulflg(1,cnt)=1 : enebulx(1,cnt)=eneX : enebuly(1,cnt)=eneY : break } if enebulflg(2,cnt)=0{ enebulflg(2,cnt)=1 : enebulx(2,cnt)=eneX : enebuly(2,cnt)=eneY : break } loop return *ebul_move redraw 0 repeat ebulmax if enebulflg(0,cnt)=1{ enebuly(0,cnt)+=ebul_spe if enebuly(0,cnt)>480 : enebulflg(0,cnt)=0 } if enebulflg(1,cnt)=1{ enebuly(1,cnt)+=ebul_spe : enebulx(1,cnt)+=ebul_spe if enebuly(1,cnt)>480 : enebulflg(1,cnt)=0 } if enebulflg(2,cnt)=1{ enebuly(2,cnt)+=ebul_spe : enebulx(2,cnt)-=ebul_spe if enebuly(2,cnt)>480 : enebulflg(2,cnt)=0 } loop redraw 1 return *p_death if pdeath=1{ color 0,0,0 : boxf pos eneX-30,eneY-50 : color 0,128,256 : boxf eneX,eneY,eneX+60,eneY+100 ;xcls0 ;xcls1 repeat 32 pos jikix-15,jikiy-15 : color 255,0,255 : boxf jikix-15,jikiy,jikix+15,jikiy+15 color 0,0,0 : boxf jikix-15,jikiy-15,jikix+19,jikiy+30 await 16 pos jikix-15,jikiy-15 : color 128,128,0 : boxf jikix-15,jikiy,jikix+15,jikiy+15 await 16 loop end }
体力の値(plife)が0以下になったら下の方にあるゲームオーバーのスクリプトに移動させたいのですがどこをどのように変えればいいのでしょうか。



kinokawa

リンク

2022/5/26(Thu) 13:34:43|NO.96461

>体力の値(plife)が0以下になったら下の方にある
>ゲームオーバーのスクリプトに移動させたいのですが
>どこをどのように変えればいいのでしょうか。

質問の答えにはなっていないかもしれませんが
まずは

randomize : pllife-=rnd(5)+5
if plife<0 : pdeath=1

のところを

randomize : pllife-=rnd(5)+5
if pllife<0 : pdeath=1

に変更したほうがいいみたいですー



シューティングゲーム作成

リンク

2022/5/26(Thu) 17:30:52|NO.96464

ありがとうございます!



シューティングゲーム作成

リンク

2022/5/27(Fri) 17:10:53|NO.96474

クリアまでの時間を図る機能がほしいのですが…



zrs90(5さい)

リンク

2022/5/27(Fri) 17:53:48|NO.96475

まずはサイト内検索で、時間計測 で検索。
...で良いんじゃないでしょうか?


ゲームスタート時の時間を変数1に記録
ゲーム終了時点の時間を変数2に記録
変数2から変数1を引けば、経過時間出ませんか?

例えば、エクセルとかだと、時間を数値で
持っているので、この数値を最後に時間に変換して
表示させればok。

先に言っておきますが
ゲーム内で、ストップウォッチのように
常時カウント表示させるのは、ゲームの処理や
表示系をいじらないとダメなので
私では無理です。



アイドル

リンク

2022/5/28(Sat) 04:56:13|NO.96480

どうもこんんいちは同じSTG製作者です

>体力の値(plife)が0以下になったら下の方にあるゲームオーバーのスクリプトに移動させたいのですがどこをどのように変えればいいのでしょうか。
全てのソースに言えるんですが、もうちょっと小さいソースのほうが回答早くなると思います!
(これだけ行が長いとどこを見てほしいのかわかりにくい)

>クリアまでの時間を図る機能がほしい
これは普通に変数に足し算ではだめでしょうか
私の方でもソースを公開しているのでそちらも参考になるかと



ONION software Copyright 1997-2023(c) All rights reserved.