上一回讲的是透过数据机连结各种电脑周边
今天来分享数据机更强大的功能,传递讯息
可以先查询 modems 说明文件
help modems
可以看到 modem 的指令很简单,只有几个如下
我们先试试用 Wired Modem 连接两台电脑
并且跟上次一样,两端的数据机都要按下滑鼠右键,让它出现红色框表示连结成功
接着可以自定义谁是传送端电脑,谁是接收端电脑
以下是我的参考程序码
传送端的 channel 不需要 open,这是实测结果,我也不知道为什麽
至於 replyChannel 则是可有可无,如果有打算接收回应,就需要 open,否则会收不到回应讯息
从程序码可看出,我这台电脑接了左右两台数据机,并各自连接一台电脑
也就是说,我可以同时传送讯息给多台电脑
senderChannel = 123 -- channel 自定义 0 ~ 65535
replyChannel = 456
-- modem.open(senderChannel)
print('modem is open: ' .. tostring(modem.isOpen(senderChannel)))
print('modem is wireless: ' .. tostring(modem.isWireless(senderChannel)))
modemLeft = peripheral.wrap('left');
modemRight = peripheral.wrap('right');
modemLeft.open(replyChannel)
modemRight.open(replyChannel)
modemLeft.transmit(senderChannel, replyChannel, "hello do you hear me ?")
modemRight.transmit(senderChannel, replyChannel, "how are you ?")
这是接收端的程序码,接收讯息的 channel 一定要打开,否则收不到讯息
senderChannel = 123
modem = peripheral.wrap('left');
modem.open(senderChannel)
print('modem is open: ' .. tostring(modem.isOpen(senderChannel)))
print('modem is wireless: ' .. tostring(modem.isWireless(senderChannel)))
event, side, senderChannel, replyChannel, msg, distance = os.pullEvent("modem_message")
print("event: " .. event) -- 事件名称:modem_message
print("side: " .. side) -- 哪个方向的数据机收到讯息:left, right, front, back, top, bottom
print("sender channel: " .. senderChannel) -- 收到讯息的 channel: 123
print("reply channel: " .. replyChannel) -- 可以回应讯息的 channel: 456
print("message: " .. msg) -- 收到的讯息内容
print("distance: " .. distance) -- 两台数据机的距离
同样的,如果要回应讯息,就使用 transmit API 即可,不过 channel 顺序要对调
-- Reply message
modem.transmit(replyChannel, senderChannel, "I heared you")
-- 不打算继续收讯息,可以关掉特定数据机的 channel
peripheral.wrap(side).close(senderChannel)
-- 或是直接关闭所有 channel
peripheral.wrap(side).closeAll()
那麽,可以传送和回应都用一个 channel 就好吗?
当然可以~ 这部分其实就是玩家自定义规则即可,CC: Tweaked 只是留这个弹性给大家发挥
这部分,电脑也自动帮我们做好序列化、反序列化了,真是太强大了!
传输不需要任何加工,收到的时候也还是个 table 结构
modem.transmit(senderChannel, replyChannel, { 1, 2, 3 })
但是问题来了,如果每次要传送到远端的电脑,就要拉线,那不累死吗 ...
这跟实体世界的概念是一样的,都什麽时代了还在到处布线
我们来试试 Wireless Modem,它的 API 用法跟 Wired Modem 其实是完全一样的
但是具有这样的优点
而它的无线传输可以多远呢?
我实际做了测试,如下图,接收端电脑在遥远的彼方 ... (远目)
在接收端收到讯息後,我将距离印出来,可以得知最远的传输距离,应该不会超过 64 格方块
如果是原本的麦块世界,要拉 64 格距离的遥控
要一堆红石,中间还要穿插约 5, 6 个中继器,多累啊!
但是说到红石,我们可以透过红石机关操控麦块世界的全自动、半自动化
那电脑呢?总不能真的只是在麦块世界打电脑写 Code .....
这点 CC: Tweaked 也准备好了,可以参考
/rom/programs/redstone.lua
参考它一小段语法即可,也就是
redstone.setOutput('right', true) -- 将电脑右方输出红石讯号!
我们可以在接收端电脑收到网路讯号後,接着启动红石讯号
接下来的应用就很丰富了,对吧!
<<: Day 22 | 状态管理套件 MobX - 基本使用
>>: 【Day 20】Python 一行内输入多个数字、多个字串及好用的刷题网站推荐
大家好,我是YIYI,今天我要来制做体重的页面。 点哪些地方可以进到这个页面呢? 第一个是从HOME...
前言 今天要体验的工具位於Kali的09-Sniffing & Spoofing分类,这类的...
目前因为关系企业需要单独独立一间公司出来,原本在总公司底下的AD OU群组必须要汇出单独分开,到另外...
识别符号 用来标示函式、变数,或者使用者自定专案的名称,识别符号可用大写字母(A 到 Z)、小写字母...
针对主动情蒐 主动情蒐指主动跟目标进行互动,会透过工具枚举所需的资讯,本系列文会介绍以下几种工具。 ...