Иллюстрированный самоучитель по созданию Flash-игр

Викторина во 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;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.