java - 调平系统 - 携带额外的 XP 到下一个级别
问题描述
我正在创建一个基本的调平系统,但是我遇到了一些障碍,这更像是一个数学问题而不是 Java 问题。我想动态地将任何额外的 XP 转移到下一个级别,目前一旦达到升级要求,XP 计数就会简单地设置为 0。请注意,我希望这能够处理用例如果玩家获得足够的 XP 以一次提升几个级别。
我当前的代码如下:
public void giveXP(String name, int xp) {
int pXP = Main.storedUsers.get(name).getXP();
this.xp = (pXP + xp);
int pLevel = Main.storedUsers.get(name).getLevel();
double constant = 2;
double fixed = 450;
int nextLevelXP = Math.round((pLevel * constant) + fixed);
int xpNeededToLevelUp = nextLevelXP - pXP;
if (xpNeededToLevelUp > 0) {
Admin.debugMessage("You gained " + xp + " XP, "+ xpNeededToLevelUp + " needed for next Level.");
}
else if (xpNeededToLevelUp <= 0) {
Admin.debugMessage(name + " leveled up to level " + (pLevel+1));
UserFetch.setLevel(name, (pLevel+1));
Main.storedUsers.get(name).setLevel(pLevel+1);
this.xp = 0;
}
}
解决方案
只是为了更新我如何解决我遇到的问题,同时还能够一次处理多个级别,代码如下:(唯一的问题是较低级别的 XP 差距很小,但这是一个数学问题)
public static int getLevelXPThreshold(int level) {
int value = (int) (75+(400+(75*(Math.pow(1.10409,level)))));
return value;
}
public static Map<Integer, Integer> getXPThresholds() {
int maxLevel = 90;
Map<Integer, Integer> levelXPThresholds = new HashMap<Integer, Integer>();
for (int level = 1; level < maxLevel; level++) {
int levelXP = getLevelXPThreshold(level);
levelXPThresholds.put(level, levelXP);
}
return levelXPThresholds;
}
public static int canUserLevelUp(User user) {
int xp = user.getXp();
Map<Integer, Integer> levelXPThresholds = getXPThresholds();
for (int levels : levelXPThresholds.keySet()) {
if (!(xp >= levelXPThresholds.get(levels))) {
if (user.getLevel() != levels) {
UserFetch.setLevel(user.getName(), (levels));
Main.storedUsers.get(user.getName()).setLevel(levels);
}
int nextLevelXP = getLevelXPThreshold(levels); //<--- this means it will always return the level higher than the current user level based on xp value.
return nextLevelXP -= xp;
}
}
return 0;
}
推荐阅读
- css - Bootstrap CSS 应用基于另一个 div 的活动类
- javascript - Discord.js 检查角色是否存在
- python - 改进边缘检测的HED算法
- java - 从地图列表中合并地图java8
- angular - Agm Map 中的集群点击事件
- c++ - 如何使用 GDB 检查 c++ 映射中的单个元素并访问映射中元素指向的对象的成员
- vba - 在 MS Access VBA 中插入语句不适用于 CurrentDB Execute
- python - Matplotlib y 轴未排序
- data-science - 在谷歌趋势中搜索(可能是虚假的)相关性
- node.js - 从角度到 node.js API 的 for 循环中的 Http 请求返回 404