Игра совпадений
Подготовка ролика
В ролике 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 значение клипа и сравнивает два клипа. Если они совпадают, оба клипа удаляются.