如何解决调平系统-携带额外的XP进入下一关
我正在创建一个基本的Leveling系统,但是遇到了一些麻烦,这比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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。