Система подсчета очков Javascript - PullRequest
0 голосов
/ 11 мая 2010

Я пытаюсь создать систему подсчета очков с помощью JavaScript, но проблема в математической части. Я сохранил на сервере количество очков, и на основании этого числа я хочу определить уровень. Извините за мой плохой английский, я не могу объяснить очень хорошо: D. Я хочу что-то вроде: level 1 need 0 points level 2 needs 100 points level 3 needs 240 points level 4 needs 420 points level 5 needs 640 points и так далее.... Мне нужна математическая функция для расчета каждого уровня с ним. Что-то, что если я знаю уровень для расчета необходимых очков, и если я знаю только точки для расчета уровня.

Ответы [ 4 ]

2 голосов
/ 11 мая 2010

Для создания предоставленной вами серии используйте:

function getPoints(level)
{
  return 20*(level-1)*(level+3);
}

Чтобы получить уровень из точек немного сложнее, вам нужно инвертировать приведенную выше формулу с помощью квадратной формулы и затем принять положительное решение:

function getLevel(points)
{
  var level = -1 + Math.sqrt(4 + points/20);

  // Round down to nearest level
  return Math.floor(level);
}

Кроме того, в будущем постарайтесь прояснить свои вопросы. Как вы видите, три человека (по крайней мере) неправильно поняли ваш вопрос - не было ясно, что набор уровней был математическим рядом.

2 голосов
/ 11 мая 2010
var levels = {
1: 0,
2: 100,
3: 240,
4: 420,
5: 640}
function get_level(points){
    for (level in levels){
       if (points < levels[level]){
          return level - 1;
       }
    }
}

Это просто берет хэш уровней и переходит через уровни, пока точки не превысят минимум уровня, возвращая последний уровень.

1 голос
/ 11 мая 2010

эта функция должна решить вашу проблему, и, мне кажется, ее очень легко понять:

function getLevel(points) 
{
    var levels = [0,100, 240, 420, 640];
    var maxLevel = levels.length;
    var i;
    for (i=0;i<maxLevel;i++) {
      if (levels[i]>points) return i;
    }
    return maxLevel;
}
1 голос
/ 11 мая 2010

ммм, у меня есть смутное представление о том, что вы собираетесь

var levels = [0, 100, 240, 420, 640];

function GetLevel(points)
{
    for(i == levels.length - 1; i >= 0; i--)
    {
        if (points >= levels[i]) return i + 1;        
    }        
}

указывает на следующий уровень

function PointsToNextLevel(currentPoints)
{
    var level = GetLevel(currentPoints);
    if (level == levels.length) return 0;
    return levels[level - 1] - currentPoints;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...