无名杀代码教程No.2——发动条件
发动条件是什么?
可以理解成是一个技能在发动前,系统进行判断是否符合要求的一个过滤条件。如果符合,那么这个技能正常发动效果,反之,则不发动。 比如上篇讲的【闭月】,我们如果要加上一点发动条件,效果改为【结束阶段,若你的体力值大于1,你可以摸一张牌】。 那么相较于原版的描述,各位能发现【若……】的不同,而这,就是发动条件。 发动条件一般写在技能效果(
content:function()
)的上面,一般框架为——
filter: function(event, player) {
return …… ;
},
(event, player) 这里面的event和player都是参数,不用管。
return也不用管,固定格式罢了。
要补充的就是return后面的省略号,这才是你要在本技能加上的发动条件内容。 比如【若你的体力值大于1】,已知调取玩家体力值的函数为【player.hp】,大于的函数符号是【>】(英文),那么这个发动条件该怎么写呢? 很简单,如下: filter: function(event, player) { return
player.hp > 1
;
}, 在本技能中,这个
return player.hp > 1
其实也可以写成
if (player.hp > 1) return true
true就是表示条件符合,可以发动技能效果的意思。
那么我们反其道行之,不想让他条件符合,该怎么办呢?
只需要把true换成false即可。这么一来,就变成了——
【if (player.hp > 1) return false】
翻译一下——
【若你的体力值大于1,则此技能不可发动】
但问题来了,技能要求是体力值大于1能发动,那么该怎么改呢? 很简单,动一下脑回路——
if (player.hp <= 1) return false;
return true;
翻译一下——
若你的体力值不大于1,则此技能不可发动。
此技能可以发动。
现在可能有些人就懵了,又是return false,又是return true的,啥意思?
if函数简单来说,就是表一个判断——
【if (player.hp <= 1)】即【如果你的体力值不大于1】
假设这个条件成立,那么执行后面的内容,即【return false】
反之如果你此时的体力值大于1,导致条件不成立,那么【return false】不会执行
我们要知道return false的话这个技能就不能发动了,而return true的话这个技能就又可以发动了。
一旦return了false或者true,这个技能能不能发动就已经定下来了,filter框架下面的代码,系统就不会再继续读取进行判断了。
首先第一段话很好理解,就是你体力值不大于1的时候,技能就肯定不能发动了。毕竟已经return false了,下面的代码不用再看了。
系统在读取你写的代码进行条件判断的时候,都是从上往下的顺序来的。
但如果你此时体力值大于1,if函数的条件不成立,那么不会有【return false】的结果。 系统就会继续往下看。 而下面,也就是第二段,是【return true】。 系统看到return true了,那么结果就是true了,就代表这个技能可以发动了。 于是就执行content:function()里面的内容,发动技能效果了。 而在【闭月】这里,也就是成功的【摸一张牌】了。 总结
好了,总结一下,写一个技能的发动条件,关键是看return后面的是什么,以及条件是否成立。 由于逻辑不仅限于一种,所以这个技能发动条件的写法也是多样的。
①这是一种,很直接了当
②这是另一种,也能成立 课后作业
那么,趁热打铁,来挑一个难度试试吧! ①【闭月】结束阶段,若你的体力值小于3,你可以摸一张牌 ②【闭月】锁定技。准备阶段,若你的体力值大于1且小于4,你摸两张牌 ③【闭月】准备阶段,若你的手牌数大于1且体力值大于1,你可以弃置一张手牌,并摸三张牌
以下是写作过程中会用到的函数:
player.chooseToDiscard(true, 1, 'h'); //玩家必须弃置一张手牌
player.countCards('h'); //玩家当前的手牌数量
&& //连接前后代码的函数,比如【player.hp > 1 && player.hp == 2】翻译即【玩家的体力值大于1并且等于2(==表等于,=一般可用于赋值)】