Пасьянс "Пирамида"
Осталось рассмотреть несколько полезных функций. Первая, 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 вариантов подобных игр. Большинство из них требует вытаскивания карт и перекладывания из стопки в стопку. Это делает код гораздо более сложным, но не невозможным для опытного программиста.
