2011-12-27 64 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