<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; OFF: Морской бой]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8198&amp;type=atom" />
	<updated>2013-10-29T15:29:29Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8198</id>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76672#p76672" />
			<content type="html"><![CDATA[<p>Идея умерла так и не родившись?</p>]]></content>
			<author>
				<name><![CDATA[Arigato]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29277</uri>
			</author>
			<updated>2013-10-29T15:29:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76672#p76672</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71134#p71134" />
			<content type="html"><![CDATA[<p><strong>Александр_</strong>, из описаний не понятные следующие моменты: <br />-- какой протокол передачи данных предполагается использовать <br />-- верно ли что реализация ориентирована в первую очередь на языки семейства AHK <br />-- возможно ли будет реализовать свой клиент на других скриптовых языках (например, js, perl, другие языки)</p><p>----</p><p>Лог игры должен быть простым как запись шахматной партии и информативным, чтобы можно было воспроизвести игру в пошаговом режиме - программно или вручную. Например:</p><div class="codebox"><pre><code>
координаты выстрела
попадание - например, символ &quot;:&quot; (двоеточие)
уничтожение - &quot;+&quot; (плюс), &quot;x&quot; (латинское икс)
</code></pre></div><p>Простая запись - один выстрелил на e1, другой - на k0. <br /></p><div class="codebox"><pre><code>
e1 k0
</code></pre></div><p>Первый выстрелил три раза: два раза удачно на b1, a1 и мимо на c1. <br />Аналогичная запись для второго игрока. <br /></p><div class="codebox"><pre><code>
b1:a1+c1 k9+h8
ba1+c1 k9h8
bac1 k9h8
</code></pre></div><p>Вообще-то достаточно возвращать координаты выстрелов.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-04-07T02:35:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71134#p71134</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71132#p71132" />
			<content type="html"><![CDATA[<p>У меня такая наработка. Для поля<br /><span class="postimg"><img src="http://i.imgur.com/gUbqETi.jpg" alt="http://i.imgur.com/gUbqETi.jpg" /></span><br /></p><div class="codebox"><pre><code>; клетки записываются сверху вниз и слева направо
str := &quot;1000000000000001010100000101000000010000111001000000000000000100001100000100000100010010000001001000&quot;

Letters := &quot;abcdefghij&quot;
Area := {}   ; именованый массив для всего поля, ключи будут называться по буквам

Loop 10   ; в каждом буквенном ключе будет массив со значениями клеток
   Area[Substr(Letters, A_Index, 1)] := []

Loop, Parse, str   ; заполняем
   Area[Substr(Letters, (A_Index - 1)//10 + 1, 1)][Mod(A_Index - 1, 10) + 1] := A_LoopField

Ships := []   ; массив для кораблей

Loop 10   ; делаем в массиве 10 подмассивов, в каждом будут идентификаторы (вида &quot;h10&quot;) клеток одного из кораблей
   Ships[A_Index] := []

i := 1
for Letter,Array in Area   ; заполняем массив кораблей, анализируя массив клеток
   for Number,Value in Array
      if Value
      {
         IsPrev := &quot;&quot;
         for k,v in Ships
            for n,s in v
               if ((SubStr(s, 1, 1) = Chr(Asc(Letter)-1) &amp;&amp; SubStr(s, 2) = Number)
                  || (SubStr(s, 1, 1) = Letter &amp;&amp; SubStr(s, 2) = Number - 1))
               {
                  v.Insert(Letter . Number), IsPrev := 1
                  break 2
               }
               
         if !IsPrev
            Ships[i++].Insert(Letter . Number)
      }

for k,v in Ships   ; смотрим, что получилось
{
   for m,n in v
      List .= (A_Index = 1 ? &quot;&quot; : &quot;, &quot;) . n
   List .= &quot;`n&quot;
}

MsgBox, % &quot;Корабли:`n`n&quot; List</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-07T00:51:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71132#p71132</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71046#p71046" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>В общих чертах ясно, я тогда пока с графики начну.</p></blockquote></div><p>Ну да, а я завтра уже какой-нибудь вариант сервера выложу, может ещё не совсем готовый, но работоспособный. Сегодня наверно уже не успею. Ну и пример элементарного скрипта на ahk сделаю.<br /><strong>upd.</strong> Прошу прощения, сегодня не смогу ничего выложить, только сейчас взялся за работу. Постараюсь закончить как можно быстрее.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-04-02T20:24:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71046#p71046</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71045#p71045" />
			<content type="html"><![CDATA[<p>В общих чертах ясно, я тогда пока с графики начну. В графическом режиме скрипту-интерфейсу, наверное, проще получать информацию через оконные сообщения, чем через файл.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T20:17:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71045#p71045</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71044#p71044" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>А в каком виде клиент должен подавать серверу свою расстановку</p></blockquote></div><p>Расстановку подаёт строкой из ста единиц и нулей, по одному символу на клетку(это было написано в 12-ом посте).<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>и как сервер будет определять, что корабль убит?</p></blockquote></div><p>Это проблемы сервера(т.е. реализации). Я весь код клиента выложу вместе с исполняемым файлом.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-04-02T20:07:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71044#p71044</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71043#p71043" />
			<content type="html"><![CDATA[<p>Ну ладно, это не критично. А в каком виде клиент должен подавать серверу свою расстановку, и как сервер будет определять, что корабль убит?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T19:48:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71043#p71043</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71042#p71042" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Можно и так, но если в ключи <em>Area1</em> и <em>Area2</em> писать все поля, как раз таки лог и получится гораздо больше. Может, проще придумать другой способ занесения в массив?</p></blockquote></div><p>Ну процентов на 15 увеличится. Просто запись вида &quot;Area1 = A1,B2B4,C7C10&quot; будет не так удобно парсить.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-04-02T19:13:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71042#p71042</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71041#p71041" />
			<content type="html"><![CDATA[<p>Можно и так, но если в ключи <em>Area1</em> и <em>Area2</em> писать все поля, как раз таки лог и получится гораздо больше. Может, проще придумать другой способ занесения в массив?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T18:38:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71041#p71041</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71040#p71040" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Я предложил ini, потому что в AHK с ними просто работать — указываешь название секции, название ключа и парсишь/изменяешь/добавляешь значение.</p></blockquote></div><p>Я тоже про AHK_L писал, просто я боюсь, что лог окажется большого размера. Давай тогда попробуем с ini, если что поменяем формат. Я думаю файл будет примерно так выглядеть:<br /></p><div class="codebox"><pre><code>[general]
id1 = botVasya
id2 = MegaBotV101
TotalRounds = 100
CurrentRounds = 23
Score = 11-12

[Round1]
Area1 = ...
Area2 = ...
First = 1
Steps = 1A8M,2B9W,2B10K,...
[Round2]
...
</code></pre></div><p>1A8M - первый игрок выстрелил по A8 и промахнулся. Игрок указан чтобы было понятно чей ход, если писать ходы в разные ключи то будет непонятен порядок.<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ты, наверное, как-то по-своему всё это видишь. Зачем заносить всё поле, если можно занести только занятые клетки?</p></blockquote></div><p>Я это вижу так:<br /></p><div class="codebox"><pre><code>Area := Object()
Loop, Parse, InputVar
   Area[%A_Index%//10+1][Mod(%A_Index%,10)+1] = %A_LoopField%</code></pre></div><p>Дальше с Area удобно работать.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-04-02T18:17:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71040#p71040</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71039#p71039" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>А это точно будет удобно? придётся ведь при каждом обновлении перечитывать весь файл.</p></blockquote></div><p>Я предложил ini, потому что в AHK с ними просто работать — указываешь название секции, название ключа и парсишь/изменяешь/добавляешь значение. Как в других языках, не знаю, будет ли так же удобно — тебе виднее (кстати, никто пока на vbs не подписывался играть).</p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>И вместо расположения кораблей проще всё игровое поле писать, его ведь потом всё равно в массив заносить.</p></blockquote></div><p>Ты, наверное, как-то по-своему всё это видишь. Зачем заносить всё поле, если можно занести только занятые клетки?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T17:42:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71039#p71039</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71038#p71038" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Что-то типа ini-файла можно.</p></blockquote></div><p>А это точно будет удобно? придётся ведь при каждом обновлении перечитывать весь файл. Может лучше дать возможность последовательной обработки? Чтобы всю начальную информацию о партии и раунде можно было получить регулярным выражением, а ходы через Loop. А добавление новых данных удобно проверять через <a href="http://l.autohotkey.net/docs/objects/File.htm">File.AtEOF</a>.<br />И вместо расположения кораблей проще всё игровое поле писать, его ведь потом всё равно в массив заносить.</p>]]></content>
			<author>
				<name><![CDATA[Александр_]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24888</uri>
			</author>
			<updated>2013-04-02T17:28:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71038#p71038</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71036#p71036" />
			<content type="html"><![CDATA[<p>Да, вместо 10 можно 0 для простоты.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T17:06:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71036#p71036</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71035#p71035" />
			<content type="html"><![CDATA[<p>Ещё ключ &quot;first=[идентификатор клиента]&quot; — кто ходил первым.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T16:55:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71035#p71035</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: OFF: Морской бой]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71034#p71034" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Кстати формат лога какой будет?</p></blockquote></div><p>Что-то типа ini-файла можно. Заголовок секции — идентификатор игры. Далее два ключа типа &quot;[идентификатор клиента][pos]= ...&quot; и далее позиции кораблей через разделитель. Два ключа &quot;[идентификатор клиента][game]= A8M,B9W,B10K,...&quot;. Ключ &quot;Winner=[идентификатор клиента]&quot;. Как-то так.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-02T16:46:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71034#p71034</id>
		</entry>
</feed>
