制霸塞普罗!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的不断循环来反复扫描所有受逻辑块覆盖的反应堆,检测是否持有足够的冷却液,在不足时关闭,反之则打开。