mud_sanc 板


LINE

假設一隻怪物,會掉 a 物品 k%, b 物品 m%, c 物品 n% 一、k + m + n 不一定要等於 100 二、判斷時沒有一定的標準順序。 以上面來看,較簡易的寫法就是... drop_chance = ({"a物品", k, "b物品", m, "c物品", n }) j=sizeof(drop_chance); for(i=0;i<j;i=i+2) { if(random(100)<drop_chance[i+1]) { 執行 drop_chance[i] 物品的掉落; break; // 跳出迴圈 } } 這樣的設定方式,好處是較容易掉的東西本來就應該挪到越前面判斷, 而越難掉的東西挪到越後面就越難取得(因為它要經過幾次的迴圈)。 而實際取得機率應該會是曲線遞減式,即設定越前面的物品其取得機率 期望值其實大於設定值,而設定越後面的物品之取得機率期望值其實小 於設定值(例如設在第 5 件的物品設取得機率 10%,實際上「極小於10 %」) 例子.. drop_chance = ({"a物品", 50, "b物品", 30, "c物品", 10 }) 則只有 a 物品的取得機率是 50%,b 物品則是 (1-50%) x 30% = 15% ,c 物品則是 (1 - 50%) x (1 - 30%) x 10% = 3.5% 因此,假若我們希望 b 物品依舊是 30%,c 物品依舊是 10%,則要使 用反設定.. 若 b 物 30% = (1 - 50%) x m% ==> m = 60 若 c 物 10% = (1 - 50%) x (1 - 60%) x n% ==> n = 50 也就是實際上要這樣子設.. drop_chance = ({"a物品", 50, "b物品", 60, "c物品", 50 }) 但是實作上,還是要以方便設定者為主,也就是說當設定者設 50,30, 10 時,其真實機率也應該是 50, 30, 10。 j=sizeof(drop_chance); total=100; for(i=0;i<j;i=i+2) { k=drop_chance[i+1]; if(random(total)<k) { 執行 drop_chance[i] 物品的掉落; break; // 跳出迴圈 } total=total-k; } 第一輪時:random(100) < k=50 才會掉 a 物 第二輪時:random(50) < m=30 才會掉 b 物 (實際機率 (1-50%)x60% = 30% ) 第三輪時:random(20) < m=10 才會掉 c 物 (實際機率 (1-50%)x(1-60%)x50% = 10% ) 這個我看晚上有沒有空完成。(今天一整天都在公司忙) 屆時這個也一併交給 highelf 管理,怪物掉落物系統與虛擬物品系統 結合後,就可以模擬 RO 的怪物掉落物品,初期會先選幾個區域來測 試。 Laechan --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.227.206
1F:→ laechan :對了補充一下,掉落機率應該會用千趴來算 01/16 17:08
2F:推 bahatest :靠單次random值決定掉落物的設定有那裡不好嗎? 01/16 17:18
3F:→ laechan :比較難改成「設定式」,你的方式比較適合程式撰寫 01/16 17:20
4F:→ laechan :(就是用 select case 的方式去做) 01/16 17:20
5F:→ laechan :但如此一來1000隻怪物就要寫1000個這樣的篩選程式 01/16 17:21
baha 所舉的方式類似底下... select(random(100)) { case 0..49: 掉 a 物; break; case 50..79: 掉 b 物; break; case 80..89: 掉 c 物; break; } 一、1000隻怪物,得寫 1000 個上面的東西。 二、它不容易擴充。例如說我們要為這怪物「再加上兩項物品」,   為此得去改程式,並重新計算 m..n 的數值。 三、它也不容易管理。為什麼呢?因為你無法寫程式去讀「某怪物   掉的 a 物品的機率是多少」。 四、實務上,最容易掉的東西是 a 物品,所以只要越高機率的物品   挪到越前面,迴圈實際被執行的次數,在大部份的情況下就會集   中在 1~2 次(例如以上例,80% 的機率只會執行最多 2 次),而   且怪物的陣亡頻率也在可接受範圍內。 以後用物件式是主流,因為以後不希望收了 wiz 之後該 wiz 還得花 時間在程式寫作上,以後應該減少寫程式的情況,要盡量多以物件資 料的管理為主。 Laechan ※ 編輯: laechan 來自: 220.131.227.206 (01/16 17:28)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP