觸發(fā)結(jié)構(gòu)——5.5隨機(jī)觸發(fā)(上)
在一張地圖中,大部分的東西都是早已確定的,因?yàn)榈貓D作者需要保證玩家的體驗(yàn),以及防止任何超出作者預(yù)料的事情發(fā)生。作為地圖作者,他對自己做的地圖應(yīng)該是十分熟悉的,熟悉到他寫好的任何時(shí)間在任何地方發(fā)生的任何事他都應(yīng)該了解。
然而,地圖作者制作的內(nèi)容通常都不會(huì)保密,甚至出于某些考慮還會(huì)主動(dòng)向玩家公開。所以,在經(jīng)過反復(fù)進(jìn)行戰(zhàn)役或?qū)Φ貓D文件的仔細(xì)研究后,玩家完全可以像作者一樣熟悉地圖,至少接近作者的熟悉度。然后,一部分玩家就可以針對地圖上的各種機(jī)制,研究出反制措施,或者通過合理安排操作來降低戰(zhàn)役的難度,這種行為通常被稱為背板。地圖作者通常不會(huì)對這樣的行為加以限制(因?yàn)橄拗拼胧┮彩强梢员煌婕野l(fā)現(xiàn)甚至破解的,通常會(huì)費(fèi)力不討好),但是,作者可以在地圖中加入隨機(jī)觸發(fā)。
地圖作者可以且應(yīng)該能了解到隨機(jī)觸發(fā)的總體效果,即各種情況的出現(xiàn)概率。但是,地圖作者不能預(yù)知在玩家游玩戰(zhàn)役的時(shí)候,實(shí)際隨機(jī)出現(xiàn)的是哪一種情況。所以,隨機(jī)觸發(fā)可以用來限制上述的背板行為(但玩家可以通過多次重開來獲取理想的隨機(jī)情況)。另外,由于戰(zhàn)役地圖中的內(nèi)容都是作者提前安排好的,玩家在多次游玩同一張地圖的時(shí)候遇到的情況是相同的。隨機(jī)觸發(fā)可以避免這一情況,增加玩家游玩的不確定性和趣味性。另一種具有相似的特點(diǎn)和效果的是選擇觸發(fā),地圖作者主動(dòng)提供給玩家數(shù)個(gè)選擇,然后根據(jù)玩家的選擇執(zhí)行接下來的觸發(fā),可以視為由玩家主導(dǎo)的主動(dòng)隨機(jī)觸發(fā),這里不再詳述。
?
在地圖編輯器中,目前能夠穩(wěn)定提供真隨機(jī)效果的,只有觸發(fā)條件中的51號(hào),隨機(jī)延時(shí),下文將介紹幾種簡單的隨機(jī)觸發(fā)寫法。
?
隨機(jī)觸發(fā)實(shí)現(xiàn)的是隨機(jī)效果,并不會(huì)綁定刷兵,但考慮到刷兵是隨機(jī)觸發(fā)的最大需求,本節(jié)內(nèi)容以隨機(jī)觸發(fā)刷兵舉例。熟練掌握隨機(jī)觸發(fā)的讀者可以將刷兵更改為戰(zhàn)役地圖中可能出現(xiàn)的其他事件。
?
單隨機(jī)延時(shí)刷兵:
只需要一個(gè)觸發(fā),設(shè)置為重復(fù)觸發(fā),觸發(fā)條件為隨機(jī)延時(shí)X秒,觸發(fā)結(jié)果為7/80/107號(hào)結(jié)果刷兵。在該觸發(fā)被允許后,將會(huì)以0.5X到1.5X秒的間隔重復(fù)刷出觸發(fā)結(jié)果中的小隊(duì)。
戰(zhàn)役中,通常一個(gè)小隊(duì)是遠(yuǎn)遠(yuǎn)不夠的,此時(shí)需要重復(fù)編寫數(shù)個(gè)如上的隨機(jī)觸發(fā)。但這會(huì)帶來一個(gè)問題:由于延時(shí)的不確定性,這些隨機(jī)觸發(fā)有可能會(huì)在同時(shí)或很接近的時(shí)間內(nèi)同時(shí)刷出大量部隊(duì),這可能會(huì)造成游戲難度的較大波動(dòng),以及對玩家的電腦造成一定程度的卡頓。
?
隨機(jī)延時(shí)循環(huán)觸發(fā):
設(shè)置數(shù)個(gè)觸發(fā),例如觸發(fā)A、B、C,均設(shè)置為重復(fù)觸發(fā),條件均為隨機(jī)延時(shí)X,Y,Z秒,觸發(fā)結(jié)果為7/80/107號(hào)結(jié)果刷兵。同時(shí),觸發(fā)A的結(jié)果添加禁止A,允許B;觸發(fā)B的結(jié)果添加禁止B,允許C;觸發(fā)C的結(jié)果添加禁止C,允許A。使用時(shí),可以允許A、B、C中任意一個(gè)觸發(fā),然后該觸發(fā)組會(huì)按照A、B、C、A的順序循環(huán)觸發(fā)。這樣,刷出的小隊(duì)順序是固定的,但小隊(duì)刷出的時(shí)間間隔會(huì)有0.5~1.5倍的變化。
考慮到玩家通常對循環(huán)刷兵的時(shí)間間隔變化并不敏感,不建議使用該類觸發(fā)進(jìn)行大規(guī)模刷兵,也可能會(huì)出現(xiàn)與多個(gè)單隨機(jī)延時(shí)刷兵相同的問題。但是,如果隨機(jī)延時(shí)的時(shí)間足夠長,例如,進(jìn)行一輪刷兵的延時(shí)平均值在10min以上,平均每個(gè)小隊(duì)的延時(shí)平均值在4min以上,在具有一定規(guī)模的戰(zhàn)役中,玩家會(huì)難以記住整個(gè)刷兵循環(huán)中的所有小隊(duì),而傾向于認(rèn)為小隊(duì)是隨機(jī)刷新的。使用此類隨機(jī)觸發(fā)刷出一些高威脅高延時(shí)或是高隱蔽性的小隊(duì),以及增加循環(huán)觸發(fā)的小隊(duì)數(shù)量,可以明顯提高觸發(fā)的效果。
?
固定平均間隔隨機(jī)刷兵:
首先設(shè)置兩個(gè)觸發(fā)X和Y,X的條件是13號(hào)固定延時(shí)X0秒,結(jié)果是禁止X允許Y;Y的條件是固定延時(shí)Y0秒,結(jié)果是禁止Y允許X。這兩個(gè)觸發(fā)控制隨機(jī)刷兵的延時(shí)時(shí)間,時(shí)間為X0+Y0秒,如果觸發(fā)X和Y其中之一的延時(shí)時(shí)長設(shè)置為總延時(shí)時(shí)長,則另一個(gè)的條件可以寫為延時(shí)0秒或8號(hào)任何事件,通常情況下這些寫法沒有明顯差別。
然后設(shè)置數(shù)個(gè)單隨機(jī)延時(shí)觸發(fā),例如觸發(fā)A、B、C,分別隨機(jī)延時(shí)A0,B0,C0秒。每個(gè)單隨機(jī)延時(shí)觸發(fā)增加額外的觸發(fā)結(jié)果:禁止觸發(fā)A、B、C。這樣設(shè)置可以保證:當(dāng)觸發(fā)A、B、C中其中一個(gè)執(zhí)行了觸發(fā)結(jié)果,會(huì)同時(shí)禁止三個(gè)觸發(fā),保證每一輪隨機(jī)刷兵只有一個(gè)觸發(fā)結(jié)果被執(zhí)行,同時(shí)保證三個(gè)觸發(fā)能夠繼續(xù)進(jìn)行下一輪的隨機(jī)刷兵。
最后,在觸發(fā)X的結(jié)果中添加允許觸發(fā)A、B、C,這組觸發(fā)就寫完了。使用時(shí),外部觸發(fā)允許觸發(fā)X,X會(huì)允許A、B、C、Y。A、B、C隨機(jī)執(zhí)行一個(gè)觸發(fā)結(jié)果后自行禁止,觸發(fā)Y在延時(shí)Y0秒后會(huì)重新允許觸發(fā)X進(jìn)行下一輪隨機(jī)刷兵。上述順序較接近觸發(fā)執(zhí)行的順序,讀者更容易理解,讀者在熟練理解此類隨機(jī)觸發(fā)寫法后可自行決定編寫順序。
這組觸發(fā)比之前的稍微復(fù)雜一些,有一些注意事項(xiàng)。隨機(jī)延時(shí)A0、B0、C0的時(shí)間是可以不同的,這會(huì)影響各個(gè)觸發(fā)的刷兵刷出概率。目前暫時(shí)無法確認(rèn)51號(hào)條件的隨機(jī)延時(shí)分布遵循什么規(guī)律,為了便于計(jì)算,我通常按延時(shí)均勻分布計(jì)算,但可能與實(shí)際情況出現(xiàn)誤差。觸發(fā)Y的延時(shí)Y0應(yīng)足夠長,具體值應(yīng)大于A0、B0、C0中最大值的1.5倍。這可以保證當(dāng)觸發(fā)Y允許觸發(fā)X時(shí),一定有一組刷兵已經(jīng)刷出,觸發(fā)A、B、C已經(jīng)為禁止?fàn)顟B(tài)。如果Y0不能滿足上述條件,可能會(huì)出現(xiàn)丟失一次至數(shù)次刷兵小隊(duì)甚至隨機(jī)刷兵觸發(fā)崩潰的后果,而固定延時(shí)X0除了在初始允許時(shí)增加一段延時(shí)外基本無作用(兩個(gè)隨機(jī)刷兵之間的延時(shí)最小為X0+對應(yīng)A0/B0/C0*0.5+上一個(gè)隨機(jī)刷兵的實(shí)際延時(shí)長度與Y0之間的差),所以我通常且很建議將X0設(shè)為0或8號(hào)條件,而用Y0控制兩個(gè)隨機(jī)刷兵之間的平均時(shí)間間隔。這組觸發(fā)實(shí)現(xiàn)的效果為:在每個(gè)Y0秒長的時(shí)間內(nèi),觸發(fā)A、B、C中隨機(jī)執(zhí)行一個(gè)來隨機(jī)刷出一個(gè)小隊(duì),且小隊(duì)之間的最小間隔至少為0.5*A0/B0/C0。
?
考慮到文章篇幅,使用局部變量的隨機(jī)刷兵寫法將會(huì)在后續(xù)章節(jié)敘述。