Вопрос с игрой трубопроводчик
Привет всем! Сразу к проблеме:
Есть игровое поле, на котором расположены куски труб: — , |, T, L,+, и тд, каждый кусок трубы можно вращать. Необходимо составить из этих кусков трубопровод, по которому будет идти вода. Проблема: я не могу понять как сделать, чтобы куски труб соединялись, например есть 2 куска трубы "—" и "|", вращаем "|" и получаем "——", трубы соединились в правой и левой стороне значит вода может проходить, как сделать это программно, по теории всё понятно, можете помочь примером ? |
Цитата:
|
Немного глупо, но все же:
Для каждой картинке создаете массив: допустим, для этой картинки: | Массив будет такой: [false,true,false,true] Для этой: T : [true, false,true,true] И смотрите (сравниваете 2 массива, там где у них true совпадает, там вода протечь может). Deff, он и спрашивал как алгоритм сделать) |
9xakep,
Несимпатично - 1. Лучше цифрами - 0,1,0 2. Будет матрица Вертикальная труба [0,1,0] [0,1,0] [0,1,0] Горизонтальная труба [0,0,0] [1,1,1] [0,0,0] Крестовина [0,1,0] [1,1,1] [0,1,0] Т - труба [1,1,1] [0,1,0] [0,1,0] И нужен скрипт метод трансформации (поворота матрицы) на +/-90º (либо иметь массив всех заготовок) |
Deff,
да, прикольнее, но сравнивать такую матрицу зае... |
Deff,
да, прикольнее, но сравнивать такую матрицу зае... |
Согласен с Deff. Причем, по матрице волновой алгоритм пустить будет легче.
|
Есть прикольная старая мини-Игра "Сетка" под Windows (долго как то гонял в неё , суть та же что и у "трубопроводчик"
|
|
nerv_,
Да - идея с поворотом - идентична |
Спасибо всем, я сам думал как 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, время: 04:04. |