调平系统的进度栏

时间:2019-07-06 22:31:06

标签: javascript node.js math progress-bar discord.js

所以这是一个2个问题,但是基本上我正在为我的Discord机器人(Discord.js)创建一个排名/级别系统,并且下一个级别的进度栏存在问题。这是到目前为止我得到的:

        const x = "□";
        let progressBarArr = [x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x];

        let currentLevel = Math.ceil(result.allocatedExp/1000)*1000;
        if (currentLevel < 1000) currentLevel = 1000;

        let progressBar = "["+progressBarArr.fill("=", Math.ceil(result.allocatedExp/currentLevel)*35).join('')+"]"

每获得1,000 XP,您的等级就会提高,因此,假设某个用户的XP是1234,则它们将是1级,是2级的23%。我只需要证明进度-条型样式。我现在拥有的代码现在可以正常工作,但前提是它们的XP必须低于1k,否则该栏将始终充满。

我遇到的另一个问题对大多数人来说可能是微不足道的,但是我对此感到困惑,比如说用户有15k xp,我如何从15000中获得15kp来表示他们处于15级?

谢谢!

1 个答案:

答案 0 :(得分:2)

只需花费Math.floor(xp / 1000)即可获得玩家的当前等级。

对于进度条,使用模1000来检查玩家在最后1000个和下一个1000之间的距离,并将结果乘以35以找出要显示的=个数:

const showBar = xp => {
  const currentLevel = Math.floor(xp / 1000);
  const progress = (xp % 1000) / 1000;
  const progressOutOf35 = Math.round(progress * 35);
  
  const x = "□";
  const barStr = `[${'='.repeat(progressOutOf35)}${'□'.repeat(35 - progressOutOf35)}]`;
  console.log(barStr + ', currntly at level ' + currentLevel);
};

showBar(1500);
showBar(3900);
showBar(15000);