Помните, что на самом деле четыре ответа – это клипы, в которых находятся текстовые поля, отображающие содержимое переменной text.Однако имена четырех клипов отличаются цифрой: от answer0 до answer3.
И последний кадр игры – "game over". В нем показывается окончательный счет, и пользователь может щелкнуть по кнопке, чтобы сыграть заново.
Создание кода
Первый фрагмент кода находится в первом кадре главной временной шкалы. По существу это тот же самый код, который применялся в предыдущей игре для загрузки вопросов из текстового файла. Когда вопросы загружены, вызывается функция initQuestions,расположенная в основной временной шкале:
stop();
// Загружаем список вопросов.
loadQuestions = new LoadVars();
loadQuestions.load("flashtrivia.txt");
loadQuestions.onLoad = initQuestions;
Функция initQuestionsразбивает строчку на две части, первая часть – вопрос, вторая – ответы. Затем она отделяет ответы друг от друга. Вся эта информация хранится в массиве qArray.
function initQuestions(quesions) {
// Выделяем вопросы.
qarray = questions.split(String.fromCharCode(13));
// Отделяем вопрос от ответов.
for (i=0;i
qArray[i] = qArray[i].split(":");
// Отделяем ответы друг от друга.
qArray[i][1] = qArray[i][1].split(";");
}
}
Наибольшая часть кода находится в кадре «play», то есть в том кадре, где задаются вопросы, и пользователь должен на них ответить. Сначала функция initGameобнуляет счет и выводит первый вопрос.
function initGame() {
// Определяем переменные.
questionNum = 0;
score = 0;
// Выводим первый вопрос.
displayQuestion();
}
Функция displayQuestionберет следующий вопрос и помещает вопрос и ответы в соответствующие текстовые поля. Она также устанавливает количество возможных очков за правильный ответ на данный вопрос равным 1000.
function displayQuestion() {
// Проверяем, все ли вопросы заданы.
if (questionNum >= qArray.length) {
// Отображаем окончательный счет, завершаем игру.
gotoAndPlay("game over");
} else {
// Перемешиваем ответы.
answers = shuffleArray(qArray[questionNum][1].slice(0));
// Выводим вопрос и ответы на экран.
question.text = qArray[questionNum][0];
answer0.text = answers[0];
answer1.text = answers[1];
answer2.text = answers[2];
answer3.text = answers[3];
// Отображаем номер вопроса.
questionNumDisplay = questionNum+1;
// Запоминаем, какой ответ правильный.
correctAnswer = qArray[questionNum][1][0];
// Воспроизводим анимацию текста.
animateIn();
// Присваиваем начальное количество возможных очков – 1000.
potentialPoints = 1000;
}
}
При каждом обращении к кадру «play» клипом «actions» вызывается функция scoreCount.Она вычитает единицу из максимального возможного числа очков, проверяя, чтобы это значение не оказалось менее 0.
// В каждом кадре из максимального возможного числа очков
// вычитаем единицу.
function scoreCount() {
// Проверяем, на месте ли последний ответ.
if (answers3._x == 400) {
// Вычитаем единицу.
potenrialPoints -= 1;
if (potentialPoints < 0) potentialPoints = 0;
}
}
Функция shuffleArrayиспользуется методом displayQuestion,чтобы случайным образом перемешать ответы. Сначала создается новый массив, а затем поэлементно из старого массива добавляются значения в новый массив.
// Берем массив array1 и перемешиваем его элементы
// для массива array2.
function shuffleArray(array1) {
// Создаем новый, пустой массив.
array2 = new Array();
// Просматриваем массив с помощью цикла.
do {
// Выбираем случайную величину.
r = int(Math.random()*array1.length);
// Добавляем элемент в новый массив.
array2.push(array1[r]);
// Удаляем элемент из старого массива.
array1.splice(r, 1);
} while (array1.length > 0);
// Возвращаем новый массив.
return(array2);
}
Функция animateInопределяет положение четырех ответов с правой стороны рабочего поля. Она указывает, что каждый из этих четырех клипов должен остановиться при перемещении влево, когда достигнет нужного горизонтального положения (400 пикселов от правой границы игрового поля). Сценарий, прикрепленный к каждому клипу, перемещает клип влево до тех пор, пока не будет выполнено вышеуказанное условие.
function animateIn() {
// Определяем положение каждого ответа
// и указываем место, где каждый клип должен остановиться.
answer0.xstop = 400;
answer0._x = 800;
answer1.xstop = 400;
answer1._x = 1000;
answer2.xstop = 400;
answer2._x = 1200;
answer3.xstop = 400;
answer3._x = 1400;
}
Когда пользователь щелкает по кнопке, выбранный ответ сравнивается со значением переменной correctAnswer,которая была определена в функции displayQuestion.Если ответ правильный, он набирает возможное количество очков, и выводится следующий вопрос. В противном случае, из количества возможных очков вычитается 200, и ответ удаляется с экрана.
function selectAnswer(n) {
// Правильный ответ.
Читать дальше
Конец ознакомительного отрывка
Купить книгу