Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2011, 19:35
Новичок на форуме
Отправить личное сообщение для TAIMOS Посмотреть профиль Найти все сообщения от TAIMOS
 
Регистрация: 13.11.2011
Сообщений: 3

Как узнать, на какие элементы был перетянут блок
Всем привет!
Пишу клиентскую часть морского боя на jQuery, столкнулся с проблемой.
Есть 2 панельки: одна с кораблями и вторая с доской:

Доска и корабли создаются динамически через jQuery:
function generateBoard() {
	var id = 0;
	for (var i = 1; i <= 10; i++) {
		$('<tr></tr>').appendTo('#board table');
		for (var j = 1; j <= 10; j++) {
			id++;
			$('<td></td>').attr('id', id).appendTo('#board tr:last-child');
		}
    }
}


Корабли перетаскиваются с помощью draggable.
Доска - таблица. Все клетки имеют идентификатор от 1 до 100.
Когда юзер расставит все корабли и нажмет на кнопку, данные про размещение кораблей должны уйти на сервер. Например, в виде строки, в которой указаны идентификаторы клеток, на которых расположены корабли. Так вот, как мне идентифицировать те самые клетки? То есть, как с помощью jQuery выбрать клетки, над которыми стоит корабль?
Заранее спасибо.

Последний раз редактировалось TAIMOS, 13.11.2011 в 19:38.
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2011, 20:52
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Читать тут и тут (вкладки внизу).
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2011, 23:35
Новичок на форуме
Отправить личное сообщение для TAIMOS Посмотреть профиль Найти все сообщения от TAIMOS
 
Регистрация: 13.11.2011
Сообщений: 3

Без использования расчета координат это можно сделать?
Я вот попробовал сделать все <td> доски droppable. И при перетаскивании корабля на нее, к <td> добавлять класс:
$('#board td').droppable({
	hoverClass: 'dragged'
});

Только вот, когда я перетаскиваю несколькопалубный корабль на доску, класс добавляется только к одной клетке (<td>) под кораблем. Может можно как-то сделать так, чтоб класс добавлялся ко всем клеткам, над которыми корабль?
Ответить с цитированием
  #4 (permalink)  
Старый 14.11.2011, 00:04
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Вам нужно сделать двумерный массив. Параметрами корабля должны быть его ширина и высота. После того, как ваш корабль куда-то переместили, рассчитываете, какие ячейки в вашем массиве будут при этом заняты. После этого помечаете соответствующие td'шки в таблице.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #5 (permalink)  
Старый 14.11.2011, 00:07
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Возможно всё ))
Но вам потребуется двух мерный массив с чертежом корабля.
затем каждую ячейку этого массива придётся сопоставить с ячейкой вашего поля, и определить ставить ли класс, или нет.

твою дивизию, чуток опоздал )))
Но раз мысли совпали, значит решение правильное.

ЗЫ. Мне ближе к сердцу когда игровое поле в массиве, а не в таблице.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.11.2011 в 00:11.
Ответить с цитированием
  #6 (permalink)  
Старый 14.11.2011, 00:15
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от DjDiablo
твою дивизию, чуток опоздал )))
Бывает)

Сообщение от DjDiablo
ЗЫ. Мне ближе к сердцу когда игровое поле в массиве, а не в таблице.
Это разумнее просто.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2011, 01:07
Новичок на форуме
Отправить личное сообщение для TAIMOS Посмотреть профиль Найти все сообщения от TAIMOS
 
Регистрация: 13.11.2011
Сообщений: 3

Что-то я не совсем понял, как массивы помогут мне в решении этой проблемы. Мне все равно на их основе нужно создавать html-блоки - таблицы или дивы.
Цитата:
Но вам потребуется двух мерный массив с чертежом корабля.
Имеется ввиду, если корабль четырехпалубный, то массив ship[1][4]? И с чем его сопоставлять, если у поля все ячейки пустые.
Мне нужно, чтоб ячейки поля увидели, что над ними стоит корабль и добавили к себе класс или еще какую-нибудь метку.
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2011, 01:18
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Мне все равно на их основе нужно создавать html-блоки - таблицы или дивы.
Биржевые сводки, тоже придётся представлять в виде таблиц и div'ов.
Ты что их тоже в html хранить будешь

Цитата:
то массив ship[1][4]?
а корабль по горизонтали или вертикали ? а может у него более сложная форма ? вот чтобы об этом не думать берёш массив 4 на 4 и корабль в нём может быть любой.

Цитата:
И с чем его сопоставлять, если у поля все ячейки пустые
ты же не один корабль разместиш на карте, или твои корабли можно ставить друг на друга ?


по делу
установка без проверки, пример на массивах.
ship массив с кораблём, map игровая карта.
x,y это координаты установки.

setShip (x,y){
    for (var yShip=0;yShip<4;yShip++){
         for (var xShip=0;xShip<4;xShip++){        
             if ( ship[XShip,yShip] > 0 )  map[x+XShip,y+yShip ]=1;
        }
   }
}


Установка корабля с проверкой возможности установки.
функция вернёт false если корабль установить не удалось.

setShip (x,y){
    var test=0;
    // циклы проверяют возможность установки.
    for (var yShip=0;yShip<4;yShip++){
         for (var xShip=0;xShip<4;xShip++){        
             if ( ship[xShip,yShip] > 0 && map[x+xShip,y+yShip ]>0) { test++;break};
        }
    }
    // если установка возможна, то копируем корабль из одного массива в другой
    if (test==0){
       for (var yShip=0;yShip<4;yShip++){
            for (var xShip=0;xShip<4;xShip++){        
                if ( ship[xShip,yShip] > 0 )  map[x+xShip,y+yShip ]=1;
            }
      }
      // если всё ништяк тогда true
      return true;
   } else { 
         // если установка невозможна, вернём false
         return false; 
   }
}


Ты не обижайся за критику. Тут не мало профи, так что есть смысл их слушать.
Есть разница между данными и представлением. Твоя таблица это представление. Все профи хотят изолировать данные от представления, потому что так код яснее, и им проще оперировать. А сложную программу без такого подхода и вовсе написать невозможно, человеческий мозг просто невывезет такую кашу. Вот поэтому массив а не таблица.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.11.2011 в 01:49.
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2011, 01:35
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Дурной, штоле? Двухмерный массив - это твоё поле. У корабля есть ширина и высота - ship.width и ship.height. С ячейками массива сопоставлены td'шки. При драгге в ячейку - в массиве помечаешь нужные ячейки, исходя из ширины/высоты корабля. Помечаешь нужные td'шки.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из набора элементы у которых дисплей нан KamalovRadik jQuery 3 30.10.2011 16:11
Как узнать подключен ли JavaScript у пользователя? frost18 Элементы интерфейса 1 26.10.2011 17:16
как узнать максимальную высоту окна bugmenot Javascript под браузер 1 26.10.2011 14:45
Как узнать размер загружаемого файла? shkarbatov Серверные языки и технологии 5 14.08.2011 17:12
Как узнать о том, что флэш уже загрузился. Snipe Общие вопросы Javascript 4 29.01.2009 11:21