100 MODE 4:CLS #0
105 IF Q_MYJOB>0 THEN WINDOW 512,256,0,0:Q_CURSON #0
110 OVER 0:INK 4:PAPER 2:CLS:OVER -1
120 in$=CHR$(192)&CHR$(200)&CHR$(208)&CHR$(216)&"azqc"
130 air_res=.99:decay=.8:drag=.9:drag2=5E-2:size=10:ssize=10
140 x=10:y=90:CIRCLE x,y,size
150 vy=0:vx=2:gy=-1:gx=0
160 REPeat moving
170 xx=x:yy=y
180 IF vy=0 AND (y=size OR y=100-size) THEN vx=vx*(drag+drag2*ABS(gx))
190 IF vx=0 AND (x=size OR x=165.7-size) THEN vy=vy*(drag+drag2*ABS(gy))
200 vy=(vy+gy)*air_res:vx=(vx+gx)*air_res:x=x+vx:y=y+vy
210 IF y<=size AND vy<=0 THEN 
220 vy=-vy:y=size
230 IF vy*gy>=0 THEN vy=vy*decay
240 IF ABS(vy)<=ABS(gy) THEN vy=0
250 END IF 
260 IF y>=100-size AND vy>=0 THEN 
270 vy=-vy:y=100-size
280 IF vy*gy>=0 THEN vy=vy*decay
290 IF ABS(vy)<=ABS(gy) THEN vy=0
300 END IF 
310 IF x>=165.7-size AND vx>=0 THEN 
320 vx=-vx:x=165.7-size
330 IF vx*gx>=0 THEN vx=vx*decay
340 IF ABS(vx)<=ABS(gx) THEN vx=0
350 END IF 
360 IF x<=size AND vx<=0 THEN 
370 vx=-vx:x=size
380 IF vx*gx>=0 THEN vx=vx*decay
390 IF ABS(vx)<=ABS(gx) THEN vx=0
400 END IF 
410 CIRCLE xx,yy,ssize;x,y,size:LINE TO xx,yy:ssize=size
430 a$=INKEY$:IF a$ INSTR in$ AND a$<>"" THEN change
440 END REPeat moving
450 DEFine PROCedure change
460 a=a$ INSTR in$
470 SELect ON a
480 =1:gy=0:gx=-1
490 =2:gy=0:gx=1
500 =3:gx=0:gy=-1
510 =4:gx=0:gy=1
520 =5:size=size-(size>1)
530 =6:size=size+(size<30)
540 =7:size=10
550 =8:CLS:CIRCLE x,y,size
560 END SELect 
570 BEEP 5000,30
580 END DEFine 
