跳转到内容

变量和常数

变量和常数本质上是值的"容器". 各有名相与相值相. SKIP_ee69985512974cbcb20dd51ba373fed 5 (英语). 含有用户及其代码可以设定的变量,以及仅由处理器设定且用户不能更改的常数。

要了解变量或常数的可能数据或参数类型,请参见词汇表.

变量

创建和改变变量

变量是其名称所暗示的;这个值可以被改变.

例如,在本代码中: set myVariable 3,则 set 指令将创建一个名为 myVariable,并赋予其价值 3。 。 。 。

后来,这可以改变其价值为: 9数字 : set myVariable 9。 。 。 。

注意我们如何使用同样的指令来创建和改变变量 。 这是因为 如果它正在变化的变量不存在,一个指令会先创建它. 如果你知道Python, 你可能已经意识到 它的工作原理相同。

另一个例子是使用 sensor数字 : sensor playerX playerUnit @x (或Sensor playerX=为视觉编辑器在玩家Unit中的x).

假设玩家的位置是 141, 20,一个名为 playerX 将先创建,然后指定一个值为 141。 。 。 。

然而,我们还有一个变数 在例子称为 playerUnit。 。 。 。 那个变量是 参数。 。 。 。 参数是指令的输入值。 这样的话,我们也许有 playerUnitradar 指导。 如果不提供参数或参数无效,该指令将不会执行.

数据类型和隐含转换

当然,变量中的数值有不同类型,具体针对不同的来源和目的,例如: Unit 单位, number 用于任何数字等。 您可以在词汇表中找到所有这些词汇的列表 。

SKIP_ee69985512974cbcb20dd51ba373fed 5 (英语). 逻辑上还有这个变量 隐性转换。 。 。 。 这意味着,如有必要,它将将变量的值从一种类型转换为另一种类型.

如果一项指示是 number但它需要一个 Object,将转换为 null。 。 。 。 如果一个指令需要 number,但被赋予 Object,如果对象不是 null,否则0。

实例:

  • 53 - > 开口 null
  • null - > 开口 零点,
  • Object 它是一个硅临界-> 1个

这个 print 指令是唯一需要 String 作为投入,所以其规则在手册本身的部分中被表述.

变量命名

正确命名变量是一般编程时需要掌握的重要技能. 这有助于使代码更容易被读取和理解. 因此,这可以使人们更容易学习或修补你的代码.

可变名称可以包含任何可键入字符. 然而,它们不能纯粹是数字,因为它将使用实际数字。

在大多数mlog码中通常的取名公约是"骆驼Case",它的例子本身就是. 使用骆驼命名的变量实例 案件为: playerX, (中文(简体) ). coreFound, (中文(简体) ). vertexAngle。 。 。 。

在命名变量时,要确保它们描述性但简短. 它们必须说明它们所拥有的价值或其目的。 同时,它们不应该是完整的句子或者横跨整页,或者太短,以致于变得混乱. 可以使用缩写,缩写,或用更短的名词来使其更加简洁.

每个人都有自己的特有风格和喜好,但尝试从mlog等语言的代码的好例子中学习,同时保持与通俗风格相近.

处理器变量和常数

常数也持有值,但不能被改变. 每个处理器都有这些常数和内置变量:

处理器

@ 这 constant Building

A级 Building 代表处理器本身的对象。 你可以用这个 sensor 查找处理器的各种属性。

@ 这x constant number

处理器的x坐标.

@ 这首歌 constant number

处理器的y坐标.

@ ipt constant number

每个勾选符执行指令的数量( 60 个勾/秒) 。

  • 微处理器 - > 开口 2个
  • 逻辑处理器 - > 第8条
  • 超处理器 - > 25个

@ 计数器 variable number

表示处理器将读取代码的下一行的变量,相当于 %IP 在x86时。 它可以像其他变量一样被改变,作为进行跳跃的另一种方式.

设置( 高级) 实例 @counter 跳转到函数,然后跳回呼叫者:

op add retAddr @counter 1 # Save where we will continue after the function returns by adding 1 to the counter
set @counter myFunc       # Jump to the line representing myFunc
...
set @counter retAddr      # Return to the line set earlier after the function is called

常数等于与处理器相连的建筑物数量. 当块被链接或未链接时,它被处理器所改变.

你也可以用这个 getlink 以环绕所有连接的建筑物,例如:

set linkIter 0                  # Create iterator variable
getlink block linkIter          # Get Building Object of the "linkIter"th linked building.
# Do what you want with the building here
jump 1 lessThan linkIter @links # Loop

constant Building

这真的是多个常数,每个建筑都有一个与处理器相连. 每当建筑物与处理器脱钩或连接在一起时,就将其取出或添加。

buildingName 代表大楼 内部名称,可以在维基文库中找到。

n 开始于 1 , 并随每栋连接的建筑增加。 有点像 n一种类型的建筑。

这可能有点难理解,所以这里有一些例子:

  • 连接到处理器的第一个散点 : scatter1
  • 第三个连线: ripple3
  • 第二个激光钻头连结: drill2
  • 第十一届斯波尔出版社链接: press11

也可以在选择处理器时查看每个链接建筑的"恒定名"上方.

杂项

@ 单位 constant Unit

代表当前绑定单位的常数 。 它只有在处理器拆卸一个单元时,或者绑定另一个单元时才会改变. 使用University 指令访问,例如 ucontrol, (中文(简体) ). ulocate,以及 uradar。 。 。 。 由于它是一个单位对象,您也可以使用它与 sensor。 。 。 。

这是mlog中单位控制的核心部分; 一次只有一个单位可以约束。 不过,你可以在变量中参考,比如 set unitReference @unit。 。 。 。 但是,该变量不能用来控制引用单位。 只能用于与其他单位核对或获取相关信息. 因此,你可以把它看作是"单位身份".

@ 时间 constant number

代表当前 UNIX 时间戳 以毫秒计。 。 。 。

@ tick (帮助) constant float

表示自地图开始以来的勾数(60分/秒).

地图 constant number

地图的宽度,以瓷砖为单位.

@maph( 翻译) : constant number

地图高度,以瓷砖计.