A | 雑用 |
B | Aボタンの状態 |
C | 柱のX方向移動量を変化させるまでの間隔 |
D | 柱を発生させるまでの間隔 |
F | 現在乗っている柱のインデックス番号(-1の時はジャンプ中) |
G,H,K | 柱描画時における2次元座標・幅 |
I | 汎用ループカウンタ |
J | 柱を新規発生させる際のインデックス番号 |
L | ボールのY方向移動量 |
M,N | プレイヤーの2次元座標 |
O | 現在乗ってる柱の中心位置からのズレ |
P | スコア |
P$ | スコア表示用文字列 |
Q | プレイヤーのX方向移動量 |
R | プレイヤーのZ座標 |
S | 柱のZ方向移動量 |
T | ゲーム開始からのフレーム数 |
U | 柱のX方向移動量の目標値 |
V | 柱のX方向移動量 |
W[],X[],Y[],Z[] | 柱の3次元位置・幅の配列 |
ACLS:GPRIO 1024FOR I=1TO 12A=RGB(0,96-I*8,0)
GFILL 0,120,399,120+160/I,A:NEXT:GPAGE 0,4
LOCATE,29?"3次元のはしらを2次元にとぶ いどう ジャンプ やりなおし";
GCOPY 5,88,312,119,351,0,0,1A=30SPSET A,311
SPHOME A,8,15DIM X[A],Y[A],Z[A],W[A]WHILE 1
T=0P=0J=0M=200N=120L=0D=0C=0V=0F=-1BGMPLAY 25
FOR I=0TO 29Z[I]=0NEXT:GOSUB@P:REPEAT:T=T+1
B=BUTTON()AND 16L=L+(32-B)/128STICK OUT Q,A
C=C-1IF C<0THEN U=FNR(SQR(T)/60)C=FNR(60)+180
S=(1+SQR(T/400))/200D=D-S:A=F<0ON(D>0)GOSUB@P
M=M+Q*A*3N=N+L*A:FOR I=0TO 29IF.1<=Z[I]THEN
X[I]=V+X[I]Z[I]=Z[I]-S:A=1/Z[I]G=X[I]*A+200
H=Y[I]*A+120K=A*W[I]SPOFS I,G,H,(Z[I]-.6)*400
SPSCALE I,A,A:IF F<0&&ABS(M-G)<K+6THEN
IF L>0&&L>ABS(N-H-L)THEN BEEP 9F=I:Q=0O=M-G
R=R+(Z[I]-R)/8:ENDIF:IF I!=F THEN@F '
L=0R=Z[I]P=P+1/(R+1)O=O+Q*3M=G+O:N=H' P3J2
IF B||M<8||M>392THEN BEEP 8F=-1L=-5 '
IF.1>R||ABS(O)>K+6THEN F=-1 'by @OBONO
@F:ELSE SPCLR I:ENDIF:NEXT:V=V+(U-V)/40
M=MIN(MAX(M,8),392)P$=STR$(FLOOR(P))+" "
FOR I=0TO 4BGPUT 0,I,0,ASC(MID$(P$,I,1))NEXT
SPOFS 30,M,N,(R-.6)*400VSYNC:UNTIL N>256
BGMSTOP:BEEP 11REPEAT:UNTIL BUTTON()==32WEND
@P:X[J]=FNR(300)Y[J]=RND(26)-5W[J]=RND(9)+8
Z[J]=3IF!P THEN X[J]=0Y[J]=5W[J]=16
SPDEF J,0,0,W[J]*2,35-Y[J],W[J],0,1SPSET J,J
J=(J+1)MOD 30D=D+RNDF()/5+.1RETURN
DEF FNR(A)RETURN RNDF()*A*2-A:END