Powershell, 144 characters
Based on Joey's excellent answer, using the fact that the ball coordinates are a function of the frame index (i), so if you have something like x=n-abs(n-(i mod (2*n))), x will go from 0 to n, back to 0, and so on...
for(){cls ($l="+$('-'*18)+") 7..0|%{$j=$_ "|$(-join(17..0|%{'* '[$j-[Math]::abs(7-$i%14)-or$_-[Math]::abs(17-$i%34)]}))|"} $l;$i++;sleep -m 100}