symbian-qemu-0.9.1-12/python-2.6.1/Demo/turtle/tdemo_minimal_hanoi.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #!/usr/bin/python
       
     2 """       turtle-example-suite:
       
     3 
       
     4          tdemo_minimal_hanoi.py
       
     5 
       
     6 A minimal 'Towers of Hanoi' animation:
       
     7 A tower of 6 discs is transferred from the
       
     8 left to the right peg.
       
     9 
       
    10 An imho quite elegant and concise
       
    11 implementation using a tower class, which
       
    12 is derived from the built-in type list.
       
    13 
       
    14 Discs are turtles with shape "square", but
       
    15 stretched to rectangles by shapesize()
       
    16  ---------------------------------------
       
    17        To exit press STOP button
       
    18  ---------------------------------------
       
    19 """
       
    20 from turtle import *
       
    21 
       
    22 class Disc(Turtle):
       
    23     def __init__(self, n):
       
    24         Turtle.__init__(self, shape="square", visible=False)
       
    25         self.pu()
       
    26         self.shapesize(1.5, n*1.5, 2) # square-->rectangle
       
    27         self.fillcolor(n/6., 0, 1-n/6.)
       
    28         self.st()
       
    29 
       
    30 class Tower(list):
       
    31     "Hanoi tower, a subclass of built-in type list"
       
    32     def __init__(self, x):
       
    33         "create an empty tower. x is x-position of peg"
       
    34         self.x = x
       
    35     def push(self, d):
       
    36         d.setx(self.x)
       
    37         d.sety(-150+34*len(self))
       
    38         self.append(d)
       
    39     def pop(self):
       
    40         d = list.pop(self)
       
    41         d.sety(150)
       
    42         return d
       
    43 
       
    44 def hanoi(n, from_, with_, to_):
       
    45     if n > 0:
       
    46         hanoi(n-1, from_, to_, with_)
       
    47         to_.push(from_.pop())
       
    48         hanoi(n-1, with_, from_, to_)
       
    49 
       
    50 def play():
       
    51     onkey(None,"space")
       
    52     clear()
       
    53     hanoi(6, t1, t2, t3)
       
    54     write("press STOP button to exit",
       
    55           align="center", font=("Courier", 16, "bold"))
       
    56 
       
    57 def main():
       
    58     global t1, t2, t3
       
    59     ht(); penup(); goto(0, -225)   # writer turtle
       
    60     t1 = Tower(-250)
       
    61     t2 = Tower(0)
       
    62     t3 = Tower(250)
       
    63     # make tower of 6 discs
       
    64     for i in range(6,0,-1):
       
    65         t1.push(Disc(i))
       
    66     # prepare spartanic user interface ;-)
       
    67     write("press spacebar to start game",
       
    68           align="center", font=("Courier", 16, "bold"))
       
    69     onkey(play, "space")
       
    70     listen()
       
    71     return "EVENTLOOP"
       
    72 
       
    73 if __name__=="__main__":
       
    74     msg = main()
       
    75     print msg
       
    76     mainloop()