Пасьянс "Пирамида"
Подготовка ролика
Ролик содержит в библиотеке такой же клип "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
;
}