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

Пасьянс "Пирамида"

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

Ролик содержит в библиотеке такой же клип "deck", как в игре "Двадцать одно". Ему необходимо присвоить имя в панели Linkage Properties,чтобы он экспортировался вместе с роликом. То же относится и к клипу "outline".' В игре присутствует только два кадра: кадр "Play" и кадр "Game over". Последний будет использоваться только в редком случае выигрыша. Оба кадра должны содержать кнопку New, чтобы пересдавать карты в любой удобный игроку момент.

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

Практически весь код находится в главной временной шкале. Он начинается с функции "startGame". После того как создана новая, перетасованная, колода, создается семь рядов карт (10). Первый ряд содержит" одну карту, второй – две и т.д.

Каждая карта помешается на свое место в соответствии с рядом и местом в ряду (11). К тому же масштаб каждой карты уменьшен на 50%, поскольку колода, использованная в игре "Двадцать одно", в два раза больше по размеру той, что необходима для этой игры (12).

Значение карты берется из массива deck (13). Оно соответствует метке кадра внутри клипа "deck". Это значение сохраняется в свойстве value клипа, после чего клип отправляется в соответствующий кадр. В свойствах клипа row и col хранится позиция клипа в пирамиде (14).

Затем вы создаете клипы для стопок карт мастью вниз и мастью вверх (15). Клип для карт мастью вниз отправляется в кадр "back", показывающий изображение рубашки карты. Другая стопка остается в первом кадре, который пуст.

Переменная firstcard установлена как undefined (16). Эта переменная содержит значение первой карты в паре, выбираемой самим игроком. Массив stack используется для слежения за судьбой карт из стопки мастью вверх. В случае, когда карта из этой стопки используется, должно быть отыскано значение предыдущей выбранной карты.

В заключение должен быть создан экземпляр клипа рамки (17). В начальный момент он помешается за пределами видимости.

startGame();
stop();
function startGame() {
    // Тасуем колоду.
    createDeck();
    //(10) Выстраиваем карты в пирамиду,
    level = 0;
    for (row = 0; row < 7; row++) {
        for (i = 0; i <= row; i++) {
            // Создаем новый клип.
            mc = _root.attachMovie("Deck", "card" + level, level);
            //(11) Задаем его расположение.
            mc._x = i * 60 - row * 30 + 275;
            mc._y = row * 30 + 50;
            //(12) Задаем масштаб.
            mc._xscale = 50;
            mc._yscale = 50;
            //(13) Устанавливаем значение карты,
            mc.value = deck.pop();
            mc.gotoAndStop(mc.value);
            //(14) Запоминаем позицию карты,
            mc.row = row;
            mc.col = i;
            level++;
        }
    }
    //(15) Размещаем клипы открытой и закрытой колод,
    for (i = 0; i < 2; i + +) {
        me = _root.attachMovie("Deck", "stack" + i, level);
        mc._x = i * 60 + 100;
        mc._y = 340;
        mc._xscale = 50;
        mc._yscale = 50;
        level++;
    }
    // Показываем "рубашку" для закрытой колоды.
    _root["stackO"].gotoAndStop("back");
    //(16) Задаем значение первой выбранной карты и массив для
    // открытой колоды.
    firstCard = undefined;
    stack = new Array();
    //(17) Создаем и размещаем рамку.
    outline = _root.attachMovie("outline", "outline", 1000);
    outline._xscale = 50;
    outline._yscale = 50;
    outline._x = -1000;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.