// Проверяем, есть ли свободное место около данного элемента.
function findEmpty (tile) {
// Определяем положение элемента.
tilex = _root[tile]._x;
tiley = _root[tile]._y;
// Проверяем, есть ли элемент мозаики слева.
if (tilex > tileDist) {
if (!tileThere(tilex-tileDist, tiley)) {
return("left");
}
}
// Проверяем, есть ли элемент мозаики справа.
if (tilex > tileDist*4) {
if (!tileThere(tilex+tileDist, tiley)) {
return("right");
}
}
// Проверяем, есть ли элемент мозаики сверху.
if (tiley > tileDist) {
if (!tileThere(tilex, tiley-tileDist)) {
return("above");
}
}
// Проверяем, есть ли элемент мозаики снизу.
if (tiley > tileDist*4) {
if (!tileThere(tilex, tiley+tileDist)) {
return("below");
}
}
// Элементы мозаики имеются со всех сторон.
return ("none");
}Примечание
Если перед выражением стоит восклицательный знак, значит, оно отрицается, то есть true превращается в false, а false в true. Эта операция известна как логическое не (not). Например, в предыдущем коде проверяется не tileThere, а not tileThere.
Функция findEmpty использует метод tileThere, чтобы определить, находится ли элемент на определенном месте. Метод tileThere вызывается для определения элементов слева, справа, снизу и сверху.
// Проверяем, находится ли элемент мозаики на определенном месте.
function tileThere (thisx, thisy) {
// Просматриваем элементы на предмет совпадения координат.
for (i=1;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=1; i<=15; i++) {
if (_root["tile"+i].hitTest(_xmouse, _ymouse)) {
return (i);
}
}
}Сценарий в основной временной шкале заканчивается вызовом функции initGame и выводом на экран перемешанных элементов.
initGame; stop;
Игрок взаимодействует с картинкой мозаики посредством клипа «actions», расположенным вне рабочего поля. Клип воспринимает щелчок мыши, определяет, по какому элементу щелкнул пользователь, и перемещает этот элемент.