-1

我正在做一个带有游戏经验/等级计算器的小型自学项目,我只需要一点建议。

我想知道存储级别(1、2、3 到 110)和该级别的经验要求的最佳存储方法是什么。我希望能够通过 exp 值搜索级别,例如,如果级别 9 是 1000 XP,级别 10 是 2,000 XP,我可以通过输入 1000 - 1999 的 XP 值来搜索级别 9 .

到目前为止,我已经研究了 SQL/List/Dictionary/Arrays 并且看起来都不错,但是我找不到执行我描述的操作的东西。

4

1 回答 1

0

由于级别数最多为 110,因此您可以将范围保留在有序列表或数组中,如下所示:

   0
 100
 200
 400
 600
 800
1000
1300
1600

等等(这些数字当然是我编的!)

然后,您可以通过线性搜索列表(这可能足够快)或者如果您真的需要,您可以使用Array.BinarySearch()查找最近的级别来搜索特定 XP 值的级别,并对值进行检查一边查看 XP 属于哪个频段。

级别将只是找到波段的索引 + 1(因为级别从 1 开始,而不是 0)。

要线性搜索 XP 值的级别:

int[] xpArray = new [] { 0, 100, ... etc }// The list as shown above
int targetXP = 850;
int level = 0;

while ((level < xpArray.Length) && (targetXP > xpArray[level]))
    ++level;

// Now you have the right level.

显然,这只是让您入门的简要概述!此外,您可能需要稍微调整一下;我不知道你的具体要求。例如,具有 0 XP 的角色是否具有 0 级?

摆脱这一点的关键是搜索数字列表的概念,并使用您找到的波段索引作为级别的基础,以及您只需要为每个波段存储一个数字的事实. 您不需要为每个波段存储最小值和最大值,也不需要存储级别。这些值是隐含的。

我离开使用Array.BinarySearch()来加快速度作为读者的练习......;)

于 2013-05-03T06:09:25.467 回答