Пятнашки
Функция findEmpty использует метод tileThere, чтобы определить, находится ли элемент на определенном месте. Метод tileThere вызывается для определения элементов слева, справа, снизу и сверху.
// Проверяем, находится ли элемент мозаики на определенном месте, function tileThere(thisx, thisy) { // Просматриваем элементы на предмет совпадения координат, for (i = l; i <= 15; i++) { // Выясняем, совпадают ли значения положения //по горизонтали, if (_root["tile" + i]._x == thisx) { // Совпадает ли положение по вертикали, if (_root["tile" + i]._y == thisy) { return true; } } } // Эти координаты соответствуют пустому квадратику, return false; }После того как было решено переместить элемент, вызывается функция moveTile. Эта же функция используется, когда игрок перемешает элементы.
// Перемещаем элемент в определенном направлении, function moveTile(tile, direction) { if (direction == "above") { _root[tile]._y -= tileDist; } else if (direction == "below") { _root[tile]._y += tileDist; } else if (direction == "left") { _root[tile]._x -= tileDist; } else if (direction == "right") { _root[tile]._x += tileDist; } }После того как контроль передается игроку, надо определить, по какому элементу щелкнули мышкой. Для этого вызывается функция tileUnderMouse.
// Определяем, по какому элементу щелкнул игрок, function tileUnderMouse() { for (i = l; i <= 15; i + +) { if (_root["tile" + i].hitTest(_xmouse, _ymouse)) { return(i); } } }Сценарий в основной временной шкале заканчивается вызовом функции initGame и выводом на экран перемешанных элементов.
initGame(); stop();Игрок взаимодействует с картинкой мозаики посредством клипа "actions", расположенным вне рабочего поля. Клип воспринимает щелчок мыши, определяет, по какому элементу щелкнул пользователь, и перемещает этот элемент.
onClipEvent(mouseDown) { // Определяем, по какому элементу щелкнул пользователь. tileClicked = _root.tileUnderMouse(); // Определяем, есть ли рядом пустое пространство. emptySpace = _root.findEmpty("tile" + tileClicked); // Перемещаем элемент на свободное место. _root.moveTile("tile" + tileClicked, emptySpace); }К сведению
В рассмотренном варианте игры элементы мозаики расположены друг от друга на расстоянии 54 пиксела, а игровое пространство представлено сеткой 4x4. Если вы хотите изменить один из этих параметров, необходимо тщательно проверить код и внести необходимые изменения.
Другие возможности
Игра будет интереснее, если программа будет определять, когда картинка полностью собрана, и на экране будет появляться кадр с поздравлением. Это можно сделать, сохранив исходное положение элементов в массиве и выясняя после каждого шага, в нужном ли месте оказался элемент. Когда все позиции совпадут, картинка собрана.
