Powershell, 145 characters
--------------------------

Based on Joey's [excellent answer][1], 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+=1;sleep -m 100}


 [1]: http://codegolf.stackexchange.com/a/5655/1308