Иллюстрированный самоучитель по созданию Flash-игр

Игра совпадений

Подготовка ролика

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

Иллюстрированный самоучитель по созданию Flash-игр › Мозаика › Игра совпадений
Рис. 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 значение клипа и сравнивает два клипа. Если они совпадают, оба клипа удаляются.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.