-1

我需要一种算法,就像 Travian 中使用的那样。我想知道如何制作它,以便有 4 种资源类型,当有人袭击时,他们会占用这么多,但他们从每种资源类型中占用相等的百分比,具体取决于袭击可用的资源量。所以假设我可以突袭 450 资源,但防御者有 300 木材、400 粘土、200 铁和 100 小麦,我将取木材占总资源的百分比,然后将其乘以赏金。问题是当我四舍五入时,有时会得到 449/450 或 451/450。

那么有什么方法可以解决舍入问题,有人可以编译整个算法吗?我只是很好奇,就像我平时一样,出于好奇编译了大量的算法,比如 Elo、Torus 和其他非常基本的算法。

4

3 回答 3

2

如果您希望它们都“平均分布”,那么您偶尔会遇到舍入问题。如果我的容量是 100 并且有三个相等的资源,那么仅四舍五入就永远无法正确计算。

如果发生这种情况,只需选择一个来“修复”它。我通常会选择最后一个资源。只需像往常一样将除最后一个之外的所有值四舍五入,然后从总数中减去它们(450 或在您的示例中),这就是您的最后一个资源值。

于 2013-07-22T14:24:51.030 回答
2

您可以使用modulo计算余数,并随机分配余数。

于 2013-03-04T02:04:17.603 回答
1

为什么要让你的掠夺者占被掠夺城镇资源的百分比?根据我的说法,袭击者应该根据自己的能力来平衡数量的每种资源。

用你的例子:

Raiders capacity - 450
Wood - 300
Clay - 400
Iron - 200
Wheat - 100

While  Not Empty (Wood and clay and Iron and Wheat) and Not Full ( Raiders )
    Raiders pick up 1 each ressources

经过这一步攻略有400资源(因为没有小麦了)。

镇栈

Wood - 200
Clay - 300
Iron - 100
Wheat - 0

对剩余资源执行相同操作: 50 / 3 = 16

之后的攻略栈是这样的:

Wood - 116
Clay - 116
Iron - 116
Wheat - 100
TOTAL : 448

然后你有两个解决方案,选择最大堆栈中的资源或继续你的循环。如果您选择在最大的情况下获取资源:

当前库存:

Wood - 184
Clay - 284
Iron - 84
Wheat - 0
TOTAL : 552

选择 2 个单位的粘土然后你有以下结果:

镇栈

Wood - 184
Clay - 282
Iron - 84
Wheat - 0
TOTAL : 550

攻略栈

Wood - 116
Clay - 118
Iron - 116
Wheat - 100
TOTAL : 450

这只是另一个观点。你觉得有趣吗?

于 2013-07-22T10:01:57.727 回答