Как проверить, решена ли головоломка с сеткой?

0

Я работаю над играми-головоломкой для класса, который представляет собой сетку изображений размером 4 × 5, которую вам нужно будет правильно изменить.

Я хочу, чтобы он знал, когда головоломка будет решена, где она будет делать какие-то предупреждения, когда вы выиграете, затем исчезнет или что-то в этом роде.

Я все еще новичок в Javascript и не знаю, с чего начать.
Я уже рассматривал этот вопрос, но не уверен, связано ли это с этим или с чего начать.

Мой HTML:

<div class="packery draggable">
    <div class="item w4 h4"><img src="pimg/bits/pf/4.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/8.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/1.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/9.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/3.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/17.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/12.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/16.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/10.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/2.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/14.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/5.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/20.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/7.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/15.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/18.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/13.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/19.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/11.png"></div>
    <div class="item w4 h4"><img src="pimg/bits/pf/6.png"></div>
</div>

Мой сценарий:

docReady(function () {
    var container = document.querySelector('.packery');
    var pckry = new Packery(container, {
        columnWidth: 67,
        rowHeight: 67,
    });

    var itemElems = pckry.getItemElements();

    // for each item element
    for (var i = 0, len = itemElems.length; i < len; i++) {
        var elem = itemElems[i];
        // make element draggable with Draggabilly
        var draggie = new Draggabilly(elem);
        // bind Draggabilly events to Packery
        pckry.bindDraggabillyEvents(draggie);
    }
});
Теги:

1 ответ

0

Библиотека, которую вы используете, по-видимому, меняет только left и top CSS-свойства перетаскиваемых элементов, поэтому вы должны использовать их для определения чего-либо. Очень простой способ проверить, разрешено ли это, - жестко задавать правильные left и top смещения для каждого фрагмента, например, с атрибутами данных:

<div class="item w4 h4" data-left="-20" data-top="0"><img src="pimg/bits/pf/1.png"></div>

(Предположим, что плитки 10x10). Затем перебирайте каждый элемент (как вы делаете, чтобы сделать их перетаскиваемыми) и проверьте, не left ли в нем номер свойства CSS (доступный с .style.left) таким же, как в нем атрибут data-left ( доступный с .dataset.left) и аналогично top. Привязка перетаскивания к сетке поможет вам в значительной степени, ваша библиотека позволяет: new Draggabilly(elem, {grid: [10, 10]});

  • 0
    Привет, спасибо за помощь. Логика имеет для меня смысл, а наличие данных слева и сверху в элементах div - это когда вы говорите о циклическом просмотре каждого из них, когда я начинаю заблудиться. Не могли бы вы подробнее рассказать об этом или показать пример? Кроме того, я запутался в том, как вы начали с -20 для первого и как он будет меняться для каждого после. @Nohus
  • 0
    Под циклом я имею в виду использование цикла for, как вы делаете, чтобы сделать их все перетаскиваемыми, за исключением того, что вместо того, чтобы делать каждый перетаскиваемый объект, вы проверяете каждый, находится ли он в правильном положении, а когда нет, вы выходите из цикла. Если цикл заканчивается, головоломка решена. 1.png должен быть первым элементом, но он третий в вашем коде, поэтому правильная позиция должна быть 20 слева и не двигаться по вертикали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню