我围绕在「基本版」电脑已经二十多天了 ...
一开始先试着熟悉 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
今天分享到这里,谢谢大家收看~
渗透测试流程 与客户进行签约,取得合法的测试权限後,以下为签约与接洽需要注意: 企业是否了解渗透测...
人的科技文明发展始终来自於人性 藉由现在的科技技术之发展,我们可以非常成熟的运用机器学习、深度学习及...
适用於端点的Microsoft Defender 是一个平台,其设计诉求是要协助 企业网路预防、侦测...
接续昨天,来介绍第四种、第五种以及第六种方法! 4.代替Java String replace():...
这次非常久才发布学习纪录,因为最近当兵的关系,能学习的时间又被压缩了,但我还是会努力播出时间练习的。...