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

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

Жанры

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

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

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Совершенно несекретно

Иванов Дмитрий
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совершенно несекретно

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Единственная для темного эльфа 3

Мазарин Ан
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Единственная для темного эльфа 3

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 6

Я еще не барон

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

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита