function dropDrag(peg) {
(8) → // Клип с колышком больше не перемещается.
stopDrag;
// По умолчанию ход неверен.
placed = false;
overole = false;
(9) → // Определяем местоположение отверстия, над которым
// находится курсор.
for(i=0;i hole = _root["hole"+i]; if (hole.hitTest(_xmouse, _ymouse)) { overeHole = true; break; } } (10) → // Выясняем, свободно ли отверстие. if (!pegThere(hole._x, hole._y)) { (11) → // Определяем различие между исходным и конечным // положениями. dx = 0; dy = 0; if ((pegx == hole._x) and (pegy-holeSpace*2 == hole._y)) { // сверху dy = -1; } else if (pegx==hole._x) and (pegy+holeSpace*2==hole._y)) { // внизу dy = 1; } else if (pegy==hole._y) and (pegx-holeSpace*2==hole._x)) { // слева dx = -1; } else if (pegy==hole._y) and (pegx+holeSpace*2==hole._x)) { // справа dx = 1; } (12) → // Значения dx и dy будут равны 0, если целевое отверстие // не находится на необходимом расстоянии. if ((dx != 0) or (dy != 0)) { (13) → // Выясняем, есть ли колышек посередине. midThere = false; for(i=0;i mid = _root["peg"+i]; if ((mid._x == pegx + dx*holeSpace) and (mid._y == pegy + dy*holeSpace)) { // Раз колышек здесь находится, // значит, ход верный. // Указываем новое положение колышка. peg._x = hole._x; peg._y = hole._y; // Удаляем колышек посередине. mid.removeMovieClip; // Запоминаем, что ход верен. placed = true; break; } } } } (14) → // Проверяем, верный ли ход был сделан, и если нет, // восстанавливаем исходное положение колышка. if (placed) { peg._x = pegx; peg._y = pegy; } Функция dropPeg использует полезную функцию pegThere, которой передается расположение отверстия и которая возвращает значение true, если именно в этом месте обнаружен клип peg. function pegThere(x.y) { // Выясняем, находится ли в этом месте колышек. for (i=0;i peg = _root["peg"+i]; if ((peg._x == x) and (peg._y == y)) { return true; } } return false; Во время игры внизу экрана все время находится кнопка Restart Game (Начать заново), которая позволяет заново начать игру, когда больше нельзя сделать ни одного действия или когда пользователь понимает, что плохо начал игру. Эта кнопка должна не только вызывать функцию initGame, но и очищать оставшиеся клипы «peg» и «hole». function restartGame { // Удаляем все клипы. for (i=0;i _root["peg"+i].removeMovieClip; _root["hole"+i].removeMovieClip; } // Начинаем новую игру. initGame; Код, прикрепленный к кнопке, расположенной внутри клипа «peg», очень прост. Все, что он делает, это передает функциям действия press и release. on (press) { _root.dragPeg(this); } on (release) { _root.dropPeg(this);
Другие возможности