環境
spalm iアプリ版
spalm more iアプリ版
確認機種
SH-06B
内容
宇宙船を方向キーで上下左右に動かして、回転する障害物を避けて進みます。
段々レベルが上がって難しくなります。ただし、ある程度までいくと、レベルが下がり、レベルの上限が増えて再度レベルが上がっていきます。
障害物のライン描画処理は、書籍「X68000マシン語プログラミング グラフィックス編」(1992年 ソフトバンク)を参考にしました。
履歴
2011-1-29 初版
2011-1-30 若干の高速化
2011-2-4 spalm iアプリ版でも動作するように整数化
WAIT=1; wd=width; ht=height; sw=stwide("0"); sh=sthigh; soft2("end"); hs=load(); bg1=""; for(i=1;i<=40;i++){ bg1=bg1." "; } label 1000; sc=0; k=0;k2=0; x=19;y=18-(ht<=240); mr=1;mmr=12;mmmr=20; for(i=1;i<=mmmr;i++){ rf[i]=0; rx[i]=0;ry[i]=0; ryd[i]=0; rx1[i]=0;ry1[i]=0; rx2[i]=0;ry2[i]=0; rw[i]=0;rr[i]=0; } bbgp=1; for(i=1;i<=25;i++){ bbg[i]=bg1; } for(i=1;i<=30;i++){ bgx=abs(rand%40); bgy=abs(rand%25)+1; bbg[bgy]=substr(bbg[bgy],0,bgx).".".substr(bbg[bgy],bgx+1,39-bgx); } label 1001; lock(); col(0x0000FF); frect(0,0,wd,ht); sc=sc+1; if(sc>1000000){sc=1000000;} if(sc>hs){hs=sc;} if((sc%50)==0){ mr=mr+1; if(mr>mmr){ mr=0; mmr=min(mmr+2,mmmr); } } col(0xFFFF00); text("SCORE:".sc,0,0,0); col(0xFF0000); text("HI-SCORE:".hs,84,0,0); col(0xFFFF00); text("Lv.".mr."/".mmr,192,0,0); k=scan;k2=input(0); if(k2==262144){end;} x=x+((k&16384)&&(x<38))-((k&8192)&&(x>0)); y=y+((k&32768)&&(y<((ht/sh)-2-(ht<=240))))-((k&4096)&&(y>1)); col(0xFFFF00); text("AA",x*sw,y*sh,0); text("HH",x*sw,(y+1)*sh,0); copy(bbg,bbgp,bg,1,26-bbgp); copy(bbg,1,bg,26-bbgp,bbgp); bbgp=bbgp-1; if(bbgp<1){bbgp=25;} for(i=1;i<=mmr;i++){ if((rf[i]==0)&&(i<=mr)&&(abs(rand%100)==0)){ rf[i]=1; rx[i]=abs(rand%40); ry[i]=1; ryd[i]=ry[i]*10; rw[i]=abs(rand%3)+1; rw[i]=3*(rw[i]==1)+6*(rw[i]==2)+(9-(ht<=240))*(rw[i]==3); rr[i]=0; } if(rf[i]==1){ ryd[i]=ryd[i]+3; ry[i]=ryd[i]/10; rr[i]=rr[i]+10; '未使用ここから rx1[i]=rx[i]-dcos(rr[i])*rw[i]; ry1[i]=ry[i]-dsin(rr[i])*rw[i]; rx2[i]=rx[i]+dcos(rr[i])*rw[i]; ry2[i]=ry[i]+dsin(rr[i])*rw[i]; 未使用ここまで' rx1[i]=rx[i]-(cos(rr[i])*rw[i])/100; ry1[i]=ry[i]-(sin(rr[i])*rw[i])/100; rx2[i]=rx[i]+(cos(rr[i])*rw[i])/100; ry2[i]=ry[i]+(sin(rr[i])*rw[i])/100; tline(rx1[i],ry1[i],rx2[i],ry2[i]); if(ry[i]>30){rf[i]=0;} } } col(0xFFFFFF); for(i=1;i<=25;i++){ text(bg[i],0,i*sh,0); } if(strat(bg[y],x)=="*"||strat(bg[y],x+1)=="*"||strat(bg[y+1],x)=="*"||strat(bg[y+1],x+1)=="*"){ col(0xFF0000); text("@@",x*sw,y*sh,0); text("@@",x*sw,(y+1)*sh,0); unlock(1); save(hs); sleep(1500); clearkey(); k=input(); if(k==262144){end;} goto 1000; } unlock(1); sleep(WAIT); goto 1001; func tline(x100,y100,x101,y101){ '未使用ここから x100=int(x100); y100=int(y100); x101=int(x101); y101=int(y101); 未使用ここまで' dx100=abs(x101-x100); dy100=abs(y101-y100); ((x101-x100)>0)?sx100=1:sx100=-1; ((y101-y100)>0)?sy100=1:sy100=-1; x200=x100; y200=y100; if(dx100>=dy100){ e100=-dx100; for(i100=0;i100<=dx100;i100++){ if((x200>=0)&&(x200<=39)&&(y200>=1)&&(y200<=25)){ bg[y200]=substr(bg[y200],0,x200)."*".substr(bg[y200],x200+1,39-x200); } x200=x200+sx100; e100=e100+2*dy100; if(e100>=0){ y200=y200+sy100; e100=e100-2*dx100; } } }else{ e100=-dy100; for(i100=0;i100<=dy100;i100++){ if((x200>=0)&&(x200<=39)&&(y200>=1)&&(y200<=25)){ bg[y200]=substr(bg[y200],0,x200)."*".substr(bg[y200],x200+1,39-x200); } y200=y200+sy100; e100=e100+2*dx100; if(e100>=0){ x200=x200+sx100; e100=e100-2*dy100; } } } }