回転障害物ゲーム


環境
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;
}
}
}
}