要求根据当前等级lv当前总经验exp是否能升级;每次升级经验不同获取当前能达到的最大等级提供最优C#算法例子
以下是一个C#算法例子:
public class LevelSystem {
private int[] expTable; // 升级所需经验表
private int maxLevel; // 最大等级
private int currentLevel; // 当前等级
private int currentExp; // 当前经验
public LevelSystem(int[] expTable) {
this.expTable = expTable;
maxLevel = expTable.Length;
currentLevel = 1;
currentExp = 0;
}
public bool CanLevelUp() {
return currentExp >= expTable[currentLevel - 1];
}
public void LevelUp() {
if (CanLevelUp()) {
currentExp -= expTable[currentLevel - 1];
currentLevel++;
}
}
public int GetMaxLevel(int totalExp) {
int level = 1;
int exp = 0;
while (level <= maxLevel && totalExp >= exp + expTable[level - 1]) {
exp += expTable[level - 1];
level++;
}
return level - 1;
}
public int GetCurrentLevel() {
return currentLevel;
}
public int GetCurrentExp() {
return currentExp;
}
public int GetMaxLevel() {
return maxLevel;
}
public void AddExp(int exp) {
currentExp += exp;
LevelUp();
}
}
在上面的例子中,我们首先定义了一个LevelSystem类,它包含了一些关于等级系统的属性和方法。在构造函数中,我们传入了一个升级所需经验表expTable,它是一个整数数组,表示每个等级所需的经验值。我们还初始化了最大等级maxLevel,当前等级currentLevel和当前经验currentExp。
然后我们定义了一个CanLevelUp方法,它用于检查当前是否可以升级,即当前经验是否大于等于当前等级所需的经验。如果可以升级,我们调用LevelUp方法,将当前等级加1,并将当前经验减去当前等级所需的经验。LevelUp方法仅在CanLevelUp返回true时才执行。
我们还定义了一个GetMaxLevel方法,它用于根据当前总经验计算出当前能达到的最大等级。该方法使用一个循环来遍历每个等级,并检查当前总经验是否大于等于该等级所需的经验。如果是,则将当前等级加1,并将当前总经验减去该等级所需的经验。在循环结束后,我们返回当前等级减1,即可得到当前能达到的最大等级。
最后,我们还定义了一个AddExp方法,它用于增加当前经验。该方法将传入的经验值加到当前经验上,并调用LevelUp方法来检查是否可以升级。如果可以升级,则LevelUp方法会将当前等级加1
原文地址: https://www.cveoy.top/t/topic/dpKq 著作权归作者所有。请勿转载和采集!