我正在尝试编写一个处理游戏丢弃的系统,但是我不确定该怎么做。我将所有的墨滴存储在2D数组中,看起来像这样
{MonsterID, ItemID, ChanceOfDrop(1-100)}
我已经创建了一个骰子系统,可以选择1-100之间的随机数,但是我无法弄清楚如何使这个正确合并。
对于实例,让“药水”项目下降3%。
我已经在我的骰子上打了7个。
进行数学检查以确定是否已完成的正确方法是什么?
我在考虑做roll< = dropRate
但是,这让我想到,如果下降率是80%而且用户滚动了81,那么就不会收到它,但是回头看看,这会让那些有20%掉落率的东西收到它。
也许我过度思考这个以及我的数学方法
if((RandomNumber(1-100) <= DropRatePercentage(1-100))
是处理此问题的正确方法。
请填写我,这可能是由于睡眠不足导致我无法正确完成这项工作,我处于死机状态并且我已经连续工作了2天,现在试图获得所有的一切设置,我设定了一个目标,让我在停止之前完成Entity / Spawning / Saving / Combat / Drop系统。
答案 0 :(得分:0)
不要使用任何骰子系统,只需使用Java附带的Random类,并使用浮点数来获取机会。此外,假设大多数怪物只能丢弃所有可能的项目中的一些,你的阵列非常浪费,例如存储大量的怪物。鸡肉 - &gt;铁锭 - &gt; 0%的条目。相反,只存储可以丢弃的项目列表以及使用HashMaps数组删除的可能性:
static Random rand = new Random();
protected Map<Integer, Float>[] allDrops = new Map[numMonsters];
//integer = itemID, float = chance of drop (eg 3F/100)
Map<Integer, Float> drops = allDrops[monsterID];
for (Entry<Integer, Float> e : drops.entrySet()) {
if (rand.nextFloat() < e.getValue()) dropItem(Items.getById(e.getKey()));
}
要向怪物添加掉落,请使用
allDrops[monsterID].put(itemID, dropChance);