*ë
\d£<c       sK     d  Z   	 d k Z 
 d f  d „  ƒ  YZ / d e f d „  ƒ  YZ d S(   s3   balls.py: a module to draw balls on a canvas which can
    be dropped from a great height. ball objects know their
    x and y positions, height, diameter and x and y speeds.

    Students are expected to subclass the basic ball class
    to create balls which bounce on impact.

    Richard Kay 4/03/2002 Ns   Ballc      s5   
  d d d d d „ Z   d „  Z ) d „  Z RS(   Ni   i    s   blackc    sw      | |  _   | |  _  | |  _  | |  _  | |  _  | |  _  | |  _  t |  _	  |  i
 ƒ  d S(   s    ball object constructor N(   s   canvass   selfs   xs   ys   diameters   x_speeds   y_speeds   colors   Nones
   canvas_objs   create(   s   selfs   canvass   xs   ys   diameters   x_speeds   y_speeds   color(    (    s	   balls2.pys   __init__ s   c    s     |  i }  t | |  i ƒ }  d | GH xh t | ƒ d  rU }  |  i |  i |  _  | i
 |  i d |  i ƒ   | i ƒ  ! t i d ƒ qF W" |  i | } # | | } $ | oM % |  i | |  _ & | i
 |  i d | ƒ ' | i ƒ  ( t i d ƒ n d S(   s    drops a ball s	   steps: %di    f0.05N(   s   selfs   ys   startys   ints   ydrops   y_speeds   stepss   ranges   is   canvass   moves
   canvas_objs   updates   times   sleeps   ymoveds	   remainder(   s   selfs   canvass   ydrops	   remainders   stepss   ymoveds   is   starty(    (    s	   balls2.pys   drop s"    	
c    sd   ) * + |  i i |  i |  i |  i |  i |  i |  i ƒ |  _ - |  i i |  i d |  i ƒd S(   s)    draws ball in initial position on canvass   fillN(	   s   selfs   canvass   create_ovals   xs   ys   diameters
   canvas_objs
   itemconfigs   color(   s   self(    (    s	   balls2.pys   create) s   ;(   s   __init__s   drops   create(    (    (    s	   balls2.pys   Ball
 s   s
   BounceBallc      s$   / 0 d Z  1 d Z 2 d „  Z RS(   Nf0.2f0.8c    s‹  2 4 d GH5 |  i }
 6 t |  i ƒ } 7 t | ƒ } 8 t |  i ƒ } 9 t |  i ƒ } : d } ; x; d o< | d 7} = | t	 i
 7} > | | 7} ? t | ƒ } @ | |
 }	 A | }
 B | i |  i d |	 ƒ C | i ƒ  D t i d ƒ E | | j o F | } G | t	 i 9} n H t | ƒ d j  o t | | ƒ d j  p
 | d j o! I d | | | | f GHJ Pn qk Wd  S(   Ns   called BounceBall.dropi    i   f0.05f0.2iĞ  s%   loops: %d y_speed: %.2f y-y_end: %.2f(   s   selfs   ys   last_ys   floats   ydrops   y_ends   y_starts   y_speeds   loopss
   BounceBalls   gravitys   ints   y_ints   y_moves   canvass   moves
   canvas_objs   updates   times   sleeps
   bouncinesss   abs(   s   selfs   canvass   ydrops   y_ints   y_speeds   loopss   y_starts   ys   y_ends   y_moves   last_y(    (    s	   balls2.pys   drop2 s0   	 
		:(   s   gravitys
   bouncinesss   drop(    (    (    s	   balls2.pys
   BounceBall/ s   	
(   s   __doc__s   times   Balls
   BounceBall(   s   times
   BounceBalls   Ball(    (    s	   balls2.pys   ? s   %
