Рисунок 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 = 0;
}
...
Примечание
Обратите внимание, что с помощью команды push в массив можно добавить сразу более одного элемента. Например, выражение myArray.push(7,12)добавит в массив myArrayчисла 7 и 12.
Функция initGameзаканчивается тем, что обнуляется переменная firstclip.В этой переменной содержится ссылка на карту, по которой шелкнули первой. Когда шелкают по клипу, кнопка внутри этого клипа отреагирует и на основную временную шкалу с помошью функции clickCardбудет добавлена ссылка к клипу.
Функция clickCardможет выполнить одну из 3-х функций. Если значение переменной firstclipравно 0, ей присваивается клип, по которому шелкнули, карта переворачивается, то есть программа переходит к кадру, содержашему соответствуюшую картинку.
Если в переменной firstclipхранится ссылка на некий клип, значит, одна карта уже перевернута. В этом случае программа переворачивает и вторую карту, присваивает переменной secondclipзначение клипа и сравнивает два клипа. Если они совпадают, оба клипа удаляются.
Третье условие, которое, на самом деле, проверяется до двух первых, возникает тогда, когда игрок шелкает по одной и той же карте дважды. В таком случае значение переменной clipбудет равно firstclip.Карта просто снова переворачивается и значение firstclipобнуляется.
Прежде чем проверить эти три условия, функция clickCardопределяет, перевернуты ли уже две карты. Если да, значит, игрок уже выбрал две карты, но они не совпали. Прежде чем перевернуть следующую карту, эти две карты поворачиваются рубашками вверх.
function clickCard(clip) {
// Проверяем, отображены ли две карты.
if (secondclip != 0) {
// Располагаем эти две карты рубашками вверх.
firstclip.gotoAndStop(1);
secondclip.gotoAndStop(1);
firstClip = 0;
secondClip = 0;
}
// Проверяем, щелкнул ли пользователь дважды
// по одной и той же карте.
if (firstclip == clip) {
// Переворачиваем карту.
firstclip.gotoAndStop(1);
firstclip = 0;
// Выясняем, есть ли хоть одна перевернутая карта.
} else if (firstclip == 0); {
// Переворачиваем первую карту.
clip.gotoAndStop(clip.picture+1);
firstclip = clip;
// Одна карта должна быть перевернута.
} else {
// Переворачиваем вторую карту.
clip.gotoAndStop(clip.picture+1);
secondClip = clip;
// Проверяем, совпадают ли карты.
if (firstclip.picture == secondClip.picture) {
// Удаляем обе карты.
firstClip.removeMovieClip();
secondClip.removeMovieClip();
firstClip = 0;
secondClip = 0;
}
}
}
Вот все, что нужно для игры. У кнопки внутри клипа «Cards» только одна строчка кода, которая передает основной временной шкале информацию о том, что по клипу шелкнули.
on (press) {
// Передаем основной временной шкале информацию о щелчке мышью.
_root.clickCard(this);
}
К сведению
Не забудьте вставить команду stop() в первый кадр клипа «Cards». В противном случае во всех картах будут отображаться все картинки.
Читать дальше
Конец ознакомительного отрывка
Купить книгу