SPALM Web Interpreter
Cannot use canvas tag.
No.
----
状態:
停止
ソース
'シューティング0001' '矢印キーで上下左右' 'Ctrlキーかスペースキーでビーム発射(押し続けると発射し続けます)' '敵は若干固いので、しばらくビームを当て続ける必要があります' 'また、敵を破壊すると一定範囲が誘爆します' '(2013-11-10)(2015-5-20)(2016-6-19)(2016-7-8)(2017-2-10)' '(2018-3-17)(2018-4-20)' 'プログラム初期化' WAIT=30 setfont("T") pratio=(devpixratio>1.08)+1 // 高解像度対応 setscsize(240*pratio,320*pratio,240,320) scale(pratio,pratio) wd=width\pratio ht=height\pratio sw=stwide("0") sh=sthigh soft2("end") hs=load() 'ゲーム開始初期化' label 1000 tc=0;tc0=0;tc1=0;ts=-1;tm=-1 mr=1;mmr=10;mmmr=20 sc=0;ssc=0 k=0 maxx=wd\sw maxy=ht\sh x=maxx\2 y=maxy*4\5 bbgp=1 txtmake(bbg,1,maxy-1," ",maxx) for (i=0;i<10;i++) { bbx=abs(rand%maxx) bby=abs(rand%(maxy-1))+1 txtpset(bbg,1,maxy-1,bbx,bby,(pratio==2)?";":".") } txtmake(bbg2,1,maxy-1," ",maxx) rnum=mmmr rch="#-2#-1#1# === #=RRR=# === " rhit=0 for (i=0;i<rnum;i++) { rf[i]=0 mismake(0,i,rf[i],rxd[i],ryd[i],rdg[i],rsp[i],rch,0,maxx-1,1,maxy,1,1) rpw[i]=0 } tnum=mmmr tch="#0#-1#0#i#i#V" tx=0;ty=0 for (i=0;i<tnum;i++) { tf[i]=0 mismake(1,i,tf[i],txd[i],tyd[i],tdg[i],tsp[i],tch,0,maxx-1,1,maxy,1,1) } 'ここからメインループ' '画面設定とスコア処理' label 1001 lock() gc() col(0x0000FF) frect(0,0,wd,ht) sc++ if (sc>1000000) { sc=1000000 } if (sc>hs) { hs=sc } ssc++ if (ssc>1000000) { ssc=1 } if ((ssc%50)==0) { mr++ if (mr>mmr) { mr=0 mmr=min(mmr+2,mmmr) } } col(0xFFFF00) text("SCORE:".sc,0,0,0) col(0xFFA040) text("HI-SCORE:".hs,(wd\sw>40)?wd\2:sw*14,0,(wd\sw>40)) col(0xFFFF00) text("Lv.".mr."/".mmr." ",wd,0,8) '背景1設定(敵、星スクロール)' copy(bbg,bbgp,bg,1,maxy-bbgp) copy(bbg,1,bg,maxy-bbgp,bbgp) bbgp-- if (bbgp<1) { bbgp=maxy-1 } '背景2設定(自機、ビーム)' copy(bbg2,1,bg2,1,maxy-1) '敵移動' if ((ssc%5)==0) { i=misfreeno(0,0,mr-1) if (i>=0) { rf[i]=1 rxd[i]=abs(rand%maxx)*100 ryd[i]=1*100 rdg[i]=abs(rand%121)+30 rsp[i]=min(30+(mmr-10)*5,50) rpw[i]=4 } } mismove(0) mistext(bg,1,maxy-1,0) '弾移動' tx=abs(rand%maxx) ty=abs(rand%(maxy-1))*2\5+1 if (txtbchk(bg,1,maxy-1,tx,ty,tx,ty,"=R")) { i=misfreeno(1,0,mr-1) if (i>=0) { tf[i]=1 txd[i]=tx*100 tyd[i]=ty*100 tdg[i]=atan2(y+1-ty,x+1-tx) tsp[i]=min(50+(mmr-10)*5,80) } } mismove(1) mistext(bg,1,maxy-1,1) '自機移動' k=scan x+=((k&16384)&&(x<maxx-2))-((k&8192)&&(x>1)) y+=((k&32768)&&(y<maxy-2))-((k&4096)&&(y>1)) txtpset(bg2,1,maxy-1,x, y, "A" ) txtpset(bg2,1,maxy-1,x-1,y+1,"HOH") 'ビーム処理' if (k&65536) { for (i=y-1;i>1;i--) { if (strat(bg[i],x)=="R") { break } } txtline(bg2,1,maxy-1,x,i,x,y-1,"c ") } for (i=0;i<rnum;i++) { if (rf[i]>=1000) { rf[i]++ if (rf[i]>=1010) { rf[i]=0 } else { txtfcircle(bg2,1,maxy-1,rxd[i]\100,ryd[i]\100,9,1,2,"@") } } } for (i=0;i<rnum;i++) { if (rf[i]==1) { rhit=0 if (txtbchk(bg2,1,maxy-1,rxd[i]\100-1,ryd[i]\100,rxd[i]\100+1,ryd[i]\100,"cA")) { rhit=1 } if (txtbchk(bg2,1,maxy-1,rxd[i]\100-1,ryd[i]\100,rxd[i]\100+1,ryd[i]\100,"@")) { rhit=2 } if (rhit) { rpw[i]-- if (rpw[i]<=0) { rf[i]=1000 rsp[i]=0 sc+=100*rhit } } } } '画面表示' col(0xFFFFFF) txtdraw(bg,1,maxy-1,0,sh) col(0xFFFF00) txtdraw(bg2,1,maxy-1,0,sh) '実行時間測定' tc1=tick;tc=tc1-tc0;tc0=tc1 ts=(ts>=0)?min(ts,tc):10000 tm=(tm>=0)?max(tm,tc):0 col(0x00FF00) text(tc." ".ts."/".tm,0,sh*8,0) '衝突判定' if (txtbchk(bg,1,maxy-1,x-1,y+1,x+1,y+1,"RV")) { col(0xFF0000) text(" @ ",(x-1)*sw,y*sh,0) text("@@@",(x-1)*sw,(y+1)*sh,0) unlock(1) save(hs) sleep(1500) col(0x0000FF) frect(0,sh*maxy\2,wd,sh) col(0xFFFF00) text("[v]:終了, その他のキー:再スタート",wd\2,sh*maxy\2,1) while (keydowncode) { sleep(100) } while (!keydowncode) { sleep(100) } if (scan&262144) { goto 112 } clearkey() goto 1000 } '終了処理' if (input(0)==262144) { label 112 col(0x0000FF) frect(0,sh*maxy\2,wd,sh) col(0xFFFF00) text("終了しました",wd\2,sh*maxy\2,1) end } '画面更新とウェイト' unlock(1) sleepsync(WAIT) goto 1001
詳細表示