制霸塞普罗!Processor编程从入门到入土
你好世界!
作为一门编程语言学习的第一步,让我们也从输出“Hello World!”开始吧~
我们先从输出纯文本信息开始,请确保信息板在逻辑块的控制范围内并已被标记为message1
。(点击逻辑块,再点击信息板即可)
需要注意,逻辑块中需要先将输出内容使用Print
指令将输出加入缓存,再使用Print Flush
将内容输出。
Print
"Hello World!"
Print Flush
to message1
这样我们就完成了输出Hello World!
获取数据!
好,让我们来介绍一下如何获取单位的数据,我们需要用到Sensor
指令,比如我们需要获取核心nucleus1里铜的含量,就应该这样写:
Sensor
CuNum = @copper in nucleus1
需要注意,和Python一样,我们这里的变量赋值即定义,无需提前声明。(允许中文变量名)另外,处理器会不断按顺序重复执行给出指令而非只运行一次。
之后,我们使用Print
指令将铜的数量输出即可。对于Print
指令,如果包含双引号,则输出引号中的字符串;否则,输出对应变量的值。
那么我们输出核心中铜数量的代码是:
Sensor
CuNum = @copper in nucleus1
Print
"铜="
Print
CuNum
Print Flush
to message1
运行结果:
当然,Sensor
指令可以获取的数据有很多,你可以获取单位目前的状态,贮备的物品或液体数量,亦或是单位的建造进度。比如,你可以使用@powerNetIn
与@powerNetOut
来监控一个工厂的电量是否出现了问题。
你先别急
唔……前面的内容只是让你快速上手而已。我们的基础内容铺垫尚未完成——
控制顺序
End
指令:停止本轮循环,从头开始运行。
Stop
指令:停止本处理器运行。
Wait
指令:停顿相应秒数。
Wait
0.5 sec
Jump
指令:经过条件判断后,选择是否跳转至命令第几行。
Jump -> 4
if NumCu == 1
你应该可以在代码行中看到,Jump
指令的if判断有多种关系,比如大于小于。
特别的是,not
为不相等,等同于C系列语言中的!=
。
另外,使用相等==
时,查询失败的变量会被标记为null
,比较数值时会将值定为0
;如果变量不是数字,而在与数字比较时,会将值定为1
。你可以使用严格相等===
来避免数据的强制转换。(这么做的唯一用处是检查null
对象)
数值更改
对于变量的数据更改,需要使用Operation
指令来完成(而不是在判断语句中直接进行),你可以在程序块中看到多种数据操作。
需要说明的是,floor
参数是指向下取整,ceil
参数是指向上取整。
Operation
Power = PowerIn - PowerOut
单位更名
这时候就有可爱的小伙伴要问了,如果处理的单位过多,打全名是不是过于复杂?有没有更改单位标记或者映射到单位的变量呢?当然,它就是Get Link
指令!
Get Link
Centre = link #1
比如这里,我们就将第二个标记(#0
是第一个)的单位生成了导向它的变量Centre
。
对于一个控制器接管的节点数量,可以用变量@link
获取。
彩色的告示牌
我们可以在Print
指令的字符串中加入[color]
进行染色,比如[red]
,没有染色指令颜色默认为[white]
。染色指令在Print
缓存中会对所有后面的字符有效,类似Minecraft基岩版中的§4
。
控制方块!
来到我们的核心环节,控制建筑的指令——Control
指令!
建筑物开关
我们为单位enabled
赋值为0时,建筑单位关闭;否则,单位开启:
Control
set enabled Unit01 to 0.2
比如,这里我们就将变量Unit01
导向的建筑单位打开了。
小试身手
现在我们来完成一下多个钍反应堆在无冷却液的情况下控制自动停转,且能在冷却液恢复时自动开启的代码。
Get Link
generator = link #i
Sensor
water = @cryofluid in generator
Operation
flag = water > 20
Control
set enabled of generatoe to flag
Operation
i = i + 1
Operation
i = i % @links
我们用变量i
的不断循环来反复扫描所有受逻辑块覆盖的反应堆,检测是否持有足够的冷却液,在不足时关闭,反之则打开。