HOME/Articles/

turtle example ryByteDesign (snippet)

Article Outline

Python turtle example 'ryByteDesign'

Functions in program:

  • def 主函數():

python ryByteDesign

Python turtle example: ryByteDesign

'''
ryByteDesign.py

呂仁園 中文程式翻譯

2014/05/19

翻譯原則:
     python keyword 不翻
     單字母變數     不翻
'''
#!/usr/bin/env python3
"""      turtle-example-suite:

        tdemo_bytedesign.py

An example adapted from the example-suite
of PythonCard's turtle graphics.

It's based on an article in BYTE magazine
Problem Solving with Logo: Using Turtle
Graphics to Redraw a Design
November 1982, p. 118 - 134

-------------------------------------------

Due to the statement

t.delay(0)

in line 152, which sets the animation delay
to 0, this animation runs in "line per line"
mode as fast as possible.
"""

#from turtle import Turtle, mainloop
from turtle_tc import *

from time import clock as 鐘


class 設計師類(龜類):

    def 設計(我, 家位置, 尺度):

        我.提筆()
        for i in 範圍(5):
            我.前進(64.65 * 尺度)
            我.下筆()
            我.輪子(我.位置(), 尺度)
            我.提筆()
            我.後退(64.65 * 尺度)
            我.右轉(72)

        我.提筆()
        我.前往(家位置)
        我.右轉(36)
        我.前進(24.5 * 尺度)
        我.右轉(198)
        我.下筆()
        我.中角(46 * 尺度, 143.4, 尺度)
        我.取幕().追蹤器(True)

    def 輪子(我, 初始位置, 尺度):

        我.右轉(54)
        for i in 範圍(4):
            我.五角(初始位置, 尺度)
        我.下筆()
        我.左轉(36)
        for i in 範圍(5):
            我.三角(初始位置, 尺度)
        我.左轉(36)
        for i in 範圍(5):
            我.下筆()
            我.右轉(72)
            我.前進(28 * 尺度)
            我.提筆()
            我.後退(28 * 尺度)
        我.左轉(54)
        我.取幕().更新()

    def 三角(我, 初始位置, 尺度):

        舊頭向= 我.頭向()
        我.下筆()
        我.後退(2.5 * 尺度)
        我.三角向右(31.5 * 尺度, 尺度)
        我.提筆()
        我.前往(初始位置)
        我.設頭向(舊頭向)
        我.下筆()
        我.後退(2.5 * 尺度)
        我.三角向左(31.5 * 尺度, 尺度)
        我.提筆()
        我.前往(初始位置)
        我.設頭向(舊頭向)
        我.左轉(72)
        我.取幕().更新()

    def 五角(我, 初始位置, 尺度):

        舊頭向= 我.頭向()
        我.提筆()
        我.前進(29 * 尺度)
        我.下筆()
        for i in 範圍(5):
            我.前進(18 * 尺度)
            我.右轉(72)
        我.五角向右(18 * 尺度, 75, 尺度)

        我.提筆()
        我.前往(初始位置)
        我.設頭向(舊頭向)
        我.前進(29 * 尺度)
        我.下筆()
        for i in 範圍(5):
            我.前進(18 * 尺度)
            我.右轉(72)
        我.五角向左(18 * 尺度, 75, 尺度)

        我.提筆()
        我.前往(初始位置)
        我.設頭向(舊頭向)
        我.左轉(72)
        我.取幕().更新()

    def 五角向左(我, 邊長, 角度, 尺度):

        if 邊長 < (2 * 尺度): return
        我.前進(邊長)
        我.左轉(角度)
        我.五角向左(邊長 - (.38 * 尺度), 角度, 尺度)

    def 五角向右(我, 邊長, 角度, 尺度):

        if 邊長 < (2 * 尺度): return

        我.前進(邊長)
        我.右轉(角度)
        我.五角向右(邊長 - (.38 * 尺度), 角度, 尺度)

    def 三角向右(我, 邊長, 尺度):

        if 邊長 < (4 * 尺度): return

        我.前進(邊長)
        我.右轉(111)
        我.前進(邊長 / 1.78)
        我.右轉(111)
        我.前進(邊長 / 1.3)
        我.右轉(146)
        我.三角向右(邊長 * .75, 尺度)

    def 三角向左(我, 邊長, 尺度):

        if 邊長 < (4 * 尺度): return

        我.前進(邊長)
        我.左轉(111)
        我.前進(邊長 / 1.78)
        我.左轉(111)
        我.前進(邊長 / 1.3)
        我.左轉(146)
        我.三角向左(邊長 * .75, 尺度)

    def 中角(我, 邊長, 角度, 尺度):

        我.前進(邊長); 我.左轉(角度)
        if 邊長 < (7.5 * 尺度):
            return
        我.中角(邊長 - (1.2 * 尺度), 角度, 尺度)

def 主函數():

    設計師= 設計師類()

    設計師.速度(0)
    設計師.藏龜()
    設計師.取幕().延遲(0)
    設計師.取幕().追蹤器(0)

    t0= 鐘()

    設計師.設計(設計師.位置(), 2)

    t1= 鐘()

    return "執行時間: %.2f 秒。" % (t1-t0)

if __name__ == '__main__':

    m= 主函數()
    印(m)
    進入主迴圈()