我圍繞在「基本版」電腦已經二十多天了 ...
一開始先試著熟悉 Lua 語法,接著玩轉電腦週邊設備,最後是網路架設
電腦的基本功能大概熟個十之八九了~
今天來讓電腦升級吧!
升級公式如下,你只要有滿滿的黃金,就可以有強大的電腦,這真是直白乾脆 XD
玩過一番之後,歸納 Advanced Computer 的幾個特點如下:
以下逐一介紹探索~
這部分的體驗,直接執行 paint 小小畫家即可,這也是 CC: Tweaked 預先設計好的小程式
位置在 /rom/programs/fun/advanced/paint.lua
paint mypicture
有大約 16 個顏色可選擇,滑鼠點右下角可切換色筆和橡皮擦
來展現一下我繪畫的功力 ......
................
不過它儲存後,不是真的變成圖檔,而是副檔名 nfp 的純文字檔
關於滑鼠的支援,還有一個是 CC: Tweaked 設計好的小品遊戲
位置在 /rom/programs/fun/advanced/redirection.lua
直接輸入即可開始遊玩
redirection
這裡順便介紹,Advanced Computer 因為支援滑鼠功能,也相對有滑鼠相關事件
mouse_click, mouse_drag, mouse_up 這三個事件發生時,都可取得 button, x 座標, y 座標
mouse_scroll 則是滑鼠滾輪事件,可取得方向 direction 和 x 座標, y 座標
這部分在 paint.lua 和 redirection.lua 都有直接的應用可參考
多頁籤的支援,是來自 /rom/programs/advanced/multishell.lua
判斷的部分則是在
bios.lua #977
-- Run the shell
local ok, err = pcall(parallel.waitForAny,
function()
local sShell
if term.isColour() and settings.get("bios.use_multishell") then
sShell = "rom/programs/advanced/multishell.lua"
else
sShell = "rom/programs/shell.lua"
end
os.run({}, sShell)
os.run({}, "rom/programs/shutdown.lua")
end,
rednet.run
)
而背景與前景執行的部分,則可以使用 bg.lua 和 fg.lua
位置也是在 /rom/programs/advanced/
例如
bg gps locate
這樣就會自動開啟一個新的 Tab 去執行 GPS 定位,參考畫面如下
來順便看看 bg.lua 和 fg.lua 程式碼
bg.lua
if not shell.openTab then
printError("Requires multishell")
return
end
local tArgs = { ... }
if #tArgs > 0 then
shell.openTab(table.unpack(tArgs))
else
shell.openTab("shell")
end
fg.lua
if not shell.openTab then
printError("Requires multishell")
return
end
local tArgs = { ... }
if #tArgs > 0 then
local nTask = shell.openTab(table.unpack(tArgs))
if nTask then
shell.switchTab(nTask)
end
else
local nTask = shell.openTab("shell")
if nTask then
shell.switchTab(nTask)
end
end
從 bg, fg 原始碼可發現,必須支援 multishell 才可以跑,因為基本版的電腦無法執行
再來就是,兩個其實都是 shell.openTab
只是 fg 再多了個 shell.switchTab
所以事實上,它只是用 tabs 的視覺化來模擬前景和背景執行效果而已
你如果用 fg,仍然可以手動用滑鼠切換到原本的 tab
如果你仔細研究,會發現不管是 Computer、Advanced Computer、Pocket Computer、Turtle
事實上大家在 rom 裡面放的程式碼和檔案都是完全一樣的!
差別只在於預設搜尋程式的路徑不同,或是有的程式可以執行,有的不行!
除了前面看過的 shell.openTab、term.isColour() 和 settings.get("bios.use_multishell")
我們再來看看
startup.lua #4
local sPath = ".:/rom/programs"
if term.isColor() then
sPath = sPath .. ":/rom/programs/advanced"
end
if turtle then
sPath = sPath .. ":/rom/programs/turtle"
else
sPath = sPath .. ":/rom/programs/rednet:/rom/programs/fun"
if term.isColor() then
sPath = sPath .. ":/rom/programs/fun/advanced"
end
end
if pocket then
sPath = sPath .. ":/rom/programs/pocket"
end
if commands then
sPath = sPath .. ":/rom/programs/command"
end
if http then
sPath = sPath .. ":/rom/programs/http"
end
shell.setPath(sPath)
help.setPath("/rom/help")
sPath 變數就是我們直接輸入指令的時候,電腦預設要搜尋的資料夾位置
就我所知,turtle、pocket、commands 實際的值會是空的 table
我猜這是在 Java 階段就賦予的值,分別可代表 Turtle、Pocket Computer、Command Computer
term.isColor() 則代表則 Advanced Computer
因此,不同的工具在執行時,會自動在不同的路徑搜尋,不會錯亂
Advanced Monitor 其實就是彩色版的螢幕,為了搭配 Advanced Computer
如果你將 Advanced Computer 接上基本版的螢幕,會發現無法在大螢幕上執行 paint 繪圖
除此之外,接上大的 Advanced Monitor 之後,你甚至可以直接在大螢幕上作畫
依靠的是螢幕本上的 monitor_touch 事件
這邊我只給大家參考畫面,請大家自行嘗試了XD
而因為電腦接了三台螢幕,各有不同的名稱,我實際上執行的指令如下
bg monitor monitor_5 paint mypicture
bg monitor monitor_4 edit receiver.lua
bg monitor monitor_2 edit speaker.lua
今天分享到這裡,謝謝大家收看~