2011-12-27 72 views
2

這個問題可能看起來有點奇怪,但...php sql丟失率系統

我運行一個黑社會風格的遊戲網站腳本在PHP中。當球員犯罪時,他們有機會得到'下降',可以說一種新武器。

我現在的工作方式是他們犯的每一個罪行,我運行一個rand(),如果它命中10,那麼我從firearms_db表中隨機選擇一行,並給他們。

我想要做的是讓每個武器有不同的百分比率'滴' - 所以更強大和更昂貴的武器會減少,廉價武器會頻繁下降。目前,你已經有了一個便宜的機會,因爲你是一個昂貴的機構。

有沒有人有任何想法,我可以去添加這個?我是否需要添加另一個字段到firearms_db並使用丟棄率值,然後使用它?

+0

我相信你正在尋找[百分比概率](http://en.allexperts.com/q/Probability-Statistics-2077/2008/5/probability-percentage.htm)(即指定機會每件商品)。 – 2011-12-27 15:25:49

+0

你可以顯示你的數據庫模式。簡單的答案是肯定的,增加另一列可以讓武器評級可能是最簡單的。別的怎麼會告訴武器的評級。 – Robert 2011-12-27 15:27:30

回答

5

你可以嘗試在列表中添加一列,以某種方式排列武器。例如,你可以有額定功率爲10 rocket_launcher,而toothpick被評爲2

數據庫表看起來是這樣的:

+---------------------------------+ 
| weapon   | rating | 
| rocket_launcher | 10  | 
| toothpick  | 2  | 
+---------------------------------+ 

你可以做一個rand()了十個。假設您將結果存儲在res中。然後,查詢數據庫:

SELECT * FROM weapons WHERE rating <= res 

如果res爲7,那麼您只會得到toothpick。如果res爲10,您將同時獲得toothpickrocket_launcher

然後,你可以隨機選擇武器給予,從查詢中的武器。

+0

這種方法是否仍然會給你一個獲得頂級武器或廢話的概率? – user1022585 2011-12-27 15:39:51

+0

如果第一個rand()輸出爲10,它會給你相同的概率。如果你的第一個'rand()'低於10,那麼你將無法獲得這種武器 - 獲得'rocket_launcher'比'toothpick'更難。一旦你剔除了頂級武器,你就有可能從查詢結果中獲得任何武器。 – ThatOtherPerson 2011-12-27 15:47:24

+1

好的,謝謝,所以我的查詢就像'SELECT * FROM db_firearms WHERE rating <='$ res'ORDER BY RAND()LIMIT 1'? – user1022585 2011-12-27 16:29:38

1

最簡單的方法可能是總是選擇一個項目,然後使用丟棄率列來決定他們是否真的得到它。你可以使它成爲一個機會,並將其作爲一個整數存儲。

1

你可以寫一個公式:對於給定等級的武器和武器類型,你可以得到「掉落」率。您可以使用對數/指數來獲得非線性曲線。

也可以用一個很簡單的公式:

chanceOfDrop =(maxprice-priceOfWeapon)/ maxprice * randomFactor()

與-0.8和1.2之間。例如randomFactor()。

+0

爲什麼我會把掉落率作爲武器表入口中的一個新領域存儲?那麼我將如何根據丟棄概率提取記錄呢?對不起,如果我誤解了,數學不太好:P – user1022585 2011-12-27 15:47:50