Что такое "Змейка" и как с ней бороться?

Введение
Сразу отвечу на первый вопрос. "Змейка" это игра, в которой вы управляете полоской, набирая очки. Цель у игры одна: набрать наибольшее количество очков.

Как-то увидел я на сотовом телефоне эту игру, и уж очень мне захотелось написать точно такую же. В этой статье хочу рассказать, как написать "змейку". С какими проблемами можно столкнуться при создании "змеек". И попробую рассказать, как я их решал.

Сразу хочу сказать, что я пишу свою статью не для того, чтобы написать "Змейку", а только для объяснения алгоритма работы.

Поле действии "змейки" - массив
Начнем с того, что нам надо придумать то, по чем наша змейка будет двигаться. Лично я вижу всего два способа. Один - это когда змейка движется по абсолютно пустому пространству. Второй же способ - массив. Именно этот способ я выбрал в своем примере. Мне кажется, что при использовании массива открываются некоторые довольно приятные возможности, такие как создание карт, и, вместе с тем, при создании многопользовательской змейки будет удобнее делать проверки.

Из чего состоит "змейка"?
Прежде чем приступать к внутренности "змейки" давайте посмотрим как она движется.

Движение змейки можно рассмотреть с двух сторон:

Первая - это то, что конец змейки становится началом. Плюсы: нам легче будет прорисовывать. Нам не надо постоянно перерисовывать весь массив, нам надо всего лишь затереть конец змейки и нарисовать начало. Такой метод будет очень удобен при работе в DOS.

Минусы: у нас возникают проблемы с опознаванием первого и последнего элементов, а добавление нового элемента тоже будет немало проблем, при какой-либо ошибку у нас может потерятся часть змейки, поверьте в прошлом году при написании "змейки" на Pascal'е у меня было очень много таких "глюков", причем только в многопользовательской игре.

Вторая сторона - каждый элемент змейки становится на место предыдущего. Плюсы: мы всегда знаем, где какой элемент; добавление и удаление будут делаться буквально несколькими строками в коде; у нас ни в коем случае не может потеряться элемент, т.к. мы всегда знаем все.

Минусы: нам надо больше места в ОП для сортирования всех этих элементов.

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

Первый - создать большой массив для змеи и хранить в нем все координаты. Плюсы: плюс один - простота.

Минусы: а когда у нас появится две змейки нам что делать два массива? а три? а четыре? Нет это совершенно не подходит, это занимает много места в ОП, и мы ограниченны длинной змейки. Существуют конечно функции для задания массива SetLength, но при ее использовании появляется ограничение на длину массива, всего 255.

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

Минусы: нам надо будет больше писать (конечно это не самое главное, главное чтобы пользователь был доволен)

Не знаю как вам, а мне второй вариант больше нравится, потому его и реализуем.

Что нам стоит "змею" построить?
Мы уже решили, что элементы нашей "змейки" будут представлять динамическую структуру, тогда элемент змейки будет выглядеть следующим образом:

	type
	  TElem = ^TStek;	//объект не может ссылаться сам на себя
	  TStek = record
	    X: integer;		//координата по X 
	    Y: integer;		//координата по Y
	    View: Byte;		//вид этого элемента при прорисовке
	    Nomber: Word;	//номер элемента
	    Next: TElem;	//следующий элемент змейки
	    Prev: TElem;	//предыдущий элемент змейки
	  end;
	
Сама же змейка будет выглядеть следующим образом - это объект, у которого есть свойства цвет (много змеек - много цветов), длина (в принципе этот параметр можно не вводить, можно узнать длину по номеру последнего элемента, но пусть будет), направление (очень важный параметр, мы же должны знать, куда движется "змейка").

Направлений у нас будет всего 4 соответственно
	TDir = 1..4; //образованно от Direction

	TSnake = object
	  First: TElem;		//первый элемент змейки
	  Last: TElem;		//последний элемент змейки
	  Direction: TDir;	//направление змейки
	  Length: Word;		//длина змейки
	  Color: TColor;		//цвет змейки
	  constructor Create(sDirection: TDir; sLength: Word; sX, sY: Byte; sColor: TColor);
	  //процедура создания змеи
	  destructor Destroy;
	  //процедура уничтожения змеи

	  procedure Release;
	  //процедура, выводящая всю змею на массив (чтобы знать где расположена змея, вдруг
	  //будем вставлять алгоритм поиска пути или еще что в голову придет)

	  procedure Draw(Canvas: TCanvas); 
	  //отрисовывает змею на канвасе (на канвасе, потому, что пример не показывает работу
	  //с Win32API

	  procedure DrawElement(Elem: TElem; Canvas: TCanvas); 
	  //отрисовывает определенный элемент змеи

	  procedure Move(newX, newY: word); 
	  //двигает все элементы змейки на место предыдущего, а первый на новые координаты
	  //можно с помощью этой процедуры двинуть змейку вообще в какое-нибудь случайное
	  //место, а все элементы потом "телепортируются" туда
	  procedure Add;                     
	  //добавляет к змейке элемент (последний)
	  procedure Remove;              
	  //уничтожает элемент змейки (последний)

	  function GetByNomber(Nomber: Word): TElem; 
	  //находит элемент по номеру
	  function GetByCoord(X, Y: word): TElem;         
	  //находит элемент по координатам

	  //Вдруг да понадобится найти элемент с определенным номером или расположением

	  function SetDirection(sDirection: TDir): boolean;
	  //Устанавливает направление змейки
	  //Делается функцией, чтобы змейка не поехала в противоположную сторону

	  procedure SetView(sView: byte);  
	  //Устанавливает вид всей змеи (ну захотелось все змею сделать круглой - сделай!!!)
	end;
