2016-03-13 2 views
1

Я javascript ученик, пытающийся создать небольшую javascript игру для моих детей (от 5 до 10 лет), в которой очки основаны на прошедшем времени. Но я не могу найти способ суммировать очки. Я получил код ниже, но результат не является точным. Вероятно, программа суммирует все элементы в массиве с каждым щелчком. Может ли кто-нибудь помочь, пожалуйста? Я новичок, и здесь будет много ошибок или абсурдов, я прошу вас помогать вежливо, исправляя меня. Любая помощь приветствуется ..Как я могу правильно суммировать баллы?

document.getElementById("box1").onclick = function() { 
    clickT = Date.now(); 
    reactT = (clickT - createdT)/1000; //gets the time difference for reaction. 

    points = reactT * 1000; 
    points = 2000 - points; 

    pRecord.push(points); //add points to array. 

    for (i = 0; i < pRecord.length; i++) { 
    totalpoints += pRecord[i]; 
    } 

    document.getElementById("time").innerHTML = reactT; 
    this.style.display = "none"; 

    document.getElementById("score").innerHTML = totalpoints; 
} 
+0

Вам нужно установите 'totalpoints = 0;' перед вашим циклом, иначе он просто будет добавлять к нему. –

+0

СПАСИБО ВАМ ОЧЕНЬ КАЖДЫЙ ОДИН ДЛЯ ВАШЕЙ ПОМОЩИ И ОТВЕТ. –

+0

Посмотрите на мой ответ ниже, так как я заметил проблему с тем, как вы регистрируете точки реакции. Было ли намеренно оценивать отрицательные моменты (вместо 0), когда время реакции медленнее, чем 2 секунды? –

ответ

2

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

document.getElementById("box1").onclick = function() { 
    var clickT = Date.now(); 
    var reactT = (clickT - createdT)/1000; //gets the time difference for reaction. 

    var points = reactT * 1000; 

    points = 2000 - points; 

    pRecord.push(points); //add points to array. 

    var totalpoints = 0; 
    for (var i = 0; i < pRecord.length; i++){ 
     totalpoints += pRecord[i]; 
    } 


    document.getElementById("time").innerHTML = reactT; 
    this.style.display = "none"; 

    document.getElementById("score").innerHTML = totalpoints; 
} 

А также я не знаю, если вы определили переменные во внешней области видимости, но я думаю, вы этого не сделали, поэтому я добавил var перед каждым созданием переменной.

0

Вот улучшенная версия вашего кода, которая также правильно регистрирует время реакции, ограничивая максимально допустимое время реакции до заданного значения.

В вашей первоначальной реализации вы можете получить плохие показания, если время реакции больше 2 секунд.

Кроме того, в вашем исходном коде вам не нужно делиться на 1000, а затем умножать обратно, так как в итоге вы получаете миллисекунды.

Это он:

document.getElementById("box1").addEventListener("click", function() { 
    clickT = Date.now(); 

    // Gets the time difference in milliseconds for reaction. 
    reactT = clickT - createdT; 

    // Maximum allowed reaction time after which we give no more points. 
    var maxPoints = 2000; 

    // We cap the registered reaction time to the maximum allowed. 
    points = Math.max(reactT, maxPoints); 
    // We score the reaction time based 
    points = maxPoints - points; 

    // Add points to array. 
    pRecord.push(points); 

    // Compute the total points. 
    var totalpoints = 0; 
    for (i = 0; i < pRecord.length; i++){ 
    totalpoints += pRecord[i]; 
    } 

    document.getElementById("time").innerHTML = reactT; 
    this.style.display = "none"; 

    document.getElementById("score").innerHTML = totalpoints; 
} 

Вы можете заметить, что я определил totalpoints переменной (и инициализируются его с 0), так как в противном случае при каждом клике, все ваши баллы были вновь добавлены, а не только последний.

Я сделал предположение, что totalpoints еще не был определен перед кодом, который вы вставили. Если это предположение неверно, и вы уже инициализированы totalpoints раньше, в вашем коде, то вам нужно заменить следующий фрагмент из моего кода:

// Compute the total points. 
var totalpoints = 0; 
for (i = 0; i < pRecord.length; i++){ 
    totalpoints += pRecord[i]; 
} 

... с:

// Add the new points to the total. 
totalpoints += points; 
+0

Да, я действительно хочу уменьшить время реакции детей. Но ваш код дал мне новую идею. Спасибо за это. –

+0

Пожалуйста, отметьте один из ответов как «принятый», если ваша проблема решена. –

Смежные вопросы