我的世界什么掉到岩浆?
要了解这个,我们需要先了解一下两个概念:掉落物和掉落概率。 掉落物就是玩家击毁物体后所获得的物品,而掉落概率则是该生物/物体被摧毁时,拥有某件道具的被捕获的概率。 这里我们只需要知道,对于某个具体的目标,每个生物被击杀或者击倒后的掉落概率都是不同的。而对于某些生物(猪、羊等),我们甚至可以将它们被击倒后再收集起来的过程给模拟出来。 接下来让我们看看在游戏过程中究竟发生了什么——我们先击杀了僵尸猎人,获得了2个腐肉和1瓶虚弱药剂;然后我们击杀了僵尸,获得了2根竹子;接着我们用剑攻击了僵尸猎人,但是没杀死他,只让他掉落了1根骨头;最后我们用弓箭射伤了僵尸,让它只剩一点血,用投掷蛋的方式将它击晕,再用剑将其砍死,获得了4颗钻石。
在这期间,我们还遇到了苦力怕,将它引爆炸死之后,我们获得了3个火球。 现在我们可以开始计算了: 首先我们明确了目标——获得4颗钻石,因此每得到一颗钻石我们就扣除1点辛苦值(为了简化计算,假设每颗钻石都增加了相同的辛苦值)。因为剑攻击僵尸猎人不死亡不会获得钻石,所以我们用剑攻击的时候不用考虑获得钻石的问题。 现在问题就变成了如何确定每次击杀生物获得的钻石数,以及它们的掉落概率。在这个例子里,我们一共击杀了5个生物,分别是僵尸、僵尸猎人和两只狗,其中前四个是可以获取到钻石的,因此我们的计算就以这4个对象为主。
我这里建了一个Excel表格用来记录各个生物的属性,包括它们的生命值、护甲值、攻击力和攻击速度等等,这里因为我只是演示所以建得比较简单,真实世界中这些数据的统计分析是非常复杂的。我使用Java编写了一个小工具对游戏中所有可伤害的数据进行了采集和分析,如果读者有兴趣,我可以发一个数据包给大家。 这里我用到了Java的集合类,它有一个特性就是在重复添加同样元素的情况下,最后一次添加的元素会覆盖前面添加的元素,这就导致了在我添加每一组生物数据的时候,之前已经添加的生物会被自动删除,从而避免了重复计算的问题(虽然这样可能使得某些情况下重复计算的生物不对)。
通过这个工具,我们就可以算出每一个生物在被击杀后会给予我们多少奖励,并且能根据当前杀死的生物来估算需要花费多少辛苦值。当辛苦值大于0且小于设定的最大值时,就可以执行下一个行动,否则就返回仓库重新选择目标。 当然,这个简单的例子并没有将复杂的情况考虑进去,如击退、附魔和其他一些特殊效果。