#9 用 Swift 打造跳舞機器人 BoogieBot

Rose
彼得潘的 Swift iOS / Flutter App 開發教室
9 min readMar 21, 2021

API

App 開發者經常會使用別人寫好的程式碼。在 BoogieBot 這個例子中,定義了很多函數,讓 BoogieBot 能夠啟動、移動以及變更顏色。

控制 BoogieBot 行為的這組函數,我們稱為「Application Programming Interface」(應用程式介面),簡稱為「API」。

API 是軟體開發者可以用來完成任務的一組特定功能。在本例中,BoogieBot API 能夠讓軟體機器人跳舞。

下載電子書

下載電子書 Develop in Swift Explorations 後

點選以下頁面的 Download student materilas 下載書本提供的範例。(第 11 頁)

獲得檔案 student.zip 解壓之後 是一個 Student-Explorations 資料夾

打開 BoogieBot.playground 後,照著檔案裡的說明操作

出現警告視窗說這是網路下載的,確定你要打開嗎?按下 Trust and Open 打開

點選下方的 Next 按鈕可切換到下一頁。

BoogieBot 的 API 提供以下 function :

  1. 動動手臂 leftArmUp(), leftArmDown(), rightArmUp(), rightArmDown()
  2. 動動腿 leftLegUp(), leftLegDown(), rightLegUp(), rightLegDown()
  3. 擺臀。shakeItLeft(), shakeItRight(), shakeItCenter()
  4. 跳 jumpUp(), jumpDown()
  5. 變色 fabulize(), defabulize()
  6. 設定標題和副標題。setBotTitle(“My Awesome Dance”), setBotSubtitle(“By The Boogiemaster”)

切換到 page 10 Boogie Workshop 寫程式

開始之前,請確保已將你的 Playground 設定為可以使用即時顯示區。以下程式碼用於設定 BoogieBot 進行跳舞:

runBoogieBotDemoMode()

即時顯示畫面會顯示在右方 即時顯示區。👉

如果沒有顯示任何東西,請選擇「Editor」>「Live View」。編輯器區域現在應該會分割為兩個部分,右半邊是即時顯示區。

即時顯示畫面會顯示在右方 即時顯示區。👉

如果沒有顯示任何東西,請選擇「Editor」>「Live View」。編輯器區域現在應該會分割為兩個部分,右半邊是即時顯示區。

你告訴 BoogieBot 像這樣跳舞:

fabulize()
shakeItLeft()
shakeItRight()
shakeItCenter()

一旦跑完一遍舞步組合,BoogieBot 就會停止。你可以使用「Editor」>「Execute Playground」再次查看這些動作。改變舞步組合的話 BoogieBot 會自動從頭開始再做一遍。

fabulize()
fabulize()
fabulize()
fabulize()
leftArmUp()
rightArmUp()
leftLegUp()
rightLegUp()
leftLegDown()
rightLegDown()
shakeItLeft()
shakeItRight()
shakeItCenter()
jumpUp()
jumpDown()
leftArmDown()
rightArmDown()
defabulize()

BoogieBot API

啟動 BoogieBot:

  • startBot()

移動 BoogieBot:

  • leftArmUp()、leftArmDown()、rightArmUp()、rightArmDown()
  • leftLegUp()、leftLegDown()、rightLegUp()、rightLegDown()
  • shakeItLeft()、shakeItRight()、shakeItCenter()
  • jumpUp()、jumpDown()

改變 BoogieBot 的顏色:

  • fabulize()、defabulize()

舞步組合

跳舞是一件有趣的事情,但若是逐一寫出每一個動作,那麼即使是描述一支非常簡單的舞蹈也會相當繁複冗長。因此,大家通常會將個別動作串在一起,然後為整套舞步組合命名。

func doTheDisco() {
leftArmUp()
shakeItRight()
leftArmDown()
shakeItCenter()
}

當你決定了舞步組合中的各個移動動作之後,就可以呼叫剛剛建立的函數,讓機器人開始跳舞:

startBot()
fabulize()
doTheDisco()
doTheDisco()
doTheDisco()

程式設計師透過函數將各個工作區塊組合在一起。回顧一下「函數」Playground 中所學的內容,函數具有以下作用:

函數可以重複使用,節省了閱讀和打字的時間。
函數可以單獨理解,因此你不必考慮每一個步驟。
若更動函數,其他有使用到該函數的地方也能同時更動。

為作品簽名

BoogieBot 也有一個 API,可用來對已建立的動作進行個人化。

為你的機器人命名:

setBotTitle("My Awesome Dance")

並加上副標題。這時可以加入你的名字:

setBotSubtitle("By The Boogiemaster")

分享熱舞

BoogieBot 還有最後一個功能。

你除了可以在即時顯示區觀看 BoogieBot 舞蹈之外,也可以把作品存成動畫 GIF 跟朋友分享。

只要在啟動你的機器人時,後面加上 startRecording():

startBot()
startRecording()

然後在下面新增舞蹈動作。當 BoogieBot 跳完舞時,會顯示「Save」按鈕。按一下該按鈕可將舞步組合儲存為動畫 GIF。

請記住,一旦跳到舞步組合的最後一步,BoogieBot 就會停止。你可以使用「Editor」>「Execute Playground」再次查看這些動作。

// If you're going to send it, sign it.
setBotTitle("The next dance craze")
setBotSubtitle("You saw it here first!")
// Start the dance!
fabulize()
leftArmUp()
rightArmUp()
leftLegUp()
rightLegUp()
leftLegDown()
rightLegDown()
shakeItLeft()
shakeItRight()
shakeItCenter()
jumpUp()
jumpDown()
leftArmDown()
rightArmDown()
defabulize()

總結

在這個 Playground 中,你了解到 API 的概念,其是一組由其他開發者提供以協助你工作的函數。學會程式設計的基礎之後,你將學習更多有關使用 API 的知識。

你也做了許多使用和定義函數的練習,還有使用函數將重複的工作分類在一起。

舞步組合其實就是照順序重複執行一些設定好的動作,我們可以將某些動作的組合定義成一個函數,再將這些小函數組合起來變成一個大函數,以此推類,這樣的方式非常適合編排出色的舞蹈。

熱舞教室程式碼

startBot()
startRecording()
setBotTitle("機器熱舞")
setBotSubtitle("By The Rose")
func doTheDisc(){
fabulize()
leftArmUp()
rightArmUp()
leftArmDown()
rightArmDown()
jumpUp()
jumpDown()
fabulize()
leftLegUp()
leftLegDown()
rightLegUp()
rightLegDown()
shakeItLeft()
shakeItRight()
shakeItCenter()
jumpUp()
jumpDown()
fabulize()
}
for time in 1...3 {
doTheDisc()
print(time)
}

--

--

Rose
彼得潘的 Swift iOS / Flutter App 開發教室

Coding & Design 一直在學習的路上,從未停止,一有空檔就會摸摸我的兔子🐰