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