Ruby 1.9, 162 characters
35 chars shy of @Ventero's answer, but I was impressed that I could get it down this far while still using a completelyrelatively straightforward approach to the actual logic. The ^[ is a literal ESC (1 char).
x=y=0 v=h=1 s=' ' loop{puts"^[[2J"+b="+#{?-*18}+",*(0..7).map{|i|"|#{i!=y ?s*18:s*x+?*+s*(17-x)}|"},b y+=v y+=v*=-1if y<0||y>7 x+=h x+=h*=-1if x<0||x>17 sleep 0.1}