A,U | 雑用 |
C | 壁の位置の変化量の目標値を更新するまでのカウンタ |
D | 経過フレーム数 |
G | 壁に衝突しているフレーム数 |
H | 中心から壁までの距離 |
I,J | 汎用ループカウンタ |
L | 壁の縦方向拡大率 |
N | 新規生成する壁の位置 |
P | 壁の位置の現在の変化量 |
Q | 壁描画時の遠近法に伴う拡大率 |
S,S$ | スコア |
T | 壁の位置の変化量の目標値 |
V | 自身の縦方向移動量 |
W | 自身の縦方向位置 |
X[],Y[] | 壁の位置 |
Z | リングバッファの基準位置 |
ACLS:DIM X[64],Y[64]GPAGE 0,4FOR I=0TO 255
FOR J=0TO 511A=RND(64)+192A=RGB(A-32,A-64,A)
GPSET J,I,A:NEXT:NEXT:FOR I=0TO 4A=I*96
GFILL A+32,32,A+95,223,0FOR J=0TO 3'by @OBONO
SPDEF I*4+J,A,0,128,256,64,128,J*8+1NEXT:NEXT
P 6,1,"DEPTH DRUNKER"BGOFS 0,,,-256WHILE 1
P 5,2,"PRESS ANY BUTTON"REPEAT:UNTIL BUTTON()
Z=0V=0W=0N=0P=0T=0C=0D=0S=0G=0BGMPLAY 30BGCLR
FOR I=0TO 63SPSET I,RND(20)X[I]=0:Y[I]=0NEXT
REPEAT:P=P+SGN(T-P)/4N=N+P:Y[Z]=N:IF C<0THEN
T=(RNDF()-.5)*MIN(32,D/256+8)C=RND(120)ENDIF
X[Z]=SIN(D/16)*MIN(D/256,31)C=C-(ABS(T-P)<.5)
Z=Z+1AND 63V=V+!BUTTON()-.5W=W+V:U=W-Y[Z]
L=MAX(4-D/4096,1)H=96*L-8A=ABS(U)IF H<A THEN
W=Y[Z]+H*SGN(U)G=G+1BEEP 1 ELSE G=0:ENDIF
D=D+1FOR I=0TO 63U=I-Z AND 63Q=1/(1+(U-7)/8)
SPOFS I,X[I]*Q+200,(Y[I]-W)*Q+120,U*20-255
SPSCALE I,Q,Q*L:U=255-U*4SPCOLOR I,RGB(U,U,U)
NEXT:S=S+!G*(A/L/64+ABS(V)/8+1)S$=STR$(0OR S)
P 10,0,S$VSYNC:UNTIL G>15BGMSTOP:BEEP 108
WAIT 90WEND:DEF P X,Y,S$FOR I=0TO LEN(S$)-1
BGPUT 0,X+I,Y*7,ASC(MID$(S$,I,1))NEXT:END