Наконец код
Функция создания змейки

При создании мы должны установить цвет, направление, длину, стартовые координаты. Чтобы сильно не мучаться, моя змейка создается в горизонтальном положении, а в процедуре задаются координаты конца.
	constructor TSnake.Create(sDirection: TDir; sLength: Word; sX, sY: Byte; sColor: TColor);
	var
	  i: integer;
	  Beg, Tek, Tek2: TElem;
	begin
	  if sDirection = 3 then Direction := 1 else Direction := sDirection;
	  Length := sLength;
	  Color := sColor;

	  First := nil;
	  Last := nil;

	//делаем проверку на правильное введение координат
	//проверяем, что не вышли за рамки массива
	  if (sX<1) or (sX>AMaxX) or (sY<1) or (sY>AMaxY) or ((sX+sLength)>AMaxX) then
	  begin
	    ShowMessage('Ошибка создания змейки');
	    exit
	  end;

	  if sLength=0 then begin ShowMessage('Ошибка создания змейки'); exit end;
	  new(Beg); //создаем первый элемент змейки

	  Beg^.X := sX + sLength; 	//координата по X - координата конца + длинна
	  Beg^.Y := sY;		 	//по Y все координаты одинаковые
	  Beg^.View := 0;		//вид самый простой
	  Beg^.Nomber := 1;		//номер естественно первый
	  Beg^.Next := nil;		//следующего элемента пока нет
	  Beg^.Prev := nil;		//предыдущего тоже

	  first := beg;			//запомнили первый элемент змейки
					//с этого момента в змейке есть первый элемент уррра!!! 

	  Tek := beg;			//текущий элемент - первый
	  if sLength-1 < 1 then exit;	//если длина 1 тогда ВСЕ


	  for i := 1 to (sLength-1) do begin //иначе начинаем

	    new(Tek2);  			//создаем новый элемент

	    Tek2^.X := Tek^.X - 1; 		//располагаем новый элемент левее
	    Tek2^.Y := Tek^.Y;   		//по оси Y все находятся одинаково
	    Tek2^.View := 0;     		//стартовый вид у всех одинаковый
	    Tek2^.Next := nil;   		//следующий элемент должен быть тот, который мы до этого 
	//создали
	    Tek2^.Prev := Tek;   		// предыдущего пока не существует

	    Tek2^.Nomber := Tek^.Nomber + 1; //прибавляем номер

	    Tek^.Next := Tek2;		//предыдущему ставим существование следующего
	    Tek := Tek2;			//текущий - вновь созданный
	    Last := Tek2;			//последний созданный элемент - это и есть последний 
	//элемент змейки
	  end;
	end;
Вот мы и создали нашу змейку. Теперь надо написать процедуру уничтожения, чтобы в памяти не осталось следов.
	destructor TSnake.Destroy;
	var Tek, Tek2: TElem;
	begin
	  Tek := First;
	  if tek = nil then exit; 		//вдруг змеи нет

	  while tek^.Next <> nil do begin
	    Tek2 := Tek.Next;
	    dispose(tek2);			//уничтожаем
	    tek := tek2;
	  end;
	end;
Далее рассмотри, как рисовать змейку.
	procedure Tsnake.DrawElement(Elem: TElem; anvas: TCanvas);
	var Rect: TRect;
	begin
	  Rect.Left := Elem.X * 5;
	  Rect.Top := Elem.Y * 5;
	  Rect.Bottom := Rect.Top + 5;
	  Rect.Right := Rect.Left + 5;

	  Canvas.Pen.Color := clBlack;
	  Canvas.Brush.Color := Color;
	  case Elem.View of
	  0: Canvas.Rectangle(Rect); 	//тут мы можем сделать и что-нибудь другое, например
	//кружочек вместо квадрата в зависимости от вида
	  end;
	end;
А теперь самое интересное. Рассмотрим функцию движения.

