C# 经验与教训;水平表

C# 经验与教训;水平表,c#,storage,calculator,C#,Storage,Calculator,我正在做一个小的自学项目,里面有一个游戏的经验/水平计算器,我只需要一些建议 我想知道存储级别(1、2、3到110)的最佳存储方法是什么,以及该级别的经验要求。我想能够搜索一个经验值的水平,例如,如果9级是1000 XP,10级是2000 XP,我可以通过输入1000-1999 XP值来搜索9级 到目前为止,我已经研究了SQL/List/Dictionary/array,它们看起来都不错,但我找不到能够执行我描述的操作的东西。由于级别数最多只有110,您可以将范围保持在有序列表或数组中,如下所示

我正在做一个小的自学项目,里面有一个游戏的经验/水平计算器,我只需要一些建议

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


到目前为止,我已经研究了SQL/List/Dictionary/array,它们看起来都不错,但我找不到能够执行我描述的操作的东西。

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

   0
 100
 200
 400
 600
 800
1000
1300
1600
等等(当然是我编的!)

然后,您可以通过线性搜索列表(可能足够快)来搜索特定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.
int[]xpArray=new[]{0,100
int targetXP=850;
智力水平=0;
而((levelxpArray[level]))
++水平;
//现在你有了正确的级别。
显然,这只是一个简短的概述,让您开始!另外,你可能需要稍微调整一下;我不知道你的确切要求。例如,XP为0的角色是否具有级别0

关键的一点是,搜索一个数字列表,并使用您找到的带的索引作为级别的基础,以及您只需要为每个带存储一个数字的事实。不需要为每个标注栏存储最小值和最大值,也不需要存储标高。这些价值观是隐含的


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

如果你发现了一些好的东西(这意味着它对你的案例有效)-使用它。如果您以后发现所采取的方法不够好,您将有更好的信息来提出比这更具体的问题。
var exp=newdictionary{{9,1000},{10,2000};var级别=经验值,其中(y=>y.值x.键)大多数游戏体验的计算都来自一个数学公式,所以你根本不需要数组,只需要找出一个公式,在那里你可以用x代替所需的等级。否则我猜你会从一个文本文件或类似的文件中获取它,所以只需将它提取到一个数组(numberformat),其中级别将是该项的索引