少し前に質問させていただいて、
ある程度改善されましたが、まだ画面のちらつきが直らないので質問させていただきました。
シューティングで敵が出てきて、ランダム弾を撃つプログラムです。
みにくいかもしれませんがよろしくお願いします。
buffer 1 screen 0,800,600 frame=0 //自機座標 x=400 y=450 //自機弾初期化 tamax=10 dim tamaf,tamax//存在フラグ dim tama_x,tamax dim tama_y,tamax dim tama_rx,tamax dim tama_ry,tamax dim tama_lx,tamax dim tama_ly,tamax //敵機座標 ex=400 ey=-50 etama_x=400 etama_y=200 //敵機弾初期化 etamax=640 dim etamaf,etamax dim etama_x,vartype("double"),etamax dim etama_y,vartype("double"),etamax dim etama_vx,vartype("double"),etamax dim etama_vy,vartype("double"),etamax ehp=1000 //メインループ *メイン redraw 0 color 255,255,255 boxf frame=frame+1 pos 0,0 color 0,0,0 mes frame pos 400,25 mes ehp getkey zkey , 90 gosub*自機 if zkey=1:gosub*自機弾 gosub*敵 gosub*敵機表示 gosub*敵弾 gosub*敵弾表示 gosub*敵あたり redraw 1 await 10 goto*メイン *自機 //自機移動処理 stick key,31 if key & 1:x-speed if key & 2:y-speed if key & 4:x+speed if key & 8:y+speed pos x-10,y-31 mes"▲" //低速移動処理 stick tkey,64 if tkey=64 : speed=2 if tkey=0 : speed=8 *自機弾 //自機弾処理 if zkey=1 { if shottime=0 { shottime=5 repeat tamax if tamaf(cnt)=0{ tama_x(cnt)=x tama_y(cnt)=y-30 tama_rx(cnt)=x+20 tama_ry(cnt)=y-30 tama_lx(cnt)=x-20 tama_ly(cnt)=y-30 tamaf(cnt)=1 break } loop } else { shottime-- } } //自機弾の移動 repeat tamax if tama_y(cnt) < 0 : tamaf(cnt) = 0 if tama_ry(cnt) < 0 : tamaf(cnt) = 0 if tama_ly(cnt) < 0 : tamaf(cnt) = 0 if tamaf(cnt)=1{ tama_y(cnt)-=10//弾同士の間隔が20ピクセル tama_ry(cnt)-=10 tama_ly(cnt)-=10 if tama_y(cnt)<-1000{ tamaf(cnt)=0 } } loop //自機弾表示 repeat tamax if tamaf(cnt)=1{ pos tama_x(cnt),tama_y(cnt) mes"●" pos tama_rx(cnt)-4,tama_ry(cnt)-14 mes"|" pos tama_lx(cnt)-4,tama_ly(cnt)-14 mes"|" } loop redraw 1 return *敵 if frame > 100 { ;フレーム数が100を超えたら、敵を表示 ey = ey+1 ;敵の移動スピード ef=1 ;敵の座高が100行ったらそこでストップ : 敵フラグを立てる if ey > 100 : ey = 100 } return *敵弾 if frame > 250 { gosub*敵弾サーチ if number!=-1{ etamaf(number)==1 etama_x(number)==395.0 etama_y(number)==100.0 etama_vx(number)==-0.5+0.01*rnd(100) etama_vy(number)==1.0+0.01*rnd(100) } } repeat etamax if(etamaf(cnt)==1){ etama_x(cnt)=etama_x(cnt)+etama_vx(cnt) etama_y(cnt)=etama_y(cnt)+etama_vy(cnt) } loop return *敵あたり edx = ex - tama_x(cnt) : edy = ey - tama_y(cnt) edx*=edx : edy*=edy if(edx + edy <=100){ tamaf(cnt)=0 ehp=ehp-5 } if ehp<=0 { ef=0 mmplay 0 } return *敵機表示 if ef=1{ pos ex-20,ey-20 mes"敵" } return *敵弾表示 repeat etamax if(etamaf(cnt)==1){ pos etama_x(cnt)-6,etama_y(cnt)-8 mes"◎" } loop return *敵弾サーチ number = -1 repeat etamax if(etamaf(cnt)!=1) :number=cnt:break loop return