在開發(fā)業(yè)務(wù)需求的時候舟舒,往往策劃有時提出的需求不是那么簡單和合理瞭吃,我在工作中遇到過很多次,有些是可以通過近似的結(jié)果來滿足需求杜跷,但有的不是那么簡單傍念,比如下面的一個需求,在大部分游戲項目中可能都會遇到葛闷。
角色身上有十個部位憋槐,每個部位可以穿戴裝備,且對應(yīng)的裝備可以由碎片合成(可能在合成的時候也要花費其他材料)淑趾,且能穿戴需要花費一定的資金和經(jīng)驗阳仔,某個碎片不足的時候,可能由另外的材料合成扣泊,大概需求是這些近范。
后來在開發(fā)完后出現(xiàn)兩個bug嘶摊,其中一個是需求不明確(能在不同部位穿戴相同的裝備),另一個是后期加的需求评矩,由另外同學(xué)在原代碼基礎(chǔ)上加的條件叶堆,因代碼位置不對導(dǎo)致可能有其他能合成的裝備,沒有機會合成和穿戴斥杜,進而導(dǎo)致整個邏輯出問題蹂空。
其實這個需求是不難,但因為能自動合成果录,這里要考慮的是遞歸的深度上枕,盡最大能力來滿足當(dāng)前可穿的,不能出現(xiàn)不能穿的卻被穿上弱恒,或者扣除材料出現(xiàn)負(fù)數(shù)辨萍。
比如A裝備合成需要材料1,2返弹,3锈玉,數(shù)量10,15义起,20拉背,花費金幣300,需要條件X默终;B裝備合成需要材料1椅棺,2,3齐蔽,數(shù)量8两疚,10,11含滴,花費金幣500诱渤,要條件Y;玩家現(xiàn)在沒有A和B裝備谈况,但有材料1勺美,2,3碑韵,數(shù)量分別是10赡茸,15,20泼诱,金幣1000坛掠,條件Y赊锚;條件是后期功能完成后加的掰派。
有問題的寫法是在能合成A時缠劝,需要的材料先預(yù)扣除独悴,但是在處理其他條件時,發(fā)現(xiàn)A不能滿足X友多,導(dǎo)致后面的B沒機會被合成和穿戴,所以這里需要把對條件的判斷移到適合的位置堤框,先過濾域滥,然后再進行合成。
因為這里合成是遞歸的蜈抓,需要考慮什么時候停止启绰,因為策劃的配表數(shù)據(jù),可能會造成A->B->A這樣的循環(huán)沟使,如果中間再多層不是很容易發(fā)現(xiàn)委可,那么程序很可能進入死胡同。這里要么在導(dǎo)表時通過工具檢查配表腊嗡,在提交時發(fā)現(xiàn)問題着倾,要么在程序中,限制遞歸的次數(shù)燕少。
再比如上面的需求卡者,A裝備合成需要材料1,2客们,3崇决,數(shù)量10,15底挫,20嗽桩,花費金幣300,需要條件X凄敢;B裝備合成需要材料1碌冶,2,3涝缝,數(shù)量8扑庞,10,11拒逮,花費金幣500罐氨,要條件Y;C裝備合成需要材料1滩援,2栅隐,3,數(shù)量5,5租悄,11谨究,花費金幣500,要條件Z泣棋;玩家現(xiàn)在沒有A/B/C裝備胶哲,但有材料1,2潭辈,3鸯屿,數(shù)量分別是13,15把敢,22寄摆,金幣1000,條件都滿足修赞;這里看能合成A冰肴,或者B/C兩個,因為A/B/C裝備的屬性不一樣榔组,穿戴A能提供10000戰(zhàn)斗力熙尉,穿戴B能提供6000,穿戴C能提供5000搓扯,為了尋求最優(yōu)化检痰,這里是不能合成A的,需要把B和C進行合成锨推。
所以铅歼,問題就歸納為貪心或者背包類的算法問題,因為我對這塊沒有過多的深入换可,這里暫時不再分析算法本身的思想椎椰。