В змейке движение происходит следующим образом: Первый элемент передвигается согласно текущему направлению, а второй становится на место первого, третий на место второго и т.д. Значит, каждый элемент занимает место предыдущего кроме первого. Ну, так давайте это реализуем.
	function TSnake.Move(newX, newY: word): boolean;
	var 
	  tek: TElem;
	  tek2: TElem;
	begin
	  result := false;
	  if First = nil then exit;

	  tek := last;

	  if newX > AMaxX then newX := 1;
	  if newX < 1 then newX := AMaxX;
	  if newY > AMaxY then newY := 1;
	  if newY < 1 then newY := AMaxY;

	  Release;

	  if GameA[newX, newY] > 0 then result := true;

	  while tek^.Prev <> nil do begin
	    tek2 := tek^.Prev;		//предыдущий элемент
	    tek^.X := tek2^.X;		//координаты предыдущего
	    tek^.Y := tek2^.Y;		//элемента
	    tek^.View := tek2^.View;	//вид предыдущего
	    tek :=tek2;			//заново
	  end;

	  First^.X := newX;		//перемещаем начало
	  First^.Y := newY;		//на новые координаты
	end;
Далее надо каким-то образом добавлять и удалять у змейки элементы. Все просто надо просто добавить или удалить последние элемент.
	procedure TSnake.Add; //добавление
	var tek: TElem;
	begin

	  new(tek);		//создаем новый элемент
	  tek^.X := 0;		//координаты можно ставить любые,
	  tek^.Y := 0; 		//все равно при движении все встанет на свои места
	  tek^.Next := nil;	//следующего не существует (он последний)
	  tek^.Prev := Last;	//предыдущий - тот, который был последним
	  tek^.View := Last^.View;	//вид, как у предыдущего
	  tek^.Nomber := Last^.Nomber + 1;	//номер +1
	  Last^.Next := tek;	//новый последний элемент змейки

	  inc(length);		//незабываем увеличить длину

	  Last := Tek;

	end;

	procedure TSnake.Remove; //удаление
	var Tek: TElem;
	begin
	  if Last = First then exit; 	//не можем же мы удалить единственный элемент
					//что тогда у нас останется?
	  Tek := Last;
	  Last := tek^.Prev;
	  Last^.Next := nil;
	  Dispose(tek);

	  inc(length, -1);
	end;
Остальные функции и процедуры посмотрите в исходнике, т.к. они нам не понадобятся.

Создав форму в событии OnCreate, cтавим
	//обнуляем массив
	for i := 1 to AMaxX do
	for j := 1 to AMaxY do
	GameA[i, j] := 0;

	Buffer := TBitMap.Create;
	Buffer.Width := Form1.Width;
	Buffer.Height := Form1.Height;

	//создаем змейку
	Snake.Create(1, 5, 10, 10, clYellow);
	В событии OnDestroy пишем

	Snake.Destroy;
	В событии на таймер ставим

	//очистка канваса
	PatBlt(Buffer.Canvas.Handle,
	0,
	0,
	Buffer.Width,
	Buffer.Height,
	BLACKNESS);

	//согласно направлению двигаем змейку (на самом деле
	//это можно и организовать и в функцию Move, но я решил оставить так
	case Snake.Direction of
	1: Snake.Move(Snake.First.X + 1, Snake.First.Y);
	2: Snake.Move(Snake.First.X, Snake.First.Y + 1);
	3: Snake.Move(Snake.First.X - 1, Snake.First.Y);
	4: Snake.Move(Snake.First.X, Snake.First.Y - 1);
	end;

	Snake.Draw(Buffer.Canvas);

	BitBlt(Form1.Canvas.Handle, 0, 0, Form1.Width, Form1.Height, Buffer.Canvas.Handle,
	0, 0, SRCCOPY); //выводи на форму


