|
 |
|
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

| |
|
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個分が数珠繋がりになりなした…シューティングゲームによくあるような連続して弾が出続けるというのを期待したのですが…
|
|
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
>シューティングゲームによくあるような
できればどんなシューティングゲームなのか教えていただきたいです
|
|
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
あなたのスクリプトを試したんですがなんか途中からとぎれとぎれになっちゃいました…
|
|
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
なんか自機用のスクリプトと入れたら敵の方の弾が消えてしまっているんですが…

| |
|
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
なんか弾がチカチカしますね…
|
|
2022/4/20(Wed) 19:12:55|NO.96071
メインループ以外のredraw 0 とredraw 1 は削除してくださいー
ちらつきの原因になります
それとawaitはredraw 1のあとのほうがいいと思います
|
|
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を活用したこのスクリプトの改良方法を教えていただけたら嬉しいです。

| |
|
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以下になったら下の方にあるゲームオーバーのスクリプトに移動させたいのですがどこをどのように変えればいいのでしょうか。

| |
|
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
クリアまでの時間を図る機能がほしいのですが…
|
|
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以下になったら下の方にあるゲームオーバーのスクリプトに移動させたいのですがどこをどのように変えればいいのでしょうか。
全てのソースに言えるんですが、もうちょっと小さいソースのほうが回答早くなると思います!
(これだけ行が長いとどこを見てほしいのかわかりにくい)
>クリアまでの時間を図る機能がほしい
これは普通に変数に足し算ではだめでしょうか
私の方でもソースを公開しているのでそちらも参考になるかと
|
|