Т.е. тащим и во время движения проверяем сверху вниз и без цикла? 4) В смысле? Ну вот давай на более живом примере. Вот есть у нас 4 кирпича по 50 пикселей высотой. Стоят они по порядку: 1, 2, 3, 4. t=0 // это временная переменная, заполним только на время перетаскивания N=4 // Количество кирпичей M=50 // Высота кирпича a=array(1=>1, 2=>2, 3=>3, 4=>4) // Массив, в котором храним информацию о расположении кирпичей Допустим, мы потянем третий кирпич наверх. Берём кирпич — пока ещё никуда не переместили, просто кликнули. Его координата y=150. floor(y/M)=floor(150/50)=3. То есть, исходя из координат, мы выясняем, что тянем мы именно третий элемент. В переменную t запишем то, что у нас хранится в a[3], то есть «3», а в a[3] запишем «0», так как сейчас это место у нас пустует. Тянем его наверх. Он переместился на 1 пиксель вверх, наступило событие, чтобы вызвать функцию проверки кирпичей. Сейчас координата иаскаемого кирпича = 149. Выясним над каким же кирпичом у нас сейчас занесён таскаемый. floor(y/M)=floor(149/50)=2, то есть на вторым. Проверим что у нас там на втором месте. a[2] имеет значение «2», то есть там второй кирпич. Значит, надо его куда-то подвинуть. Смотрим наверх. a[1]==1, то есть там есть кирпич, значит, не получится туда подвинуть. a[3]==0, то есть нам надо туда перекинуть второй кирпич. a[3]=a[2], a[2]=0. Снова двигаем кирпич на 1 пиксель вверх. Он имеет координаты 148. Снова вычисляем, что это второй элемент, но a[2]==0, так что никуда нчиего двигать не будем. И тут мы его и бросим. a[2]=t. В итоге имеем такой массив a=array(1=>1, 2=>3, 3=>2, 4=>4). Ну и по анаглогии также можно двигать вверх. Само собой, добавляем проверку, чтобы не проверять элементы, если y>=M*N или y<=0.