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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0126
リュウこの弾幕の評価を付けてください6解決


リュウ

リンク

2014/1/26(Sun) 16:42:49|NO.59516

タイトル通りです。
とりあえず今ある知識を活用して弾幕作ってみました。
効率よく処理するとかはまだよくわかんないので、
スクリプト中で改善すべき所がありましたら
教えてください。お願いします。

//乱数の初期化 randomize //画面初期化 screen 0,400,500 //仮想画面読み込み buffer 1 color 0,255,0:boxf color 0,0,0 mes"▲" color 255,0,0 mes"●" font msgothic, 64,1 color 0,0,255 mes"●" gsel 0 //変数の宣言 frame = 0 jiki_x = 200.0 jiki_y = 300.0 shot_max = 500 ddim e_shot,2,8,shot_max //メインループ開始 *main redraw 0 color 255,255,255:boxf //自機の移動 stick k,31 if(k&1){ jiki_x-=3 if(k&16):jiki_x+=1.5 } if(k&2){ jiki_y-=3 if(k&16):jiki_y+=1.5 } if(k&4){ jiki_x+=3 if(k&16):jiki_x-=1.5 } if(k&8){ jiki_y+=3 if(k&16):jiki_y-=1.5 } if(k&128):end if(jiki_x>400.0-8.0):jiki_x = 400.0-8.0 if(jiki_x<0.0+8.0):jiki_x = 0.0+8.0 if(jiki_y>500.0-8.0):jiki_y = 500.0-8.0 if(jiki_y<0.0+8.0):jiki_y = 0.0+8.0 //弾の出現 if(frame\30==19){ g = 6 trnd = 0.01*rnd(3141) repeat g t = m_pi*2*cnt/g+frame gosub*shot_search e_shot(1,0,shot_number) = 1.0 e_shot(1,1,shot_number) = 200.0 e_shot(1,2,shot_number) = 200.0 e_shot(1,3,shot_number) = cos(t) * 3.0 e_shot(1,4,shot_number) = sin(t) * 3.0 loop } //小弾の出現 if(frame\150=49){ g1 = 30 trnd = 0.01*rnd(3142) repeat g1 t1 = m_pi*2*cnt/g1+trnd gosub*shot_a e_shot(0,0,shot_n) = 1.0 e_shot(0,1,shot_n) = 200.0 e_shot(0,2,shot_n) = 200.0 e_shot(0,3,shot_n) = cos(t1) * 3.0 e_shot(0,4,shot_n) = sin(t1) * 3.0 e_shot(0,5,shot_n) = 0.0 loop } //弾の移動 repeat shot_max e_shot(1,1,cnt)+=e_shot(1,3,cnt) e_shot(1,2,cnt)+=e_shot(1,4,cnt) e_shot(0,1,cnt)+=e_shot(0,3,cnt) e_shot(0,2,cnt)+=e_shot(0,4,cnt) //小弾の下降処理 if(e_shot(0,5,cnt)==50.0){ e_shot(0,3,cnt) = 0.0 e_shot(0,4,cnt) = 0.0 if(e_shot(0,3,cnt) = 0.0 & e_shot(0,4,cnt) = 0.0){ e_shot(0,3,cnt) = -1.0+rnd(4) e_shot(0,4,cnt) = 3.0 } } if(e_shot(1,1,cnt)>400.0+50.0||e_shot(1,2,cnt)>500.0+50.0||e_shot(1,1,cnt)<0.0-50.0||e_shot(1,2,cnt)<0.0-50.0): e_shot(1,0,cnt)=0.0 if(e_shot(0,1,cnt)>400.0+8.0||e_shot(0,2,cnt)>500.0+8.0||e_shot(0,1,cnt)<0.0-8.0||e_shot(0,2,cnt)<0.0-8.0): e_shot(0,0,cnt)=0.0 e_shot(0,5,cnt)++ loop //あたり判定 repeat shot_max //大弾 ex = e_shot(1,1,cnt)-jiki_x : ey = e_shot(1,2,cnt)-jiki_y ex*=ex : ey*=ey //小弾 e_x = e_shot(0,1,cnt)-jiki_x : e_y = e_shot(0,2,cnt)-jiki_y e_x*=e_x : e_y*=e_y if(ex+ey < 256.0)or(e_x+e_y) < 64.0{ end } loop //自機の描画 color 0,255,0 pos jiki_x-8,jiki_y-8 gmode 4,16,16,255 gcopy 1,0,0 //敵弾の描画 repeat shot_max if(e_shot(1,0,cnt)==1.0){ pos e_shot(1,1,cnt)-32,e_shot(1,2,cnt)-32 color 0,255,0 gmode 4,64,64,255 gcopy 1,0,35 } if(e_shot(0,0,cnt)==1.0){ pos e_shot(0,1,cnt)-8,e_shot(0,2,cnt)-8 color 0,255,0 gmode 4,16,18,255 gcopy 1,0,16 } loop redraw 1 wait 1 frame++ goto*main //敵弾(大)の番号の検索 *shot_search shot_number = -1 repeat shot_max if(e_shot(1,0,cnt)!1.0):shot_number = cnt:break loop return //敵弾(小)の番号の検索 *shot_a shot_n = -1 repeat shot_max if(e_shot(0,0,cnt)!1.0):shot_n = cnt:break loop return



