|
楼主 |
发表于 2015-2-2 15:32:21
|
显示全部楼层
运算子与类型识别符
除了普通的运算子(>=, <=, !=, ==, <, >)之外,Userpatch 还提供了更多可用的运算子,它们有数学运算子、比较运算子以及类型识别符。
- 数学运算子可以用来做出差不多任何你能够想到的数学运算;
- 比较运算子可以比较任何类型的两组资料,譬如常数对常数、目标对策略值、策略值对常数、目标对常数等;
- 类型识别符用来告诉处理器下一个数值属于什么类型,三种类型包括常数、目标编号或策略值编号。
祇要你懂得运用运算子,想做到这些都是可能的。
类型识别符:用来告诉处理器下一个数值属于什么类型,三种类型识别符有:
c: :识别为常数(包括系统定义常数)
g: :识别为目标编号
s: :识别为策略值编号
当中有一个可能让人感到混乱的地方,那就是任何数值都能被识别成为任何一种资料类型。你可以说 g: militiaman ,然后它会将民兵的单位编号(74)转化作目标编号 74 ,同一道理也适用于策略值及目标。这些名称其实也就是某个数值的标签罢了,故此根本可以用作任何类型都行,但请在混用它们前确定你真的知道自己在什么!
比较运算子:比较运算子与 1.0c 内的六种运算子相同。唯一例外的是,你现在可以配合类型识别符来让运算子进行更多不同的比较运算。举例来说,你可以说 6 g:>= 5 而非 6 >= 5 ,前者比较的是目标 5 内的数值,后者比较对象却祇是简单的数值 5 。
数学运算子:主要用于 up-modify- 系列动作,其格式为 (up-modify-[goal, sn, or const] a 数学运算子 b),当中 a 与 b 分别代表两个数值,各种数学运算子包括有:
*:将 a 的数值乘以 b 的数值。
/:将 a 的数值除以 b 的数值,并舍入为整数,例如 1.5 = 2 。
z/:将 a 的数值除以 b 的数值,并且向下舍入,例如 1.5 = 1 。
+:将 a 的数值加以 b 的数值。
-:将 a 的数值减以 b 的数值。
mod:将 a 的数值除以 b 的数值,并且回报余数。
%*:以 b 的数值作为百分比值,并将 a 乘以它再回报其百分比值,亦即 (a * b) / 100 * 100。
%/:以 b 的数值作为百分比值,并将 a 除以它再回报其百分比值,亦即 (a * 100) / b * 100。
=:将 a 的数值设为 b 的数值。(不要与“==”混淆了)
min:回报两者间数值较低的一方。
max:回报两者间数值较高的一方。
示例:
比较运算子的示例如下:
- (up-compare-goal g-temp c:> 5) ;检查 g-temp 的数值是否大于 5
- (up-compare-goal g-temp g:> 5) ;检查 g-temp 的数值是否大于第 5 号目标的数值
- (up-compare-goal g-temp s:> 5) ;检查 g-temp 的数值是否大于第 5 号策略值的数值
- (up-compare-goal g-temp c:> militiaman) ;检查 g-temp 的数值是否大于民兵单位编号(74)
- (up-compare-goal g-temp c:== militiaman) ;检查 g-temp 的数值是否等于民兵单位编号(74)
- (up-compare-sn 5 g:== militiaman) ;检查策略值 5 的数值是否等于民兵单位编号(74)
复制代码
数学运算子的示例如下:首先分别定义 g-temp 及 g-number 的常数值为 3 和 5 。
- (defconst g-temp 3)
- (defconst g-number 5)
复制代码
然后,假设每组数学运算开始之前,当时 g-temp 的数值已经改变为 8 而 g-number 的数值已经改变为 3 :
- (up-modify-goal g-temp c:+ g-number) ;由于使用了常数识别符 c: ,所以加到 g-temp 的数值应该是 5 ,而当时 g-temp 的数值为 8 ,因此 8 + 5 = 13 ,於是 g-temp 為 13 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:+ g-number) ;将当时 g-temp 的数值 8 加以当时 g-number 的数值 3 ,因此 8 + 3 = 11 ,於是 g-temp 為 11 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:- g-number) ;将当时 g-temp 的数值 8 减以当时 g-number 的数值 3 ,因此 8 - 3 = 5 ,於是 g-temp 為 5 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:* g-number) ;将当时 g-temp 的数值 8 乘以当时 g-number 的数值 3 ,因此 8 * 3 = 24 ,於是 g-temp 為 24 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:/ g-number) ;将当时 g-temp 的数值 8 除以当时 g-number 的数值 3 ,并舍入为整数,因此 8 / 3 = 2.666 = 3(舍入) ,於是 g-temp 為 3 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:z/ g-number) ;将当时 g-temp 的数值 8 除以当时 g-number 的数值 3 ,并且向下舍入,因此 8 / 3 = 2.666 = 2(下舍),於是 g-temp 為 2 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:mod g-number) ;将当时 g-temp 的数值 8 除以当时 g-number 的数值 3 ,并且回报余数,因此 8/3 = 2 余 2 ,於是 g-temp 為 2 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:%* g-number) ;以当时 g-number 的数值 3 作为百分比值,并将当时 g-temp 的数值 8 乘以它,因此 (8 * 3) / 100 = 24 / 100 = 0.24 = 24%,於是 g-temp 為 24 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:%/ g-number) ;以当时 g-number 的数值 3 作为百分比值,并将当时 g-temp 的数值 8 除以它,因此 (8 * 100) / 3 = 800 / 3 = 266.7 = 267%(舍入),於是 g-temp 為 267 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:= g-number) ;将 g-temp 的数值设为当时 g-temp 的数值 3 ,於是 g-temp 為 3 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:min g-number) ;向 g-temp 回报两者间数值较小的一方,因为当时 g-number 的数值 3 小于当时 g-temp 的数值 8 而会回报 3 ,於是 g-temp 為 3 而 g-number 為 3 。
复制代码
- (up-modify-goal g-temp g:max g-number) ;向 g-temp 回报两者间数值较大的一方,因为当时 g-temp 的数值 8 大于当时 g-number 的数值 3 而会回报 8 ,於是 g-temp 為 8 而 g-number 為 3 。
复制代码
|
|