Игра совпадений
Подготовка ролика
В ролике Matching.fla есть клип "Cards", временная шкала которого содержит 19 кадров (рис. 13.5).

Рис. 13.5. Во временной шкале клипа "Cards" имеется 19 кадров, первый без картинки и остальные 18 с различными картинками
В первом кадре расположена рубашка карты, то есть никакой картинки нет. В остальных 18 кадрах содержатся изображения, соответствующие разным картам.
Кнопка – просто прямоугольник такого же размера, что и карта. Она расположена в третьем слое клипа "Cards" (см. рис. 13.5), то есть за фоном.
Хотя кнопку не будет видно, она будет реагировать на действия пользователя.
Также в клипе "Cards" присутствует фон. У первого кадра, содержащего рубашку карты, фон серый. У остальных кадров, в которых находится какая-либо картинка, белый фон.
Создание кода
Почти весь код этой игры находится в основной временной шкале. Ролик начинается с вызова функции initGame, которая создает список 18 пар карт, случайным образом выбирает карты из первого списка, а затем помешает их во второй список, чтобы перемешать колоду карт.
Потом функция создает 36 карт. Каждый клип автоматически начинается с того, что карта помещается рубашкой вверх, а свойству клипа ("picture") присваивается номер картинки, которую карта будет представлять.
initGame(); stop(); function initGame() { // Создаем отсортированный список карт. cardsListOrdered = []; for (i = 1; i <= 18; i++) { cardsListOrdered.push(i, i); } // Список перемешанных карт. cardsListSorted = []; while (cardsListOrdered.length > 0) { r = int(Math.random() * cardsListOrdered.length); cardsListSorted.push(cardsListOrdered[r] }; cardsListOrdered.splice(r, 1); // Создаем клипы карт и определяем их положение и картинки, x = 0; y = 0; for (i = 0; i < 36; i++) { attachMovie("card", "card" + i, i); _root["card" + i].picture = cardsListSorted[i]; _root["card" + i]._x = x * 60 + 200; _root["card" + i]._y = y * 60 + 50; // Переходим к следующей карт x++; if (x > 5) { x = 0; y++; } } // Располагаем эти две карты рубашками вверх, firstclip.gotoAndStop(1); secondclip.gotoAndStop(1); firstclip = 0; secondclip = 0; firstdip = 0; }Обратите внимание, что с помощью команды push в массив можно добавить сразу более одного элемента. Например, выражение myArray.push(7.12) добавит в массив myArray числа 7 и 12.
Функция initGame заканчивается тем, что обнуляется переменная firstclip. В этой переменной содержится ссылка на карту, по которой щелкнули первой. Когда щелкают по клипу, кнопка внутри этого клипа отреагирует и на основную временную шкалу с помощью функции clickCard будет добавлена ссылка к клипу.
Функция clickCard может выполнить одну из 3-х функций. Если значение переменной firstclip равно 0, ей присваивается клип, по которому щелкнули, карта переворачивается, то есть программа переходит к кадру, содержащему соответствующую картинку.
Если в переменной firstclip хранится ссылка на некий клип, значит, одна карта уже перевернута. В этом случае программа переворачивает и вторую карту, присваивает переменной secondclip значение клипа и сравнивает два клипа. Если они совпадают, оба клипа удаляются.