この記事に返信する


新入り

リンク

2014/1/26(Sun) 16:49:10|NO.59517

処理に関しては自分も青二才なのでなんとも言えませんが、これ画面上部がほぼ安置と言ってもいいくらい楽じゃないですかね。
上に行くまで少し苦労しますが、到達してしまえば後はもう青球を避けるだけのゲームになってしまいます。
逆に画面下部は、弾が方向転換した時点ですでに画面の3/4の位置にいるので、結構シビアです。
ランダムな方向転換がダメとは言いませんが、(赤球の)全てを画面下に向けるのではなく、画面の全体にばらしたほうがバランスが良いと思います。
自分がそもそもSTGがあまり得意じゃないこともありますが・・・。



リュウ

リンク

2014/1/26(Sun) 17:18:50|NO.59518

本当でしたねw
上部安置になっていたのに言われてから気づきました;
赤弾を円形に発射してから画面全体にばらまくように変更しました。
下のソースを

//小弾の下降処理
のところに上書きしてください。

//小弾の移動処理 if(e_shot(0,5,cnt)==50.0){ e_shot(0,3,cnt) = 0.0 e_shot(0,4,cnt) = 0.0 if(e_shot(0,3,cnt) = 0.0 & e_shot(0,4,cnt) = 0.0){ e_shot(0,3,cnt) = -1.0+rnd(5) e_shot(0,4,cnt) = -3.0+rnd(6) if(e_shot(0,3,cnt)=0.0)or(e_shot(0,4,cnt)=0.0){ e_shot(0,3,cnt) = -2.0 e_shot(0,4,cnt) = 3.0 } } }
これで上部安置はなくなる…筈です。



ZAP

リンク

2014/1/26(Sun) 17:55:22|NO.59519

自機を正確に狙う弾は1発もないのですね。
それを混ぜると弾幕に殺意が感じられていいかも。



新入り

リンク

2014/1/26(Sun) 18:15:47|NO.59520

赤球と青球の描画は分けたほうがいいかも。
青球の下に赤球が隠れることがあって、いきなり出てくる赤球にやられる可能性が。


repeat shot_max if(e_shot(1,0,cnt)==1.0){ pos e_shot(1,1,cnt)-32,e_shot(1,2,cnt)-32 color 0,255,0 gmode 4,64,64,255 gcopy 1,0,35 } loop repeat shot_max if(e_shot(0,0,cnt)==1.0){ pos e_shot(0,1,cnt)-8,e_shot(0,2,cnt)-8 color 0,255,0 gmode 4,16,18,255 gcopy 1,0,16 } loop



ミント

リンク

2014/1/26(Sun) 23:07:27|NO.59523

ソース内容は見てないけど、一番左上に行くとゲームが終わります。
もし仕様だったらごんよ〜。

 評価
いきなし赤弾の起動がかわってびびった。
実記では音があるんだろうけど、音があっても厳しいかも?
へにょりレーザーよりタチ悪そうな気がするのである程度予測可能な範囲のようないい気がします。

ソースコードは・・う〜ん時間があるときに見れたら見たいなー・・・(必死に不具合と格闘中



リュウ

リンク

2014/2/2(Sun) 21:34:48|NO.59621

皆さんありがとうございました^^



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