调平系统-携带额外的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;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...