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

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

Осталось рассмотреть несколько полезных функций. Первая, removeCard, удаляет карту из колоды открытых карт или из пирамиды. Чтобы удалить карту из открытой колоды, она должна просто отправить клип "stack1" к кадру, который представляет предыдущую карту. Именно в этом месте оказывается полезным массив stack. Каждая карта, положенная мастью вверх, добавляется к stack. Чтобы достать карту опять, вам нужно удалить последнюю карту из массива stack и затем обратиться к последнему члену этого массива. Если карта оказалась из пирамиды, то клип просто удаляется.

function rernoveCard(thisCard) {
    if (thisCard == stack1) {
        // Удаляем карту из открытой колоды,
        stack1.gotoAndStop(1);
        stack.pop();
        stack1.value = stack[stack.length - 1];
        stack1.gotoAndStop(stackl.value);
    }
    else {
        // Удаляем карту из пирамиды.
        thisCard.removeMovieClip();
    }
}

Следующая функция, cardPresent, проверяет в цикле все карты, чтобы определить, существует ли карта в позиции, определенной аргументам вызова данной функции.

function cardPresent(row, col) {
    // Проверяем, существует ли в пирамиде данная карта.
    for (var i = 0; i < 28; i++) {
        thisCard = _root["card" + i];
        if ((thisCard.row == row) and (thisCard.col == col)) {
            return(true);
        }
    }
    return(false);
}

Функция cardvalue берет свойство value клипа карты, отбрасывает первый символ и возвращает численное значение. Например, если значение value карты равно с9, возвращается число 9.

function cardValue(card) {
    // Удаляем первый символ из значения value.
    n = card.value;
    n = parselnt(n.substr(1, 2));
    return(n);
}

Последняя функция проходит в цикле по всем картам пирамиды и удаляет все оставшиеся карты. Также она удаляет "stack0" и "stackl". Это очищает рабочее поле для подготовки к следующему раунду.

function clearGame() {
    // Удаляем карты из пирамиды.
    for (var i = 0; i < 28; i++) {
        _root["card" + i].removeMovieClip();
    }
    // Удаляем обе колоды
    stack0.removeMovieClip();
    stack1.removeMovieClip();
}

К сведению

Кнопка New на экране имеет простой сценарий и сначала вызывает clearGame, а потом startGame. Это перезапускает игру в любой удобный пользователю момент.

on(press) {
    clearGame();
    startGame();
}

Другие возможности

Игру можно сделать значительно проще, если вы разрешите игроку переворачивать колоду уже открытых карт и смотреть карты столько раз, сколько он захочет. Вы можете сделать это, опознавая, когда массив deck пуст, и помещая каждую карту из массива stack обратно в массив deck.

Кроме этого пасьянса вы можете создать много других. В моей коллекции более 200 вариантов подобных игр. Большинство из них требует вытаскивания карт и перекладывания из стопки в стопку. Это делает код гораздо более сложным, но не невозможным для опытного программиста.

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