我想为一个小游戏编程一个关卡系统。
等级系统将与分数挂钩,等级将进一步提高
仅给出2个得分值

等级,得分
0,50(从0-50)
1,100(从51到100)
2,150
3,250
4,400
5、650
...

如何以给定的分数和2个初始值(示例中为50和100)优雅地计算自己所处的女巫等级

还是最好只计算列表或数组中的得分值

最佳答案

没有任何公式,您可以轻松地计算整个表格(在core2上不到0.0002秒)。对int求和非常快。在int32达到最大值之前,只有36次计算。

var scoreTable = new []{50, 100, 150, 250, 400, 650, 1050, 1700, 2750, 4450, 7200, 11650, 18850,
30500, 49350, 79850, 129200, 209050, 338250, 547300, 885550, 1432850, 2318400, 3751250,
6069650, 9820900, 15890550, 25711450, 41602000, 67313450, 108915450, 176228900,
285144350, 461373250, 746517600, 1207890850, 1954408450};


对于创建表的数学运算,让我们简单一点:

var thresholds = new List<int> {50, 100};
var index = 1;
while(true){
  var temp = thresholds[cpt] + thresholds[cpt - 1];
  if (temp < 0) break;
  thresholds.Add(temp);
}


并了解级别:

var score = 51;
// Index is Zero-based numbering. Count is One-based. Index = Count -1;
var level = scoreTable.Where(x => x < score ).Count() - 1;


二进制搜索:

public class SupComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var t1 = UInt64.Parse(x.ToString());
        var t2 = UInt64.Parse(y.ToString());
        return  t1.CompareTo(t2) > 0 ? 1 : 0;
    }
}

var cp = new SupComparer();
var level = Array.BinarySearch(scoreTable, score, (IComparer)cp);

09-17 11:04
查看更多