Пасьянс "Пирамида"
Функция createDeck такая же, как в игре "Двадцать одно". Однако теперь вы сортируете только одну колоду. Результат представляется в виде глобальной переменной deck.
// Создаем перетасованную колоду.
function
createDeck() {
// Создаем упорядоченную колоду.
suits
=
[
"c"
,
"d"
,
"s"
,
"h"
];
temp
=
new
Array();
for
(suit
=
0
; suit
<
4
; suit
+
+
) {
for
(num
=
l; num
<
14
; num
+
+
) {
temp.pushfsuits[suit]
+
num);
}
}
// Выбираем случайные карты, пока не создадим перетасованную колоду.
deck
=
new
Array();
while
(temp.length
>
0
) {
r
=
int(Math.random()
*
temp.length);
deck.push(tempt[r]);
temp.splice(r,
1
);
}
}
Вместо того, чтобы использовать сценарий клипа или кнопку для обнаружения щелчков мыши, я определю функцию для обработки события onMouseDown.
Сначала она совершает цикл по всем картам в пирамиде и определяет, не совершен ли щелчок по одной из них. (18). Цикл начинается с 28 и совершает обратный отсчет. Таким образом, карты наверху рассматриваются сначала, а карты внизу – потом.
Далее мы проверяем, если по карте был совершен щелчок, то программа определяет, закрывают ли данную карту другие карты пирамиды (19). Для этого вызывается функция cardPresent вместе со значениями ряда и колонки двух карт, которые могли бы закрывать карту, по которой был совершен щелчок.
Если локальная переменная card все еще не определена, значит, ни одна карта не была выбрана. Нужно еще проверить, не выбрал ли игрок карту из стопки карт с открытой мастью. Эту колоду представляет клип "stack1" (20).
Если карта была выбрана, а глобальная переменная firstcard все еще не определена, значит, не выбрана никакая другая карта. Ссылка на выбранную карту помещается в firstcard (21).
Если другая карта уже выбрана, значения старой и новой карт складываются. Функция cardValue используется для хранения численных значений карт (22). Если сумма равна 13, обе карты удаляются при помощи функции removeCard.
Если, с другой стороны, значение firstcard равно 13, значит, это король, и он может быть удален сам по себе (23).
Если по клипу "stack0" был совершен щелчок, это значит, что игрок решил перенести карту из закрытой колоды в открытую. В этом случае берется последнее значение в массиве deck и используется для изменения кадра клипа "stack1" (24). Массив stack используется для отслеживания карт, которые перемешаются между стопками. Чтобы выделить выбранную карту, клип "outline" перемешается в то же положение, что и выбранная карта (25).
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
И наконец, проверяется первая карта пирамиды (26). Если она отсутствует, значит, игрок ее удалил и выиграл игру.
_root.onMouseDown
=
function
() {
var
card
=
undefined;
//(18) Смотрим, был ли щелчок по одной из карт пирамиды.
for
(
var
i
=
27
; i
>
=
0
; i
-
-
) {
if
(_root[
"card"
+
i].hitTest(_xmouse, _ymouse)) {
var
card
=
_root[
"card"
+
i];
break
;
}
}
//(19) Если был, закрывают ли эту карту другие карты?
if
(card !
=
undefined) {
if
(cardPresent(card.row
+
l, card.col) or cardPresent(card.row
+
1
, card.col
+
l)) {
card
=
undefined;
}
}
//(20) Был ли щелчок по стопке карт, лежащих мастью вверх?
if
(card
=
=
undefined) {
if
(stackl.hitTest(_xmouse, _ymouse)) {
card
=
stack1;
}
}
// Проверяем, выбрана ли еще одна карта,
if
(card !
=
undefined) {
//(21) Первая выбранная карта,
if
(firstCard
=
=
undefined) {
firstCard
=
card;
// Игнорируем второй щелчок по той же карте.
}
else
if
(firstCard
=
=
card) {
//(22) Если выбраны две карты и их сумма равна 13.
}
else
if
(cardValueffirstCard
+
cardValue(card)
=
=
13
) {
// Удаляем обе карты.
removeCard(card);
removeCard(firstCard);
firstCard
=
undefined;
// В противном случае считаем, что это первая выбранная карта.
}
else
{
firstCard
=
card;
}
}
//(23) Если выбрана одна карта, и это "король"
if
(cardValueffirstCard
=
=
13
) {
removeCardffirstcard;
firstCard
=
undefined;
}
//(24) Если щелкнули по колоде закрытых карт, переворачиваем очередную карту.
if
(stack0.hitTest(_xmouse, _ymouse)) {
stack1.value
=
deck.pop();
stack1.gotoAndStop(stackl.value);
stack.push(stackl.value);
// Когда закрытая колода кончается, удаляем ее.
if
(deck.length
=
=
0
) {
stack0.removeMovieClip();
}
}
//(25) Помещаем рамку около выделенной карты,
if
(firstCard !
=
undefined) {
outline._x
=
firstCard._x;
outline._y
=
firstCard._y;
}
else
{
outline._x
=
-
1000
;
}
//(26) Если удалена первая карта в пирамиде, значит игрок выиграл.
if
(_root[
"card0"
]
=
=
undefined) {
gotoAndStop(
"game over"
);
}
}