30.08.2012, 15:45
|
Новичок на форуме
|
|
Регистрация: 30.08.2012
Сообщений: 5
|
|
Спасибо всем, я сам думал как 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" вывести сообщение, что трубы не могут соединиться, мало знаний(
|
|
30.08.2012, 16:00
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
лучше создать конструктор объектов со свойствами t, r, b, l (top, right, bottom, left - свойства со значениями 0 или 1(1 - дырка есть)), также туда можно добавить и свойство obj - ссылка на элемент, который будет привязан к объекту, при повороте элемента соответствующим образом устанавливаются свойства связанного с ним объекта и осуществляется проверка, если воде (или что там течёт) куда дальше течь
|
|
30.08.2012, 16:02
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
2pizza,
Допустим соединение справо от уже стоящего слево блока:
находите index элемента матрицы в левом блоке в правой колонки с "1"
Для горизонтальной трубы это будет (если элементы считаются от нуля
Элемент с индексом elem[1][1],
Значит в правом блоке - первый индекс должен совпадать с левым, т.е
i.row=1, a col индекс = будет равен 0 (поскольку ищем в первой колонке
т.е в правом блоке должен быть индекс elemRight[1][0]==elemLeft[1][1]==1
*Считаем что первый индекс - это строка - второй колонка
|
|
30.08.2012, 16:21
|
Новичок на форуме
|
|
Регистрация: 30.08.2012
Сообщений: 5
|
|
bes,
что-то вроде такого?:
var pipeobj = { //все виды труб
horpipe:{left: 1, top: 0, right: 1, bottom: 0}, //труба горизонтального вида
verpipe:{left: 0, top: 1, right: 0, bottom: 1} //труба вертикального вида
}
|
|
30.08.2012, 16:37
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Типа так, можно еще нужных методов добавить
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);
|
|
30.08.2012, 16:43
|
Новичок на форуме
|
|
Регистрация: 30.08.2012
Сообщений: 5
|
|
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)
);
Последний раз редактировалось 2pizza, 30.08.2012 в 16:51.
|
|
30.08.2012, 17:08
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
не совсем понял, что требуется (разбросать картинки случайным образом по экрану что ли?)
tube - конструктор, каждый объект полученный с его помощью (например, elem1) создаёт связь между html-элементом (например, картинкой трубы в ячейке таблицы) и описанием этой трубы с точки зрения сторон этой картинки, через которые вода может течь (также можно было у каждой картинки трубы задать дополнительные 4 атрибута, описывающие доступность сторон картинки к течи)
|
|
30.08.2012, 17:33
|
Новичок на форуме
|
|
Регистрация: 30.08.2012
Сообщений: 5
|
|
bes, ясно, создаёт связь между html-элементом, я думал, что создаёт связь между элементами в массиве.
|
|
|
|