Система подсчета очков для викторины - чем быстрее вы окажетесь правы, тем больше очков

Я создаю викторину Flash (as3), которая использует данные PHP, и в настоящее время занимаюсь созданием системы оценок. Идея заключается в том, что чем быстрее вы правильно ответите на вопрос, тем выше будет ваш балл. Существует таймер обратного отсчета с 5 секунд для каждого вопроса. Так, например, если вы правильно ответите на вопрос за 5 секунд, вы получите 500 баллов, 4 секунды = 400 баллов и так далее. Это викторина с несколькими вариантами ответов, и ответы появляются в динамическом текстовом поле на кнопках.

На данный момент у меня есть встроенная викторина с вопросами и ответами, хранящимися в массиве, поэтому я могу все проверить, прежде чем полностью интегрировать свой PHP.

У кого-нибудь есть идеи, с чего начать? Любая обратная связь или толчок в правильном направлении будет принята с благодарностью! Если вам нужна дополнительная информация (или сценарий), пожалуйста, дайте мне знать.

Спасибо


person Esyem    schedule 16.10.2012    source источник


Ответы (1)


Похоже, что таймер вполне подойдет что вы ищете.

Настройте переменную глобального таймера с интервалом, который зависит от того, насколько точной должна быть ваша система подсчета очков, и запускайте ее при каждом новом вопросе. Когда пользователь ответит, проверьте repeatCount этого таймера, чтобы узнать, сколько времени ему потребовалось, чтобы ответить правильно.

public class Quiz{
    private var mTimer:Timer;

    ...

    public function Quiz():void{
         // This creates a timer that will fire every 100 ms for 50 times.
         // If you want a more precise scoring system, reduce the delay, and increase the count
         mTimer = new Timer(100, 50);
    }

    private function newQuestion():void{
         // Don't forget to reset the timer for every new question
         mTimer.reset();
         mTimer.start();
    }

    private function onRightAnswer():void{
         // Check how many times the timer fired already
         var count:int = mTimer.currentCount;

         // Deduce points for every count
         var score:int = 500 - (count * 10);
    }

    ...

}
person Dave Hart    schedule 16.10.2012
comment
Великолепно, это выглядит как фантастическое место для начала! Спасибо - person Esyem; 16.10.2012
comment
repeatCount отслеживает, сколько раз сработает ваш таймер, прежде чем он остановится. По сути, это второй параметр, который вы указали при создании таймера. В моем примере repeatCount всегда будет равно 50. Это полезно, если вы хотите, скажем, указать процент времени, оставшегося на вашем таймере, 100.0 * (mTimer.currentCount / mTimer.repeatCount). Вы также можете изменить его во время выполнения, если хотите, чтобы ваш таймер останавливался раньше, чем ожидалось. - person Dave Hart; 16.10.2012
comment
Не знаю, создавать ли для этого отдельную тему или это что-то связанное с этой темой. Как указывалось ранее, мои вопросы находятся в массиве, как и правильные ответы. aUserAnswers[numLoops] — это массив, поэтому при выполнении if(aUserAnswers[numLoops] == returnNumber){ processScore(); } мой трассировщик показывает NAN. Не уверен, как исправить эту проблему. Вот функция, которую я имею function processScore():void { var count:int = mTimer.currentCount; var score:int = score + (700 - (count * 10)); трассировка (оценка зарегистрирована); } - person Esyem; 16.10.2012
comment
Вам понадобится больше информации, вам, вероятно, следует открыть другой поток и показать больше кода, как вы настраиваете массив, как вы получаете returnNumber и т. д. - person Dave Hart; 17.10.2012
comment
Спасибо за помощь, Дэйв, сделаю - person Esyem; 22.10.2012