B ht/@sDdZddlmZmZddZGdddZddZed kr@ed S) aV Animated Towers of Hanoi using Tk with optional bitmap file in background. Usage: hanoi.py [n [bitmapfile]] n is the number of pieces to animate; default is 4, maximum 15. The bitmap file can be any X11 bitmap file (look in /usr/include/X11/bitmaps for samples); it is displayed as the background of the animation. Default is no bitmap. )TkCanvascCsD|dkr dSt|d||||||||t|d||||dS)Nr)hanoi)nabcreportr 5/opt/alt/python37/lib64/python3.7/Tools/demo/hanoi.pyrs  rc@s&eZdZdddZddZddZdS) TkhanoiNcCs:||_t|_}t||_}|||d||d}}|rf|j|d|d|dd|_d}|d}|d} | |d|dd} } | || |} } g|_ |j | | | | d d }|j || | | | } } |j | | | | d d }|j || | | | } } |j | | | | d d }|j ||j |d }| dd}d|}gggg|_ i|_| |d| |d} } | || |} } ||dtd|d}xt|d d D]v}|j | | | | dd }||j|<|j d  || || |} } | |d| |d} } |j |jdqWdS)NwidthheightZblue)bitmapZ foreground rZblack)ZfillrZred)rrtkrcanvasZpackZgetintZ create_bitmaprpegsZcreate_rectangleappendupdatepegstatepiecesmaxrangeZafter)selfrrrr rrZpegwidthZ pegheightZpegdistx1y1x2y2p pieceheightZ maxpiecewidthZ minpiecewidthZdxir r r __init__sP          zTkhanoi.__init__cCsx|t|jddd|jt|jddd|jt|jddd|jt|jddd|jt|jddd|jt|jddd|jqWdS)Nrrr)rrr )r r r r runOsz Tkhanoi.runcCsz|j|d|krt|j|d=|j|}|j}||j|\}}}} x8||\} } } } | |krhP||dd|jqLW||j|\}}}}||d}x\||\} } } } | | d}||krP||kr||ddn||dd|jqW| | }||t |j|d}x<||\} } } } | |krHP||dd|jq*W|j| |dS)Nrrrr) r RuntimeErrorrrZbboxrZmoverrlenr)r r'rrr%r Zax1Zay1Zax2Zay2r!r"r#r$Zbx1Zby1Zbx2Zby2Z newcentercenterr&Z newbottomr r r r Ys@     zTkhanoi.report)N)__name__ __module__ __qualname__r(r)r r r r r r s 1 r cCsddl}|jddr&t|jd}nd}|jddrf|jd}|ddkr\|dd}qjd|}nd}t||}|dS)Nrrr@)sysargvintr r))r2rrhr r r mains    r6__main__N)__doc__Ztkinterrrrr r6r-r r r r  s d