2013-11-24 160 views
0

我正在尝试编写一个处理我的游戏的丢弃的系统,但是我并不确定如何去做。我都我滴储存在一个二维数组,它看起来像这样创建%系统

{MonsterID, ItemID, ChanceOfDrop(1-100)} 

我已经创建了一个选择1-100的孔之间的随机数骰子系统,但我想不通的我的生活如何使这个正确纳入。

对于实例,让物品'药水'下降3%的时间。

我已经在我的骰子上掷出了7。

什么是正确的方法来做数学检查,看看它是否完成?

我在想这样做卷< = dropRate

但是,这使我想到,如果下降率为80%,用户滑和81,也不会接受它,但它找回来,那会使得有20%的下降机会接受它。

也许我是过于想这和我的

if((RandomNumber(1-100) <= DropRatePercentage(1-100)) 

数学eqation是处理这个正确的方式。

请填写我的名单,这可能是由于缺乏睡眠,我无法正确完成此操作,我处于死路,我已经连续2天试图获取所有内容所有的设置,我设定了一个目标,让我在停止之前完成实体/产卵/拯救/作战/丢弃系统。

+3

这是Java或JavaScript的?那些是两种完全不同的语言。 – Doorknob

+0

另外,81小于20?我不知道...... – Doorknob

+0

@ Doorknob我的大脑现在已经很疲惫,当然81并不低于20,但是如果81 <= 20是跌倒,但如果81> = 20是真的,但是...... 100-20 = 80,所以如果按照这种方式计算,那么该项目会有80%的下降率。我甚至不知道。 不管语言如何,桅杆都应该做同样的事情。 我显示Psuedo代码,我不介意翻译,但它是java –

回答

0

与其不打扰任何骰子系统,只需使用Java中包含的随机类,并使用浮点数来获得机会。另外,假设大多数怪物只能放下所有可能的物品中的一些,你的阵列非常浪费,存储大量例如。鸡 - >铁锭 - > 0%的条目。相反,只存储与它们的包含HashMap数组掉落物品的列表,可以删除和机会:

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); 
+0

我会如何去添加和金额?假设我想为项目添加MinDrop和MaxDrop金额。 一个Map只允许所以我不能通过

+0

增加了细节。如果你想要一个更复杂的系统,你可以用一个函数来创建一个新的类,该函数确定随机放置多少,并用它来代替Float。 – Vitruvius