無名殺代碼教程N(yùn)o.2——發(fā)動(dòng)條件
發(fā)動(dòng)條件是什么?
可以理解成是一個(gè)技能在發(fā)動(dòng)前,系統(tǒng)進(jìn)行判斷是否符合要求的一個(gè)過濾條件。如果符合,那么這個(gè)技能正常發(fā)動(dòng)效果,反之,則不發(fā)動(dòng)。 比如上篇講的【閉月】,我們?nèi)绻由弦稽c(diǎn)發(fā)動(dòng)條件,效果改為【結(jié)束階段,若你的體力值大于1,你可以摸一張牌】。 那么相較于原版的描述,各位能發(fā)現(xiàn)【若……】的不同,而這,就是發(fā)動(dòng)條件。 發(fā)動(dòng)條件一般寫在技能效果(
content:function()
)的上面,一般框架為——
filter: function(event, player) {
return …… ;
},
(event, player) 這里面的event和player都是參數(shù),不用管。
return也不用管,固定格式罷了。
要補(bǔ)充的就是return后面的省略號(hào),這才是你要在本技能加上的發(fā)動(dòng)條件內(nèi)容。 比如【若你的體力值大于1】,已知調(diào)取玩家體力值的函數(shù)為【player.hp】,大于的函數(shù)符號(hào)是【>】(英文),那么這個(gè)發(fā)動(dòng)條件該怎么寫呢? 很簡(jiǎn)單,如下: filter: function(event, player) { return
player.hp > 1
;
}, 在本技能中,這個(gè)
return player.hp > 1
其實(shí)也可以寫成
if (player.hp > 1) return true
true就是表示條件符合,可以發(fā)動(dòng)技能效果的意思。
那么我們反其道行之,不想讓他條件符合,該怎么辦呢?
只需要把true換成false即可。這么一來,就變成了——
【if (player.hp > 1) return false】
翻譯一下——
【若你的體力值大于1,則此技能不可發(fā)動(dòng)】
但問題來了,技能要求是體力值大于1能發(fā)動(dòng),那么該怎么改呢? 很簡(jiǎn)單,動(dòng)一下腦回路——
if (player.hp <= 1) return false;
return true;
翻譯一下——
若你的體力值不大于1,則此技能不可發(fā)動(dòng)。
此技能可以發(fā)動(dòng)。
現(xiàn)在可能有些人就懵了,又是return false,又是return true的,啥意思?
if函數(shù)簡(jiǎn)單來說,就是表一個(gè)判斷——
【if (player.hp <= 1)】即【如果你的體力值不大于1】
假設(shè)這個(gè)條件成立,那么執(zhí)行后面的內(nèi)容,即【return false】
反之如果你此時(shí)的體力值大于1,導(dǎo)致條件不成立,那么【return false】不會(huì)執(zhí)行
我們要知道return false的話這個(gè)技能就不能發(fā)動(dòng)了,而return true的話這個(gè)技能就又可以發(fā)動(dòng)了。
一旦return了false或者true,這個(gè)技能能不能發(fā)動(dòng)就已經(jīng)定下來了,filter框架下面的代碼,系統(tǒng)就不會(huì)再繼續(xù)讀取進(jìn)行判斷了。
首先第一段話很好理解,就是你體力值不大于1的時(shí)候,技能就肯定不能發(fā)動(dòng)了。畢竟已經(jīng)return false了,下面的代碼不用再看了。
系統(tǒng)在讀取你寫的代碼進(jìn)行條件判斷的時(shí)候,都是從上往下的順序來的。
但如果你此時(shí)體力值大于1,if函數(shù)的條件不成立,那么不會(huì)有【return false】的結(jié)果。 系統(tǒng)就會(huì)繼續(xù)往下看。 而下面,也就是第二段,是【return true】。 系統(tǒng)看到return true了,那么結(jié)果就是true了,就代表這個(gè)技能可以發(fā)動(dòng)了。 于是就執(zhí)行content:function()里面的內(nèi)容,發(fā)動(dòng)技能效果了。 而在【閉月】這里,也就是成功的【摸一張牌】了。 總結(jié)
好了,總結(jié)一下,寫一個(gè)技能的發(fā)動(dòng)條件,關(guān)鍵是看return后面的是什么,以及條件是否成立。 由于邏輯不僅限于一種,所以這個(gè)技能發(fā)動(dòng)條件的寫法也是多樣的。
①這是一種,很直接了當(dāng)
②這是另一種,也能成立 課后作業(yè)
那么,趁熱打鐵,來挑一個(gè)難度試試吧! ①【閉月】結(jié)束階段,若你的體力值小于3,你可以摸一張牌 ②【閉月】鎖定技。準(zhǔn)備階段,若你的體力值大于1且小于4,你摸兩張牌 ③【閉月】準(zhǔn)備階段,若你的手牌數(shù)大于1且體力值大于1,你可以棄置一張手牌,并摸三張牌
以下是寫作過程中會(huì)用到的函數(shù):
player.chooseToDiscard(true, 1, 'h'); //玩家必須棄置一張手牌
player.countCards('h'); //玩家當(dāng)前的手牌數(shù)量
&& //連接前后代碼的函數(shù),比如【player.hp > 1 && player.hp == 2】翻譯即【玩家的體力值大于1并且等于2(==表等于,=一般可用于賦值)】