{ JG> This coding works fine, I would like to make the ball travel JG> smoother. When it travels in the air, its kinda "Chunky" JG> How could you make it so that the computer calculates the next JG> point and make it travel the ball to that point one pixel at a JG> time? Cause with this structure, it kinda "Jumps there" Try next code and tell me ... } Program FallingBall; { Written by Luis Mezquita Raya } {$x+} uses Crt, Graph; Procedure Init; var cg,mg:integer; begin cg:=Detect; InitGraph(cg,mg,'\turbo\tp'); end; Procedure Wait(msk:byte); assembler; asm mov dx,3dah @Loop1: in al,dx test al,msk jz @Loop1 @Loop2: in al,dx test al,msk jnz @Loop2 end; Procedure Calc; var angle,power,gravity,a1,a2,a3,y0,n:real; size:word; ball,mask,bkg:pointer; x,y,ox,oy,pause:integer; begin ClearViewPort; size:=ImageSize(0,0,20,20); GetMem(ball,size); GetMem(mask,size); GetMem(bkg,size); SetFillStyle(SolidFill,Yellow); { Draw a ball } Circle(10,10,8); FloodFill(10,10,White); GetImage(0,0,20,20,ball^); { Get the ball } SetFillStyle(SolidFill,White); { Draw ball's mask } Bar(0,0,20,20); SetFillStyle(SolidFill,Black); SetColor(Black); Circle(10,10,10); FloodFill(10,10,Black); GetImage(0,0,20,20,mask^); { Get the mask } ClearViewPort; { Draw a background } SetFillStyle(CloseDotFill,LightBlue); Bar(0,0,GetMaxX,GetMaxY); angle:=35; { Init vars } power:=10; gravity:=0.1; y0:=200; ox:=-1; n:=0; while n<80 do { Main loop } begin a1:=cos(angle*pi/180)*power*n; a2:=y0-sin(angle*pi/180)*power*n; a3:=gravity*n*n; x:=Round(a1); y:=Round(a2+a3); Wait(8); { Wait retrace } for pause:=0 to 399 do Wait(1); { Wait scan line } if ox<>-1 { Restore old background } then PutImage(ox,oy,bkg^,CopyPut); GetImage(x,y,x+20,y+20,bkg^); { Save background } PutImage(x,y,mask^,AndPut); { Put mask } PutImage(x,y,ball^,OrPut); { Put ball } ox:=x; oy:=y; n:=n+0.2; end; FreeMem(ball,size); FreeMem(mask,size); end; begin Init; Calc; ReadKey; CloseGraph; end.