Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Шрифт:
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) {
// Правильный ответ.
if (answer[n] == correctAnswer) {
triggerSound("right");
// Увеличиваем счет.
score += potentialPoints;
// Выводим следующий вопрос.
questionNum++;
displayQuestion;
} else {
// Неправильный ответ.
triggerSound("wrong");
// Уменьшаем количество возможных очков.
potentialPoints -= 200;
if (potentialPoints < 0) potentialPoints = 0;
// Удаляем ответ.
_root["answer"+n].text = "";
}
}Функция triggerSound работает точно так же, как и в предыдущей игре. Она просто воспроизводит короткий звуковой сигнал.
function triggerSound(soundName) {
// Воспроизводим звук.
// Aini.iecaiaei caoe.
soundfx.stop;
soundfx = new Sound;
soundfx.attachSound(soundName);
soundfx.start;
}Другие фрагменты кода кадра «play» включают небольшую часть для клипа «actions», который вызывает метод scoreCount.
onClipEvent(enterFrame) {
_root.scoreCount;
}Код для каждого из четырех клипов ответа также используется в программе (здесь представлен код только для одного клипа). Обратите внимание, что клип движется в два раза быстрее, чем в предыдущей игре.
onClipEvent(enterFrame) {
if (_x != xstop) _x -= 40;
}В каждой из четырех кнопок содержится сценарий, инициирующий при ее нажатии функцию selectAnswer. Кнопки реагируют не только на щелчок мыши, для каждой кнопки определена клавиша на клавиатуре. Например, первая кнопка, которую вы видите, помечена "A" (рис. 12.4), она реагирует на нажатие клавиши "A".
on (release, keyPress "A") {
selectAnswer(0);
}К сведению
Внимательно просмотрите каждый элемент ролика Flashtrivia.fla, размещенного на Web-сайте. В нем находятся текстовые поля: для вопроса, четырех ответов, количества возможных очков и счета. Каждая кнопка представляет собой копию одного и того же клипа, вверху нее расположен статический символ. Эти символы лишь напоминают пользователю, что он может нажать соответствующую клавишу на клавиатуре вместо того, чтобы щелкнуть по самой кнопке.
Другие возможности
Как и в предыдущей игре, в текстовый файл можно поместить столько вопросов, сколько вы хотите. Если вы знакомы с программированием CGI, вы даже можете написать программу для сервера, которая будет генерировать файл Flashtrivia.txt на основе базы данных вопросов.
Вы также можете изменить начальное количество очков для вопросов, а также число очков, вычитаемых за неправильный ответ.
Игра «Виселица»
Исходный файл: Hangman.fla
Следующая игра должна быть знакома всем. В классической игре с ручкой и бумагой, "Виселице", игрок должен угадать, какие символы используются в фразе. Если он угадывает букву, становятся видны все места ее включения во фразу. Если во всей фразе нет такой буквы, добавляется фрагмент рисунка с повешенным человеком. Если рисунок закончен прежде, чем фраза угадана, игрок проигрывает.
Задача проекта
Цель проекта – воссоздать классическую игру «Виселица» в среде Flash. Игрок может с помощью клавиатуры угадывать буквы. Программа показывает буквы и рисует повешенного человека или, как в расматриваемом примере, лису.