Головоломки Flash

Создание кода



Создание кода

Код этого ролика делится на две части. Первая часть - набор функций, расположенных в первом кадре ролика. Вторая часть находится в клипе "playback actions", который управляет воспроизведением мелодий в кадре "play". Небольшие фрагменты кода есть и в других местах. Функции, используемые в этой ролике, расположены в первом кадре основной временной шкалы. Они инициализируют переменные игры, отвечают за реакцию на щелчки мышью и воспроизводят мелодии.
Сначала в игре вызывается функция initGame, которая устанавливает все переменные. Эта функция вызывается в начале игры всегда и в конце, если игрок хочет сыграть заново, то есть снова переходит к первому кадру.
Функция initGame очищает массив notes, затем вызывает функцию addNextNote, чтобы поместить в этот массив случайное число. Также она указывает, что счет игры должен отображаться равным 0.

initGame();

stop();

function initGame() {

// Очищаем массив сообщений,

notes = new Array();

scoreDisplay = "Score: 0";

// Добавляем первое сообщение.

addNewNote();

}

Функция addNextNote случайным образом выбирает номер кадра от 1 до 4 и помещает его в массив notes.

function addNextNote() {



// Выбираем случайное число из диапазона от 1 до 4.

r = int(Math.Random()*4+1);

// Добавляем число в массив,

notes.push(r);

}

Остальные функции этой игры используются позже. Функция startRepeat вызывается тогда, когда игрок прослушал пение птиц и должен щелкать по их изображениям, чтобы воспроизвести соответствующие мелодии.
Переменная repeatNum отслеживает, по какому элементу должен щелкнуть игрок. Изначально ее значение равно 0, а затем оно изменяется каждый раз, когда пользователь щелкает по птице.

function startRepeat() {

// Определяем, по какому элементу

// должен теперь щелкнуть пользователь.

repeatNum = 0;

// Переходим к кадру, где размещены кнопки.

gotoAndPlay("repeat");

}

Функция clickBird вызывается теми кнопками, которые спрятаны за изображениями птиц; ей передается номер элемента, по которому щелкнули. Сначала функция проигрывает анимацию птицы и соответствующую анимацию пения. Затем сравнивает сообщение со следующим сообщением в списке. Если они совпадают, значит, игрок правильно выбрал птицу, и значение переменной repeatNum увеличивается. Если это было последнее сообщение, игра переходит к кадру "correct". В противном случае функция ждет, пока не выберут следующее сообщение. Если сообщение не совпадает с предопределенным, ролик переходит к кадру "wrong", и игра заканчивается.




function clickBird(note) {

// Воспроизводим анимацию птицы.

_root["bird"+note].gotoAndPlay(2);

// Воспроизводим анимацию сообщения.
_root["note"+note].gotoAndPlay(2);

// Проверяем, правильно ли был выбран элемент,

if (note == notes[repeatNum]) {

// Ожидаем воспроизведения следующей мелодии.

repeatNum++;

// Если мелодий больше нет, игрок правильно угадал

// последовательность.

if (repeatNum > notes.length-1) {

scoreDisplay = "Score: " + notes.length;

gotoAndPlay("correct ");

}

} else {

// Игрок ошибся. gotoAndPlay("wrong");

}}

Кадр "play" проигрывает каждую мелодию из последовательности в соответствии со сценарием, прикрепленным к клипу "playback actions". Сценарий начинается с того, что устанавливает две переменные. Переменная noteNum следит за тем, какое сообщение должно быть проиграно следующим, а переменная nextTime - когда оно должно быть проиграно.

onClipEvent(load) {

// Начинаем с мелодии, под номером 0.

noteNum = 0;

nextTime = 0 ;

}

На каждом шаге ролика в кадре "play" текущее время сравнивается со значением переменной nextTime. Если текущее время превышает это значение, проигрывается следующая мелодия. Анимация пения и птицы инициализируются точно так же, как если бы они вызывались при щелчке мышью. Затем изменяются значения переменных noteNum и nextTime, чтобы подготовиться к воспроизведению следующей мелодии. Переменная nextTime увеличивается на 1000, то есть следующая мелодия будет проиграна через одну секунду. Когда будут проиграны все сообщения, ролик вызовет функцию startRepeat, которая была рассмотрена ранее. То есть игра перейдет к кадру "repeat" и будет ждать, когда пользователь попытается восстановить последовательность.

onClipEvent(enterFrame) {

// Выясняем, пришло ли время проиграть следующую мелодию,

if (getTimerO > nextTime) {

// Получение сообщения,

note = _root.notes[noteNum];

// Проигрывается анимация пения

//и соответствующий звуковой файл.

_root["bird"+note].gotoAndPlay(2);

_root[Mnote"+note].gotoAndPlay(2);

// Ждем одну секунду, прежде чем проиграть следующую

// мелодию.

nextTime = getTimer() + 1000;

noteNUm++;

// Если больше сообщений нет, продолжаем со следующего

// шага.

if (noteNum > _root.notes.length) {

_root.startRepeat();}

}}

Каждая кнопка, расположенная на рабочем поле в кадре "repeat", при щелчке по ней должна вызывать функцию clickBird. Каждый из четырех сценариев немного отличается от остальных, так как они должны передать функции различные числа. Вот сценарий для одной из кнопок:

on (press) {
clickBird (1);
}


Содержание раздела