被弾した後、リプレイするために自機の座標と、各フラグを初期値に戻す作業をしました。
これでもきちんと動くことには動くのですが、自機が、(250,400)の座標のときに被弾すると
上手くいきません。直した後が同じ値になるからかなとも考えたのですが、他の敵と敵弾の
フラグは0にしているので、あたっているわけではないと思うのですが…
わからないので教えて下さい。
あと、メインループのあとの処理が変になってるとおもうので、そこも修正できるようなら
ご指摘お願いします。
;乱数初期化 randomize ;画面作成 screen 0,500,500 title "卒業レポート用" ;変数の確保 jiki_x = 250.0 jiki_y = 400.0 enemy_max = 500 ;自機狙い弾の敵と弾 dim enemy_f,enemy_max ddim enemy_x,enemy_max ddim enemy_y,enemy_max dim e_shot_f,enemy_max ddim e_shot_x,enemy_max ddim e_shot_y,enemy_max ddim e_shot_vx,enemy_max ddim e_shot_vy,enemy_max ;円形弾幕の敵と弾 dim enemy_f2,enemy_max dim enemy_type,enemy_max ddim enemy_x2,enemy_max ddim enemy_vx2,enemy_max ddim enemy_y2,enemy_max dim e_shot_f2,enemy_max ddim e_shot_x2,enemy_max ddim e_shot_y2,enemy_max ddim e_shot_vx2,enemy_max ddim e_shot_vy2,enemy_max frame = 0 ;メインループ *main ;画面の塗りつぶし color 255,255,255 : boxf ;キー入力取得 stick k,15 if k&1:jiki_x-2.0 if k&2:jiki_y-2.0 if k&4:jiki_x+2.0 if k&8:jiki_y+2.0 if k = 128:end ;画面外に出ないようにする処理 if jiki_x>492:jiki_x = 492.0 if jiki_x<8:jiki_x = 8.0 if jiki_y>492:jiki_y = 492.0 if jiki_y<8:jiki_y = 8.0 ;三角の敵出現 if frame\60 = 1 : gosub*enemy_search ;丸の敵出現 if frame\160 = 1 : gosub*enemy_search2 ;自機狙い弾弾発射 repeat enemy_max if enemy_y(cnt) = 100.0{ enemy_num=cnt gosub*e_shot_search } loop ;円形弾幕発射 repeat enemy_max if enemy_x2(cnt) = 250.0 or enemy_x2(cnt) = 260.0{ e_number = cnt gosub *circle_shot_search } loop ;当たり判定 repeat enemy_max ax = jiki_x-enemy_x(cnt) : ay = jiki_y-enemy_y(cnt) ax2 = jiki_x-e_shot_x(cnt) : ay2 = jiki_y-e_shot_y(cnt) ax3 = jiki_x-enemy_x2(cnt) : ay3 = jiki_y-enemy_y2(cnt) ax4 = jiki_x-e_shot_x2(cnt) : ay4 = jiki_y-e_shot_y2(cnt) ax = ax*ax : ay = ay*ay ax2 = ax2*ax2 : ay2 = ay2*ay2 ax3 = ax3*ax3 : ay3 = ay3*ay3 ax4 = ax4*ax4 : ay4 = ay4*ay4 if ax+ay<=16.0 or ax2+ay2<=16.0 or ax3+ay3<=16.0 or ax4+ay4<=16.0{ goto*game_end } loop ;移動と描画 repeat enemy_max if enemy_f(cnt) = 1{ enemy_y(cnt) + 2.0 color 255,0,0 pos enemy_x(cnt)-8.0,enemy_y(cnt)-8.0 mes"▼" } if enemy_y(cnt)>500.0:enemy_f(cnt)=0 if enemy_f2(cnt) = 1{ enemy_x2(cnt)+enemy_vx2(cnt) color 255,0,255 pos enemy_x2(cnt)-8.0,enemy_y2(cnt)-8.0 mes"●" } if e_shot_f(cnt) = 1{ e_shot_x(cnt) = e_shot_x(cnt) + e_shot_vx(cnt) e_shot_y(cnt) = e_shot_y(cnt) + e_shot_vy(cnt) color 255,0,0 pos e_shot_x(cnt)-8.0,e_shot_y(cnt)-8.0 mes"弾" } if e_shot_f2(cnt) = 1{ e_shot_x2(cnt) = e_shot_x2(cnt) + e_shot_vx2(cnt) e_shot_y2(cnt) = e_shot_y2(cnt) + e_shot_vy2(cnt) color 255,,255 pos e_shot_x2(cnt)-8,e_shot_y2(cnt)-8 mes"★" } if e_shot_x(cnt)>500.0 or e_shot_x(cnt)<0.0 or e_shot_y(cnt)>500.0 or e_shot_y(cnt)<0.0 : e_shot_f(cnt) = 0 if e_shot_x2(cnt)>500.0 or e_shot_x2(cnt)<0.0 or e_shot_y2(cnt)>500.0 or e_shot_y2(cnt)<0.0 : e_shot_f2(cnt) = 0 loop ;自機描画 color 0,0,255 pos jiki_x-8.0,jiki_y-8.0 mes"▲" redraw 1 redraw 0 await 7 frame++ goto*main ;三角の敵の検索 *enemy_search repeat enemy_max if enemy_f(cnt) =0{ enemy_f(cnt) = 1 enemy_x(cnt) = 1.0+rnd(500) enemy_y(cnt) = -8.0 break } loop return ;自機狙い弾の検索 *e_shot_search repeat enemy_max if e_shot_f(cnt) = 0{ e_shot_f(cnt) = 1 e_shot_x(cnt) = enemy_x(enemy_num) e_shot_y(cnt) = enemy_y(enemy_num) t = atan(jiki_y-e_shot_y(cnt),jiki_x-e_shot_x(cnt)) e_shot_vx(cnt) = cos(t) * 2.0 e_shot_vy(cnt) = sin(t) * 2.0 break } loop return ;丸の敵の検索 *enemy_search2 repeat enemy_max if enemy_f2(cnt) =0{ enemy_f2(cnt) = 1 enemy_type(cnt) = cnt\2 if enemy_type(cnt)=0{ enemy_x2(cnt) = -8.0 enemy_vx2(cnt) = 3.0 }else{ enemy_x2(cnt) = 500.0 enemy_vx2(cnt) = -3.0 } enemy_y2(cnt) = 1.0+rnd(270) break } loop return ;円形弾幕の情報を作成 *circle_shot_search g = 50 ;敵一騎が作成する敵弾数 repeat g t2=m_pi*2*cnt/g ;円形弾幕の一つの弾がもつ角度 gosub *e_shot_search2 if number = -1 : break e_shot_x2(number) = enemy_x2(e_number) e_shot_y2(number) = enemy_y2(e_number) e_shot_f2(number) = 1 e_shot_vx2(number) = cos(t2) * 2.0 e_shot_vy2(number) = sin(t2) * 2.0 loop return ;円形弾幕の検索 *e_shot_search2 number = -1 repeat enemy_max if e_shot_f2(cnt) = 0:number = cnt:break loop return ;被弾した時の処理 *game_end dialog "REPLAY?",2,"GAME OVER" if stat = 6 :goto*start if stat = 7 : end ;リプレイするときに自機の座標と各フラグを初期値に戻す *start jiki_x = 250.0 : jiki_y = 400.0 repeat enemy_max enemy_f(cnt) = 0 enemy_f2(cnt) = 0 e_shot_f(cnt) = 0 e_shot_f2(cnt) = 0 loop goto*main