iT邦幫忙

2023 iThome 鐵人賽

DAY 5
4
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 5

05.小龜畫圖模組教學

  • 分享至 

  • xImage
  •  

LOGO 海龜畫圖

海龜畫圖

Logo 是ㄧ種程式設計語言,在 1966 年由 Seymour Papert 和 Wally Feurzeig 所設計。這個程式語言內建一套海龜繪圖系統(Turtle Graphics),初學者或孩童可以透過向海龜傳送指令,直觀地學習程式執行的過程。我們常用海龜畫圖系統,搭配各種不同的顏色,畫出像是三角形、正方形,圓形等基礎圖形,進而透過更複雜的程式演算邏輯,畫出複雜又生動的圖案。

有個叫做 turtleSpaces 的 LOGO 語言教學網站,有興趣了解的學員,可以連到官網來了解這個特殊的程式語言。裡面有一個小雞過街的小遊戲,非常有趣。透過經典遊戲的編寫,讓使用者了解 LOGO 程式語言語法與如何移植經典遊戲。

https://turtlespaces.org/weblogo/player.html?pub=415&profile=

小雞過街

不過 LOGO 程式語言是前序式程式語言,與我們常用的中序式語言(C、Python)在語法上有很大的差異,需要花一些時間來學習。不過,目前有許多熱心的網友,將其中的海龜繪圖功能移植到許多平台上,像最近最熱門的 Python 語言,就有內建一個叫做 turtle 的海龜繪圖模組。

Python Turtle 模組

在 Python 語言的內建模組,就有一套類似海龜繪圖的模組功能,將海龜繪圖的大部份指令用Python 程式語言實做出來。您可以參考官方的說明手冊來了解 Python 版函數語法與相關範例。

官網手冊網址為: https://docs.python.org/zh-tw/3.10/library/turtle.html

龜圖學

您可以在終端機底下,執行 「python -m turtledemo」指令,就會叫出底下的應用程式。這個展示程式裡面有許多進階的範例,讓您更了解海龜繪圖的語法與函數,進而了解如何使用 Python 程式語言開發一個小型的視窗應用程式。

turtleDemo

不過我們這次的課程是以微處理器使用的小龜繪圖教學為主,只先教大家基本的繪圖指令與繪製數學圖形。有興趣的學員可以再從補充資料與連結中,進一步學習。

WiFiBoy 內建的小龜繪圖模組

小龜繪圖是經典的程式入門學習教材。使用者透過移動小龜與旋轉方向過程,畫出心中想要的圖形。可以透過這個過程,學習到基本程式運算、邏輯判斷與迴圈應用。也透過與設備互動除厝的過程,熟練空間移動與旋轉的動作,強化空間幾何的數學概念。

玩學機內建的小龜繪圖指令集只有七個基礎指令,再搭配其他的功能函數,也能達到海龜繪圖系統的大部份功能。我們來看看有內建那些指令吧。

  1. wb.ttreset() 讓小龜回家。
  2. wb.ttpos(x, y) 讓小龜移動到某個座標(x, y),不產生足跡。
  3. wb.ttgo(step) 讓小龜移動某個步數。
  4. wb.ttrot(degree) 讓小龜旋轉多少角度。
  5. wb.ttpenup(mode) 讓小龜畫筆提起或放下。
  6. wb.ttcolor(color) 變更小龜畫筆顏色。
  7. wb.ttwidth(width) 變更小龜畫筆的粗細。

wb.ttreset() 讓小龜回家

  • 小龜座標回到原點(螢幕中央,(160 / 2, 128 /2) = (80, 64))
  • 小龜前進方向角度為 0 度,方向向上。
  • 小龜畫筆設定為白色,畫筆朝下。如果再移動小龜,則會留下白色痕跡。讓小龜移動到某個座標(x, y),不產生足跡。

wb.ttpos(x, y) 讓小龜移動到某個座標(x, y),不產生足跡。

  • 跳躍到某個座標點,(x, y) 是小龜所在的新座標。

wb.ttgo(step) 讓小龜移動某個步數。

  • step 是移動的距離,單位大小是 LCD 的點距。數值可正可負,負值代表後退。
  • 要注意的事情是,倒退時,小龜面向的角度不變,沒有轉方向。

wb.ttrot(degree) 讓小龜旋轉多少角度。

  • 小龜旋轉的方向為順時針旋轉。
  • Degree 也可以是負值,即為逆時針旋轉。

wb.ttpenup(mode) 讓小龜畫筆提起或放下。

  • mode 值為 1 代表畫筆提起,為0 代表畫筆放下。
  • 畫筆放下,代表小龜前進或後退都會留下筆跡。
  • 畫筆提起,代表小龜前進或後退都不會留下筆跡。

wb.ttcolor(color) 變更小龜畫筆顏色。

  • Color 顏色的範圍為 0 ~ 65535 整數值。

wb.ttwidth(width) 變更小龜畫筆的粗細。

  • 畫筆粗細 width 的範圍是 1 ~ 16。

繪圖範例一: 請畫一個正方形

這是最基本的操作,請務必練習與了解每行程式碼功能。

wb.cls()
wb.ttreset()
for count in range(4):
	wb.ttgo(50)
	wb.ttrot(90)

EX01

繪圖範例二: 請畫一個正五邊形

wb.cls()
wb.ttreset()
for count in range(5):
	wb.ttgo(40)
	wb.ttrot(72)

五邊形

繪圖範例三: 請畫一個五角星

wb.cls()
wb.ttreset()
for count in range(5):
	wb.ttgo(40)
	wb.ttrot(144)

五角星

繪圖範例四: 請畫一個圓形

wb.cls()
wb.ttreset()
for count in range(30):
	wb.ttgo(8)
	wb.ttrot(12)

圓

繪圖範例五: 請畫三個旋轉 120度的正方形

wb.cls()
wb.ttreset()
for count2 in range(3):
	for count in range(4):
		wb.ttgo(40)
		wb.ttrot(90)
        wb.ttrot(120)

範例五

繪圖範例六: 請畫20個旋轉排列的隨機顏色的圓

wb.cls()
wb.ttreset()
for count2 in range(20):
	wb.ttcolor(wb.rand(65536))
    for count in range(30):
		wb.ttgo(6)
		wb.ttrot(12)
	wb.ttrot(18)

EX06

沒想到您已經學會寫了這麼多程式!很有趣吧,一台小小的機器就能畫出如此多的數學圖形。休息一下,明天我們再來學「鍵盤輸入值讀取與應用」。


上一篇
04.認識螢幕、座標定義與顏色編碼
下一篇
06.鍵盤輸入值讀取與應用
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言