initGame;
stop;
function initGame {
// Определяем постоянное расположение клипов.
holeSpace = 30;
puzzleLeft = 160;
puzzleTop = 80;
// Просматриваем все отверстия и создаем в них колышки.
i = 0;
for(y=0;y<9;y++) {
for (x=0;x<9;x++) {
// Проверяем, должен ли быть создан колышек.
// Если да, создаем его.
if (((y < 3) or (y > 5)) and ((x < 3) or (x > 5))) continue
// Добавляем и размещаем новое отверстие.
attachMovie("hole", "hole"+i, i);
_root["hole"+i]._x = x*holeSpace + puzzleLeft;
_root["hole"+i]._y = y*holeSpace + puzzleTop;
// Не добавляем колышек в центральное отверстие.
if ((x != 4) or (y != 4)) {
// Добавляем и размещаем
// новое отверстие.
attachMovie("peg","peg"+i,100+i);
_root["peg"+i]._x = x*holaSpace + puzzleLeft;
_root["peg"+i]._y = y*holaSpace + puzzleTop;
}
i++;
}
}
// Запоминаем количество колышков.
maxHole = i;
}Когда игрок щелкает по колышку, на самом деле он щелкает по кнопке, расположенной внутри клипа. Оба действия, «press» и «release», передаются функциям в основной временной шкале. Функция dragPeg вызывается действием «press». Эта функция сохраняет положение колышка в переменных pegx и pegy, а затем разрешает перемещать колышек. Также она использует функцию swapDepths, чтобы колышек отображался поверх всех остальных.
function dragPeg(peg) {
// Запоминаем исходное положение колышка.
pegx = peg._x;
pegy = peg._y;
// Размещаем колышек поверх остальных.
peg.swapDepths(2000);
// Разрешаем программе Flash перемещать клип.
startDrag(peg, true);
}Функция dropDrag вызывается тогда, когда игрок отпускает кнопку мыши при перетаскивании. Сначала клип прекращает перемещение (8) . Затем с помощью функции dropDrag выясняется, находится ли какое-нибудь отверстие под курсором (9) .
Если курсор мыши расположен над дыркой, следующий шаг – определить, пустое ли отверстие или нет (10) . Затем код проверяет отверстия во всех четырех направлениях, чтобы выяснить, из какой дырки мог быть перемещен колышек. Для определения относительного положения отверстия используются переменные dx и dy (11) . Например, если игрок перемещает колышек вправо. dx присваивается 1, а dy – 0. Если вверх, то dy будет равняться -1, а dx – 0. Если отверстие, куда игрок перемещает колышек, не расположено через одну дырку вправо, влево, вверх или вниз, значения dx и dy становятся равными 0 (12) .
Даже если игрок перемещает колышек через одно отверстие, помещает его в пустое место, ход засчитывается только в том случае, если он "перепрыгивает" через другой колышек. Следующий фрагмент кода проверяет, есть ли такой "серединный" колышек (13) . Если да, код его удаляет и указывает, что перемещаемый колышек теперь находится в новом месте.
Если одно из этих условий не выполняется, значит, ход неверен. Значение переменной placed остается равным false, оно проверяется в конце функции (14) . И колышек возвращается на свое исходное место.