Your IP : 216.73.216.213
�
e f � @ sa d Z d d l m Z m Z d d � Z Gd d � d � Z d d � Z e d k r] e � n d
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.
� )�Tk�Canvasc C sX | d k r d St | d | | | | � | | | | � t | d | | | | � d S)Nr � )�hanoi)�n�a�b�c�report� r �5/opt/alt/python34/lib64/python3.4/Tools/demo/hanoi.pyr s
r c @ s7 e Z d Z d d d � Z d d � Z d d � Z d S)�TkhanoiNc C s� | | _ t � | _ } t | � | _ } | j � | j | d � | j | d � } } | r� | j | d | d d | d d �| _ n d } | d } | d } | | d | d d }
} |
| | | } }
g | _ | j
|
| | |
d
d �} | j j | � |
| | | }
} | j
|
| | |
d
d �} | j j | � |
| | | }
} | j
|
| | |
d
d �} | j j | � | j j � | d } | d d } d | } g g g g | _
i | _ | | d |
| d }
} |
| | | } }
| | d t d | d � } x� t | d
d � D]� } | j
|
| | |
d
d �} | | j | <| j
d
j | � |
| | | }
} | | d |
| d } }
| j j � | j j d � qFWd S)N�width�height� �bitmapZ
foregroundZblue�
� r ZfillZblack� r Zred� ���)r r �tkr �canvasZpackZgetintZ
create_bitmapr �pegsZcreate_rectangle�append�update�pegstate�pieces�max�range�after)�selfr r r r r r ZpegwidthZ pegheightZpegdist�x1�y1�x2�y2�p�pieceheightZ
maxpiecewidthZ
minpiecewidthZdx�ir r r �__init__ sP
'
zTkhanoi.__init__c C s� x� t | j d d d | j � t | j d d d | j � t | j d d d | j � t | j d d d | j � t | j d d d | j � t | j d d d | j � q Wd S)Nr r r )r r r
)r! r r r �runO s zTkhanoi.runc C s� | j | d | k r t � n | j | d =| j | } | j } | j | j | � \ } } } } xO | j | � \ }
} } }
|
| k r� Pn | j | d d � | j j � qi W| j | j | � \ } } } } | | d } x | j | � \ }
} } }
|
| d } | | k r$Pn | | k rF| j | d d � n | j | d d � | j j � q� W|
| } | | t | j | � d } xO | j | � \ }
} } }
|
| k r�Pn | j | d d � | j j � q�W| j | j
| � d S)Nr r r r r r r )r �RuntimeErrorr r Zbboxr Zmover r �lenr )r! r( r r r&