Иллюстрированный самоучитель по созданию Flash-игр

Пятнашки

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

Другие возможности

Игра будет интереснее, если программа будет определять, когда картинка полностью собрана, и на экране будет появляться кадр с поздравлением. Это можно сделать, сохранив исходное положение элементов в массиве и выясняя после каждого шага, в нужном ли месте оказался элемент. Когда все позиции совпадут, картинка собрана.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.