HOME/Articles/

turtle example ryByteDesign003 tc (snippet)

Article Outline

Python turtle example 'ryByteDesign003 tc'

Functions in program:

  • def main():
  • def 主函數():

python ryByteDesign003 tc

Python turtle example: ryByteDesign003 tc

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
ryByteDesign003_tc.py
''' 
#from turtle import Turtle, mainloop
from turtle_tc import 龜類, 主迴圈

class 設計師類(龜類):

    def __init__(我, 比例= 1):

        龜類.__init__(我)
        我.比例= 比例

    def 設計(我, 位置):

        我.提筆()
        for i in range(5):
            我.前進(64.65 *我.比例)

            我.下筆()
            我.畫輪子(我.位置())

            我.提筆()
            我.後退(64.65 *我.比例)
            我.右轉(72)

        我.提筆()
        我.前往(位置)

        我.右轉(36)
        我.前進(24.5 *我.比例)
        我.右轉(198)

        我.下筆()
        我.畫中央星()

        我.取幕().追蹤器(True)

    def 畫輪子(我, 位置):

        我.右轉(54)
        for i in range(4): 
            我.畫五角組(位置)

        我.下筆()

        我.左轉(36)
        for i in range(5):
            我.畫三角組(位置)

        我.左轉(36)
        for i in range(5):
            我.下筆()
            我.右轉(72)
            我.前進(28 *我.比例)
            我.提筆()
            我.後退(28 *我.比例)

        我.左轉(54)

        我.取幕().更新()

    def 畫三角組(我, 位置):

        舊頭向= 我.頭向()
        我.下筆()
        我.後退(2.5 *我.比例)

        我.畫三角(+31.5)

        我.提筆()
        我.前往(位置)

        我.設頭向(舊頭向)
        我.下筆()
        我.後退(2.5 *我.比例)

        我.畫三角(-31.5)

        我.提筆()
        我.前往(位置)
        我.設頭向(舊頭向)
        我.左轉(72)

        我.取幕().更新()

    def 畫五角組(我, 位置):

        舊頭向= 我.頭向()
        我.提筆()
        我.前進(29 * 我.比例)
        我.下筆()
        for i in range(5):
            我.前進(18 * 我.比例)
            我.右轉(72)

        我.畫多角(18, -75)

        我.提筆()
        我.前往(位置)

        我.設頭向(舊頭向)
        我.前進(29 * 我.比例)
        我.下筆()
        for i in range(5):
            我.前進(18 * 我.比例)
            我.右轉(72)

        我.畫多角(18, +75)

        我.提筆()
        我.前往(位置)
        我.設頭向(舊頭向)
        我.左轉(72)

        我.取幕().更新()

    def 畫多角(我, 邊長, 角度): # 角度 可正可負
        if 邊長 < 2: return

        我.前進(邊長 *我.比例)
        我.左轉(角度)

        邊長 -= .38
        我.畫多角(邊長, 角度)

    def 畫三角(我, 邊長):       # 邊長 可正可負
        if abs(邊長) < 4: return

        正負號= 邊長/abs(邊長)

        我.前進(abs(邊長) *我.比例)
        我.左轉(111 *正負號)

        我.前進(abs(邊長) /1.78 *我.比例)
        我.左轉(111 *正負號)

        我.前進(abs(邊長) /1.30 *我.比例)
        我.左轉(146 *正負號)

        邊長 *= .75
        我.畫三角(邊長)

    def 畫中央星(我, 邊長= 46, 角度= 143.4):
        '''
        這裡有 2 個神奇數字,46, 143.4
        '''

        if 邊長 < 7.5: return   
        我.前進(邊長 *我.比例);
        我.左轉(角度)

        邊長 -= 1.2
        我.畫中央星(邊長, 角度)

def 主函數():

    小王= 設計師類(比例= 2)
    小王.速度(0) 
    小王.形狀('turtle')

    def 色位角(顏色= 'red', 位置= (0,0), 角度= 0):

        小王.顏色(顏色)
        小王.提筆()
        小王.前往(位置)
        小王.設頭向(角度)
        小王.蓋印()
        小王.下筆()

    def 畫小零件(到中心距離= 0):

        色位角('black',(+L,0));          小王.畫三角(+31.5)
        色位角('gray', (+L,0));          小王.畫三角(-31.5)

        色位角('black',(-L,0));          小王.畫多角(18, +75)
        色位角('gray', (-L,0));          小王.畫多角(18, -75)

        色位角('black',(0,+L));          小王.畫中央星()
        色位角('gray', (0,+L), 角度=180); 小王.畫中央星()

        for 角度 in [0,90,180,270]:
            色位角('red',  (+L,+L),角度); 小王.畫中央星()
        for 角度 in [0,90,180,270]:   
            色位角('green',(-L,+L),角度); 小王.畫三角組(小王.位置())
        for 角度 in [0,90,180,270]:     
            色位角('blue', (-L,-L),角度); 小王.畫五角組(小王.位置())

    L= 300
    畫小零件(+L)
    色位角('purple',(+L,-L));  小王.畫輪子(小王.位置())
    色位角('brown', (0,0));    小王.設計(  小王.位置())

def main():

    主函數()
    return "做完了!"


if __name__ == '__main__':

    主函數()
    主迴圈()