这个问题可能看起来有点奇怪,但是......
我运行一个用PHP编写的黑手党风格游戏网站。当玩家犯罪时,他们有机会获得“摔倒”,让我们说一个新的武器。
我现在如何工作是他们犯下的每一个罪行,我从10中运行rand(),如果它达到10,那么我随机从firearms_db表中选择一行,然后给它们。
我想做的是,让每个武器都有不同的百分比“掉线” - 所以更强大和更昂贵的武器会降低,而便宜的武器会频繁掉落。目前你得到一个便宜的机会,因为你是一个昂贵的机会。
有没有人有任何想法我怎么能添加这个?我是否需要使用丢弃率值向firearms_db添加另一个字段,然后使用它?
答案 0 :(得分:5)
您可以尝试在表格中添加一个列,以某种方式对武器进行排名。例如,您可以将rocket_launcher
评级为10,而将toothpick
评为2。
数据库表可能如下所示:
+---------------------------------+
| weapon | rating |
| rocket_launcher | 10 |
| toothpick | 2 |
+---------------------------------+
你可以在十分之一中做rand()
。假设您将结果存储在res中。然后,查询数据库:
SELECT * FROM weapons WHERE rating <= res
如果res为7,那么您将只获得toothpick
。如果res为10,则会同时获得toothpick
和rocket_launcher
。
然后你可以从查询中随机挑选武器来提供。
答案 1 :(得分:1)
最简单的方法可能是始终选择一个项目,然后使用掉落率列来决定他们是否真正得到它。你可以把它变成百分之几,然后把它存储为int。
答案 2 :(得分:1)
你可以写一个公式:对于给定级别的武器和武器种类,你会得到“下降”率。您可以使用对数/指数来获得非线性曲线。
你也可以使用一个非常简单的公式:
例如chanceOfDrop =(maxprice-priceOfWeapon)/ maxprice * randomFactor()
,其中randomFactor()介于-0.8和1.2之间。