iT邦幫忙

2021 iThome 鐵人賽

DAY 27
1
Software Development

在麥塊的農場裡寫 Lua系列 第 27

Day27 小烏龜動工的基本指令集

  • 分享至 

  • xImage
  •  

今天來看看怎麼讓一個小烏龜動起來!
從最基本的 Turtle 開始,相關程式碼在
/rom/programs/turtle/ 以及 /rom/apis/turtle/

小烏龜轉向和移動

首先看 /rom/programs/turtle/go.lua
也就是小烏龜的基本移動指令了
可以原地左右轉向,甚至指定轉向次數

go left
go right
go left 3
go right 2

轉向的部分也可以直接用
/rom/programs/turtle/turn.lua

turn left
turn right
turn left 3
turn right 2

或是往四個方位移動:上、下、前進、後退

go up
go down
go forward
go back

不過,你一定會發現,轉向都沒問題,但是要移動時,會說沒燃料了!

為小烏龜補充燃料

補充燃料的指令在 /rom/programs/turtle/refuel.lua
可以作為燃料的東西是煤炭、煤炭方塊、木炭、熔岩桶,這是目前試出來可以當作小烏龜燃料的來源
煤炭補充 80 能源
煤炭方塊補充 800 能源
木炭補充 80 能源
熔岩桶補充 1000 能源
補充能源的指令簡單如下

refuel
refuel 3
refuel all

例如說你有 64 個煤炭,那麼 refuel 就是補充一個煤炭;refuel 3 就是補充 3 個煤炭
refuel all 就是補充小烏龜儲物箱裡面所有可以當作燃料的東西
CC: Tweaked Turtle Refuel

補充燃料後,就可以讓小烏龜自由的上下左右移動了!
而如果想要知道目前還有多少能源,可以用 turtle API

turtle.getFuelLevel()

小烏龜連續轉向或移動

事實上,go 指令設計得滿彈性的
可以無限串連各種移動和轉向
例如
左轉後,向後移動兩格,再向上移動一格

go left back back top

右轉兩次後向前移動三格,再向下移動一格

go right 2 forward 3 down

這部分主要是 go.lua 這一段在處理使用者輸入

local sDirection = tArgs[nArg]
local nDistance = 1
if nArg < #tArgs then
    local num = tonumber(tArgs[nArg + 1])
    if num then
        nDistance = num
        nArg = nArg + 1
    end
end
nArg = nArg + 1

讓小烏龜跳舞

有充足的能源後,就可以開始跳舞了(?
CC: Tweaked 提供了一支給小烏龜手舞足蹈的程式,雖然我有點看不懂這樂趣 XD
程式碼在 /rom/programs/turtle/dance.lua
只要對小烏龜輸入 dance 指令
就可以看到它開始到處移動和轉向,甚至發出聲音
dance 最後的 parallel.waitForAny 模擬多執行緒
持續的在隨機移動和捕捉玩家的任意鍵之間切換

parallel.waitForAny(
    function() os.pullEvent("key") end,
    function()
        while true do
            tMoves[math.random(1, #tMoves)]()
        end
    end
)

為小烏龜換裝備

之前介紹 Pocket Computer 的時候,有 equip/unequip 指令可以快速為 Pocket Computer 換週邊設備
小烏龜也是有的,相關程式碼在
/rom/programs/turtle/equip.lua 和 /rom/programs/turtle/unequip.lua
從 equip.lua 程式碼可以看到,每隻小烏龜只能在左邊或右邊安裝周邊設備
也就是上一回說到的,小烏龜最多安裝 2 個設備

local nSlot = tonumber(tArgs[1])
local sSide = tArgs[2]
if sSide == "left" then
    equip(nSlot, turtle.equipLeft)
elseif sSide == "right" then
    equip(nSlot, turtle.equipRight)
else
    printUsage()
    return
end

安裝的過程就是要先把 Ender Modem / Wireless Modem / Speaker .... 等等設備先放到小烏龜的儲物箱,然後直接指定儲物箱位置來安裝,如圖
而如果在同一個位置 left / right 反覆安裝,就會自動換掉之前安裝的設備
CC: Tweaked Turtle Equip/Unequip
CC: Tweaked Turtle Equip/Unequip

小烏龜的基本指令介紹到這裡
下一回讓它開始作業吧!


上一篇
Day26 小烏龜登場,麥塊的強大幫手
下一篇
Day28 小烏龜自動掘井挖隧道
系列文
在麥塊的農場裡寫 Lua30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言