Чтение онлайн

на главную - закладки

Жанры

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. Игрок может с помощью клавиатуры угадывать буквы. Программа показывает буквы и рисует повешенного человека или, как в расматриваемом примере, лису.

Поделиться:
Популярные книги

Ваантан

Кораблев Родион
10. Другая сторона
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Ваантан

Все не случайно

Юнина Наталья
Любовные романы:
современные любовные романы
7.10
рейтинг книги
Все не случайно

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Законы Рода. Том 2

Flow Ascold
2. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 2

Сиротка

Первухин Андрей Евгеньевич
1. Сиротка
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Сиротка

Sos! Мой босс кровосос!

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Sos! Мой босс кровосос!

LIVE-RPG. Эволюция-1

Кронос Александр
1. Эволюция. Live-RPG
Фантастика:
социально-философская фантастика
героическая фантастика
киберпанк
7.06
рейтинг книги
LIVE-RPG. Эволюция-1

Играть, чтобы жить. Книга 1. Срыв

Рус Дмитрий
1. Играть, чтобы жить
Фантастика:
фэнтези
киберпанк
рпг
попаданцы
9.31
рейтинг книги
Играть, чтобы жить. Книга 1. Срыв

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия