Викторина во Flash
Текст разбивается на несколько элементов с помощью функции split, которая сначала отделяет вопросы друг от друга, затем разделяет части вопросов и, наконец, отделяет ответы. В результате получается двумерный массив, содержащий всю необходимую вам информацию.
function initQuestions(questions) { // Задаем значение переменной topic, topic = loadQuestions.topic; // Разбиваем на отдельные вопросы. // Внимание: в некоторых случаях лучше использовать // значение 13, а не 10. qArray = loadQuestions.questions.split(String.fromCharCode(10)); // Разбиваем строчку вопроса на элементы, for (i = 0; i < qArray.length; i++) { qArray[i] = qArray[i].split(":"); // Отделяем ответы друг от друга. qArray[i][1] = qArray[i][1].split(";"); } // Начинаем игру. _root.gotoAndPlay("start game"); }Я использовал выражение String.fromCharCode (13), чтобы получить символ возврата каретки, что нужно для отделения строк в текстовом файле. Почему я не применил константу newline? Дело в том, что newline в программе Flash отличается для систем Macintosh и Windows. В Macintosh возвращается значение 13, а в Windows – 10. Более того, некоторые текстовые редакторы предпочитают значение 10, а некоторые оба! Так что, если игра не движется далее первого вопроса, попробуйте поменять 10 на 13, чтобы проверить, не в этом ли проблема.
Когда игра переходит к кадру "play", код ActionScript в основной временной шкале сразу же вызывает функцию initGame, которая обнуляет переменные questionNum и numRight и вызывает функцию displayQuestion, отображающую первый вопрос.
Функция split берет строчку и разбивает ее на фрагменты, которые помешаются в массив. Единственный параметр, который используется в этой функции, – это символ, необходимый для разделения фрагментов. В предыдущем примере как двоеточие, так и точка с запятой применялись для разбиения строчки и помещения элементов в массив.
function initGameO { // Устанавливаем значения переменных. questionName = 0; numRight = 0; // Выводим первый вопрос. displayQuestion(); }Функция displayQuestion определяет, закончена ли игра или нет, и в случае положительного ответа отображает окончательное количество набранных очков и переходит к кадру "game over". В противном случае она берет вопрос и каждый ответ и помешает их в текстовые поля внутри соответствующих клипов. Номер правильного ответа присваивается переменной correctAnswer.
function displayQuestion() { // Проверяем, все ли вопросы уже заданы, if (questionNum >= qArray.length) { // Отображаем окончательное число очков и завершаем игру finalScore = numRight + "out of" + qArray.length; gotoAndPlay("game over"); } else { // Отображаем вопрос и ответы на экране. question.text = qArray[questionNum][0]; answer0.text = qArray[questionNum][1][0]; answer1.text = qArray[questionNum][1][1]; answer2.text = qArray[questionNum][1][2]; answer3.text = qArray[questionNum][1][3]; // Выводим номер ответа. questionNumDisplay = questionNum + 1; // Запоминаем, какой ответ верный. correctAnswer = int(qArray[questionNum][2]); // Делаем так, чтобы текст "въезжал" на экран animatein(); } }Когда у вас массив содержится в другом массиве (двумерный массив), к элементу вложенного массива можно обратиться с помощью нескольких скобок. Например, выражение myArray[3] [8] обращается в восьмому значению третьего элемента массива myArray. Массив myArray состоит из четырех или более элементов, в третьем элементе содержится, в свою очередь, массив по меньшей мере из девяти элементов.
Функция animatein позволяет создать эффект появляющегося из-за экрана текста. Она устанавливает положение каждого текстового клипа за рабочим полем справа. Затем для каждого из этих клипов с помощью переменной xstop присваивается нужное горизонтальное положение. Код, прикрепленный к каждому из этих клипов, перемешает его влево до тех пор, пока он не дойдет до положения xstop.
function animatein() { // Определяем положение каждого элемента текста, //а также указываем место, где клип должен остановиться. question.xstop = 300; question._x = 800; answerO.xstop = 400; answer0._x = 1000; answerl.xstop = 400; answerl._x = 1200; answer2.xstop = 400; answer2._x = 1400; answer3.xstop = 400; answer3._x = 1600; }