10 ' SAVE"BALL3.BAS",A '99BASIC ボール反射プログラム改良・3次元風味(笑)
20 CLEAR SYSTEM:DEFSNG A-Z
30 SIZX=80:SIZY=24
40 WIDTH SIZX,SIZY:SCREEN 3,5:CLS 3
50 DIM PT%(25,((51+1)*(51+1))\4)
60 '
70 FOR K=0 TO 25:CLS 2
80 FOR J=K TO 25
90 CIRCLE(25,25),25-J,(J-K)+100:PAINT(25,25),(J-K)+100,(J-K)+100
100 PALETTE J+100,(J*10.2,J*10.2,J*10.2)
110 NEXT J
120 GET @3,(0,0)-STEP(51,51),PT%(K,0)
130 NEXT K
140 '
150 N=64
160 DIM X(N-1),Y(N-1),Z(N-1),SX(N-1),SY(N-1),SZ(N-1)
170 FOR J=0 TO N-1
180 X(J)=RND(SIZX*8):Y(J)=RND(SIZY*16):Z(J)=RND(25+1)
190 SX(J)=(RND*1.5)+0.25:SY(J)=(RND*1.5)+0.25:SZ(J)=(RND/10)+0.1
200 NEXT J
210 '
220 INTERVAL ON,(1000\60):ON INTERVAL GOSUB 400
230 '
240 IF TSYNC=0 THEN 240
250 TSYNC=0
260 LINE(0,0)-(SIZX*8-1,SIZY*16-1),0,BF 'CLS 3
270 FOR J=0 TO N-1
280 X(J)=X(J)+SX(J):Y(J)=Y(J)+SY(J):Z(J)=Z(J)+SZ(J)
290 IF X(J)< 0 THEN X(J)= 0:SX(J)= ABS(SX(J))
300 IF X(J)> (SIZX*8)-50 THEN X(J)= (SIZX*8)-50:SX(J)=-ABS(SX(J))
310 IF Y(J)< 0 THEN Y(J)= 0:SY(J)= ABS(SY(J))
320 IF Y(J)>(SIZY*16)-50 THEN Y(J)=(SIZY*16)-50:SY(J)=-ABS(SY(J))
330 IF Z(J)< 1 THEN Z(J)= 1:SZ(J)= ABS(SZ(J))
340 IF Z(J)> 25 THEN Z(J)= 25:SZ(J)=-ABS(SZ(J))
350 PUT@(X(J)/(((Z(J)/25)+1))+(25.6*Z(J))/4,Y(J)/(((Z(J)/25)+1))+(16*Z(J))/4),PT%(Z(J),0)
360 NEXT J
370 SCREEN
380 GOTO 240
390 '
400 INTERVAL OFF:TSYNC=1:INTERVAL ON:RETURN