Пятнашки
Создание кода
Большая часть кода находится в основной временной шкале. Он начинается с выравнивания элементов на расстоянии точно в 54 пиксела, затем 100 раз выполняется цикл, перемещающий случайно выбранный элемент на пустую позицию.
function
initGame() {
// Устанавливаем горизонтальное и вертикальное расстояние
// между элементами.
tileDist
=
54
;
// Помещаем все элементы на свои места,
for
(x
=
l; x
<
=
4
; x
+
+
) {
for
(y
=
0
; y
<
=
3
; y
+
+
) {
tile
=
x
+
y
*
4
;
_root[
"tile"
+
tile];
_x
=
x
*
tileDist;
_root[
"tile"
+
tile];
_y
=
y
*
tileDist
+
tileDist;
}
}
// Совершаем 100 произвольных перемещений,
for
(tilenum
=
0
; tilenum
<
100
; tilenum
+
+
) {
do
{
// Выбираем элемент случайным образом.
tile
=
"tile"
+
(random(
15
)
+
1
);
// - Проверяем, есть ли рядом свободный квадрат.
emptySpace
=
findEmpty(tile);
// Цикл продолжается до тех пор, пока не будет найден
// элемент, рядом с которым расположен свободный квадрат.
}
while
(emptySpace
=
=
"none"
);
// Перемещаем элемент на свободное место.
moveTile(tile, findEmpty(tile));
}
}
Когда случайным образом выбирается элемент, с помощью функции findEmpty определяется, есть ли среди смежных элементов свободный квадрат. Прежде чем проверять элемент мозаики, обязательно убедитесь в том, что свободное место не находится за границей игрового поля.
// Проверяем, есть ли свободное место около данного элемента,
function
findEmpty(tile) {
// Определяем положение элемента.
tilex
=
_root[tile]._x;
tiley
=
_root[tile]._y;
// Проверяем, есть ли элемент мозаики слева,
if
(tilex
>
tileDist) {
if
(!tileThere(tilex
-
tileDist, tiley)) {
return
(
"left"
);
}
}
// Проверяем, есть ли элемент мозаики справа,
if
(tilex
>
tileDistM) {
if
(!tileThere(tilex
+
tileDist, tiley)) {
return
(
"right"
);
}
}
// Проверяем, есть ли элемент мозаики сверху .if (tiley> tileDist) {
if
(!tileThere(tilex, tiley
-
tileDist)) {
return
(
"above"
);
}
// Проверяем, есть ли элемент мозаики снизу,
if
(tiley
>
tileDistM) {
if
(!tileThere(tilex, tiley
+
tileDist)) {
return
(
"below"
);
}
}
// Элементы мозаики имеются со всех сторон,
return
(
"none"
);
}
Если перед выражением стоит восклицательный знак, значит, Оно отрицается, то есть true превращается в false, a false в true. Эта операция известна как логическое не (not). Например, в предыдущем коде проверяется не tileThere, a not tileThere.