Пятнашки
Функция 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. Если вы хотите изменить один из этих параметров, необходимо тщательно проверить код и внести необходимые изменения.
Другие возможности
Игра будет интереснее, если программа будет определять, когда картинка полностью собрана, и на экране будет появляться кадр с поздравлением. Это можно сделать, сохранив исходное положение элементов в массиве и выясняя после каждого шага, в нужном ли месте оказался элемент. Когда все позиции совпадут, картинка собрана.