我试图与基于%的怪物进行随机相遇。
我的MySQL数据库中有一个名为" monster_chancespawn"的列。 :
我想做的是在我的"怪物"中随机运行MySQL SELECT
。 DATABASE基于这些%。
我已经有了这个
$monsterspawn=$db->prepare('SELECT * FROM monster');
$monsterspawn->execute();
$monsterspawn->CloseCursor();
foreach ($monsterspawn as $infospawn)
{
echo . $infospawn["monster_chanceloot"] . ;
}
有了这个,它通常会回应" 50 30 20",但没有什么真正有用的。 我想做的是:
monster_chanceloot
值我可以做这样的事情我猜
$randomspawn = rand(0, 100);
if ($randomspawn >= 0 && $randomspawn <= $infospawn["monster_chanceloot"])
{ $monstername = "Monster1" }
elseif ($randomspawn >= $infospawn["monster_chanceloot"] && $randomspawn <= $infospawn["monster_chanceloot"](Monster 2's one))
{ $monstername = "Monster2" }
对于Monster 3也是如此。主要的问题是不能让我改变可用的怪物数量,而另一个问题是我不知道如何让每个怪物的怪兽都在外面foreach
的。{而且我不想做30个MYSQL连接,所以每次都要避免使用它。
谢谢!
编辑: &#34;德国德鲁伊克&#34; :给出了这种可能性
我有 Monster1 , Monster2 , Monster3 。 我在我的数据库和Monster2 1次中复制 Monster1 2次。
我现在有3个 Monster1 ,2个 Monster2 和1个 Monster3 。 所以:50%的机会选择Monster1,33,3为Monster 2和16,6为Monster 3。
要获得更准确的结果,您可以将它们复制到100以获得1个怪物= 1%。要获得怪物,只需:
$query=$db->prepare('SELECT * FROM MONSTERDDB ORDER BY RAND() LIMIT 1');
$query->execute();
答案 0 :(得分:0)
IF 你区域内永远不会超过100个怪物,那么你需要一个有3列的表格; zone_id
,chance
,monster_id
每个区域,插入100条记录并将机会设置为1到100。
根据记录,添加一个与其共同的monster_id;每个区域的所有100条记录都应该有一个monster_id
例如,zone1需要50条带有monster1的记录,30条带有monster2的记录,以及20条带有monster3的记录
在PHP中,您可以像这样编写查询
$sql = "select
monster_id
from
table_name
where
zone_id = $zoneId and
chance = ".rand(1, 100);
此外,我没有尝试过这个,但我想原生MySQL can achieve the same effect:
$sql = "select
monster_id
from
table_name
where
zone_id = $zoneId and
chance = FLOOR( 1 + RAND() * 100 )";