Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Шрифт:
Другая возможность – это случайность вывода ответов, то есть ответы будут перемешиваться, вследствие чего будут появляться на экране в произвольном порядке. Это упростит создание списка вопросов, так как первый ответ в файле данных всегда будет правильным ответом, но он не всегда будет отображаться для пользователя на первом месте.
На рис. 12.4 представлен основной кадр игры из ролика Flashtrivia.fla.
Рисунок 12.4. В
Задача проекта
Цель проекта состоит в создании развернутого варианта викторины, основанного на предыдущем ролике. Ответы будут представлены не в одной и той же последовательности, а каждый раз будут отображаться в произвольном порядке.
Потенциально каждый вопрос стоит 1000 очков. Но чем дольше пользователь думает над ответом, тем меньше очков получает. Если пользователь дает неправильный ответ, он теряет определенное число возможных очков. Когда же, наконец, пользователь даст правильный ответ, количество оставшихся возможных очков будет прибавлено к его счету.
Подход
Как и в предыдущем ролике, вопросы и ответы будут загружены из внешнего текстового файла. Однако текстовый файл будет немного отличаться. В предыдущей игре ответы были представлены в определенном порядке, и дополнительный элемент указывал, какой ответ верный. Сейчас же правильный ответ всегда будет располагаться первым, а далее будут следовать три неправильных ответа. Такое допустимо, так как ответы все равно будут перемешаны. Вот несколько строк из текстового файла flashtrivia.txt:
questions=The world’s first computer bug was actually a real bug
stuck in an early computer. What type of bug was it?:
Moth;Beetle;Fly;Worm:
Which is the world’s largest Island?:
Greenland;Iceland;Australia;New Zealand:
Besides humans, what other animal also has individual
fingerprints?:Koala Bears;Apes;Snakes;Frogs:
Вопросы=Какого типа был первый компьютерный вирус?
:Моль;Жук;Муха;Червь:
Как назывется самый большой остров в мире?
:Гренландия;Исландия;Австралия;Новая Зеландия:
Кроме людей, какие еще животные имеют уникальные отпечатки пальцев?
:Коалы;Обезьяны;Змеи;Лягушки.Внимание!
Так же, как и при работе над предыдущим проектом, будьте внимательны: не вставьте нечаянно пустую строчку в конце текстового файла. Она появится, если вы нажмете клавишу Return или Enter после ввода последнего вопроса. Если в конце текстового файла будет вставлена пустая строка, она будет рассматриваться как одиннадцатый вопрос.
Перед тем как задается вопрос, ответы в новом массиве перемешиваются случайным образом. Правильный ответ может оказаться по счету любым из четырех вариантов. Его положение присвоено некоторой переменной.
Здесь будет использоваться
Когда пользователь выбирает неправильный ответ, количество возможных очков уменьшается на определенную величину, но и выбранный ответ исчезает.
Подготовка ролика
В этом ролике четыре кадра. Первый загружает вопросы и ответы и помещает их в массив. Второй кадр содержит информацию о правилах игры.
В третьем кадре начинается само действие, отображается вопрос, четыре ответа, кнопка рядом с каждым ответом, количество возможных очков и счет, оба последних текстовых поля – динамические, первое связано с переменной potentialPoints, а второе – с переменной score.
Помните, что на самом деле четыре ответа – это клипы, в которых находятся текстовые поля, отображающие содержимое переменной 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.length,i++) {
qArray[i] = qArray[i].split(":");
// Отделяем ответы друг от друга.
qArray[i][1] = qArray[i][1].split(";");
}
}Наибольшая часть кода находится в кадре «play», то есть в том кадре, где задаются вопросы, и пользователь должен на них ответить. Сначала функция initGame обнуляет счет и выводит первый вопрос.
function initGame {
// Определяем переменные.
questionNum = 0;
score = 0;
// Выводим первый вопрос.
displayQuestion;
}Функция displayQuestion берет следующий вопрос и помещает вопрос и ответы в соответствующие текстовые поля. Она также устанавливает количество возможных очков за правильный ответ на данный вопрос равным 1000.