Шрифт:
Примечание
Когда у вас массив содержится в другом массиве (двумерный массив), к элементу вложенного массива можно обратиться с помощью нескольких скобок. Например, выражение myArray[3][8] обращается в восьмому значению третьего элемента массива myArray. Массив my Array состоит из четырех или более элементов, в третьем элементе содержится, в свою очередь, массив по меньшей мере из девяти элементов.
Функция animateIn позволяет создать эффект появляющегося из-за экрана текста. Она устанавливает положение каждого текстового клипа за рабочим полем справа. Затем для каждого из этих клипов с помощью переменной xstop присваивается нужное горизонтальное положение. Код, прикрепленный к каждому из этих клипов, перемещает его влево до тех пор, пока он не дойдет до положения xstop.
function animateIn {
// Определяем положение каждого элемента текста,
// а также указываем место, где клип должен остановиться.
question.xstop = 300;
question._x = 800;
answer0.xstop = 400;
answer0._x = 1000;
answer1.xstop = 400;
answer1._x = 1200;
answer2.xstop = 400;
answer2._x = 1400;
answer3.xstop = 400;
answer3._x = 1600;
}Когда пользователь щелкает по одной из четырех кнопок, вызывается функция selectAnswer, которой передается номер выбранного ответа (от 0 до 3). Если эта величина равна correctAnswer, звучит сигнал правильного ответа и увеличивается значение numRight. В противном случае воспроизводится сигнал неверного ответа. В любом случае увеличивается значение переменной questionNum и отображается следующий вопрос.
function selectAnswer(n) {
// Добавляем очко, если ответ правильный.
if (n == correctAnswer) {
triggerSound("right");
numRight++;
} else {
triggerSound("wrong");
}
// Отображаем следующий вопрос.
questionNum++;
displayQuestion;
}Функция triggerSound проста, но очень полезна во многих игровых ситуациях. Ее назначение – проигрывать звук, сопровождающий правильный ответ.
function triggerSound(soundName) {
// Проигрываем звук.
soundfx.stop;
soundfx = new Sound;
soundfx.attachSound(soundName);
soundfx.start;
}Все это касается сценария основной временной шкалы. Однако есть еще два важных маленьких сценария, прикрепленных к другим элементам на рабочем поле. Первый прикреплен к каждому текстовому клипу. Он проверяет, находится ли клип правее положения xstop и, если это так, перемещает его дальше влево. В результате клип продолжает двигаться влево до тех пор, пока его положение не совпадет со значением переменной xstop. Следовательно, если клип располагается справа от экрана, с помощью функции animateIn вопрос «въезжает» на экран.
onClipEvent(enterFrame) {
if (_x != xstop) _x -= 20;
}К каждой кнопке также прикреплен короткий сценарий, который при щелчке по ней вызывает функцию selectAnswer и передает ей значение от 0 до 3. Сценарий следующий:
on (release) {
selectAnswer(0);
}Для других кнопок вместо 0 будет указано либо 1, либо 2, либо 3.
К сведению
Вам понадобятся два звука, один с именем «right», а другой – «wrong». Также потребуется кнопка «continue», похожая на изображенную на рис. 12.3. Если у вас есть вопросы по работе программы, просмотрите ролик Flashquiz.fla, размещенный на Web-сайте поддержки книги.
Другие возможности
Хотя цель игры заключается в отображении только 10 вопросов, ни одна строчка кода не ограничивает их число. Можно запросить большее или меньшее количество вопросов из файла Flashquiz.txt.
Вместе с выводом строки пользователю можно показывать некое сообщение. Например, при отображении строчки "8 out of 10" можно подбодрить пользователя следующим образом: "You know your planets!" (Вы знаете планеты!), а при двух правильных ответах из 10 будет выводиться сообщение "Go back to school" (Снова идите в школу).Викторина с учетом времени
Исходный файл: Flashtrivia.fla
Теперь, когда у вас есть работающая программа викторины, можно кое-что добавить и создать более развернутый вариант викторины. Эта игра отличается от предыдущей совсем немногим [15] . Вы добавите более сложный подсчет очков, предоставляя игроку возможность набирать большее количество очков за быстроту, а также позволяя несколько раз отвечать на один вопрос и не терять очки за неправильный ответ.
Другая возможность – это случайность вывода ответов, то есть ответы будут перемешиваться, вследствие чего будут появляться на экране в произвольном порядке. Это упростит создание списка вопросов, так как первый ответ в файле данных всегда будет правильным ответом, но он не всегда будет отображаться для пользователя на первом месте.
На рис. 12.4 представлен основной кадр игры из ролика Flashtrivia.fla.
Рисунок 12.4. В этой игре при начислении очков принимается во внимание быстрота ответа
Задача проекта
Цель проекта состоит в создании развернутого варианта викторины, основанного на предыдущем ролике. Ответы будут представлены не в одной и той же последовательности, а каждый раз будут отображаться в произвольном порядке.
Потенциально каждый вопрос стоит 1000 очков. Но чем дольше пользователь думает над ответом, тем меньше очков получает. Если пользователь дает неправильный ответ, он теряет определенное число возможных очков. Когда же, наконец, пользователь даст правильный ответ, количество оставшихся возможных очков будет прибавлено к его счету.