Спасибо всем, я сам думал как Deff предложил, только:
Вертикальная труба [0,1,0] [0,0,0] [0,1,0] Горизонтальная труба [0,0,0] [1,0,1] [0,0,0] Смысл в том, что обозначаются 1 только концы соединений трубы и у каждой трубы есть top,left,right,bottom, игра будет простая, поворачиваться куски труб будут по заготовкам и смысл игры - все трубы соединить, волновых алгоритмов не будет, просто не могу элементарно соединить 2 трубки, просто даже не знаю как записать на поле два куска трубы и проверить их возможность соединения, для примера просто "+" и "L" вывести сообщение, что трубы не могут соединиться, мало знаний( |
лучше создать конструктор объектов со свойствами t, r, b, l (top, right, bottom, left - свойства со значениями 0 или 1(1 - дырка есть)), также туда можно добавить и свойство obj - ссылка на элемент, который будет привязан к объекту, при повороте элемента соответствующим образом устанавливаются свойства связанного с ним объекта и осуществляется проверка, если воде (или что там течёт) куда дальше течь
|
2pizza,
Допустим соединение справо от уже стоящего слево блока: находите index элемента матрицы в левом блоке в правой колонки с "1" Для горизонтальной трубы это будет (если элементы считаются от нуля Элемент с индексом elem[1][1], Значит в правом блоке - первый индекс должен совпадать с левым, т.е i.row=1, a col индекс = будет равен 0 (поскольку ищем в первой колонке т.е в правом блоке должен быть индекс elemRight[1][0]==elemLeft[1][1]==1 *Считаем что первый индекс - это строка - второй колонка |
bes,
что-то вроде такого?: var pipeobj = { //все виды труб horpipe:{left: 1, top: 0, right: 1, bottom: 0}, //труба горизонтального вида verpipe:{left: 0, top: 1, right: 0, bottom: 1} //труба вертикального вида } |
Типа так, можно еще нужных методов добавить
function tube (obj, t, r, b, l) { this.obj = obj; this.t = t; this.r = r; this.b = b; this.l = l; } var elem1 = new tube(document.body.children[0], 0, 1, 1, 0); |
bes, ясно, а как сей конструктор привязать к куску трубы в двумерном массиве ?
Например есть такой элемент: var elem1 = new tube("T", 0, 1, 1, 1); и есть поле, пусть труба будет значением 2: var map=new Array( new Array(0,0,0,0,0,0,0,0,0,0), new Array(0,0,0,0,2,0,0,0,0,0), new Array(0,0,0,0,0,0,0,0,0,0), new Array(0,0,0,0,0,0,0,0,0,0), new Array(0,0,0,0,0,0,0,0,0,0) ); |
не совсем понял, что требуется (разбросать картинки случайным образом по экрану что ли?)
tube - конструктор, каждый объект полученный с его помощью (например, elem1) создаёт связь между html-элементом (например, картинкой трубы в ячейке таблицы) и описанием этой трубы с точки зрения сторон этой картинки, через которые вода может течь (также можно было у каждой картинки трубы задать дополнительные 4 атрибута, описывающие доступность сторон картинки к течи) |
bes, ясно, создаёт связь между html-элементом, я думал, что создаёт связь между элементами в массиве.
|
Часовой пояс GMT +3, время: 06:23. |