Вот и всё, Удачи!


  1. Adam
    Adam 4 months ago
    Муфты ПФРК напорного трубопровода [url=http://school2-aksay.org.ru/forum/member.php?action=profile&amp;uid=107839]опоры трубопроводов ГОСТ 14911-82[/url]
    Латунные шаровые краны [url=http://school2-aksay.org.ru/forum/member.php?action=profile&amp;uid=107842]трубопровод из труб Прагма[/url]  
    Адаптеры ПФРК фланцевые [url=http://duster-clubs.ru/forum/member.php?u=26773]использование[/url]
    Краны шаровые латунные [url=http://duster-clubs.ru/forum/member.php?u=26772]монтаж и настройка[/url]
    Соединения ПФРК [url=https://www.rubmw.ru/users/Andresom/]монтирование и установка[/url] 
    Краны латунные [url=https://www.rubmw.ru/users/Maksims/]приобретение и монтаж[/url]
    Краны латунные [url=http://hyundai-club.com.ua/member.php?u=68366]производитель и установка[/url] 
    Фланцевые соединения ПФРК [url=http://hyundai-club.com.ua/member.php?u=68367]монтаж и установка[/url]
    Фланцевые ПФРК адаптеры [url=http://vsm-service.ru/news/user/Andresom/]для напорного трубопровода[/url] 
    Переходы эксцентрические для стального трубопровода [url=http://vsm-service.ru/news/user/Maksims/]использование для сварки[/url]
    Фланцевое соединение для трубопровода [url=http://compcar.ru/forum/member.php?u=89801]ПФРК монтаж и установка[/url]
    Латунные шаровые краны[url=http://compcar.ru/forum/member.php?u=89802]в напорном трубопроводе[/url]
    Соединение фланцев ПФРК [url=https://www.octavia-club.ru/id/130037]использование в напорных трубопроводах[/url] 
    Установка шаровых кранов[url=https://www.octavia-club.ru/id/130038]резьбовое соединение[/url] 
    Краны латунные монтаж [url=http://www.jfresh.org/blogs/blog/23264.html]шаровые вентиля использование[/url]
    Соединение ПФРК для монтажа [url=http://www.jfresh.org/blogs/blog/23265.html]водопровод и канализация[/url]
    Опоры для трубопровода [url=http://www.zspk.gov.ru/forum/messages/forum7/message18050/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?result=reply#message18050]опора опх1[/url] 
    Опора подвижная трубопровода [url=http://www.zspk.gov.ru/forum/messages/forum7/message17977/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?result=reply#message17977опоры ОПХ[/url] 
    Оборудование водоснабжения [url=http://www.uo5oq.com/forum/member.php?u=34430]отопление и канализация[/url] 
    Оборудование отопления и водоснабжения [url=https://www.uo5oq.com/forum/member.php?u=34431]монтаж и установка напорного трубопровода[/url] 
    Соединение фланцевое ПФРК [url=http://www.lada-vesta.net/member.php?u=30378]муфта фланцевая ПФРК[/url] 
    Краны муфтовые шаровые [url=http://www.lada-vesta.net/member.php?u=30379]для напорного водопровода[/url]
    Фланцевые муфты ПФРК [url=http://nytva.org/memberlist.php?mode=viewprofile&amp;u=366484&amp;sid=c198d8df6a7755b6ee75fc3eb6f50513]для напорного водопровода[/url] 
    Вентили и краны шаровые [url=http://nytva.org/memberlist.php?mode=viewprofile&amp;u=366488&amp;sid=ab18b57cd93e5948b5b856b311ee2905]системы трубопроводов[/url] 
    Фитинги ПФРК [url=http://www.omspenza.ru/forum/profile.php?mode=viewprofile&amp;u=25898]монтаж и установка напорного трубопровода[/url] 
    Задвижки чугунные [url=http://www.omspenza.ru/forum/profile.php?mode=viewprofile&amp;u=25899]систем водоснабжения[/url] 
    Фланцы резьбовые [url=http://www.omspenza.ru/forum/profile.php?mode=viewprofile&amp;u=25900]для фланцевого соединения[/url] 
    Обратные клапаны водоснабжения [url=http://www.omspenza.ru/forum/profile.php?mode=viewprofile&amp;u=25901] отопление и канализация [/url] 
    Клапаны предохранительные водоснабжения [url=http://www.automania.by/forum/index.php?showtopic=7659&amp;st=0&amp;gopid=23707entry23707] запорно регулирующая арматура трубопровода [/url] 
    Оборудование для отопления [url=http://www.automania.by/profile/data/0ab9e726bea1eaea15d96905088b4cac/] водоснабжения и канализации [/url] 
    Отопление и водоснабжение оборудование [url=http://www.automania.by/profile/data/0bfd4d91b4babd3990bdb8fac9e1ab96/] канализационные клапана [/url] 
    Присоединение адаптеров фланцевых ПФРК [url=http://techdesigner.ru/users/makssver]фланцевые соединения ПФРК [/url] 
    Краны шаровые муфтовые [url=http://techdesigner.ru/users/andresom86]установка и монтаж трубопровода [/url] 
    Оборудование для отопления и водоснабжения [url=http://luch.ru/profile.php?lookup=53510] фитинги канализационные и краны шаровые[/url] 
    Отопительное оборудование [url=http://luch.ru/profile.php?lookup=53511] материалы для трубопроводов[/url] 
    Стальные шаровые краны и фитинги [url=http://forum.priboridetali.ru/member.php?u=364535]оборудование для отопительных трубопроводов [/url] 
    Фланцы для трубопровода [url=http://forum.priboridetali.ru/member.php?u=364537] фланцевые соединения[/url] 
    Шаровые муфтовые латунные краны [url=https://www.covrik.com/member.php?u=100892]запорная и регулирующая арматура трубопроводов[/url] 
  2. Marko
    Marko 4 months ago
    Трубы и фитинги PPRC [url=https://www.covrik.com/member.php?u=100893] трубы для офисного водоснабжения[/url]  
    ПФРК для трубопроводов [url=https://best-party.ru/personal/makssver]напорные материалы и запорно регулирующая арматура трубопровода[/url]  
    Вентили и краны шаровые [url=https://best-party.ru/personal/Andresom]запорно регулирующая арматура[/url]  
    Шаровые краны установка и монтаж [url=https://puzyaka.ru/forum/member.php?u=68471]оборудования для регулирования трубопровода [/url]  
    Трубы PPRC [url=https://puzyaka.ru/forum/member.php?u=68472]фитинги PPRC [/url]  
    Монтаж трубопроводной запорно-регулирующей арматурой [url=http://xbmc.ru/forum/member.php?u=109177]присоединение трубопровода [/url]  
    Фланцы стальные [url=http://xbmc.ru/forum/member.php?u=109178]фланцевое присоединение трубопровода[/url]  
    Компенсаторы для трубопровода [url=http://forum.igromania.ru/member.php?u=631152]установка и монтаж компенсаторов[/url]  
    Монтажные фланцы [url=http://forum.igromania.ru/member.php?u=631153]крепление трубопровода[/url]  
    Смесители для воды [url=http://luch.ru/profile.php?lookup=53522]душевое оборудование для ванной [/url]
    Сантехника для ванной [url=http://luch.ru/profile.php?lookup=53523]инженерная сантехника[/url]  
    Компенсационное оборудование трубопроводов [url=http://hyundai-club.com.ua/member.php?u=68870]антивибрационные сильфонные и осевые компенсаторы[/url]  
    Фланцы стальные с отверстиями [url=http://hyundai-club.com.ua/member.php?u=68871]монтаж стальных фланцев[/url]  
    Компенсаторы антивибрационные для труб [url=http://www.sportbalans.ru/forum/user/465916/index.php]компенсационное оборудование трубопроводов[/url]  
    Фланцы стальные с отверстиями [url=http://www.sportbalans.ru/forum/user/465919/index.php]монтаж стальных фланцев[/url]   
    Монтаж фланцевого соединения запорно-регулирующей арматуры [url=http://www.sportbalans.ru/forum/user/465920/index.php]ПФРК муфты и фитинги[/url]  
    Краны шаровые латунные для газа [url=http://www.sportbalans.ru/forum/user/465921/index.php]водопроводное и газовое оборудование[/url]  
    Антивибрационные компенсаторы и фитинги [url=http://www.vladimirka.ru/board/dom/basseyn-dlya-dachi-u-kogo-nibud-byilest?replies=13#post-1157715]компенсационное оборудование технологических трубопроводов[/url]  
    Использование чугунных фитингов американок [url=http://www.vladimirka.ru/board/profile/makssver]фитинги и американки для трубопровода[/url]  
    Фланцы стальные для скрепления встык [url=http://www.vladimirka.ru/board/dom/stiralnaya-mashina-pryigaet-i-skachetchto-delat/page/2?replies=70#post-1157716]фланцы трубопроводов[/url]  
    Фланцы с резьбой [url=http://www.vladimirka.ru/board/profile/andresom86]литые резьбовые фланцы стальные[/url]  
    Запорная шаровая арматура [url=https://rosalind.info/users/maks.sver/]кран шаровый муфтовый[/url]  
    ПВХ фитинги [url=https://rosalind.info/users/andresom86/]фитинги для ПВХ труб[/url]  
    Фитинги для металлических труб [url=https://rosalind.info/users/Romansv/]фитинги для полипропиленовых труб[/url]
    Трубопроводы из ХПВХ [url=https://rosalind.info/users/SlavaMUR/]трубы из ХПВХ [/url]  
    Насосное оборудование [url=https://virgoclub.ru/forum/user9012.html]насосы для воды[/url]  
    Фитинги для труб [url=https://virgoclub.ru/forum/user9013-about.html]трубопроводные фитинги[/url]  
    Опоры ОПХ3 [url=http://www.zspk.gov.ru/forum/messages/forum7/message18022/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?result=reply#message18022]установка опор ОПХ3[/url]  
    Опоры ОПХ2 [url=http://www.zspk.gov.ru/forum/forum7/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?PAGEN_1=257]установка опор ОПХ2[/url]   
    Монтаж опоры ОПХ3 [url=http://www.zspk.gov.ru/forum/forum7/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?PAGEN_1=258]установка и монтаж опоры ОПХ3[/url]  
    Трубные компенсаторы [url=http://kg55.mybb2.ru/profile.php?mode=viewprofile&amp;u=1799]антивибрационные сильфонные компенсаторы и вставки[/url]  
    Фланцы стальные для скрепления встык разнообразных полиэтиленовых и металлических [url=http://kg55.mybb2.ru/profile.php?mode=viewprofile&amp;u=1800]использование и монтаж стальных фланцев[/url]  
    Антивибрационные компенсаторы трубные [url=http://www.zpu-journal.ru/forum/view_profile.php?UID=242184]чугунные фитинги американки[/url]  
    Фланцы стальные трубные [url=http://www.zpu-journal.ru/forum/view_profile.php?UID=242193]фланцы с резьбой[/url]  
    Балансировочные клапаны трубопровода [url=https://www.eltis.com/forum/user/95579/index.php?logout=yes]монтаж балансировочных клапанов[/url]  
    Затворы дисковые чугунные [url=https://www.eltis.com/forum/user/95580/index.php?logout=yes]монтаж затворов дисковых чугунных[/url]  
    Антивибрационные компенсаторы и оборудование [url=https://ru.gta5-mods.com/users/makssver]монтаж антивибрационных компенсаторов[/url]  
    Фланцы стальные для труб [url=https://ru.gta5-mods.com/users/andresom86]фланцевое соединение труб[/url]  
    Компенсационное оборудование труб [url=http://vivelescanards.toile-libre.org/index.php?file=Members&amp;op=detail&amp;autor=Maksims]характеристики компенсаторов для трубопровода[/url]  
    Фланцы стальные для соединения полиэтиленовой или металлической трубы [url=http://zdz.webd.pl/zdz/profile.php?lookup=10108]крепление фланцев[/url]   
    Фланцы стальные трубопровода [url=http://school2-aksay.org.ru/forum/member.php?action=profile&amp;uid=107839]монтажные фланцы[/url]  
    Компенсационное оборудование труб и фитингов [url=http://zdz.webd.pl/zdz/profile.php?lookup=10107]компенсационные вставки и сильфонные компенсаторы[/url]  
    Антивибрационные компенсаторы и вставки [url=https://forums.eugensystems.com/memberlist.php?mode=viewprofile&amp;u=192904]выбор компенсаторов для труб и вставок[/url]  
    Фланцы с отверстием под шпильки [url=https://forums.eugensystems.com/memberlist.php?mode=viewprofile&amp;u=192909]резьбовые и плоские фланцы[/url]  
    Электромагнитный клапан фланцевый [url=http://horseplanet.ru/people/user/7057/blog/]соленоидный электромагнитный клапан[/url]   
    Пластиковые трубы ПВХ и ХПВХ [url=http://horseplanet.ru/people/user/7058/blog/]трубопровод ПВХ и ХПВХ[/url]   
  3. Qiwi
    Qiwi 4 months ago
    Фитинги чугунные американки [url=http://forum.fanat.ua/ucp.php?i=164]американки чугунные оцинкованные[/url]  
    Электромагнитный клапан чугунный [url=http://forum.fanat.ua/viewtopic.php?f=25&amp;t=17601&amp;p=39692#p39692]пластиковые трубы ПВХ и ХПВХ[/url]  
    Стальные фланцы под болты [url=http://forum.fanat.ua/ucp.php?i=164]фланцы трубопроводов[/url]  
    Фитинги американки чугунные [url=http://www.heavymusic.ru/user/64836/]американки резьбовые для соединения труб[/url]  
    Фланцы с внутренней резьбой [url=http://www.heavymusic.ru/user/64837/]резьбовые фланцы трубопроводов[/url]  
    Электромагнитный клапан для инженерных трубопроводов [url=http://forum.opelclub-by.com/index.php?showuser=72109]клапан чугунный соленоидный электромагнитный[/url]  
    Трубы ПВХ и ХПВХ  для трубопровода [url=http://forum.opelclub-by.com/index.php?showuser=72110]трубы и фитинги ПВХ и ХПВХ [/url]  
    Стальные шаровые краны [url=http://www.playtform.net/user/maks.sver]краны шаровые из стали[/url]   
    Трубы и фитинги PPRC [url=http://www.playtform.net/user/andresom86]трубопровод из труб и фитингов напорный[/url]   
    Шаровые нержавеющие краны [url=http://zorba-budda.ru/blog/makssver/1/]нержавеющая запорная арматура[/url]  
    Трубы и фитинги из PPRC [url=http://zorba-budda.ru/blog/andresom/1/]полипропиленовые PPRC трубы и фитинги для напорного водоснабжения и отопления[/url]
    PPRC [url=http://forum.unm.org.ua/memberlist.php?mode=viewprofile&amp;u=264048]полипропиленовые PPRC трубы и фитинги для напорного водоснабжения и отопления[/url]
    Шаровые краны [url=http://forum.unm.org.ua/viewtopic.php?f=12&amp;t=29969&amp;p=313814#p313814]pprc трубы и фитинги[/url]
    Трубы и фитинги PPRC для напорного водоснабжения [url=http://forum.unm.org.ua/memberlist.php?mode=viewprofile&amp;u=264051]опоры трубопроводов ГОСТ 14911-82[/url]
    Трубы и фитинги PPRC для напорного водоснабжения [url=https://freelance.ru/andresom86]трубы и фитинги PPRC[/url]  
    Запорно-регулирующая арматура [url=https://freelance.ru/makssver]трубопроводная запорная арматура[/url]  
    Детали стальных трубопроводов [url=https://www.photographer.ru/nonstop/author/about.htm?id=70087]стальные фитинги для трубопровода[/url]  
    Компенсационное оборудование трубопроводов [url=https://www.photographer.ru/nonstop/author/about.htm?id=70086]компенсаторы для трубопроводов[/url]  
    Опоры тавровые приварные ОСТ 36-146-88 [url=http://www.zspk.gov.ru/forum/messages/forum7/message17897/4-o-zakonoproekte-ob-obrazovanii-v-primorskom-krae/?result=reply#message17897]монтаж опор ОПХ2[/url]
    Полипропиленовые трубы PPRC монтаж [url=http://www.jfresh.org/blogs/blog/23194.html]полипропиленовые фитинги PPRC монтаж[/url]
    Шаровые краны из стали [url=http://www.jfresh.org/blogs/blog/23195.html]стальные шаровые краны для трубопровода монтаж[/url]  
    Смесители для общественных помещений [url=http://www.med52.ru/profile/36728/]термостатические смесители Grohe[/url]  
    Трубы и фитинги для водоснабжения [url=http://www.med52.ru/profile/36741/]фасонные части пп[/url]
    Краны шаровые из стали [url=https://www.kakprosto.ru/profile/makssver]стальная запорная арматура[/url]  
    Трубы для канализации [url=https://www.kakprosto.ru/profile/andresom86]фитинги для канализации[/url]   
    Антивибрационные компенсаторы [url=https://school97.ru/forum/view_profile.php?UID=164978]клапаны для водоснабжения[/url]  
    Смесители для общественных помещений [url=https://school97.ru/forum/view_profile.php?UID=164615]смесители Grohe[/url]  
    Антивибрационные вставки компенсаторы [url=https://rfpro.ru/user/405676]клапаны для отопления[/url]  
    Трубы для водоснабжения и фитинги [url=https://school97.ru/forum/view_profile.php?UID=164616]фасонные части и фитинги ПП[/url]  
    Канализационные трубы [url=https://school97.ru/forum/view_profile.php?UID=164981]канализационные фасонные изделия[/url]  
    Труба для канализации [url=https://rfpro.ru/user/405677]труба и фасонные части для канализации[/url]  
    Опоры трубопровода ОПХ1 ГОСТ 14911-82 [url=https://itfy.org/members/maks-sver.7318/#about]опоры трубопроводов ГОСТ 14911-82[/url]
    Трубы напорные Прагма [url=https://itfy.org/members/andresom86.7321/#about]трубы и фитинги напорные PRAGMA[/url]  
    Опора для трубопровода ОПХ1 ГОСТ 14911-82 [url=https://setiathome.berkeley.edu/show_user.php?userid=11110712]опоры для труб ГОСТ 14911-82[/url]  
    Трубы и фитинги напорные Прагма [url=https://setiathome.berkeley.edu/show_user.php?userid=11110720]труба напорная PRAGMA[/url]  
    Опоры для трубопровода [url=http://qx60-club.ru/profile.php?id=9675]опоры для труб скользящие[/url]  
    Трубы Прагма [url=http://qx60-club.ru/profile.php?id=9676]фитинги напорные Прагма[/url]  
    Трубы и фитинги ПВХ напорные для водоснабжения [url=http://www.jfresh.org/blogs/profile/SlavaMUR/]трубы и фитинги ПВХ напорные[/url]  
    Монтаж раковины в ванной комнате [url=http://www.jfresh.org/blogs/blog/23053.html]установка умывальника в ванной комнате[/url]  
    Выбор труб для водоснабжения [url=http://www.jfresh.org/blogs/blog/23098.html]выбор труб для отопления[/url]  
    Клапан чугунный электромагнитный фланцевый [url=http://www.jfresh.org/blogs/profile/Romansv/]клапан чугунный электромагнитный соленоидный фланцевый[/url]  
    Металлопластиковые трубы [url=http://www.jfresh.org/blogs/blog/23097.html]металлопластиковые трубы и фитинги для водоснабжения и отопления[/url]  
    Смесители [url=https://school97.ru/forum/view_profile.php?UID=164615]смесители для ванной и душа[/url]  
    Фитинги и трубы для водоснабжения [url=https://school97.ru/forum/view_profile.php?UID=164616]выбор труб и фитингов  полипропиленовых[/url]  
    Новости оборудования чугунные соленоидные клапаны [url=http://vne-dorog-chita.ru/user/Romansv/]соленоидные фланцевые клапаны[/url]  
    Материалы пластиковых труб и фитингов ПВХ и ХПВХ [url=http://vne-dorog-chita.ru/user/SlavaMUR/]фитинги и трубы канализационные ПВХ и ХПВХ[/url]
    Сепараторы воздуха [url=http://forum.pskovedu.ru/profile.php?id=9041]полнопроходные нержавеющие краны[/url]  
    Трубопроводная  запорная арматура [url=http://forum.pskovedu.ru/profile.php?id=9046]задвижки чугунные ассортимент[/url]  
    Клапаны балансировочные и запорно-регулирующие [url=http://forum.pskovedu.ru/profile.php?id=9054]балансировочные клапаны Ballorex[/url]  
    Хомуты и опоры трубопровода [url=http://forum.pskovedu.ru/profile.php?id=9055]задвижки стальные в ассортименте для трубопровода[/url]
  4. Willy
    Willy 4 months ago
    Трубопроводная и запорная арматура [url=https://supl.biz/profiles/h-De7nwWBLJV/]насосное оборудование [/url]
    Системы отопления [url=https://supl.biz/profiles/h-OD7X3Ld0o0/]водоснабжение и канализация канализации[/url]   
    Комплектация системами водоснабжения, отопления и канализации [url=https://hh.ru/employer/5076914]современные системы водоснабжения, отопления и канализации[/url]   
    Поставщик материалов и оборудования для инженерных систем при строительстве жилых домов и общественных зданий [url=https://hh.ru/employer/5074412]для строительных и ремонтных компаний, проектных и монтажных подразделений[/url]  
    Комплектация строительных объектов [url=https://www.cossa.ru/profile/?ID=191619]различными инженерными системами[/url]  
    Комплектация качественной продукцией от разных поставщиков [url=https://www.cossa.ru/profile/?ID=191530]для строительства инженерных систем отопления, канализации и водоснабжения[/url]  
    Фланцы резьбовые [url=http://forum.igromania.ru/member.php?u=630655]фланцы стальные[/url]  
    Опоры трубопроводов [url=http://forum.igromania.ru/member.php?u=630654]подвижные и неподвижные опоры труб[/url]  
    Крепежные материалы трубопроводов [url=https://forum.maxnet.ua/index.php?/profile/64963-романсв/]стальные опоры труб[/url]  
    Хомуты для труб [url=https://forum.maxnet.ua/index.php?/profile/64964-алексеймур/]опоры трубопроводов ГОСТ[/url]
    Опоры трубные [url=https://chertezhi.ru/userinfo.php?uid=408466]крепление трубопровода[/url]  
    Крепление труб [url=https://chertezhi.ru/userinfo.php?uid=408467]опоры для трубопроводов[/url]
    Опоры и крепления труб [url=https://theoryandpractice.ru/users/RomanSv]стальные опоры трубопровода[/url]  
    Фланцы стальные резьбовые [url=https://theoryandpractice.ru/users/AlexMov]резьбовое и фланцевое соединение труб[/url]  
    Задвижки стальные [url=http://mastersamodelka.ru/index/8-94871]задвижки для трубопровода[/url]  
    Котельные для общественных зданий [url=http://www.pallasowka.ru/user/Roman1986/]инженерные коммуникации трубопроводов[/url]  
    Отопление материалы и одорудование [url=http://www.pallasowka.ru/user/NikitaSv/]водоснабжение трубы и фитинги[/url]  
    Настенные газовые котлы [url=https://forum.rmnt.ru/members/nikita31.111318/] комплектация инженерных систем отопления, канализации и водоснабжения[/url]
    Трубные заготовки, сгоны, бочата, ниппеля [url=https://forum.rmnt.ru/members/roman-31.111328/]поставщик материалов и оборудования для инженерного оборудования водоснабжения, отопления, канализации[/url]   
    Унитазы ГОСТ30493-98 [url=http://mastersamodelka.ru/index/8-88170]Компакты санфаянс ГОСТ 30493-98[/url]
    Антивибрационные компенсаторы для трубопровода [url=http://ingfootball.ru/userinfo.php?uid=83129]сильфонные и осевые компенсаторы[/url] 
    Фланцы стальные диски металлические  [url=http://ingfootball.ru/userinfo.php?uid=83130]оборудование для труб[/url] 

    Запорный вентиль - одна из разновидностей запорной арматуры [url=https://www.blogger.com/blog/post/edit/7513911788053579319/9007768836840671573]запорные вентили[/url]   
    Задвижки стальные используются для полного открытия или перекрытия потока рабочей среды [url=https://www.blogger.com/blog/post/edit/7513911788053579319/5200946104270520957]задвижки стальные[/url]   
    Задвижки чугунные фланцевые изготовленные по СЗ 0326 ПС-бр [url=https://www.blogger.com/blog/post/edit/7513911788053579319/4400722170222550250]задвижки чугунные[/url]   
    Задвижка чугунная 30ч6бр Китай предназначена для использования в трубопроводах [url=https://www.blogger.com/blog/post/edit/7513911788053579319/9007768836840671573]задвижки чугунные[/url]   
     Трубопроводная запорная арматура [url=https://historyhub.history.gov/people/borisvian]задвижки и вентили[/url]  
     Запорная трубопроводная арматура [url=https://waterfittings.blogspot.com]запорная и регулирующая арматура[/url]  
    Запорная и регулирующая арматура [url=https://gcup.ru/index/8-167133]трубопроводная арматура[/url]  
     Трубопроводные антивибрационные компенсаторы [url=http://www.tuvaenergo.ru/communication/blog/index.php?page=user&amp;id=133841]завижки латунные[/url]  
     Задвижки стальные [url=http://www.tuvaenergo.ru/communication/blog/index.php?page=user&amp;id=133851]трубопроводная запорная аппаратура[/url]  
     Очистные и дренажные системы [url=https://blogstroiki.ru/users/makssver/]смесители[/url]   
    Трубы и фитинги [url=https://blogstroiki.ru/users/andresom86/]канализационные трубы и фасонные части[/url]  
Отменить.