一個(gè)較復(fù)雜的需求

在開發(fā)業(yè)務(wù)需求的時(shí)候,往往策劃有時(shí)提出的需求不是那么簡單和合理,我在工作中遇到過很多次,有些是可以通過近似的結(jié)果來滿足需求,但有的不是那么簡單,比如下面的一個(gè)需求,在大部分游戲項(xiàng)目中可能都會遇到。

角色身上有十個(gè)部位,每個(gè)部位可以穿戴裝備,且對應(yīng)的裝備可以由碎片合成(可能在合成的時(shí)候也要花費(fèi)其他材料),且能穿戴需要花費(fèi)一定的資金和經(jīng)驗(yàn),某個(gè)碎片不足的時(shí)候,可能由另外的材料合成,大概需求是這些。

后來在開發(fā)完后出現(xiàn)兩個(gè)bug,其中一個(gè)是需求不明確(能在不同部位穿戴相同的裝備),另一個(gè)是后期加的需求,由另外同學(xué)在原代碼基礎(chǔ)上加的條件,因代碼位置不對導(dǎo)致可能有其他能合成的裝備,沒有機(jī)會合成和穿戴,進(jìn)而導(dǎo)致整個(gè)邏輯出問題。

其實(shí)這個(gè)需求是不難,但因?yàn)槟茏詣雍铣?,這里要考慮的是遞歸的深度,盡最大能力來滿足當(dāng)前可穿的,不能出現(xiàn)不能穿的卻被穿上,或者扣除材料出現(xiàn)負(fù)數(shù)。

比如A裝備合成需要材料1,2,3,數(shù)量10,15,20,花費(fèi)金幣300,需要條件X;B裝備合成需要材料1,2,3,數(shù)量8,10,11,花費(fèi)金幣500,要條件Y;玩家現(xiàn)在沒有A和B裝備,但有材料1,2,3,數(shù)量分別是10,15,20,金幣1000,條件Y;條件是后期功能完成后加的。

有問題的寫法是在能合成A時(shí),需要的材料先預(yù)扣除,但是在處理其他條件時(shí),發(fā)現(xiàn)A不能滿足X,導(dǎo)致后面的B沒機(jī)會被合成和穿戴,所以這里需要把對條件的判斷移到適合的位置,先過濾,然后再進(jìn)行合成。

因?yàn)檫@里合成是遞歸的,需要考慮什么時(shí)候停止,因?yàn)椴邉澋呐浔頂?shù)據(jù),可能會造成A->B->A這樣的循環(huán),如果中間再多層不是很容易發(fā)現(xiàn),那么程序很可能進(jìn)入死胡同。這里要么在導(dǎo)表時(shí)通過工具檢查配表,在提交時(shí)發(fā)現(xiàn)問題,要么在程序中,限制遞歸的次數(shù)。

再比如上面的需求,A裝備合成需要材料1,2,3,數(shù)量10,15,20,花費(fèi)金幣300,需要條件X;B裝備合成需要材料1,2,3,數(shù)量8,10,11,花費(fèi)金幣500,要條件Y;C裝備合成需要材料1,2,3,數(shù)量5,5,11,花費(fèi)金幣500,要條件Z;玩家現(xiàn)在沒有A/B/C裝備,但有材料1,2,3,數(shù)量分別是13,15,22,金幣1000,條件都滿足;這里看能合成A,或者B/C兩個(gè),因?yàn)锳/B/C裝備的屬性不一樣,穿戴A能提供10000戰(zhàn)斗力,穿戴B能提供6000,穿戴C能提供5000,為了尋求最優(yōu)化,這里是不能合成A的,需要把B和C進(jìn)行合成。

所以,問題就歸納為貪心或者背包類的算法問題,因?yàn)槲覍@塊沒有過多的深入,這里暫時(shí)不再分析算法本身的思想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容