<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893248</guid>
        <pubDate>Mon, 24 Jul 2023 21:58:55 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893248</link>
        <description><![CDATA[Feldsher: А что мы пишем если это не есть секрет? :)]]></description>
        <author>Feldsher</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893243</guid>
        <pubDate>Mon, 24 Jul 2023 15:38:49 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893243</link>
        <description><![CDATA[shm: В общем случае задача через забор if&#39;ов не решается (если &quot;препятствия&quot; имеют произвольную геометрию). Тут какой-нибудь Волновой алгоритм уместнее. Или алгоритм Дейстра, если рассматривать каждую точку как элемент графа.]]></description>
        <author>shm</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893210</guid>
        <pubDate>Sun, 23 Jul 2023 11:45:02 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3893210</link>
        <description><![CDATA[Razuvai: &#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;Именно в этом примере??? КАК???&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;&#33;]]></description>
        <author>Razuvai</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3892967</guid>
        <pubDate>Tue, 18 Jul 2023 05:07:47 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3892967</link>
        <description><![CDATA[Razuvai: Как объявить массив gameField и сделать сетку???]]></description>
        <author>Razuvai</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3888907</guid>
        <pubDate>Thu, 30 Mar 2023 20:14:23 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3888907</link>
        <description><![CDATA[MaIron: Для обхода препятствий вам нужно добавить в свой код проверки на наличие препятствий перед перемещением игрока.<br>
<br>
Одним из способов проверки может быть использование матрицы, где каждый элемент представляет собой ячейку на игровом поле. Если ячейка свободна, то ее значение будет равно 0, если же она занята препятствием, то значение будет равно 1.<br>
<br>
Пример реализации обхода препятствий в вашем коде:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)</div><div class="code_line">{</div><div class="code_line">int destX = X;</div><div class="code_line">int destY = Y;</div><div class="code_line">&nbsp;</div><div class="code_line">// Проверяем, что ячейка, в которую мы хотим переместиться, свободна</div><div class="code_line">if (gameField[destX][destY] != 0)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Если ячейка занята, то ищем ближайшую свободную ячейку</div><div class="code_line">&nbsp;&nbsp; &nbsp;int step = 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while (true)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (int i = destX - step; i &#60;= destX + step; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int j = destY - step; j &#60;= destY + step; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Проверяем, что ячейка свободна</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (gameField[i][j] == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;destX = i;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;destY = j;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (destY != Y) break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (destX != X) break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;step++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Запускаем таймер с новыми координатами</div><div class="code_line">x = destX;</div><div class="code_line">y = destY;</div><div class="code_line">Timer1-&#62;Enabled = true;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void __fastcall TForm1::Timer1Timer(TObject *Sender)</div><div class="code_line">{</div><div class="code_line">if (Image1-&#62;Top &#62; y) Image1-&#62;Top = Image1-&#62;Top - 1;</div><div class="code_line">if (Image1-&#62;Top &#60; y) Image1-&#62;Top = Image1-&#62;Top + 1;</div><div class="code_line">if (Image1-&#62;Left &#62; x) Image1-&#62;Left = Image1-&#62;Left - 1;</div><div class="code_line">if (Image1-&#62;Left &#60; x) Image1-&#62;Left = Image1-&#62;Left + 1;</div><div class="code_line">if (Image1-&#62;Top == y &amp;&amp; Image1-&#62;Left == x) Timer1-&#62;Enabled = false;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
В данном примере предполагается, что игровое поле представлено двумерной матрицей gameField, где значение 0 означает свободную ячейку, а значение 1 - занятую препятствием. При клике мыши на новую позицию (X,Y) мы сначала проверяем, свободна ли ячейка gameField[X][Y]. Если она занята, то ищем ближайшую свободную ячейку с помощью цикла while и проверок. Когда найдем свободную ячейку, запускаем таймер с новыми координатами (destX, destY).]]></description>
        <author>MaIron</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3854191</guid>
        <pubDate>Thu, 11 Nov 2021 09:59:58 +0000</pubDate>
        <title>Как сделать обход препятствий в С++ Builder???</title>
        <link>https://forum.sources.ru/index.php?showtopic=424060&amp;view=findpost&amp;p=3854191</link>
        <description><![CDATA[Razuvai: Как сделать обход препятствий в С++ Builder???<br>Движение игрока по клику мыши уже готово.<br>Вот мой код:<br>void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,<br>int X, int Y)<br>{<br>x=X;<br>y=Y;<br>Timer1-&gt;Enabled=true;<br>}<br><br>void __fastcall TForm1::Timer1Timer(TObject *Sender)<br>{<br>if (Image1-&gt;Top&gt;y) Image1-&gt;Top=Image1-&gt;Top-1;<br>if (Image1-&gt;Top&lt;y) Image1-&gt;Top=Image1-&gt;Top+1;<br>if (Image1-&gt;Left&gt;x) Image1-&gt;Left=Image1-&gt;Left-1;<br>if (Image1-&gt;Left&lt;x) Image1-&gt;Left=Image1-&gt;Left+1;<br>if (Image1-&gt;Top==y &amp;&amp; Image1-&gt;Left==x) Timer1-&gt;Enabled=false;<br>}]]></description>
        <author>Razuvai</author>
        <category>Borland C++ Builder/Turbo C++ Explorer</category>
      </item>
	
      </channel>
      </rss>
	