A[],B[] | 天井、床の高さ配列 |
C | 現在の天井と床の開き量 |
D | 現在の天井と床の開き量算出用 |
F | 天井と床の最大開き量 |
G | BGスクロール量 |
H | スクロールに伴い追加する天井、床の配列インデックス番号 |
I | 汎用ループカウンタ |
J | 移動先の配列インデックス番号 |
K | 天井と床がくっついたか |
L | 現在地の配列インデックス番号 |
P | 次のくぼみまでのカウンタ |
Q | 追加する天井と床との差分 |
S | スコア |
T,U | 追加する天井、床の高さ |
V,W | プレイヤーの移動量 |
X,Y | プレイヤーの座標 |
Z | 雑用 |
ACLS:XSCREEN 0,1,4FOR I=0TO 2BGSCREEN I,52,15
NEXT:BGFILL 2,0,0,26,14,334BGCOLOR 2,&H404040
LOCATE ,29?"つぶされないように みぎにすすもう! いどう やりなおし";
DIM A[26],B[26]GPAGE 0,5FOR I=0TO 31X=I*16
Y=(I+16)MOD 32-16GCOPY 224,160,239,175,X,0,1
GFILL X,Y,X+15,Y+15,0NEXT:WHILE 1H=24P=1
A[H]=112B[H]=128REPEAT:GOSUB@H:UNTIL H==24
SPSET 0,696SPANIM 0,11,8,0,8,1,8,2,8,3,0
D=0F=60G=0L=0S=0V=0W=0X=0Y=B[L]-16BGMPLAY 21
REPEAT:C=(1-COS(D))*F:IF(G+X)MOD 16==0THEN
STICK OUT V,W:V=SGN(V)*2W=0J=(L+V/2+26)MOD 26
IF X+V<0||MIN(B[L]-A[J],B[J]-A[L])+C<16THEN
V=0:ELSE W=(B[J]-B[L])/8L=J:ON X+V<193GOSUB@H
ENDIF:ENDIF:Z=X+V>192G=(G+2*Z)MOD 416X=X+V*!Z
Y=Y+W:Z=MAX(A[L]-C,Y)BGOFS 2,G/2MOD 16,0,1024
C=C/2BGOFS 0,G,C:BGOFS 1,G,-C:SPOFS 0,X,Z+C,1
FOR I=0TO 3Z=ASC(MID$(STR$(S)+" ",I,1))
BGPUT 3,I,0,Z:NEXT:Z=PI()*2K=D>Z:D=D+1/64-K*Z
F=F+K*2VSYNC:UNTIL K&&B[L]-A[L]<8SPSTOP
BGMSTOP:BEEP 11REPEAT:UNTIL BUTTON(2)==32WEND
@H:S=S+1P=P-1Q=RND(5)IF P<0THEN Q=16-Q
Z=B[H]-A[H]Z=RND(33-ABS(Q-Z))-16+(Q-Z)*(Q>Z)
U=MAX(MIN(B[H]+Z,180),76)T=U-Q:H=(H+1)MOD 26
A[H]=T:B[H]=U:IF P<0THEN P=(RNDF()+1)*S/128+1
FOR I=0TO 1Q=I*26+H:Z=T/16BGFILL 0,Q,0,Q,14,0
BGFILL 0,Q,0,Q,Z,16BGPUT 0,Q,Z,T MOD 16
Z=U/16BGFILL 1,Q,0,Q,14,0BGFILL 1,Q,Z,Q,14,16
BGPUT 1,Q,Z,16+U MOD 16NEXT:RETURN 'by @OBONO