Guest User

Untitled

a guest
Feb 22nd, 2022
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 291.39 KB | None | 0 0
  1. //0 - путое поле
  2. //1 - Белая пешка
  3. //2 - Белый Конь
  4. //3 - Белый слон
  5. //4 - белая ладья
  6. //5 - Белый Ферзь
  7. //6 - Белый Король
  8. // с минусом - тоже самое, только за черных......
  9. //9 - Поле, на которое ходить нельзя (Край доски)
  10. // Массив от 1 до 100......
  11. // Возможность короткой рокировки - 1, Длинной 2, обеих три: - по числу за белых, и за черных
  12. // очередь хода - число -1 или 1
  13. // 104 - Пешка, Сделавшая Двойной ход, Которую Можно взять.
  14. перем разрешенпустойход;
  15. перем Nodes;
  16. перем времяпосл;
  17. перем ВремяБелыхПосл;
  18. перем ВремяЧерныхПосл;
  19. перем таб;
  20. перем КорольБелыхГПХ,КорольЧерныхГПХ;
  21. перем ТЗХодовСКоторыхШах;
  22. перем ТЗНазванийФигур;
  23. перем ОткудаПоследнийХод;
  24. перем КудаПоследнийХод;
  25. перем максКолвоДобавок;
  26. перем ТекущаяПозиция[104];
  27. перем ТекущаяПозицияСтр;
  28. перем режимконтролявремени;
  29. перем ПотраченоБелыми, ПотраченоЧерными;
  30. перем разрешитьаварийку;
  31. перем ХодыКоня[8];
  32. перем ХодыСлона[4];
  33. перем ХодыЛадьи[4];
  34. перем ХешТаблица;
  35. перем НомерХода11;
  36. перем ПовернутаяДоска;
  37. перем ВремяБелых;
  38. перем ВремяЧерных;
  39. перем времяНачала;
  40. перем ТаблицаСоответствий[100];
  41. перем ТаблицаСоответствий1[100];
  42. перем поле[104];
  43. перем ТЗДебютов;
  44. перем ТЗХ;
  45. перем идетИгра;
  46. перем ходовБезВзятий;
  47. перем ТЗБывшихПозиций1;
  48. перем ТЗБывшихПозиций2;
  49. перем белыеКомпьютер;
  50. перем черныеКомпьютер;
  51. перем случ;
  52. перем весФигуры[13];
  53. перем СписокПозиций;
  54. перем времяОбдумывания;
  55. перем ХешТаблицаХодов;
  56. //перем ХешТаблицаВзятий;
  57. перем ХешКорольБит;
  58. перем СделанаРокировка;
  59. перем ПотеряРокировок;
  60. перем коэфвес;
  61. перем врем,врем1;
  62. перем сч;
  63. перем оценкаПоложения[1000];
  64. перем минвремя;
  65. перем максвремя;
  66. перем аварийка;
  67. перем переворот[100];
  68. перем ч,м,с;
  69. перем maxLevel;
  70. перем Каталог,Файл,ФайлДебютов;
  71. перем гг;
  72. Перем Закрывать;
  73. //*******************************************
  74. Процедура показатьпозицию() Далее
  75. Процедура КомпьютерДелаетХод() Далее
  76. Функция ГенераторШахов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
  77. Функция ГенераторХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
  78. Функция ГенераторПравильныхХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
  79. Функция ГенераторВзятий(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
  80. Функция ПодБоемКорольСтр(знач стр) Далее
  81. //Функция показатьВремя()
  82. // перем прошловрем;
  83. // текущеевремя(ч,м,с);
  84. // врем1=ч*60*60+м*60+с;
  85. // Если врем1<>времяпосл Тогда
  86. // времяпосл=врем1;
  87. // Если врем1<врем Тогда
  88. // врем=врем1;
  89. // КонецЕсли;
  90. // врембел=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
  91. // времчерн=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
  92. // Если ПовернутаяДоска=1 тогда
  93. // Таб.Область(2,12).Текст=времБел;
  94. // Таб.Область(9,12).Текст=времЧерн;
  95. // Иначе
  96. // Таб.Область(9,12).Текст=времБел;
  97. // Таб.Область(2,12).Текст=времЧерн;
  98. // КонецЕсли;
  99. // Закрывать=1;
  100. // Форма.Закрыть();
  101. // Конецесли;
  102. // Форма.Обновить();
  103. //КонецФункции
  104. Функция Перебор(Позиция,Уровень,знач Оценка,МИ1,МА1,знач Глубина,ПослФиг,Вес,Доб,ОтслеживатьПовторения=0,БылПустойХод=0)
  105. перем ми2;
  106. перем ма2;
  107. перем ми;
  108. перем ма;
  109. перем оценка1;
  110. перем ОчередьХода;
  111. перем стр,стр1;
  112. перем Ходы;
  113. перем а,в;
  114. перем ТХ;
  115. перем ТХ1;
  116. перем Добавка;
  117. перем КорольБит;
  118. перем Оценка2;
  119. перем номстрпоз;
  120. перем ПозицияВМассиве;
  121. Перем Глубин;
  122. Cтр="";
  123. Если Аварийка=1 Тогда
  124. возврат 0;
  125. КонецЕсли;
  126. сч=сч+1;
  127. Если сч%100=0 Тогда
  128. текущеевремя(ч,м,с);
  129. врем1=ч*60*60+м*60+с;
  130. Если врем1<врем Тогда
  131. врем=врем1;
  132. КонецЕсли;
  133. Если ((Врем1>(Врем+МаксВремя))и(РазрешитьАварийку=1))или(Врем1>(Врем+МаксВремя*3)) Тогда
  134. Аварийка=1;
  135. возврат 0;
  136. КонецЕсли;
  137. КонецЕсли;
  138. Если (ТЗБывшихПозиций1.найтиЗначение(Позиция,Cтр,"Позиция")>0)и(ОтслеживатьПовторения=0) Тогда
  139. Возврат 0;
  140. ИначеЕсли (Оценка>3000) Тогда
  141. Возврат (Уровень*10)+5000;
  142. ИначеЕсли (Оценка<-3000) Тогда
  143. Возврат (-Уровень*10)-5000;
  144. ИначеЕсли уровень<(-maxLevel) Тогда
  145. Возврат Оценка;
  146. Иначе
  147. ОчередьХода=КодСимв(сред(Позиция,67,1))-33;
  148. Если ОчередьХода=1 Тогда
  149. Оценка1=-2000000;
  150. Иначе
  151. Оценка1=2000000;
  152. КонецЕсли;
  153. стр="";
  154. Ходы=0;
  155. стр="";
  156. ТХ=создатьобъект("ТаблицаЗначений");
  157. корольбит=0;
  158. позициявМассиве=0;
  159. Если (глубина>0)или((Глубина=0)и(((очередьХода=1)и(Оценка>=(ми1)))или((ОчередьХода=2)и(Оценка<=(ма1))))) Тогда
  160. КорольБит=подБоемКорольСтр(Позиция);
  161. ПозицияВМассиве=1;
  162. Конецесли;
  163. если (глубина>0)или(корольбит=1) тогда
  164. Если ((глубина<=2)и(Глубина>0)и(КорольБит=0))и(разрешенпустойход=1)и((БылПустойХод=0)или(Глубина=1)) тогда
  165. Если ОчередьХода=1 тогда
  166. Если оценка>=ма1 тогда
  167. позициявмассиве=0;
  168. оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МА1-0.00001,МА1,-1,0,0,0,1,1);
  169. Если Оценка2>=ма1 Тогда
  170. возврат Оценка2;
  171. КонецЕсли;
  172. Конецесли;
  173. иначе
  174. Если оценка<=ми1 Тогда
  175. позициявмассиве=0;
  176. оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МИ1,МИ1+0.00001,-1,0,0,0,1,1);
  177. Если Оценка2<=ми1 Тогда
  178. возврат Оценка2;
  179. КонецЕсли;
  180. Конецесли;
  181. конецесли;
  182. Иначеесли (Глубина>2)и(корольБит=0)и(разрешенпустойход=1)и(БылПустойХод=0) тогда
  183. Если ОчередьХода=1 тогда
  184. позициявмассиве=0;
  185. оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МА1-0.00001,МА1,макс(Глубина-3,1),0,0,0,1,1);
  186. Если Оценка2>=ма1 Тогда
  187. возврат Оценка2;
  188. КонецЕсли;
  189. иначе
  190. позициявмассиве=0;
  191. оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МИ1,МИ1+0.00001,макс(Глубина-3,1),0,0,0,1,1);
  192. Если Оценка2<=ми1 Тогда
  193. возврат Оценка2;
  194. КонецЕсли;
  195. конецесли;
  196. Конецесли;
  197. Если КорольБит=0 Тогда
  198. Если (разрешенпустойход=0)или(Глубина>1)или((Глубина=1)и(((очередьхода=1)и(оценка>ми1-0.3))или((очередьхода=2)и(оценка<ма1+0.3)))) тогда
  199. ГенераторХодов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
  200. Иначе
  201. ГенераторШахов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
  202. Ходы=1;
  203. КонецЕсли;
  204. Иначе
  205. ГенераторПравильныхХодов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
  206. Если ТХ.КоличествоСтрок()=0 Тогда
  207. Если очередьХода=1 тогда
  208. возврат -(((Уровень-2)*10)+5000);
  209. Иначе
  210. возврат (((Уровень-2)*10)+5000);
  211. КонецЕсли;
  212. КонецЕсли;
  213. КонецЕсли;
  214. Иначе
  215. Оценка1=Оценка;
  216. Если очередьХода=1 Тогда
  217. Если Оценка1>=ма1 Тогда
  218. возврат Оценка1;
  219. КонецЕсли;
  220. Иначе
  221. Если Оценка1<=ми1 Тогда
  222. возврат Оценка1;
  223. КонецЕсли;
  224. КонецЕсли;
  225. ГенераторВзятий(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
  226. КонецЕсли;
  227. стр1=ТХ.КоличествоСтрок();
  228. стр=0;
  229. Если ХешТаблицаХодов.НайтиЗначение(Позиция,стр,"Позиция")>0 Тогда
  230. если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ходов")=1 Тогда
  231. стр12=0;
  232. Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход1"),стр12,"НоваяПозиция")>0 Тогда
  233. ТХ.СдвинутьСтроку(1-стр12,стр12);
  234. КонецЕсли;
  235. КонецЕсли;
  236. стр12=0;
  237. Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"),стр12,"НоваяПозиция")>0 Тогда
  238. ТХ.СдвинутьСтроку(1-стр12,стр12);
  239. КонецЕсли;
  240. Иначе
  241. стр=0;
  242. Конецесли;
  243. МИ=МИ1;
  244. МА=МА1;
  245. Если ОчередьХода=1 Тогда
  246. МИ=макс(Оценка1,МИ);
  247. Иначе
  248. МА=Мин(Оценка1,МА);
  249. КонецЕсли;
  250. Если (стр=0)и(Глубина>=2)и(ХешТаблицаХодов.Количествострок()<14000) Тогда
  251. позициявМассиве=0;
  252. Оценка2=Перебор(Позиция,Уровень,Оценка,МИ,МА,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
  253. Если (очередьХода=1)и(Оценка2<=МИ) Тогда
  254. Оценка2=Перебор(Позиция,Уровень,Оценка,-1000,МА,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
  255. ИначеЕсли (ОчередьХода=2)и(Оценка2>=МА) Тогда
  256. Оценка2=Перебор(Позиция,Уровень,Оценка,МИ,1000,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
  257. КонецЕсли;
  258. стр=0;
  259. Если ХешТаблицаХодов.НайтиЗначение(Позиция,стр,"Позиция")>0 Тогда
  260. если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ходов")=1 Тогда
  261. стр12=0;
  262. Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход1"),стр12,"НоваяПозиция")>0 Тогда
  263. ТХ.СдвинутьСтроку(1-стр12,стр12);
  264. КонецЕсли;
  265. КонецЕсли;
  266. стр12=0;
  267. Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"),стр12,"НоваяПозиция")>0 Тогда
  268. ТХ.СдвинутьСтроку(1-стр12,стр12);
  269. КонецЕсли;
  270. Иначе
  271. стр=0;
  272. Конецесли;
  273. Конецесли;
  274. если (глубина>0)или(корольбит=1) тогда
  275. Если ОчередьХода=1 Тогда
  276. Оценка1=-200000;
  277. Иначе
  278. Оценка1=200000;
  279. КонецЕсли;
  280. КонецЕсли;
  281. Если Ходы=1 Тогда
  282. Оценка1=Оценка;
  283. КонецЕсли;
  284. Глубин=Глубина;
  285. ТЗБывшихПозиций1.НоваяСтрока();
  286. ТЗБывшихПозиций1.Позиция=Позиция;
  287. номстрпоз=ТЗБывшихПозиций1.КоличествоСтрок();
  288. Для а=1 по стр1 цикл
  289. Nodes=Nodes+1;
  290. ТХ.ПолучитьСтрокуПоНомеру(а);
  291. Добавка=0;
  292. Если КорольБит=1 Тогда
  293. Добавка=1; //
  294. Иначеесли (ТХ.ВзятаяФигура<>0)и(ТХ.ВзятаяФигура=ПослФиг)и(окр(ТХ.Оценка,0)=-вес)и(Доб=0) Тогда
  295. Добавка=1; //
  296. Иначе
  297. Добавка=0;
  298. КонецЕсли;
  299. Если глубина>0 Тогда
  300. Глубина=Глубин+Добавка;
  301. КонецЕсли;
  302. Если (а>1)
  303. //и((Глубина>0)или(КорольБит=1))
  304. Тогда
  305. Если ОчередьХода=1 Тогда
  306. Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,мин(МИ+0.00001,ма),Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
  307. Если (Оценка2>=МИ+0.00001)и(Оценка2<МА) Тогда
  308. Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
  309. КонецЕсли;
  310. Иначе
  311. Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,макс(МА-0.00001,ми),МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
  312. Если (Оценка2<=МА-0.00001)и(Оценка2>МИ) Тогда
  313. Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
  314. КонецЕсли;
  315. КонецЕсли;
  316. Иначе
  317. Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
  318. КонецЕсли;
  319. Если ОчередьХода=1 Тогда
  320. Если (оценка2>Оценка1)и(Оценка2>ми)
  321. Тогда
  322. Если стр>0 Тогда
  323. Если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход")<>ТХ.НоваяПозиция Тогда
  324. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход1",ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"));
  325. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
  326. ХешТаблицаХодов.УстановитьЗначение(стр,"Ходов",1);
  327. КонецЕсли;
  328. ИначеЕсли ХешТаблицаХодов.Количествострок()<15000 Тогда
  329. ХешТаблицаХодов.НоваяСтрока();
  330. ХешТаблицаХодов.Позиция=Позиция;
  331. стр=ХешТаблицаХодов.КоличествоСтрок();
  332. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
  333. КонецЕсли;
  334. КонецЕсли;
  335. Оценка1=Макс(Оценка1,Оценка2);
  336. МИ=макс(Оценка1,МИ);
  337. Иначе
  338. Если (оценка1>Оценка2)и(оценка2<ма)
  339. Тогда
  340. Если стр>0 Тогда
  341. Если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход")<>ТХ.НоваяПозиция Тогда
  342. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход1",ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"));
  343. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
  344. ХешТаблицаХодов.УстановитьЗначение(стр,"Ходов",1);
  345. КонецЕсли;
  346. ИначеЕсли ХешТаблицаХодов.Количествострок()<15000 Тогда
  347. ХешТаблицаХодов.НоваяСтрока();
  348. ХешТаблицаХодов.Позиция=Позиция;
  349. стр=ХешТаблицаХодов.КоличествоСтрок();
  350. ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
  351. КонецЕсли;
  352. КонецЕсли;
  353. Оценка1=Мин(Оценка1,Оценка2);
  354. МА=Мин(Оценка1,МА);
  355. КонецЕсли;
  356. Если (МА<=МИ)или((ОчередьХода=1)и(Оценка1>1000))или((ОчередьХода=2)и(Оценка1<-1000)) Тогда
  357. Прервать;
  358. КонецЕсли;
  359. Конеццикла;
  360. ТХ.Очистить();
  361. ТХ=0;
  362. ТЗБывшихПозиций1.Удалитьстроку(номстрпоз);
  363. Если (((Оценка1=((Уровень-2)*10)+5000)или(-Оценка1=((Уровень-2)*10)+5000))и(КорольБит=0)) Тогда
  364. возврат 0;
  365. КонецЕсли;
  366. Возврат Оценка1;
  367. КонецЕсли;
  368. КонецФункции
  369. Процедура СброситьГенератор()
  370. перем м,с,ч;
  371. текущеевремя(ч,м,с);
  372. Случ=ч*60*60+м*60+с;
  373. Случ=случ%65536;
  374. КонецПроцедуры
  375. Функция СлучайноеЧисло()
  376. Случ=(13*Случ+13849)%65536;
  377. Возврат Случ/65536;
  378. КонецФункции
  379. Функция ПозицияВСтроку(Поле[])
  380. перем стр;
  381. перем а;
  382. перем в;
  383. стр="";
  384. а=11;
  385. Пока а<90 Цикл
  386. Для в=1 по 8 Цикл
  387. стр=стр+симв(Поле[а+в]+48);
  388. КонецЦикла;
  389. а=а+10;
  390. Конеццикла;
  391. стр=стр+симв(Поле[101]+33);
  392. стр=стр+симв(Поле[102]+33);
  393. стр=стр+симв(Поле[103]+33);
  394. стр=стр+симв(Поле[104]+33);
  395. возврат стр;
  396. КонецФункции
  397. Процедура ПозицияИзСтроки(Поле[],стр)
  398. перем а;
  399. перем в;
  400. перем с;
  401. а=11;
  402. с=1;
  403. Пока а<90 Цикл
  404. Для в=1 по 8 Цикл
  405. Поле[а+в]=Кодсимв(сред(стр,с,1))-48;
  406. с=с+1;
  407. КонецЦикла;
  408. а=а+10;
  409. Конеццикла;
  410. поле[101]=Кодсимв(сред(стр,65,1))-33;
  411. поле[102]=Кодсимв(сред(стр,66,1))-33;
  412. поле[103]=Кодсимв(сред(стр,67,1))-33;
  413. поле[104]=Кодсимв(сред(стр,68,1))-33;
  414. КонецПроцедуры
  415. Функция Корольподбоем(Поле1[],ГдеКороль,ОчередьХода)
  416. перем а;
  417. перем куда;
  418. Если ОчередьХода=1 Тогда
  419. Если поле1[ГдеКороль+11]=-1 Тогда
  420. Возврат 1; //Можно взять пешкой......
  421. КонецЕсли;
  422. Если поле1[ГдеКороль+9]=-1 Тогда
  423. Возврат 1; //Можно взять пешкой.......
  424. КонецЕсли;
  425. Для а=1 по 8 цикл
  426. Куда=ГдеКороль+ХодыКоня[а];
  427. Если (Куда<=0) или (Куда>=100) Тогда
  428. продолжить;
  429. КонецЕсли;
  430. Если поле1[Куда]=-2 Тогда
  431. возврат 1;
  432. КонецЕсли;
  433. КонецЦикла;
  434. Для а=1 по 4 цикл
  435. Куда=ГдеКороль+ХодыЛадьи[а];
  436. Если поле1[Куда]=-6 Тогда //Король
  437. возврат 1;
  438. КонецЕсли;
  439. Пока поле1[Куда]=0 Цикл
  440. Куда=Куда+ХодыЛадьи[а];
  441. КонецЦикла;
  442. Если (поле1[Куда]=-4)или(поле1[Куда]=-5) Тогда // Ладья или ферзь
  443. возврат 1;
  444. КонецЕсли;
  445. КонецЦикла;
  446. Для а=1 по 4 цикл
  447. Куда=ГдеКороль+ХодыСлона[а];
  448. Если поле1[Куда]=-6 Тогда //Король
  449. возврат 1;
  450. КонецЕсли;
  451. Пока поле1[Куда]=0 Цикл
  452. Куда=Куда+ХодыСлона[а];
  453. КонецЦикла;
  454. Если (поле1[Куда]=-3)или(поле1[Куда]=-5) Тогда // Слон или ферзь
  455. возврат 1;
  456. КонецЕсли;
  457. КонецЦикла;
  458. Иначе
  459. Если поле1[ГдеКороль-11]=1 Тогда
  460. Возврат 1; //Можно взять пешкой......
  461. КонецЕсли;
  462. Если поле1[ГдеКороль-9]=1 Тогда
  463. Возврат 1; //Можно взять пешкой.......
  464. КонецЕсли;
  465. Для а=1 по 8 цикл
  466. Куда=ГдеКороль+ХодыКоня[а];
  467. Если (Куда<=0) или (Куда>=100) Тогда
  468. продолжить;
  469. КонецЕсли;
  470. Если поле1[Куда]=2 Тогда
  471. возврат 1;
  472. КонецЕсли;
  473. КонецЦикла;
  474. Для а=1 по 4 цикл
  475. Куда=ГдеКороль+ХодыЛадьи[а];
  476. Если поле1[Куда]=6 Тогда //Король
  477. возврат 1;
  478. КонецЕсли;
  479. Пока поле1[Куда]=0 Цикл
  480. Куда=Куда+ХодыЛадьи[а];
  481. КонецЦикла;
  482. Если (поле1[Куда]=4)или(поле1[Куда]=5) Тогда // Ладья или ферзь
  483. возврат 1;
  484. КонецЕсли;
  485. КонецЦикла;
  486. Для а=1 по 4 цикл
  487. Куда=ГдеКороль+ХодыСлона[а];
  488. Если поле1[Куда]=6 Тогда //Король
  489. возврат 1;
  490. КонецЕсли;
  491. Пока поле1[Куда]=0 Цикл
  492. Куда=Куда+ХодыСлона[а];
  493. КонецЦикла;
  494. Если (поле1[Куда]=3)или(поле1[Куда]=5) Тогда // Слон или ферзь
  495. возврат 1;
  496. КонецЕсли;
  497. КонецЦикла;
  498. КонецЕсли;
  499. возврат 0;
  500. КонецФункции
  501. Функция ПодБоемКорольСтр(знач стр)
  502. перем очередьХода;
  503. ОчередьХода=КодСимв(сред(стр,67,1))-33;
  504. ПозицияИзСтроки(поле,стр);
  505. //сообщить(стр);
  506. возврат КорольПодБоем(поле,ТаблицаСоответствий1[найти(стр,симв(48+(3-очередьхода*2)*6))],ОчередьХода);
  507. КонецФункции
  508. Функция ГенераторХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
  509. перем а;
  510. перем в;
  511. перем с;
  512. перем Куда;
  513. перем что;
  514. перем чтоДвигаем;
  515. перем ОценкаПоВозможностям;
  516. перем стр1;
  517. перем очередьХода;
  518. перем ПешкаНаПроходе;
  519. ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
  520. ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
  521. ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
  522. ТЗХодов.НоваяКолонка("Куда","Число",3,0);
  523. ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
  524. ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
  525. ТЗХодов.Новаяколонка("Оценка","Число",14,6);
  526. // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
  527. Если ПозицияВМассиве=0 Тогда
  528. ПозицияИзСтроки(Поле,стр);
  529. КонецЕсли;
  530. ОчередьХода=Поле[103];
  531. ПешкаНаПроходе=Поле[104];
  532. ПравоРокировкиБелых=Поле[101];
  533. ПравоРокировкиЧерных=Поле[102];
  534. Если ОчередьХода=1 Тогда
  535. ПравоРокировки=ПравоРокировкиБелых;
  536. Иначе
  537. ПравоРокировки=ПравоРокировкиЧерных;
  538. КонецЕсли;
  539. //сообщить(ПравоРокировки);
  540. //стр="";
  541. //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
  542. // Возврат ХешТаблица.ТЗХодов;
  543. //КонецЕсли;
  544. оценкаПоВозможностям=0;
  545. Если ОчередьХода=1 Тогда
  546. Для а=12 по 89 цикл
  547. ЧтоДвигаем=Поле[а];
  548. Если ЧтоДвигаем=0 Тогда
  549. продолжить;
  550. ИначеЕсли ЧтоДвигаем=1 Тогда
  551. Куда=А+10;
  552. что=Поле[Куда];
  553. Если (Что=0) Тогда
  554. Если а>71 Тогда
  555. Для в=2 по 5 цикл
  556. ЧтоДвигаем=7-в;
  557. ТЗХодов.НоваяСтрока();
  558. ТЗХодов.Откуда=а;
  559. ТЗХодов.Куда=Куда;
  560. ОткудаСтр=ТаблицаСоответствий[а];
  561. КудаСтр=ТаблицаСоответствий[Куда];
  562. если КудаСтр>ОткудаСтр тогда
  563. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  564. иначе
  565. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  566. конецесли;
  567. ТЗХодов.Превращение=ЧтоДвигаем;
  568. Конеццикла;
  569. Иначе
  570. ТЗХодов.НоваяСтрока();
  571. ТЗХодов.Откуда=а;
  572. ТЗХодов.Куда=Куда;
  573. ОткудаСтр=ТаблицаСоответствий[а];
  574. КудаСтр=ТаблицаСоответствий[Куда];
  575. если КудаСтр>ОткудаСтр тогда
  576. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  577. иначе
  578. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  579. конецесли;
  580. КонецЕсли;
  581. Если а<31 Тогда
  582. Куда=А+20;
  583. что=Поле[Куда];
  584. Если (Что=0) Тогда
  585. ТЗХодов.НоваяСтрока();
  586. ТЗХодов.Откуда=а;
  587. ТЗХодов.Куда=Куда;
  588. ОткудаСтр=ТаблицаСоответствий[а];
  589. КудаСтр=ТаблицаСоответствий[Куда];
  590. Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
  591. проход=симв(33+Куда-10);
  592. Иначе
  593. проход=симв(33);
  594. КонецЕсли;
  595. если КудаСтр>ОткудаСтр тогда
  596. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  597. иначе
  598. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  599. конецесли;
  600. КонецЕсли;
  601. КонецЕсли;
  602. КонецЕсли;
  603. Куда=а+11;
  604. что=Поле[Куда];
  605. Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  606. ОткудаСтр=ТаблицаСоответствий[а];
  607. КудаСтр=ТаблицаСоответствий[Куда];
  608. Если а>71 Тогда
  609. Для в=2 по 5 цикл
  610. ТЗХодов.НоваяСтрока();
  611. ТЗХодов.Откуда=а;
  612. ТЗХодов.Куда=Куда;
  613. ЧтоДвигаем=7-в;
  614. если КудаСтр>ОткудаСтр тогда
  615. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  616. иначе
  617. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  618. конецесли;
  619. ТЗХодов.Превращение=ЧтоДвигаем;
  620. ТЗХодов.ВзятаяФигура=Куда;
  621. КонецЦикла;
  622. Иначе
  623. ТЗХодов.НоваяСтрока();
  624. ТЗХодов.Откуда=а;
  625. ТЗХодов.Куда=Куда;
  626. ТЗХодов.ВзятаяФигура=Куда;
  627. если КудаСтр>ОткудаСтр тогда
  628. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  629. иначе
  630. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  631. конецесли;
  632. Если ПешкаНаПроходе=Куда Тогда
  633. Кудастр=ТаблицаСоответствий[Куда-10];
  634. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  635. ТЗХодов.ВзятаяФигура=Куда-10;
  636. КонецЕсли;
  637. КонецЕсли;
  638. КонецЕсли;
  639. Куда=а+9;
  640. что=Поле[Куда];
  641. Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  642. ОткудаСтр=ТаблицаСоответствий[а];
  643. КудаСтр=ТаблицаСоответствий[Куда];
  644. Если а>71 Тогда
  645. Для в=2 по 5 цикл
  646. ТЗХодов.НоваяСтрока();
  647. ТЗХодов.Откуда=а;
  648. ТЗХодов.Куда=Куда;
  649. ЧтоДвигаем=7-в;
  650. если КудаСтр>ОткудаСтр тогда
  651. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  652. иначе
  653. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  654. конецесли;
  655. ТЗХодов.Превращение=ЧтоДвигаем;
  656. ТЗХодов.ВзятаяФигура=Куда;
  657. КонецЦикла;
  658. Иначе
  659. ТЗХодов.НоваяСтрока();
  660. ТЗХодов.Откуда=а;
  661. ТЗХодов.Куда=Куда;
  662. ТЗХодов.ВзятаяФигура=Куда;
  663. если КудаСтр>ОткудаСтр тогда
  664. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  665. иначе
  666. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  667. конецесли;
  668. Если ПешкаНаПроходе=Куда Тогда
  669. Кудастр=ТаблицаСоответствий[Куда-10];
  670. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  671. ТЗХодов.ВзятаяФигура=Куда-10;
  672. КонецЕсли;
  673. КонецЕсли;
  674. КонецЕсли;
  675. ИначеЕсли ЧтоДвигаем=2 Тогда
  676. Для в=1 по 8 цикл
  677. Куда=а+ХодыКоня[в];
  678. Если (Куда<=0) или (Куда>=100) Тогда
  679. продолжить;
  680. КонецЕсли;
  681. что=Поле[Куда];
  682. Если (Что<=0) Тогда
  683. ТЗХодов.НоваяСтрока();
  684. ТЗХодов.Откуда=а;
  685. ТЗХодов.Куда=Куда;
  686. Если что<>0 Тогда
  687. ТЗХодов.ВзятаяФигура=Куда;
  688. КонецЕсли;
  689. ОткудаСтр=ТаблицаСоответствий[а];
  690. КудаСтр=ТаблицаСоответствий[Куда];
  691. если КудаСтр>ОткудаСтр тогда
  692. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  693. иначе
  694. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  695. конецесли;
  696. Конецесли;
  697. КонецЦикла;
  698. ИначеЕсли ЧтоДвигаем=3 Тогда
  699. Для в=1 по 4 цикл
  700. Куда=а;
  701. Для с=1 по 10 цикл
  702. Куда=Куда+ХодыСлона[в];
  703. что=Поле[Куда];
  704. Если (Что<=0) Тогда
  705. ТЗХодов.НоваяСтрока();
  706. ТЗХодов.Откуда=а;
  707. ТЗХодов.Куда=Куда;
  708. ОткудаСтр=ТаблицаСоответствий[а];
  709. КудаСтр=ТаблицаСоответствий[Куда];
  710. если КудаСтр>ОткудаСтр тогда
  711. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  712. иначе
  713. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  714. конецесли;
  715. Если что<>0 Тогда
  716. ТЗХодов.ВзятаяФигура=Куда;
  717. прервать;
  718. КонецЕсли;
  719. Конецесли;
  720. Если Что<>0 Тогда
  721. прервать;
  722. КонецЕсли;
  723. КонецЦикла;
  724. Конеццикла;
  725. ИначеЕсли ЧтоДвигаем=4 Тогда
  726. Для в=1 по 4 цикл
  727. Куда=а;
  728. Для с=1 по 10 цикл
  729. Куда=Куда+ХодыЛадьи[в];
  730. что=Поле[Куда];
  731. Если (Что<=0) Тогда
  732. ТЗХодов.НоваяСтрока();
  733. ТЗХодов.Откуда=а;
  734. ТЗХодов.Куда=Куда;
  735. ОткудаСтр=ТаблицаСоответствий[а];
  736. КудаСтр=ТаблицаСоответствий[Куда];
  737. если КудаСтр>ОткудаСтр тогда
  738. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  739. иначе
  740. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  741. конецесли;
  742. Если (а=12)или(Куда=12) Тогда
  743. Если праворокировки=3 Тогда
  744. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
  745. ТзХодов.Оценка=-ПотеряРокировок;
  746. ИначеЕсли ПравоРокировки=2 Тогда
  747. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  748. ТзХодов.Оценка=-ПотеряРокировок;
  749. КонецЕсли;
  750. ИначеЕсли (а=19)или(Куда=19) Тогда
  751. Если праворокировки=3 Тогда
  752. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
  753. ТзХодов.Оценка=-ПотеряРокировок;
  754. ИначеЕсли ПравоРокировки=1 Тогда
  755. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  756. ТзХодов.Оценка=-ПотеряРокировок;
  757. КонецЕсли;
  758. КонецЕсли;
  759. Если что<>0 Тогда
  760. ТЗХодов.ВзятаяФигура=Куда;
  761. прервать;
  762. КонецЕсли;
  763. Конецесли;
  764. Если Что<>0 Тогда
  765. прервать;
  766. КонецЕсли;
  767. КонецЦикла;
  768. Конеццикла;
  769. ИначеЕсли ЧтоДвигаем=5 Тогда
  770. Для в=1 по 4 цикл
  771. Куда=а;
  772. Для с=1 по 10 цикл
  773. Куда=Куда+ХодыЛадьи[в];
  774. что=Поле[Куда];
  775. Если (Что<=0) Тогда
  776. ТЗХодов.НоваяСтрока();
  777. ТЗХодов.Откуда=а;
  778. ТЗХодов.Куда=Куда;
  779. ОткудаСтр=ТаблицаСоответствий[а];
  780. КудаСтр=ТаблицаСоответствий[Куда];
  781. если КудаСтр>ОткудаСтр тогда
  782. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  783. иначе
  784. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  785. конецесли;
  786. Если что<>0 Тогда
  787. ТЗХодов.ВзятаяФигура=Куда;
  788. прервать;
  789. КонецЕсли;
  790. Конецесли;
  791. Если Что<>0 Тогда
  792. прервать;
  793. КонецЕсли;
  794. КонецЦикла;
  795. Конеццикла;
  796. Для в=1 по 4 цикл
  797. Куда=а;
  798. Для с=1 по 10 цикл
  799. Куда=Куда+ХодыСлона[в];
  800. что=Поле[Куда];
  801. Если (Что<=0) Тогда
  802. ТЗХодов.НоваяСтрока();
  803. ТЗХодов.Откуда=а;
  804. ТЗХодов.Куда=Куда;
  805. ОткудаСтр=ТаблицаСоответствий[а];
  806. КудаСтр=ТаблицаСоответствий[Куда];
  807. если КудаСтр>ОткудаСтр тогда
  808. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  809. иначе
  810. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  811. конецесли;
  812. Если что<>0 Тогда
  813. ТЗХодов.ВзятаяФигура=Куда;
  814. прервать;
  815. КонецЕсли;
  816. Конецесли;
  817. Если Что<>0 Тогда
  818. прервать;
  819. КонецЕсли;
  820. КонецЦикла;
  821. Конеццикла;
  822. ИначеЕсли ЧтоДвигаем=6 Тогда
  823. Для в=1 по 4 цикл
  824. Куда=а+ХодыЛадьи[в];
  825. что=Поле[Куда];
  826. Если (Что<=0) Тогда
  827. ТЗХодов.НоваяСтрока();
  828. ТЗХодов.Откуда=а;
  829. ТЗХодов.Куда=Куда;
  830. ОткудаСтр=ТаблицаСоответствий[а];
  831. КудаСтр=ТаблицаСоответствий[Куда];
  832. если КудаСтр>ОткудаСтр тогда
  833. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  834. иначе
  835. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  836. конецесли;
  837. Если (а=16) Тогда
  838. Если праворокировки>0 Тогда
  839. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  840. ТзХодов.Оценка=-ПотеряРокировок;
  841. КонецЕсли;
  842. КонецЕсли;
  843. Если что<>0 Тогда
  844. ТЗХодов.ВзятаяФигура=Куда;
  845. КонецЕсли;
  846. Конецесли;
  847. КонецЦикла;
  848. Для в=1 по 4 цикл
  849. Куда=а+ХодыСлона[в];
  850. что=Поле[Куда];
  851. Если (Что<=0) Тогда
  852. ТЗХодов.НоваяСтрока();
  853. ТЗХодов.Откуда=а;
  854. ТЗХодов.Куда=Куда;
  855. ОткудаСтр=ТаблицаСоответствий[а];
  856. КудаСтр=ТаблицаСоответствий[Куда];
  857. если КудаСтр>ОткудаСтр тогда
  858. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  859. иначе
  860. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  861. конецесли;
  862. Если (а=16) Тогда
  863. Если праворокировки>0 Тогда
  864. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  865. ТзХодов.Оценка=-ПотеряРокировок;
  866. КонецЕсли;
  867. КонецЕсли;
  868. Если что<>0 Тогда
  869. ТЗХодов.ВзятаяФигура=Куда;
  870. КонецЕсли;
  871. Конецесли;
  872. Конеццикла;
  873. //Короткая Рокировка
  874. Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
  875. Если Поле[19]=4 Тогда
  876. Если (Поле[17]=0) и (Поле[18]=0) Тогда
  877. Если корольПодБоем(Поле,16,1)=1 Тогда
  878. продолжить;
  879. КонецЕсли;
  880. Если корольПодБоем(Поле,17,1)=0 Тогда
  881. ТЗХодов.НоваяСтрока();
  882. ТзХодов.Оценка=СделанаРокировка;
  883. ТЗХодов.Откуда=а;
  884. ТЗХодов.Куда=18;
  885. ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  886. КонецЕсли;
  887. КонецЕсли;
  888. КонецЕсли;
  889. КонецЕсли;
  890. //Длинная Рокировка
  891. Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
  892. Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
  893. Если Поле[12]=4 Тогда
  894. Если корольПодБоем(Поле,16,1)=1 Тогда
  895. продолжить;
  896. КонецЕсли;
  897. Если корольПодБоем(Поле,15,1)=0 Тогда
  898. ТЗХодов.НоваяСтрока();
  899. ТзХодов.Оценка=СделанаРокировка;
  900. ТЗХодов.Откуда=а;
  901. ТЗХодов.Куда=14;
  902. ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  903. КонецЕсли;
  904. КонецЕсли;
  905. КонецЕсли;
  906. КонецЕсли;
  907. КонецЕсли;
  908. КонецЦикла;
  909. Иначе
  910. Для а=12 по 89 цикл
  911. ЧтоДвигаем=Поле[а];
  912. Если ЧтоДвигаем=0 Тогда
  913. продолжить;
  914. ИначеЕсли ЧтоДвигаем=-1 Тогда
  915. Куда=А-10;
  916. что=Поле[Куда];
  917. Если (Что=0) Тогда
  918. Если а<30 Тогда
  919. Для в=2 по 5 цикл
  920. ЧтоДвигаем=в-7;
  921. ТЗХодов.НоваяСтрока();
  922. ТЗХодов.Откуда=а;
  923. ТЗХодов.Куда=Куда;
  924. ОткудаСтр=ТаблицаСоответствий[а];
  925. КудаСтр=ТаблицаСоответствий[Куда];
  926. если КудаСтр>ОткудаСтр тогда
  927. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  928. иначе
  929. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  930. конецесли;
  931. ТЗХодов.Превращение=ЧтоДвигаем;
  932. Конеццикла;
  933. Иначе
  934. ТЗХодов.НоваяСтрока();
  935. ТЗХодов.Откуда=а;
  936. ТЗХодов.Куда=Куда;
  937. ОткудаСтр=ТаблицаСоответствий[а];
  938. КудаСтр=ТаблицаСоответствий[Куда];
  939. если КудаСтр>ОткудаСтр тогда
  940. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  941. иначе
  942. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  943. конецесли;
  944. КонецЕсли;
  945. Если а>69 Тогда
  946. Куда=А-20;
  947. что=Поле[Куда];
  948. Если (Что=0) Тогда
  949. ТЗХодов.НоваяСтрока();
  950. ТЗХодов.Откуда=а;
  951. ТЗХодов.Куда=Куда;
  952. ОткудаСтр=ТаблицаСоответствий[а];
  953. КудаСтр=ТаблицаСоответствий[Куда];
  954. Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
  955. проход=симв(33+Куда+10);
  956. Иначе
  957. проход=симв(33);
  958. КонецЕсли;
  959. если КудаСтр>ОткудаСтр тогда
  960. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  961. иначе
  962. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  963. конецесли;
  964. КонецЕсли;
  965. КонецЕсли;
  966. КонецЕсли;
  967. Куда=а-11;
  968. что=Поле[Куда];
  969. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  970. Если а<30 Тогда
  971. Для в=2 по 5 цикл
  972. ЧтоДвигаем=в-7;
  973. ТЗХодов.НоваяСтрока();
  974. ТЗХодов.Откуда=а;
  975. ТЗХодов.Куда=Куда;
  976. ОткудаСтр=ТаблицаСоответствий[а];
  977. КудаСтр=ТаблицаСоответствий[Куда];
  978. если КудаСтр>ОткудаСтр тогда
  979. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  980. иначе
  981. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  982. конецесли;
  983. ТЗХодов.Превращение=ЧтоДвигаем;
  984. ТЗХодов.ВзятаяФигура=Куда;
  985. Конеццикла;
  986. Иначе
  987. ТЗХодов.НоваяСтрока();
  988. ТЗХодов.Откуда=а;
  989. ТЗХодов.Куда=Куда;
  990. ТЗХодов.ВзятаяФигура=Куда;
  991. ОткудаСтр=ТаблицаСоответствий[а];
  992. КудаСтр=ТаблицаСоответствий[Куда];
  993. если КудаСтр>ОткудаСтр тогда
  994. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  995. иначе
  996. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  997. конецесли;
  998. Если ПешкаНаПроходе=Куда Тогда
  999. Кудастр=ТаблицаСоответствий[Куда+10];
  1000. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1001. ТЗХодов.ВзятаяФигура=Куда+10;
  1002. КонецЕсли;
  1003. КонецЕсли;
  1004. КонецЕсли;
  1005. Куда=а-9;
  1006. что=Поле[Куда];
  1007. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  1008. Если а<30 Тогда
  1009. Для в=2 по 5 цикл
  1010. ЧтоДвигаем=в-7;
  1011. ТЗХодов.НоваяСтрока();
  1012. ТЗХодов.Откуда=а;
  1013. ТЗХодов.Куда=Куда;
  1014. ТЗХодов.ВзятаяФигура=Куда;
  1015. ОткудаСтр=ТаблицаСоответствий[а];
  1016. КудаСтр=ТаблицаСоответствий[Куда];
  1017. если КудаСтр>ОткудаСтр тогда
  1018. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1019. иначе
  1020. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1021. конецесли;
  1022. ТЗХодов.Превращение=ЧтоДвигаем;
  1023. Конеццикла;
  1024. Иначе
  1025. ТЗХодов.НоваяСтрока();
  1026. ТЗХодов.Откуда=а;
  1027. ТЗХодов.Куда=Куда;
  1028. ТЗХодов.ВзятаяФигура=Куда;
  1029. ОткудаСтр=ТаблицаСоответствий[а];
  1030. КудаСтр=ТаблицаСоответствий[Куда];
  1031. если КудаСтр>ОткудаСтр тогда
  1032. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1033. иначе
  1034. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1035. конецесли;
  1036. Если ПешкаНаПроходе=Куда Тогда
  1037. Кудастр=ТаблицаСоответствий[Куда+10];
  1038. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1039. ТЗХодов.ВзятаяФигура=Куда+10;
  1040. КонецЕсли;
  1041. КонецЕсли;
  1042. КонецЕсли;
  1043. ИначеЕсли ЧтоДвигаем=-2 Тогда
  1044. Для в=1 по 8 цикл
  1045. Куда=а+ХодыКоня[в];
  1046. Если (Куда<=0) или (Куда>=100) Тогда
  1047. продолжить;
  1048. КонецЕсли;
  1049. что=Поле[Куда];
  1050. Если (Что>=0)и(Что<8) Тогда
  1051. ТЗХодов.НоваяСтрока();
  1052. ТЗХодов.Откуда=а;
  1053. ТЗХодов.Куда=Куда;
  1054. ОткудаСтр=ТаблицаСоответствий[а];
  1055. КудаСтр=ТаблицаСоответствий[Куда];
  1056. если КудаСтр>ОткудаСтр тогда
  1057. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1058. иначе
  1059. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1060. конецесли;
  1061. Если что<>0 Тогда
  1062. ТЗХодов.ВзятаяФигура=Куда;
  1063. КонецЕсли;
  1064. Конецесли;
  1065. КонецЦикла;
  1066. ИначеЕсли ЧтоДвигаем=-3 Тогда
  1067. Для в=1 по 4 цикл
  1068. Куда=а;
  1069. Для с=1 по 10 цикл
  1070. Куда=Куда+ХодыСлона[в];
  1071. что=Поле[Куда];
  1072. Если (Что>=0) и (Что<7) Тогда
  1073. ТЗХодов.НоваяСтрока();
  1074. ТЗХодов.Откуда=а;
  1075. ТЗХодов.Куда=Куда;
  1076. ОткудаСтр=ТаблицаСоответствий[а];
  1077. КудаСтр=ТаблицаСоответствий[Куда];
  1078. если КудаСтр>ОткудаСтр тогда
  1079. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1080. иначе
  1081. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1082. конецесли;
  1083. Если что<>0 Тогда
  1084. ТЗХодов.ВзятаяФигура=Куда;
  1085. прервать;
  1086. КонецЕсли;
  1087. Конецесли;
  1088. Если Что<>0 Тогда
  1089. прервать;
  1090. КонецЕсли;
  1091. КонецЦикла;
  1092. Конеццикла;
  1093. ИначеЕсли ЧтоДвигаем=-4 Тогда
  1094. Для в=1 по 4 цикл
  1095. Куда=а;
  1096. Для с=1 по 10 цикл
  1097. Куда=Куда+ХодыЛадьи[в];
  1098. что=Поле[Куда];
  1099. Если (Что>=0) и (Что<7) Тогда
  1100. ТЗХодов.НоваяСтрока();
  1101. ТЗХодов.Откуда=а;
  1102. ТЗХодов.Куда=Куда;
  1103. ОткудаСтр=ТаблицаСоответствий[а];
  1104. КудаСтр=ТаблицаСоответствий[Куда];
  1105. если КудаСтр>ОткудаСтр тогда
  1106. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1107. иначе
  1108. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1109. конецесли;
  1110. Если (а=82)или(Куда=82) Тогда
  1111. Если праворокировки=3 Тогда
  1112. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
  1113. ТзХодов.Оценка=ПотеряРокировок;
  1114. ИначеЕсли ПравоРокировки=2 Тогда
  1115. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  1116. ТзХодов.Оценка=ПотеряРокировок;
  1117. КонецЕсли;
  1118. ИначеЕсли (а=89)или(Куда=89) Тогда
  1119. Если праворокировки=3 Тогда
  1120. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
  1121. ТзХодов.Оценка=ПотеряРокировок;
  1122. ИначеЕсли ПравоРокировки=1 Тогда
  1123. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  1124. ТзХодов.Оценка=ПотеряРокировок;
  1125. КонецЕсли;
  1126. КонецЕсли;
  1127. Если что<>0 Тогда
  1128. ТЗХодов.ВзятаяФигура=Куда;
  1129. прервать;
  1130. КонецЕсли;
  1131. Конецесли;
  1132. Если Что<>0 Тогда
  1133. прервать;
  1134. КонецЕсли;
  1135. КонецЦикла;
  1136. Конеццикла;
  1137. ИначеЕсли ЧтоДвигаем=-5 Тогда
  1138. Для в=1 по 4 цикл
  1139. Куда=а;
  1140. Для с=1 по 10 цикл
  1141. Куда=Куда+ХодыЛадьи[в];
  1142. что=Поле[Куда];
  1143. Если (Что>=0) и (Что<7) Тогда
  1144. ТЗХодов.НоваяСтрока();
  1145. ТЗХодов.Откуда=а;
  1146. ТЗХодов.Куда=Куда;
  1147. ОткудаСтр=ТаблицаСоответствий[а];
  1148. КудаСтр=ТаблицаСоответствий[Куда];
  1149. если КудаСтр>ОткудаСтр тогда
  1150. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1151. иначе
  1152. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1153. конецесли;
  1154. Если что<>0 Тогда
  1155. ТЗХодов.ВзятаяФигура=Куда;
  1156. прервать;
  1157. КонецЕсли;
  1158. Конецесли;
  1159. Если Что<>0 Тогда
  1160. прервать;
  1161. КонецЕсли;
  1162. КонецЦикла;
  1163. Конеццикла;
  1164. Для в=1 по 4 цикл
  1165. Куда=а;
  1166. Для с=1 по 10 цикл
  1167. Куда=Куда+ХодыСлона[в];
  1168. что=Поле[Куда];
  1169. Если (Что>=0) и (Что<7) Тогда
  1170. ТЗХодов.НоваяСтрока();
  1171. ТЗХодов.Откуда=а;
  1172. ТЗХодов.Куда=Куда;
  1173. ОткудаСтр=ТаблицаСоответствий[а];
  1174. КудаСтр=ТаблицаСоответствий[Куда];
  1175. если КудаСтр>ОткудаСтр тогда
  1176. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1177. иначе
  1178. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1179. конецесли;
  1180. Если что<>0 Тогда
  1181. ТЗХодов.ВзятаяФигура=Куда;
  1182. прервать;
  1183. КонецЕсли;
  1184. Конецесли;
  1185. Если Что<>0 Тогда
  1186. прервать;
  1187. КонецЕсли;
  1188. КонецЦикла;
  1189. Конеццикла;
  1190. ИначеЕсли ЧтоДвигаем=-6 Тогда
  1191. Для в=1 по 4 цикл
  1192. Куда=а+ХодыЛадьи[в];
  1193. что=Поле[Куда];
  1194. Если (Что>=0) и (Что<7) Тогда
  1195. ТЗХодов.НоваяСтрока();
  1196. ТЗХодов.Откуда=а;
  1197. ТЗХодов.Куда=Куда;
  1198. ОткудаСтр=ТаблицаСоответствий[а];
  1199. КудаСтр=ТаблицаСоответствий[Куда];
  1200. если КудаСтр>ОткудаСтр тогда
  1201. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1202. иначе
  1203. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1204. конецесли;
  1205. Если (а=86) Тогда
  1206. Если праворокировки>0 Тогда
  1207. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  1208. ТзХодов.Оценка=ПотеряРокировок;
  1209. КонецЕсли;
  1210. КонецЕсли;
  1211. Если что<>0 Тогда
  1212. ТЗХодов.ВзятаяФигура=Куда;
  1213. КонецЕсли;
  1214. Конецесли;
  1215. Конеццикла;
  1216. Для в=1 по 4 цикл
  1217. Куда=а+ХодыСлона[в];
  1218. что=Поле[Куда];
  1219. Если (Что>=0) и (Что<7) Тогда
  1220. ТЗХодов.НоваяСтрока();
  1221. ТЗХодов.Откуда=а;
  1222. ТЗХодов.Куда=Куда;
  1223. ОткудаСтр=ТаблицаСоответствий[а];
  1224. КудаСтр=ТаблицаСоответствий[Куда];
  1225. если КудаСтр>ОткудаСтр тогда
  1226. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1227. иначе
  1228. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1229. конецесли;
  1230. Если (а=86) Тогда
  1231. Если праворокировки>0 Тогда
  1232. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  1233. ТзХодов.Оценка=ПотеряРокировок;
  1234. КонецЕсли;
  1235. КонецЕсли;
  1236. Если что<>0 Тогда
  1237. ТЗХодов.ВзятаяФигура=Куда;
  1238. КонецЕсли;
  1239. Конецесли;
  1240. Конеццикла;
  1241. //Короткая Рокировка
  1242. Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
  1243. Если Поле[89]=-4 Тогда
  1244. Если (Поле[87]=0) и (Поле[88]=0) Тогда
  1245. Если корольПодБоем(Поле,86,2)=1 Тогда
  1246. продолжить;
  1247. КонецЕсли;
  1248. Если корольПодБоем(Поле,87,2)=0 Тогда
  1249. ТЗХодов.НоваяСтрока();
  1250. ТзХодов.Оценка=-СделанаРокировка;
  1251. ТЗХодов.Откуда=а;
  1252. ТЗХодов.Куда=88;
  1253. ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
  1254. КонецЕсли;
  1255. КонецЕсли;
  1256. КонецЕсли;
  1257. КонецЕсли;
  1258. //Длинная Рокировка
  1259. Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
  1260. Если Поле[82]=-4 Тогда
  1261. Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
  1262. Если корольПодБоем(Поле,86,2)=1 Тогда
  1263. продолжить;
  1264. КонецЕсли;
  1265. Если корольПодБоем(Поле,85,2)=0 Тогда
  1266. ТЗХодов.НоваяСтрока();
  1267. ТзХодов.Оценка=-СделанаРокировка;
  1268. ТЗХодов.Откуда=а;
  1269. ТЗХодов.Куда=84;
  1270. ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
  1271. КонецЕсли;
  1272. КонецЕсли;
  1273. КонецЕсли;
  1274. КонецЕсли;
  1275. КонецЕсли;
  1276. КонецЦикла;
  1277. КонецЕсли;
  1278. ТЗХодов.ВыбратьСтроки();
  1279. Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  1280. ЧтоХодит=Поле[ТЗХодов.Откуда];
  1281. съели=0;
  1282. Если ТЗХодов.ВзятаяФигура<>0 Тогда
  1283. ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
  1284. Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
  1285. Если ОчередьХода=1 Тогда
  1286. Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
  1287. Иначе
  1288. Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
  1289. КонецЕсли;
  1290. КонецЕсли;
  1291. Если ТЗХодов.Превращение<>0 Тогда
  1292. Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
  1293. КонецЕсли;
  1294. Если ОчередьХода=1 Тогда
  1295. Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
  1296. Иначе
  1297. Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
  1298. КонецЕсли;
  1299. ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
  1300. КонецЦикла;
  1301. //ТЗХодов.выбратьСтроки();
  1302. //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  1303. // Если ТЗХодов.Куда=ПослФиг Тогда
  1304. // ТЗХодов.ПослФиг=1;
  1305. // КонецЕсли;
  1306. //КонецЦикла;
  1307. //Если ОчередьХода=1 Тогда
  1308. // ТЗХодов.сортировать("ПослФиг-,Оценка-");
  1309. //Иначе
  1310. // ТЗХодов.сортировать("ПослФиг-,Оценка+");
  1311. //КонецЕсли;
  1312. Если ОчередьХода=1 Тогда
  1313. ТЗХодов.сортировать("Оценка-");
  1314. Иначе
  1315. ТЗХодов.сортировать("Оценка+");
  1316. КонецЕсли;
  1317. КонецФункции
  1318. Функция ГенераторПравильныхХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
  1319. перем а;
  1320. перем в;
  1321. перем с;
  1322. перем Куда;
  1323. перем что;
  1324. перем чтоДвигаем;
  1325. перем ОценкаПоВозможностям;
  1326. перем стр1;
  1327. перем очередьХода;
  1328. перем ПешкаНаПроходе;
  1329. ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
  1330. ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
  1331. ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
  1332. ТЗХодов.НоваяКолонка("Куда","Число",3,0);
  1333. ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
  1334. ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
  1335. ТЗХодов.Новаяколонка("Оценка","Число",14,6);
  1336. // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
  1337. Если ПозицияВМассиве=0 Тогда
  1338. ПозицияИзСтроки(Поле,стр);
  1339. КонецЕсли;
  1340. ОчередьХода=Поле[103];
  1341. ПешкаНаПроходе=Поле[104];
  1342. ПравоРокировкиБелых=Поле[101];
  1343. ПравоРокировкиЧерных=Поле[102];
  1344. КорольБелыхГПХ=ТаблицаСоответствий1[найти(стр,симв(54))];
  1345. КорольЧерныхГПХ=ТаблицаСоответствий1[найти(стр,симв(42))];
  1346. Если ОчередьХода=1 Тогда
  1347. ПравоРокировки=ПравоРокировкиБелых;
  1348. Иначе
  1349. ПравоРокировки=ПравоРокировкиЧерных;
  1350. КонецЕсли;
  1351. //сообщить(ПравоРокировки);
  1352. //стр="";
  1353. //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
  1354. // Возврат ХешТаблица.ТЗХодов;
  1355. //КонецЕсли;
  1356. оценкаПоВозможностям=0;
  1357. Если ОчередьХода=1 Тогда
  1358. Если корольподбоем(Поле,КорольЧерныхГПХ,2)>0 Тогда
  1359. ТЗХодов.НоваяСтрока();
  1360. ТЗХодов.Оценка=5000;
  1361. возврат 0;
  1362. КонецЕсли;
  1363. Для а=12 по 89 цикл
  1364. ЧтоДвигаем=Поле[а];
  1365. Если ЧтоДвигаем=0 Тогда
  1366. продолжить;
  1367. ИначеЕсли ЧтоДвигаем=1 Тогда
  1368. Куда=А+10;
  1369. что=Поле[Куда];
  1370. Если (Что=0) Тогда
  1371. Поле[а]=0;
  1372. Поле[Куда]=1;
  1373. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1374. Если а>71 Тогда
  1375. Для в=2 по 5 цикл
  1376. ЧтоДвигаем=7-в;
  1377. ТЗХодов.НоваяСтрока();
  1378. ТЗХодов.Откуда=а;
  1379. ТЗХодов.Куда=Куда;
  1380. ОткудаСтр=ТаблицаСоответствий[а];
  1381. КудаСтр=ТаблицаСоответствий[Куда];
  1382. если КудаСтр>ОткудаСтр тогда
  1383. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1384. иначе
  1385. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1386. конецесли;
  1387. ТЗХодов.Превращение=ЧтоДвигаем;
  1388. Конеццикла;
  1389. Иначе
  1390. ТЗХодов.НоваяСтрока();
  1391. ТЗХодов.Откуда=а;
  1392. ТЗХодов.Куда=Куда;
  1393. ОткудаСтр=ТаблицаСоответствий[а];
  1394. КудаСтр=ТаблицаСоответствий[Куда];
  1395. если КудаСтр>ОткудаСтр тогда
  1396. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1397. иначе
  1398. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1399. конецесли;
  1400. КонецЕсли;
  1401. КонецЕсли;
  1402. Поле[а]=1;
  1403. Поле[Куда]=0;
  1404. Если а<31 Тогда
  1405. Куда=А+20;
  1406. что=Поле[Куда];
  1407. Если (Что=0) Тогда
  1408. Поле[а]=0;
  1409. Поле[Куда]=1;
  1410. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1411. ТЗХодов.НоваяСтрока();
  1412. ТЗХодов.Откуда=а;
  1413. ТЗХодов.Куда=Куда;
  1414. ОткудаСтр=ТаблицаСоответствий[а];
  1415. КудаСтр=ТаблицаСоответствий[Куда];
  1416. Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
  1417. проход=симв(33+Куда-10);
  1418. Иначе
  1419. проход=симв(33);
  1420. КонецЕсли;
  1421. если КудаСтр>ОткудаСтр тогда
  1422. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  1423. иначе
  1424. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  1425. конецесли;
  1426. КонецЕсли;
  1427. Поле[а]=1;
  1428. Поле[Куда]=0;
  1429. КонецЕсли;
  1430. КонецЕсли;
  1431. КонецЕсли;
  1432. Куда=а+11;
  1433. что=Поле[Куда];
  1434. Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  1435. Поле[а]=0;
  1436. Поле[Куда]=1;
  1437. Если пешкаНаПроходе=Куда Тогда
  1438. Поле[Куда-10]=0;
  1439. КонецЕсли;
  1440. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1441. ОткудаСтр=ТаблицаСоответствий[а];
  1442. КудаСтр=ТаблицаСоответствий[Куда];
  1443. Если а>71 Тогда
  1444. Для в=2 по 5 цикл
  1445. ТЗХодов.НоваяСтрока();
  1446. ТЗХодов.Откуда=а;
  1447. ТЗХодов.Куда=Куда;
  1448. ЧтоДвигаем=7-в;
  1449. если КудаСтр>ОткудаСтр тогда
  1450. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1451. иначе
  1452. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1453. конецесли;
  1454. ТЗХодов.Превращение=ЧтоДвигаем;
  1455. ТЗХодов.ВзятаяФигура=Куда;
  1456. КонецЦикла;
  1457. Иначе
  1458. ТЗХодов.НоваяСтрока();
  1459. ТЗХодов.Откуда=а;
  1460. ТЗХодов.Куда=Куда;
  1461. ТЗХодов.ВзятаяФигура=Куда;
  1462. если КудаСтр>ОткудаСтр тогда
  1463. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1464. иначе
  1465. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1466. конецесли;
  1467. Если ПешкаНаПроходе=Куда Тогда
  1468. Кудастр=ТаблицаСоответствий[Куда-10];
  1469. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1470. ТЗХодов.ВзятаяФигура=Куда-10;
  1471. КонецЕсли;
  1472. КонецЕсли;
  1473. КонецЕсли;
  1474. Поле[а]=1;
  1475. Поле[Куда]=Что;
  1476. Если пешкаНаПроходе=Куда Тогда
  1477. Поле[Куда-10]=-1;
  1478. КонецЕсли;
  1479. КонецЕсли;
  1480. Куда=а+9;
  1481. что=Поле[Куда];
  1482. Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  1483. Поле[а]=0;
  1484. Поле[Куда]=1;
  1485. Если пешкаНаПроходе=Куда Тогда
  1486. Поле[Куда-10]=0;
  1487. КонецЕсли;
  1488. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1489. ОткудаСтр=ТаблицаСоответствий[а];
  1490. КудаСтр=ТаблицаСоответствий[Куда];
  1491. Если а>71 Тогда
  1492. Для в=2 по 5 цикл
  1493. ТЗХодов.НоваяСтрока();
  1494. ТЗХодов.Откуда=а;
  1495. ТЗХодов.Куда=Куда;
  1496. ЧтоДвигаем=7-в;
  1497. если КудаСтр>ОткудаСтр тогда
  1498. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1499. иначе
  1500. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1501. конецесли;
  1502. ТЗХодов.Превращение=ЧтоДвигаем;
  1503. ТЗХодов.ВзятаяФигура=Куда;
  1504. КонецЦикла;
  1505. Иначе
  1506. ТЗХодов.НоваяСтрока();
  1507. ТЗХодов.Откуда=а;
  1508. ТЗХодов.Куда=Куда;
  1509. ТЗХодов.ВзятаяФигура=Куда;
  1510. если КудаСтр>ОткудаСтр тогда
  1511. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1512. иначе
  1513. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1514. конецесли;
  1515. Если ПешкаНаПроходе=Куда Тогда
  1516. Кудастр=ТаблицаСоответствий[Куда-10];
  1517. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1518. ТЗХодов.ВзятаяФигура=Куда-10;
  1519. КонецЕсли;
  1520. КонецЕсли;
  1521. КонецЕсли;
  1522. Поле[а]=1;
  1523. Поле[Куда]=Что;
  1524. Если пешкаНаПроходе=Куда Тогда
  1525. Поле[Куда-10]=-1;
  1526. КонецЕсли;
  1527. КонецЕсли;
  1528. ИначеЕсли ЧтоДвигаем=2 Тогда
  1529. Для в=1 по 8 цикл
  1530. Куда=а+ХодыКоня[в];
  1531. Если (Куда<=0) или (Куда>=100) Тогда
  1532. продолжить;
  1533. КонецЕсли;
  1534. что=Поле[Куда];
  1535. Если (Что<=0) Тогда
  1536. Поле[а]=0;
  1537. Поле[Куда]=2;
  1538. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1539. ТЗХодов.НоваяСтрока();
  1540. ТЗХодов.Откуда=а;
  1541. ТЗХодов.Куда=Куда;
  1542. Если что<>0 Тогда
  1543. ТЗХодов.ВзятаяФигура=Куда;
  1544. КонецЕсли;
  1545. ОткудаСтр=ТаблицаСоответствий[а];
  1546. КудаСтр=ТаблицаСоответствий[Куда];
  1547. если КудаСтр>ОткудаСтр тогда
  1548. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1549. иначе
  1550. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1551. конецесли;
  1552. КонецЕсли;
  1553. Поле[а]=2;
  1554. Поле[Куда]=Что;
  1555. Конецесли;
  1556. КонецЦикла;
  1557. ИначеЕсли ЧтоДвигаем=3 Тогда
  1558. Для в=1 по 4 цикл
  1559. Куда=а;
  1560. Для с=1 по 10 цикл
  1561. Куда=Куда+ХодыСлона[в];
  1562. что=Поле[Куда];
  1563. Если (Что<=0) Тогда
  1564. Поле[а]=0;
  1565. Поле[Куда]=3;
  1566. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1567. ТЗХодов.НоваяСтрока();
  1568. ТЗХодов.Откуда=а;
  1569. ТЗХодов.Куда=Куда;
  1570. ОткудаСтр=ТаблицаСоответствий[а];
  1571. КудаСтр=ТаблицаСоответствий[Куда];
  1572. если КудаСтр>ОткудаСтр тогда
  1573. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1574. иначе
  1575. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1576. конецесли;
  1577. Если что<>0 Тогда
  1578. ТЗХодов.ВзятаяФигура=Куда;
  1579. Поле[а]=3;
  1580. Поле[Куда]=Что;
  1581. прервать;
  1582. КонецЕсли;
  1583. КонецЕсли;
  1584. Поле[а]=3;
  1585. Поле[Куда]=Что;
  1586. Конецесли;
  1587. Если Что<>0 Тогда
  1588. прервать;
  1589. КонецЕсли;
  1590. КонецЦикла;
  1591. Конеццикла;
  1592. ИначеЕсли ЧтоДвигаем=4 Тогда
  1593. Для в=1 по 4 цикл
  1594. Куда=а;
  1595. Для с=1 по 10 цикл
  1596. Куда=Куда+ХодыЛадьи[в];
  1597. что=Поле[Куда];
  1598. Если (Что<=0) Тогда
  1599. Поле[а]=0;
  1600. Поле[Куда]=4;
  1601. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1602. ТЗХодов.НоваяСтрока();
  1603. ТЗХодов.Откуда=а;
  1604. ТЗХодов.Куда=Куда;
  1605. ОткудаСтр=ТаблицаСоответствий[а];
  1606. КудаСтр=ТаблицаСоответствий[Куда];
  1607. если КудаСтр>ОткудаСтр тогда
  1608. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1609. иначе
  1610. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1611. конецесли;
  1612. Если (а=12)или(Куда=12) Тогда
  1613. Если праворокировки=3 Тогда
  1614. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
  1615. ТзХодов.Оценка=-ПотеряРокировок;
  1616. ИначеЕсли ПравоРокировки=2 Тогда
  1617. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  1618. ТзХодов.Оценка=-ПотеряРокировок;
  1619. КонецЕсли;
  1620. ИначеЕсли (а=19)или(Куда=19) Тогда
  1621. Если праворокировки=3 Тогда
  1622. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
  1623. ТзХодов.Оценка=-ПотеряРокировок;
  1624. ИначеЕсли ПравоРокировки=1 Тогда
  1625. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  1626. ТзХодов.Оценка=-ПотеряРокировок;
  1627. КонецЕсли;
  1628. КонецЕсли;
  1629. Если что<>0 Тогда
  1630. ТЗХодов.ВзятаяФигура=Куда;
  1631. Поле[а]=4;
  1632. Поле[Куда]=Что;
  1633. прервать;
  1634. КонецЕсли;
  1635. КонецЕсли;
  1636. Поле[а]=4;
  1637. Поле[Куда]=Что;
  1638. Конецесли;
  1639. Если Что<>0 Тогда
  1640. прервать;
  1641. КонецЕсли;
  1642. КонецЦикла;
  1643. Конеццикла;
  1644. ИначеЕсли ЧтоДвигаем=5 Тогда
  1645. Для в=1 по 4 цикл
  1646. Куда=а;
  1647. Для с=1 по 10 цикл
  1648. Куда=Куда+ХодыЛадьи[в];
  1649. что=Поле[Куда];
  1650. Если (Что<=0) Тогда
  1651. Поле[а]=0;
  1652. Поле[Куда]=5;
  1653. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1654. ТЗХодов.НоваяСтрока();
  1655. ТЗХодов.Откуда=а;
  1656. ТЗХодов.Куда=Куда;
  1657. ОткудаСтр=ТаблицаСоответствий[а];
  1658. КудаСтр=ТаблицаСоответствий[Куда];
  1659. если КудаСтр>ОткудаСтр тогда
  1660. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1661. иначе
  1662. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1663. конецесли;
  1664. Если что<>0 Тогда
  1665. ТЗХодов.ВзятаяФигура=Куда;
  1666. Поле[а]=5;
  1667. Поле[Куда]=Что;
  1668. прервать;
  1669. КонецЕсли;
  1670. КонецЕсли;
  1671. Поле[а]=5;
  1672. Поле[Куда]=Что;
  1673. Конецесли;
  1674. Если Что<>0 Тогда
  1675. прервать;
  1676. КонецЕсли;
  1677. КонецЦикла;
  1678. Конеццикла;
  1679. Для в=1 по 4 цикл
  1680. Куда=а;
  1681. Для с=1 по 10 цикл
  1682. Куда=Куда+ХодыСлона[в];
  1683. что=Поле[Куда];
  1684. Если (Что<=0) Тогда
  1685. Поле[а]=0;
  1686. Поле[Куда]=5;
  1687. Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
  1688. ТЗХодов.НоваяСтрока();
  1689. ТЗХодов.Откуда=а;
  1690. ТЗХодов.Куда=Куда;
  1691. ОткудаСтр=ТаблицаСоответствий[а];
  1692. КудаСтр=ТаблицаСоответствий[Куда];
  1693. если КудаСтр>ОткудаСтр тогда
  1694. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1695. иначе
  1696. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1697. конецесли;
  1698. Если что<>0 Тогда
  1699. ТЗХодов.ВзятаяФигура=Куда;
  1700. Поле[а]=5;
  1701. Поле[Куда]=Что;
  1702. прервать;
  1703. КонецЕсли;
  1704. КонецЕсли;
  1705. Поле[а]=5;
  1706. Поле[Куда]=Что;
  1707. Конецесли;
  1708. Если Что<>0 Тогда
  1709. прервать;
  1710. КонецЕсли;
  1711. КонецЦикла;
  1712. Конеццикла;
  1713. ИначеЕсли ЧтоДвигаем=6 Тогда
  1714. Для в=1 по 4 цикл
  1715. Куда=а+ХодыЛадьи[в];
  1716. что=Поле[Куда];
  1717. Если (Что<=0) Тогда
  1718. Поле[а]=0;
  1719. Если корольПодБоем(Поле,Куда,1)=1 Тогда
  1720. Поле[а]=6;
  1721. продолжить;
  1722. КонецЕсли;
  1723. Поле[а]=6;
  1724. ТЗХодов.НоваяСтрока();
  1725. ТЗХодов.Откуда=а;
  1726. ТЗХодов.Куда=Куда;
  1727. ОткудаСтр=ТаблицаСоответствий[а];
  1728. КудаСтр=ТаблицаСоответствий[Куда];
  1729. если КудаСтр>ОткудаСтр тогда
  1730. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1731. иначе
  1732. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1733. конецесли;
  1734. Если (а=16) Тогда
  1735. Если праворокировки>0 Тогда
  1736. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  1737. ТзХодов.Оценка=-ПотеряРокировок;
  1738. КонецЕсли;
  1739. КонецЕсли;
  1740. Если что<>0 Тогда
  1741. ТЗХодов.ВзятаяФигура=Куда;
  1742. КонецЕсли;
  1743. Конецесли;
  1744. КонецЦикла;
  1745. Для в=1 по 4 цикл
  1746. Куда=а+ХодыСлона[в];
  1747. что=Поле[Куда];
  1748. Если (Что<=0) Тогда
  1749. Поле[а]=0;
  1750. Если корольПодБоем(Поле,Куда,1)=1 Тогда
  1751. Поле[а]=6;
  1752. продолжить;
  1753. КонецЕсли;
  1754. Поле[а]=6;
  1755. ТЗХодов.НоваяСтрока();
  1756. ТЗХодов.Откуда=а;
  1757. ТЗХодов.Куда=Куда;
  1758. ОткудаСтр=ТаблицаСоответствий[а];
  1759. КудаСтр=ТаблицаСоответствий[Куда];
  1760. если КудаСтр>ОткудаСтр тогда
  1761. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1762. иначе
  1763. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1764. конецесли;
  1765. Если (а=16) Тогда
  1766. Если праворокировки>0 Тогда
  1767. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  1768. ТзХодов.Оценка=-ПотеряРокировок;
  1769. КонецЕсли;
  1770. КонецЕсли;
  1771. Если что<>0 Тогда
  1772. ТЗХодов.ВзятаяФигура=Куда;
  1773. КонецЕсли;
  1774. Конецесли;
  1775. Конеццикла;
  1776. ////Короткая Рокировка
  1777. //Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
  1778. // Если Поле[19]=4 Тогда
  1779. // Если (Поле[17]=0) и (Поле[18]=0) Тогда
  1780. // Если корольПодБоем(Поле,16,1)=1 Тогда
  1781. // продолжить;
  1782. // КонецЕсли;
  1783. // Если корольПодБоем(Поле,17,1)=0 Тогда
  1784. // ТЗХодов.НоваяСтрока();
  1785. // ТзХодов.Оценка=СделанаРокировка;
  1786. // ТЗХодов.Откуда=а;
  1787. // ТЗХодов.Куда=18;
  1788. // ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  1789. // КонецЕсли;
  1790. // КонецЕсли;
  1791. // КонецЕсли;
  1792. //КонецЕсли;
  1793. ////Длинная Рокировка
  1794. //Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
  1795. // Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
  1796. // Если Поле[12]=4 Тогда
  1797. // Если корольПодБоем(Поле,16,1)=1 Тогда
  1798. // продолжить;
  1799. // КонецЕсли;
  1800. // Если корольПодБоем(Поле,15,1)=0 Тогда
  1801. // ТЗХодов.НоваяСтрока();
  1802. // ТзХодов.Оценка=СделанаРокировка;
  1803. // ТЗХодов.Откуда=а;
  1804. // ТЗХодов.Куда=14;
  1805. // ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  1806. // КонецЕсли;
  1807. // КонецЕсли;
  1808. // КонецЕсли;
  1809. //КонецЕсли;
  1810. КонецЕсли;
  1811. КонецЦикла;
  1812. Иначе
  1813. Если корольподбоем(Поле,КорольБелыхГПХ,1)>0 Тогда
  1814. ТЗХодов.НоваяСтрока();
  1815. ТЗХодов.Оценка=-5000;
  1816. возврат 0;
  1817. КонецЕсли;
  1818. Для а=12 по 89 цикл
  1819. ЧтоДвигаем=Поле[а];
  1820. Если ЧтоДвигаем=0 Тогда
  1821. продолжить;
  1822. ИначеЕсли ЧтоДвигаем=-1 Тогда
  1823. Куда=А-10;
  1824. что=Поле[Куда];
  1825. Если (Что=0) Тогда
  1826. Поле[а]=0;
  1827. Поле[Куда]=-1;
  1828. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  1829. Если а<30 Тогда
  1830. Для в=2 по 5 цикл
  1831. ЧтоДвигаем=в-7;
  1832. ТЗХодов.НоваяСтрока();
  1833. ТЗХодов.Откуда=а;
  1834. ТЗХодов.Куда=Куда;
  1835. ОткудаСтр=ТаблицаСоответствий[а];
  1836. КудаСтр=ТаблицаСоответствий[Куда];
  1837. если КудаСтр>ОткудаСтр тогда
  1838. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1839. иначе
  1840. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1841. конецесли;
  1842. ТЗХодов.Превращение=ЧтоДвигаем;
  1843. Конеццикла;
  1844. Иначе
  1845. ТЗХодов.НоваяСтрока();
  1846. ТЗХодов.Откуда=а;
  1847. ТЗХодов.Куда=Куда;
  1848. ОткудаСтр=ТаблицаСоответствий[а];
  1849. КудаСтр=ТаблицаСоответствий[Куда];
  1850. если КудаСтр>ОткудаСтр тогда
  1851. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1852. иначе
  1853. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1854. конецесли;
  1855. КонецЕсли;
  1856. КонецЕсли;
  1857. Поле[а]=-1;
  1858. Поле[Куда]=0;
  1859. Если а>69 Тогда
  1860. Куда=А-20;
  1861. что=Поле[Куда];
  1862. Если (Что=0) Тогда
  1863. Поле[а]=0;
  1864. Поле[Куда]=-1;
  1865. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  1866. ТЗХодов.НоваяСтрока();
  1867. ТЗХодов.Откуда=а;
  1868. ТЗХодов.Куда=Куда;
  1869. ОткудаСтр=ТаблицаСоответствий[а];
  1870. КудаСтр=ТаблицаСоответствий[Куда];
  1871. Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
  1872. проход=симв(33+Куда+10);
  1873. Иначе
  1874. проход=симв(33);
  1875. КонецЕсли;
  1876. если КудаСтр>ОткудаСтр тогда
  1877. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  1878. иначе
  1879. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  1880. конецесли;
  1881. КонецЕсли;
  1882. Поле[а]=-1;
  1883. Поле[Куда]=0;
  1884. КонецЕсли;
  1885. КонецЕсли;
  1886. КонецЕсли;
  1887. Куда=а-11;
  1888. что=Поле[Куда];
  1889. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  1890. Поле[а]=0;
  1891. Поле[Куда]=-1;
  1892. Если пешкаНаПроходе=Куда Тогда
  1893. Поле[Куда+10]=0;
  1894. КонецЕсли;
  1895. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  1896. Если а<30 Тогда
  1897. Для в=2 по 5 цикл
  1898. ЧтоДвигаем=в-7;
  1899. ТЗХодов.НоваяСтрока();
  1900. ТЗХодов.Откуда=а;
  1901. ТЗХодов.Куда=Куда;
  1902. ОткудаСтр=ТаблицаСоответствий[а];
  1903. КудаСтр=ТаблицаСоответствий[Куда];
  1904. если КудаСтр>ОткудаСтр тогда
  1905. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1906. иначе
  1907. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1908. конецесли;
  1909. ТЗХодов.Превращение=ЧтоДвигаем;
  1910. ТЗХодов.ВзятаяФигура=Куда;
  1911. Конеццикла;
  1912. Иначе
  1913. ТЗХодов.НоваяСтрока();
  1914. ТЗХодов.Откуда=а;
  1915. ТЗХодов.Куда=Куда;
  1916. ТЗХодов.ВзятаяФигура=Куда;
  1917. ОткудаСтр=ТаблицаСоответствий[а];
  1918. КудаСтр=ТаблицаСоответствий[Куда];
  1919. если КудаСтр>ОткудаСтр тогда
  1920. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1921. иначе
  1922. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1923. конецесли;
  1924. Если ПешкаНаПроходе=Куда Тогда
  1925. Кудастр=ТаблицаСоответствий[Куда+10];
  1926. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1927. ТЗХодов.ВзятаяФигура=Куда+10;
  1928. КонецЕсли;
  1929. КонецЕсли;
  1930. КонецЕсли;
  1931. Поле[а]=-1;
  1932. Поле[Куда]=Что;
  1933. Если пешкаНаПроходе=Куда Тогда
  1934. Поле[Куда+10]=1;
  1935. КонецЕсли;
  1936. КонецЕсли;
  1937. Куда=а-9;
  1938. что=Поле[Куда];
  1939. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  1940. Поле[а]=0;
  1941. Поле[Куда]=-1;
  1942. Если пешкаНаПроходе=Куда Тогда
  1943. Поле[Куда+10]=0;
  1944. КонецЕсли;
  1945. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  1946. Если а<30 Тогда
  1947. Для в=2 по 5 цикл
  1948. ЧтоДвигаем=в-7;
  1949. ТЗХодов.НоваяСтрока();
  1950. ТЗХодов.Откуда=а;
  1951. ТЗХодов.Куда=Куда;
  1952. ТЗХодов.ВзятаяФигура=Куда;
  1953. ОткудаСтр=ТаблицаСоответствий[а];
  1954. КудаСтр=ТаблицаСоответствий[Куда];
  1955. если КудаСтр>ОткудаСтр тогда
  1956. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1957. иначе
  1958. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1959. конецесли;
  1960. ТЗХодов.Превращение=ЧтоДвигаем;
  1961. Конеццикла;
  1962. Иначе
  1963. ТЗХодов.НоваяСтрока();
  1964. ТЗХодов.Откуда=а;
  1965. ТЗХодов.Куда=Куда;
  1966. ТЗХодов.ВзятаяФигура=Куда;
  1967. ОткудаСтр=ТаблицаСоответствий[а];
  1968. КудаСтр=ТаблицаСоответствий[Куда];
  1969. если КудаСтр>ОткудаСтр тогда
  1970. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  1971. иначе
  1972. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  1973. конецесли;
  1974. Если ПешкаНаПроходе=Куда Тогда
  1975. Кудастр=ТаблицаСоответствий[Куда+10];
  1976. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  1977. ТЗХодов.ВзятаяФигура=Куда+10;
  1978. КонецЕсли;
  1979. КонецЕсли;
  1980. КонецЕсли;
  1981. Поле[а]=-1;
  1982. Поле[Куда]=Что;
  1983. Если пешкаНаПроходе=Куда Тогда
  1984. Поле[Куда+10]=1;
  1985. КонецЕсли;
  1986. КонецЕсли;
  1987. ИначеЕсли ЧтоДвигаем=-2 Тогда
  1988. Для в=1 по 8 цикл
  1989. Куда=а+ХодыКоня[в];
  1990. Если (Куда<=0) или (Куда>=100) Тогда
  1991. продолжить;
  1992. КонецЕсли;
  1993. что=Поле[Куда];
  1994. Если (Что>=0)и(Что<8) Тогда
  1995. Поле[а]=0;
  1996. Поле[Куда]=-2;
  1997. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  1998. ТЗХодов.НоваяСтрока();
  1999. ТЗХодов.Откуда=а;
  2000. ТЗХодов.Куда=Куда;
  2001. ОткудаСтр=ТаблицаСоответствий[а];
  2002. КудаСтр=ТаблицаСоответствий[Куда];
  2003. если КудаСтр>ОткудаСтр тогда
  2004. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2005. иначе
  2006. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2007. конецесли;
  2008. Если что<>0 Тогда
  2009. ТЗХодов.ВзятаяФигура=Куда;
  2010. КонецЕсли;
  2011. КонецЕсли;
  2012. Поле[а]=-2;
  2013. Поле[Куда]=Что;
  2014. Конецесли;
  2015. КонецЦикла;
  2016. ИначеЕсли ЧтоДвигаем=-3 Тогда
  2017. Для в=1 по 4 цикл
  2018. Куда=а;
  2019. Для с=1 по 10 цикл
  2020. Куда=Куда+ХодыСлона[в];
  2021. что=Поле[Куда];
  2022. Если (Что>=0) и (Что<7) Тогда
  2023. Поле[а]=0;
  2024. Поле[Куда]=-3;
  2025. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  2026. ТЗХодов.НоваяСтрока();
  2027. ТЗХодов.Откуда=а;
  2028. ТЗХодов.Куда=Куда;
  2029. ОткудаСтр=ТаблицаСоответствий[а];
  2030. КудаСтр=ТаблицаСоответствий[Куда];
  2031. если КудаСтр>ОткудаСтр тогда
  2032. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2033. иначе
  2034. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2035. конецесли;
  2036. Если что<>0 Тогда
  2037. ТЗХодов.ВзятаяФигура=Куда;
  2038. Поле[а]=-3;
  2039. Поле[Куда]=Что;
  2040. прервать;
  2041. КонецЕсли;
  2042. КонецЕсли;
  2043. Поле[а]=-3;
  2044. Поле[Куда]=Что;
  2045. Конецесли;
  2046. Если Что<>0 Тогда
  2047. прервать;
  2048. КонецЕсли;
  2049. КонецЦикла;
  2050. Конеццикла;
  2051. ИначеЕсли ЧтоДвигаем=-4 Тогда
  2052. Для в=1 по 4 цикл
  2053. Куда=а;
  2054. Для с=1 по 10 цикл
  2055. Куда=Куда+ХодыЛадьи[в];
  2056. что=Поле[Куда];
  2057. Если (Что>=0) и (Что<7) Тогда
  2058. Поле[а]=0;
  2059. Поле[Куда]=-4;
  2060. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  2061. ТЗХодов.НоваяСтрока();
  2062. ТЗХодов.Откуда=а;
  2063. ТЗХодов.Куда=Куда;
  2064. ОткудаСтр=ТаблицаСоответствий[а];
  2065. КудаСтр=ТаблицаСоответствий[Куда];
  2066. если КудаСтр>ОткудаСтр тогда
  2067. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2068. иначе
  2069. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2070. конецесли;
  2071. Если (а=82)или(Куда=82) Тогда
  2072. Если праворокировки=3 Тогда
  2073. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
  2074. ТзХодов.Оценка=ПотеряРокировок;
  2075. ИначеЕсли ПравоРокировки=2 Тогда
  2076. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2077. ТзХодов.Оценка=ПотеряРокировок;
  2078. КонецЕсли;
  2079. ИначеЕсли (а=89)или(Куда=89) Тогда
  2080. Если праворокировки=3 Тогда
  2081. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
  2082. ТзХодов.Оценка=ПотеряРокировок;
  2083. ИначеЕсли ПравоРокировки=1 Тогда
  2084. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2085. ТзХодов.Оценка=ПотеряРокировок;
  2086. КонецЕсли;
  2087. КонецЕсли;
  2088. Если что<>0 Тогда
  2089. ТЗХодов.ВзятаяФигура=Куда;
  2090. Поле[а]=-4;
  2091. Поле[Куда]=Что;
  2092. прервать;
  2093. КонецЕсли;
  2094. КонецЕсли;
  2095. Поле[а]=-4;
  2096. Поле[Куда]=Что;
  2097. Конецесли;
  2098. Если Что<>0 Тогда
  2099. прервать;
  2100. КонецЕсли;
  2101. КонецЦикла;
  2102. Конеццикла;
  2103. ИначеЕсли ЧтоДвигаем=-5 Тогда
  2104. Для в=1 по 4 цикл
  2105. Куда=а;
  2106. Для с=1 по 10 цикл
  2107. Куда=Куда+ХодыЛадьи[в];
  2108. что=Поле[Куда];
  2109. Если (Что>=0) и (Что<7) Тогда
  2110. Поле[а]=0;
  2111. Поле[Куда]=-5;
  2112. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  2113. ТЗХодов.НоваяСтрока();
  2114. ТЗХодов.Откуда=а;
  2115. ТЗХодов.Куда=Куда;
  2116. ОткудаСтр=ТаблицаСоответствий[а];
  2117. КудаСтр=ТаблицаСоответствий[Куда];
  2118. если КудаСтр>ОткудаСтр тогда
  2119. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2120. иначе
  2121. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2122. конецесли;
  2123. Если что<>0 Тогда
  2124. ТЗХодов.ВзятаяФигура=Куда;
  2125. Поле[а]=-5;
  2126. Поле[Куда]=Что;
  2127. прервать;
  2128. КонецЕсли;
  2129. КонецЕсли;
  2130. Поле[а]=-5;
  2131. Поле[Куда]=Что;
  2132. Конецесли;
  2133. Если Что<>0 Тогда
  2134. прервать;
  2135. КонецЕсли;
  2136. КонецЦикла;
  2137. Конеццикла;
  2138. Для в=1 по 4 цикл
  2139. Куда=а;
  2140. Для с=1 по 10 цикл
  2141. Куда=Куда+ХодыСлона[в];
  2142. что=Поле[Куда];
  2143. Если (Что>=0) и (Что<7) Тогда
  2144. Поле[а]=0;
  2145. Поле[Куда]=-5;
  2146. Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
  2147. ТЗХодов.НоваяСтрока();
  2148. ТЗХодов.Откуда=а;
  2149. ТЗХодов.Куда=Куда;
  2150. ОткудаСтр=ТаблицаСоответствий[а];
  2151. КудаСтр=ТаблицаСоответствий[Куда];
  2152. если КудаСтр>ОткудаСтр тогда
  2153. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2154. иначе
  2155. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2156. конецесли;
  2157. Если что<>0 Тогда
  2158. Поле[а]=-5;
  2159. Поле[Куда]=Что;
  2160. ТЗХодов.ВзятаяФигура=Куда;
  2161. прервать;
  2162. КонецЕсли;
  2163. Конецесли;
  2164. Поле[а]=-5;
  2165. Поле[Куда]=Что;
  2166. КонецЕсли;
  2167. Если Что<>0 Тогда
  2168. прервать;
  2169. КонецЕсли;
  2170. КонецЦикла;
  2171. Конеццикла;
  2172. ИначеЕсли ЧтоДвигаем=-6 Тогда
  2173. Для в=1 по 4 цикл
  2174. Куда=а+ХодыЛадьи[в];
  2175. что=Поле[Куда];
  2176. Если (Что>=0) и (Что<7) Тогда
  2177. Поле[а]=0;
  2178. Если корольПодБоем(Поле,Куда,2)=1 Тогда
  2179. Поле[а]=-6;
  2180. продолжить;
  2181. КонецЕсли;
  2182. Поле[а]=-6;
  2183. ТЗХодов.НоваяСтрока();
  2184. ТЗХодов.Откуда=а;
  2185. ТЗХодов.Куда=Куда;
  2186. ОткудаСтр=ТаблицаСоответствий[а];
  2187. КудаСтр=ТаблицаСоответствий[Куда];
  2188. если КудаСтр>ОткудаСтр тогда
  2189. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2190. иначе
  2191. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2192. конецесли;
  2193. Если (а=86) Тогда
  2194. Если праворокировки>0 Тогда
  2195. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2196. ТзХодов.Оценка=ПотеряРокировок;
  2197. КонецЕсли;
  2198. КонецЕсли;
  2199. Если что<>0 Тогда
  2200. ТЗХодов.ВзятаяФигура=Куда;
  2201. КонецЕсли;
  2202. Конецесли;
  2203. Конеццикла;
  2204. Для в=1 по 4 цикл
  2205. Куда=а+ХодыСлона[в];
  2206. что=Поле[Куда];
  2207. Если (Что>=0) и (Что<7) Тогда
  2208. Поле[а]=0;
  2209. Если корольПодБоем(Поле,Куда,2)=1 Тогда
  2210. Поле[а]=-6;
  2211. продолжить;
  2212. КонецЕсли;
  2213. Поле[а]=-6;
  2214. ТЗХодов.НоваяСтрока();
  2215. ТЗХодов.Откуда=а;
  2216. ТЗХодов.Куда=Куда;
  2217. ОткудаСтр=ТаблицаСоответствий[а];
  2218. КудаСтр=ТаблицаСоответствий[Куда];
  2219. если КудаСтр>ОткудаСтр тогда
  2220. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2221. иначе
  2222. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2223. конецесли;
  2224. Если (а=86) Тогда
  2225. Если праворокировки>0 Тогда
  2226. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2227. ТзХодов.Оценка=ПотеряРокировок;
  2228. КонецЕсли;
  2229. КонецЕсли;
  2230. Если что<>0 Тогда
  2231. ТЗХодов.ВзятаяФигура=Куда;
  2232. КонецЕсли;
  2233. Конецесли;
  2234. Конеццикла;
  2235. ////Короткая Рокировка
  2236. //Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
  2237. // Если Поле[89]=-4 Тогда
  2238. // Если (Поле[87]=0) и (Поле[88]=0) Тогда
  2239. // Если корольПодБоем(Поле,86,2)=1 Тогда
  2240. // продолжить;
  2241. // КонецЕсли;
  2242. // Если корольПодБоем(Поле,87,2)=0 Тогда
  2243. // ТЗХодов.НоваяСтрока();
  2244. // ТзХодов.Оценка=-СделанаРокировка;
  2245. // ТЗХодов.Откуда=а;
  2246. // ТЗХодов.Куда=88;
  2247. // ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
  2248. // КонецЕсли;
  2249. // КонецЕсли;
  2250. // КонецЕсли;
  2251. //КонецЕсли;
  2252. ////Длинная Рокировка
  2253. //Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
  2254. // Если Поле[82]=-4 Тогда
  2255. // Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
  2256. // Если корольПодБоем(Поле,86,2)=1 Тогда
  2257. // продолжить;
  2258. // КонецЕсли;
  2259. // Если корольПодБоем(Поле,85,2)=0 Тогда
  2260. // ТЗХодов.НоваяСтрока();
  2261. // ТзХодов.Оценка=-СделанаРокировка;
  2262. // ТЗХодов.Откуда=а;
  2263. // ТЗХодов.Куда=84;
  2264. // ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
  2265. // КонецЕсли;
  2266. // КонецЕсли;
  2267. // КонецЕсли;
  2268. //КонецЕсли;
  2269. КонецЕсли;
  2270. КонецЦикла;
  2271. КонецЕсли;
  2272. ТЗХодов.ВыбратьСтроки();
  2273. Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  2274. ЧтоХодит=Поле[ТЗХодов.Откуда];
  2275. съели=0;
  2276. Если ТЗХодов.ВзятаяФигура<>0 Тогда
  2277. ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
  2278. Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
  2279. Если ОчередьХода=1 Тогда
  2280. Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
  2281. Иначе
  2282. Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
  2283. КонецЕсли;
  2284. КонецЕсли;
  2285. Если ТЗХодов.Превращение<>0 Тогда
  2286. Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
  2287. КонецЕсли;
  2288. Если ОчередьХода=1 Тогда
  2289. Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
  2290. Иначе
  2291. Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
  2292. КонецЕсли;
  2293. ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
  2294. КонецЦикла;
  2295. //ТЗХодов.выбратьСтроки();
  2296. //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  2297. // Если ТЗХодов.Куда=ПослФиг Тогда
  2298. // ТЗХодов.ПослФиг=1;
  2299. // КонецЕсли;
  2300. //КонецЦикла;
  2301. //Если ОчередьХода=1 Тогда
  2302. // ТЗХодов.сортировать("ПослФиг-,Оценка-");
  2303. //Иначе
  2304. // ТЗХодов.сортировать("ПослФиг-,Оценка+");
  2305. //КонецЕсли;
  2306. Если ОчередьХода=1 Тогда
  2307. ТЗХодов.сортировать("Оценка-");
  2308. Иначе
  2309. ТЗХодов.сортировать("Оценка+");
  2310. КонецЕсли;
  2311. КонецФункции
  2312. Функция ГенераторВзятий(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
  2313. перем а;
  2314. перем в;
  2315. перем с;
  2316. перем Куда;
  2317. перем что;
  2318. перем чтоДвигаем;
  2319. перем ОценкаПоВозможностям;
  2320. перем стр1;
  2321. перем очередьХода;
  2322. перем ПешкаНаПроходе;
  2323. ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
  2324. ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
  2325. ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
  2326. ТЗХодов.НоваяКолонка("Куда","Число",3,0);
  2327. ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
  2328. ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
  2329. ТЗХодов.Новаяколонка("Оценка","Число",14,6);
  2330. //ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
  2331. Если ПозицияВМассиве=0 Тогда
  2332. ПозицияИзСтроки(Поле,стр);
  2333. КонецЕсли;
  2334. ОчередьХода=Поле[103];
  2335. ПешкаНаПроходе=Поле[104];
  2336. ПравоРокировкиБелых=Поле[101];
  2337. ПравоРокировкиЧерных=Поле[102];
  2338. Если ОчередьХода=1 Тогда
  2339. ПравоРокировки=ПравоРокировкиБелых;
  2340. Иначе
  2341. ПравоРокировки=ПравоРокировкиЧерных;
  2342. КонецЕсли;
  2343. //сообщить(ПравоРокировки);
  2344. //стр="";
  2345. //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
  2346. // Возврат ХешТаблица.ТЗХодов;
  2347. //КонецЕсли;
  2348. оценкаПоВозможностям=0;
  2349. Если ОчередьХода=1 Тогда
  2350. Для а=12 по 89 цикл
  2351. ЧтоДвигаем=Поле[а];
  2352. Если ЧтоДвигаем=0 Тогда
  2353. продолжить;
  2354. ИначеЕсли ЧтоДвигаем=1 Тогда
  2355. Куда=А+10;
  2356. что=Поле[Куда];
  2357. Если (Что=0) Тогда
  2358. Если а>71 Тогда
  2359. Для в=2 по 5 цикл
  2360. ЧтоДвигаем=7-в;
  2361. ТЗХодов.НоваяСтрока();
  2362. ТЗХодов.Откуда=а;
  2363. ТЗХодов.Куда=Куда;
  2364. ОткудаСтр=ТаблицаСоответствий[а];
  2365. КудаСтр=ТаблицаСоответствий[Куда];
  2366. если КудаСтр>ОткудаСтр тогда
  2367. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2368. иначе
  2369. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2370. конецесли;
  2371. ТЗХодов.Превращение=ЧтоДвигаем;
  2372. Конеццикла;
  2373. КонецЕсли;
  2374. КонецЕсли;
  2375. Куда=а+11;
  2376. что=Поле[Куда];
  2377. Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  2378. ОткудаСтр=ТаблицаСоответствий[а];
  2379. КудаСтр=ТаблицаСоответствий[Куда];
  2380. Если а>71 Тогда
  2381. Для в=2 по 5 цикл
  2382. ТЗХодов.НоваяСтрока();
  2383. ТЗХодов.Откуда=а;
  2384. ТЗХодов.Куда=Куда;
  2385. ЧтоДвигаем=7-в;
  2386. если КудаСтр>ОткудаСтр тогда
  2387. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2388. иначе
  2389. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2390. конецесли;
  2391. ТЗХодов.Превращение=ЧтоДвигаем;
  2392. ТЗХодов.ВзятаяФигура=Куда;
  2393. КонецЦикла;
  2394. Иначе
  2395. ТЗХодов.НоваяСтрока();
  2396. ТЗХодов.Откуда=а;
  2397. ТЗХодов.Куда=Куда;
  2398. ТЗХодов.ВзятаяФигура=Куда;
  2399. если КудаСтр>ОткудаСтр тогда
  2400. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2401. иначе
  2402. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2403. конецесли;
  2404. Если ПешкаНаПроходе=Куда Тогда
  2405. Кудастр=ТаблицаСоответствий[Куда-10];
  2406. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  2407. ТЗХодов.ВзятаяФигура=Куда-10;
  2408. КонецЕсли;
  2409. КонецЕсли;
  2410. КонецЕсли;
  2411. Куда=а+9;
  2412. что=Поле[Куда];
  2413. Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  2414. ОткудаСтр=ТаблицаСоответствий[а];
  2415. КудаСтр=ТаблицаСоответствий[Куда];
  2416. Если а>71 Тогда
  2417. Для гг=0 по 1 цикл
  2418. в=гг*3+2;
  2419. ТЗХодов.НоваяСтрока();
  2420. ТЗХодов.Откуда=а;
  2421. ТЗХодов.Куда=Куда;
  2422. ЧтоДвигаем=7-в;
  2423. если КудаСтр>ОткудаСтр тогда
  2424. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2425. иначе
  2426. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2427. конецесли;
  2428. ТЗХодов.Превращение=ЧтоДвигаем;
  2429. ТЗХодов.ВзятаяФигура=Куда;
  2430. КонецЦикла;
  2431. Иначе
  2432. ТЗХодов.НоваяСтрока();
  2433. ТЗХодов.Откуда=а;
  2434. ТЗХодов.Куда=Куда;
  2435. ТЗХодов.ВзятаяФигура=Куда;
  2436. если КудаСтр>ОткудаСтр тогда
  2437. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2438. иначе
  2439. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2440. конецесли;
  2441. Если ПешкаНаПроходе=Куда Тогда
  2442. Кудастр=ТаблицаСоответствий[Куда-10];
  2443. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  2444. ТЗХодов.ВзятаяФигура=Куда-10;
  2445. КонецЕсли;
  2446. КонецЕсли;
  2447. КонецЕсли;
  2448. ИначеЕсли ЧтоДвигаем=2 Тогда
  2449. Для в=1 по 8 цикл
  2450. Куда=а+ХодыКоня[в];
  2451. Если (Куда<=0) или (Куда>=100) Тогда
  2452. продолжить;
  2453. КонецЕсли;
  2454. что=Поле[Куда];
  2455. Если (Что<0) Тогда
  2456. ТЗХодов.НоваяСтрока();
  2457. ТЗХодов.Откуда=а;
  2458. ТЗХодов.Куда=Куда;
  2459. Если что<>0 Тогда
  2460. ТЗХодов.ВзятаяФигура=Куда;
  2461. КонецЕсли;
  2462. ОткудаСтр=ТаблицаСоответствий[а];
  2463. КудаСтр=ТаблицаСоответствий[Куда];
  2464. если КудаСтр>ОткудаСтр тогда
  2465. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2466. иначе
  2467. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2468. конецесли;
  2469. Конецесли;
  2470. КонецЦикла;
  2471. ИначеЕсли ЧтоДвигаем=3 Тогда
  2472. Для в=1 по 4 цикл
  2473. Куда=а;
  2474. Для с=1 по 10 цикл
  2475. Куда=Куда+ХодыСлона[в];
  2476. что=Поле[Куда];
  2477. Пока что=0 Цикл
  2478. Куда=Куда+ХодыСлона[в];
  2479. что=Поле[Куда];
  2480. КонецЦикла;
  2481. Если (Что<=0) Тогда
  2482. ТЗХодов.НоваяСтрока();
  2483. ТЗХодов.Откуда=а;
  2484. ТЗХодов.Куда=Куда;
  2485. ОткудаСтр=ТаблицаСоответствий[а];
  2486. КудаСтр=ТаблицаСоответствий[Куда];
  2487. если КудаСтр>ОткудаСтр тогда
  2488. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2489. иначе
  2490. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2491. конецесли;
  2492. Если что<>0 Тогда
  2493. ТЗХодов.ВзятаяФигура=Куда;
  2494. прервать;
  2495. КонецЕсли;
  2496. Конецесли;
  2497. Если Что<>0 Тогда
  2498. прервать;
  2499. КонецЕсли;
  2500. КонецЦикла;
  2501. Конеццикла;
  2502. ИначеЕсли ЧтоДвигаем=4 Тогда
  2503. Для в=1 по 4 цикл
  2504. Куда=а;
  2505. Для с=1 по 10 цикл
  2506. Куда=Куда+ХодыЛадьи[в];
  2507. что=Поле[Куда];
  2508. Пока что=0 Цикл
  2509. Куда=Куда+ХодыЛадьи[в];
  2510. что=Поле[Куда];
  2511. КонецЦикла;
  2512. Если (Что<=0) Тогда
  2513. ТЗХодов.НоваяСтрока();
  2514. ТЗХодов.Откуда=а;
  2515. ТЗХодов.Куда=Куда;
  2516. ОткудаСтр=ТаблицаСоответствий[а];
  2517. КудаСтр=ТаблицаСоответствий[Куда];
  2518. если КудаСтр>ОткудаСтр тогда
  2519. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2520. иначе
  2521. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2522. конецесли;
  2523. Если (а=12)или(Куда=12) Тогда
  2524. Если праворокировки=3 Тогда
  2525. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
  2526. ТзХодов.Оценка=-ПотеряРокировок;
  2527. ИначеЕсли ПравоРокировки=2 Тогда
  2528. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  2529. ТзХодов.Оценка=-ПотеряРокировок;
  2530. КонецЕсли;
  2531. ИначеЕсли (а=19) или (Куда=19) Тогда
  2532. Если праворокировки=3 Тогда
  2533. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
  2534. ТзХодов.Оценка=-ПотеряРокировок;
  2535. ИначеЕсли ПравоРокировки=1 Тогда
  2536. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  2537. ТзХодов.Оценка=-ПотеряРокировок;
  2538. КонецЕсли;
  2539. КонецЕсли;
  2540. Если что<>0 Тогда
  2541. ТЗХодов.ВзятаяФигура=Куда;
  2542. прервать;
  2543. КонецЕсли;
  2544. Конецесли;
  2545. Если Что<>0 Тогда
  2546. прервать;
  2547. КонецЕсли;
  2548. КонецЦикла;
  2549. Конеццикла;
  2550. ИначеЕсли ЧтоДвигаем=5 Тогда
  2551. Для в=1 по 4 цикл
  2552. Куда=а;
  2553. Для с=1 по 10 цикл
  2554. Куда=Куда+ХодыЛадьи[в];
  2555. что=Поле[Куда];
  2556. Пока что=0 Цикл
  2557. Куда=Куда+ХодыЛадьи[в];
  2558. что=Поле[Куда];
  2559. КонецЦикла;
  2560. Если (Что<=0) Тогда
  2561. ТЗХодов.НоваяСтрока();
  2562. ТЗХодов.Откуда=а;
  2563. ТЗХодов.Куда=Куда;
  2564. ОткудаСтр=ТаблицаСоответствий[а];
  2565. КудаСтр=ТаблицаСоответствий[Куда];
  2566. если КудаСтр>ОткудаСтр тогда
  2567. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2568. иначе
  2569. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2570. конецесли;
  2571. Если что<>0 Тогда
  2572. ТЗХодов.ВзятаяФигура=Куда;
  2573. прервать;
  2574. КонецЕсли;
  2575. Конецесли;
  2576. Если Что<>0 Тогда
  2577. прервать;
  2578. КонецЕсли;
  2579. КонецЦикла;
  2580. Конеццикла;
  2581. Для в=1 по 4 цикл
  2582. Куда=а;
  2583. Для с=1 по 10 цикл
  2584. Куда=Куда+ХодыСлона[в];
  2585. что=Поле[Куда];
  2586. Пока что=0 Цикл
  2587. Куда=Куда+ХодыСлона[в];
  2588. что=Поле[Куда];
  2589. КонецЦикла;
  2590. Если (Что<=0) Тогда
  2591. ТЗХодов.НоваяСтрока();
  2592. ТЗХодов.Откуда=а;
  2593. ТЗХодов.Куда=Куда;
  2594. ОткудаСтр=ТаблицаСоответствий[а];
  2595. КудаСтр=ТаблицаСоответствий[Куда];
  2596. если КудаСтр>ОткудаСтр тогда
  2597. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2598. иначе
  2599. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2600. конецесли;
  2601. Если что<>0 Тогда
  2602. ТЗХодов.ВзятаяФигура=Куда;
  2603. прервать;
  2604. КонецЕсли;
  2605. Конецесли;
  2606. Если Что<>0 Тогда
  2607. прервать;
  2608. КонецЕсли;
  2609. КонецЦикла;
  2610. Конеццикла;
  2611. ИначеЕсли ЧтоДвигаем=6 Тогда
  2612. Для в=1 по 4 цикл
  2613. Куда=а+ХодыЛадьи[в];
  2614. что=Поле[Куда];
  2615. Если (Что<0) Тогда
  2616. ТЗХодов.НоваяСтрока();
  2617. ТЗХодов.Откуда=а;
  2618. ТЗХодов.Куда=Куда;
  2619. ОткудаСтр=ТаблицаСоответствий[а];
  2620. КудаСтр=ТаблицаСоответствий[Куда];
  2621. если КудаСтр>ОткудаСтр тогда
  2622. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2623. иначе
  2624. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2625. конецесли;
  2626. Если (а=16) Тогда
  2627. Если праворокировки>0 Тогда
  2628. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  2629. ТзХодов.Оценка=-ПотеряРокировок;
  2630. КонецЕсли;
  2631. КонецЕсли;
  2632. Если что<>0 Тогда
  2633. ТЗХодов.ВзятаяФигура=Куда;
  2634. КонецЕсли;
  2635. Конецесли;
  2636. КонецЦикла;
  2637. Для в=1 по 4 цикл
  2638. Куда=а+ХодыСлона[в];
  2639. что=Поле[Куда];
  2640. Если (Что<0) Тогда
  2641. ТЗХодов.НоваяСтрока();
  2642. ТЗХодов.Откуда=а;
  2643. ТЗХодов.Куда=Куда;
  2644. ОткудаСтр=ТаблицаСоответствий[а];
  2645. КудаСтр=ТаблицаСоответствий[Куда];
  2646. если КудаСтр>ОткудаСтр тогда
  2647. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2648. иначе
  2649. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2650. конецесли;
  2651. Если (а=16) Тогда
  2652. Если праворокировки>0 Тогда
  2653. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  2654. ТзХодов.Оценка=-ПотеряРокировок;
  2655. КонецЕсли;
  2656. КонецЕсли;
  2657. Если что<>0 Тогда
  2658. ТЗХодов.ВзятаяФигура=Куда;
  2659. КонецЕсли;
  2660. Конецесли;
  2661. Конеццикла;
  2662. КонецЕсли;
  2663. КонецЦикла;
  2664. Иначе
  2665. Для а=12 по 89 цикл
  2666. ЧтоДвигаем=Поле[а];
  2667. Если ЧтоДвигаем=0 Тогда
  2668. продолжить;
  2669. ИначеЕсли ЧтоДвигаем=-1 Тогда
  2670. Куда=А-10;
  2671. что=Поле[Куда];
  2672. Если (Что=0) Тогда
  2673. Если а<30 Тогда
  2674. Для в=2 по 5 цикл
  2675. ЧтоДвигаем=в-7;
  2676. ТЗХодов.НоваяСтрока();
  2677. ТЗХодов.Откуда=а;
  2678. ТЗХодов.Куда=Куда;
  2679. ОткудаСтр=ТаблицаСоответствий[а];
  2680. КудаСтр=ТаблицаСоответствий[Куда];
  2681. если КудаСтр>ОткудаСтр тогда
  2682. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2683. иначе
  2684. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2685. конецесли;
  2686. ТЗХодов.Превращение=ЧтоДвигаем;
  2687. Конеццикла;
  2688. КонецЕсли;
  2689. КонецЕсли;
  2690. Куда=а-11;
  2691. что=Поле[Куда];
  2692. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  2693. Если а<30 Тогда
  2694. Для в=2 по 5 цикл
  2695. ЧтоДвигаем=в-7;
  2696. ТЗХодов.НоваяСтрока();
  2697. ТЗХодов.Откуда=а;
  2698. ТЗХодов.Куда=Куда;
  2699. ОткудаСтр=ТаблицаСоответствий[а];
  2700. КудаСтр=ТаблицаСоответствий[Куда];
  2701. если КудаСтр>ОткудаСтр тогда
  2702. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2703. иначе
  2704. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2705. конецесли;
  2706. ТЗХодов.Превращение=ЧтоДвигаем;
  2707. ТЗХодов.ВзятаяФигура=Куда;
  2708. Конеццикла;
  2709. Иначе
  2710. ТЗХодов.НоваяСтрока();
  2711. ТЗХодов.Откуда=а;
  2712. ТЗХодов.Куда=Куда;
  2713. ТЗХодов.ВзятаяФигура=Куда;
  2714. ОткудаСтр=ТаблицаСоответствий[а];
  2715. КудаСтр=ТаблицаСоответствий[Куда];
  2716. если КудаСтр>ОткудаСтр тогда
  2717. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2718. иначе
  2719. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2720. конецесли;
  2721. Если ПешкаНаПроходе=Куда Тогда
  2722. Кудастр=ТаблицаСоответствий[Куда+10];
  2723. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  2724. ТЗХодов.ВзятаяФигура=Куда+10;
  2725. КонецЕсли;
  2726. КонецЕсли;
  2727. КонецЕсли;
  2728. Куда=а-9;
  2729. что=Поле[Куда];
  2730. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  2731. Если а<30 Тогда
  2732. Для гг=0 по 1 цикл
  2733. в=гг*3+2;
  2734. ЧтоДвигаем=в-7;
  2735. ТЗХодов.НоваяСтрока();
  2736. ТЗХодов.Откуда=а;
  2737. ТЗХодов.Куда=Куда;
  2738. ТЗХодов.ВзятаяФигура=Куда;
  2739. ОткудаСтр=ТаблицаСоответствий[а];
  2740. КудаСтр=ТаблицаСоответствий[Куда];
  2741. если КудаСтр>ОткудаСтр тогда
  2742. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2743. иначе
  2744. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2745. конецесли;
  2746. ТЗХодов.Превращение=ЧтоДвигаем;
  2747. Конеццикла;
  2748. Иначе
  2749. ТЗХодов.НоваяСтрока();
  2750. ТЗХодов.Откуда=а;
  2751. ТЗХодов.Куда=Куда;
  2752. ТЗХодов.ВзятаяФигура=Куда;
  2753. ОткудаСтр=ТаблицаСоответствий[а];
  2754. КудаСтр=ТаблицаСоответствий[Куда];
  2755. если КудаСтр>ОткудаСтр тогда
  2756. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2757. иначе
  2758. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2759. конецесли;
  2760. Если ПешкаНаПроходе=Куда Тогда
  2761. Кудастр=ТаблицаСоответствий[Куда+10];
  2762. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  2763. ТЗХодов.ВзятаяФигура=Куда+10;
  2764. КонецЕсли;
  2765. КонецЕсли;
  2766. КонецЕсли;
  2767. ИначеЕсли ЧтоДвигаем=-2 Тогда
  2768. Для в=1 по 8 цикл
  2769. Куда=а+ХодыКоня[в];
  2770. Если (Куда<=0) или (Куда>=100) Тогда
  2771. продолжить;
  2772. КонецЕсли;
  2773. что=Поле[Куда];
  2774. Если (Что>0)и(Что<8) Тогда
  2775. ТЗХодов.НоваяСтрока();
  2776. ТЗХодов.Откуда=а;
  2777. ТЗХодов.Куда=Куда;
  2778. ОткудаСтр=ТаблицаСоответствий[а];
  2779. КудаСтр=ТаблицаСоответствий[Куда];
  2780. если КудаСтр>ОткудаСтр тогда
  2781. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2782. иначе
  2783. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2784. конецесли;
  2785. Если что<>0 Тогда
  2786. ТЗХодов.ВзятаяФигура=Куда;
  2787. КонецЕсли;
  2788. Конецесли;
  2789. КонецЦикла;
  2790. ИначеЕсли ЧтоДвигаем=-3 Тогда
  2791. Для в=1 по 4 цикл
  2792. Куда=а;
  2793. Для с=1 по 10 цикл
  2794. Куда=Куда+ХодыСлона[в];
  2795. что=Поле[Куда];
  2796. Пока что=0 Цикл
  2797. Куда=Куда+ХодыСлона[в];
  2798. что=Поле[Куда];
  2799. КонецЦикла;
  2800. Если (Что>0) и (Что<7) Тогда
  2801. ТЗХодов.НоваяСтрока();
  2802. ТЗХодов.Откуда=а;
  2803. ТЗХодов.Куда=Куда;
  2804. ОткудаСтр=ТаблицаСоответствий[а];
  2805. КудаСтр=ТаблицаСоответствий[Куда];
  2806. если КудаСтр>ОткудаСтр тогда
  2807. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2808. иначе
  2809. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2810. конецесли;
  2811. Если что<>0 Тогда
  2812. ТЗХодов.ВзятаяФигура=Куда;
  2813. прервать;
  2814. КонецЕсли;
  2815. Конецесли;
  2816. Если Что<>0 Тогда
  2817. прервать;
  2818. КонецЕсли;
  2819. КонецЦикла;
  2820. Конеццикла;
  2821. ИначеЕсли ЧтоДвигаем=-4 Тогда
  2822. Для в=1 по 4 цикл
  2823. Куда=а;
  2824. Для с=1 по 10 цикл
  2825. Куда=Куда+ХодыЛадьи[в];
  2826. что=Поле[Куда];
  2827. Пока что=0 Цикл
  2828. Куда=Куда+ХодыЛадьи[в];
  2829. что=Поле[Куда];
  2830. КонецЦикла;
  2831. Если (Что>0) и (Что<7) Тогда
  2832. ТЗХодов.НоваяСтрока();
  2833. ТЗХодов.Откуда=а;
  2834. ТЗХодов.Куда=Куда;
  2835. ОткудаСтр=ТаблицаСоответствий[а];
  2836. КудаСтр=ТаблицаСоответствий[Куда];
  2837. если КудаСтр>ОткудаСтр тогда
  2838. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2839. иначе
  2840. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2841. конецесли;
  2842. Если (а=82)или(Куда=82) Тогда
  2843. Если праворокировки=3 Тогда
  2844. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
  2845. ТзХодов.Оценка=ПотеряРокировок;
  2846. ИначеЕсли ПравоРокировки=2 Тогда
  2847. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2848. ТзХодов.Оценка=ПотеряРокировок;
  2849. КонецЕсли;
  2850. ИначеЕсли (а=89)или(Куда=89) Тогда
  2851. Если праворокировки=3 Тогда
  2852. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
  2853. ТзХодов.Оценка=ПотеряРокировок;
  2854. ИначеЕсли ПравоРокировки=1 Тогда
  2855. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2856. ТзХодов.Оценка=ПотеряРокировок;
  2857. КонецЕсли;
  2858. КонецЕсли;
  2859. Если что<>0 Тогда
  2860. ТЗХодов.ВзятаяФигура=Куда;
  2861. прервать;
  2862. КонецЕсли;
  2863. Конецесли;
  2864. Если Что<>0 Тогда
  2865. прервать;
  2866. КонецЕсли;
  2867. КонецЦикла;
  2868. Конеццикла;
  2869. ИначеЕсли ЧтоДвигаем=-5 Тогда
  2870. Для в=1 по 4 цикл
  2871. Куда=а;
  2872. Для с=1 по 10 цикл
  2873. Куда=Куда+ХодыЛадьи[в];
  2874. что=Поле[Куда];
  2875. Пока что=0 Цикл
  2876. Куда=Куда+ХодыЛадьи[в];
  2877. что=Поле[Куда];
  2878. КонецЦикла;
  2879. Если (Что>0) и (Что<7) Тогда
  2880. ТЗХодов.НоваяСтрока();
  2881. ТЗХодов.Откуда=а;
  2882. ТЗХодов.Куда=Куда;
  2883. ОткудаСтр=ТаблицаСоответствий[а];
  2884. КудаСтр=ТаблицаСоответствий[Куда];
  2885. если КудаСтр>ОткудаСтр тогда
  2886. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2887. иначе
  2888. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2889. конецесли;
  2890. Если что<>0 Тогда
  2891. ТЗХодов.ВзятаяФигура=Куда;
  2892. прервать;
  2893. КонецЕсли;
  2894. Конецесли;
  2895. Если Что<>0 Тогда
  2896. прервать;
  2897. КонецЕсли;
  2898. КонецЦикла;
  2899. Конеццикла;
  2900. Для в=1 по 4 цикл
  2901. Куда=а;
  2902. Для с=1 по 10 цикл
  2903. Куда=Куда+ХодыСлона[в];
  2904. что=Поле[Куда];
  2905. Пока что=0 Цикл
  2906. Куда=Куда+ХодыСлона[в];
  2907. что=Поле[Куда];
  2908. КонецЦикла;
  2909. Если (Что>0) и (Что<7) Тогда
  2910. ТЗХодов.НоваяСтрока();
  2911. ТЗХодов.Откуда=а;
  2912. ТЗХодов.Куда=Куда;
  2913. ОткудаСтр=ТаблицаСоответствий[а];
  2914. КудаСтр=ТаблицаСоответствий[Куда];
  2915. если КудаСтр>ОткудаСтр тогда
  2916. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2917. иначе
  2918. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2919. конецесли;
  2920. Если что<>0 Тогда
  2921. ТЗХодов.ВзятаяФигура=Куда;
  2922. прервать;
  2923. КонецЕсли;
  2924. Конецесли;
  2925. Если Что<>0 Тогда
  2926. прервать;
  2927. КонецЕсли;
  2928. КонецЦикла;
  2929. Конеццикла;
  2930. ИначеЕсли ЧтоДвигаем=-6 Тогда
  2931. Для в=1 по 4 цикл
  2932. Куда=а+ХодыЛадьи[в];
  2933. что=Поле[Куда];
  2934. Если (Что>0) и (Что<7) Тогда
  2935. ТЗХодов.НоваяСтрока();
  2936. ТЗХодов.Откуда=а;
  2937. ТЗХодов.Куда=Куда;
  2938. ОткудаСтр=ТаблицаСоответствий[а];
  2939. КудаСтр=ТаблицаСоответствий[Куда];
  2940. если КудаСтр>ОткудаСтр тогда
  2941. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2942. иначе
  2943. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2944. конецесли;
  2945. Если (а=86) Тогда
  2946. Если праворокировки>0 Тогда
  2947. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2948. ТзХодов.Оценка=ПотеряРокировок;
  2949. КонецЕсли;
  2950. КонецЕсли;
  2951. Если что<>0 Тогда
  2952. ТЗХодов.ВзятаяФигура=Куда;
  2953. КонецЕсли;
  2954. Конецесли;
  2955. Конеццикла;
  2956. Для в=1 по 4 цикл
  2957. Куда=а+ХодыСлона[в];
  2958. что=Поле[Куда];
  2959. Если (Что>0) и (Что<7) Тогда
  2960. ТЗХодов.НоваяСтрока();
  2961. ТЗХодов.Откуда=а;
  2962. ТЗХодов.Куда=Куда;
  2963. ОткудаСтр=ТаблицаСоответствий[а];
  2964. КудаСтр=ТаблицаСоответствий[Куда];
  2965. если КудаСтр>ОткудаСтр тогда
  2966. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  2967. иначе
  2968. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  2969. конецесли;
  2970. Если (а=86) Тогда
  2971. Если праворокировки>0 Тогда
  2972. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  2973. ТзХодов.Оценка=ПотеряРокировок;
  2974. КонецЕсли;
  2975. КонецЕсли;
  2976. Если что<>0 Тогда
  2977. ТЗХодов.ВзятаяФигура=Куда;
  2978. КонецЕсли;
  2979. Конецесли;
  2980. Конеццикла;
  2981. КонецЕсли;
  2982. КонецЦикла;
  2983. КонецЕсли;
  2984. ТЗХодов.ВыбратьСтроки();
  2985. Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  2986. ЧтоХодит=Поле[ТЗХодов.Откуда];
  2987. съели=0;
  2988. Если ТЗХодов.ВзятаяФигура<>0 Тогда
  2989. Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
  2990. ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
  2991. Если ОчередьХода=1 Тогда
  2992. Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
  2993. Иначе
  2994. Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
  2995. КонецЕсли;
  2996. КонецЕсли;
  2997. Если ТЗХодов.Превращение<>0 Тогда
  2998. Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
  2999. КонецЕсли;
  3000. Если ОчередьХода=1 Тогда
  3001. Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
  3002. Иначе
  3003. Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
  3004. КонецЕсли;
  3005. ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
  3006. КонецЦикла;
  3007. //ТЗХодов.выбратьСтроки();
  3008. //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  3009. // Если ТЗХодов.Куда=ПослФиг Тогда
  3010. // ТЗХодов.ПослФиг=1;
  3011. // КонецЕсли;
  3012. //КонецЦикла;
  3013. //Если ОчередьХода=1 Тогда
  3014. // ТЗХодов.сортировать("ПослФиг-,Оценка-");
  3015. //Иначе
  3016. // ТЗХодов.сортировать("ПослФиг-,Оценка+");
  3017. //КонецЕсли;
  3018. Если ОчередьХода=1 Тогда
  3019. ТЗХодов.сортировать("Оценка-");
  3020. Иначе
  3021. ТЗХодов.сортировать("Оценка+");
  3022. КонецЕсли;
  3023. КонецФункции
  3024. Функция ГенераторШахов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
  3025. перем а;
  3026. перем в;
  3027. перем с;
  3028. перем Куда;
  3029. перем что;
  3030. перем чтоДвигаем;
  3031. перем ОценкаПоВозможностям;
  3032. перем стр1;
  3033. перем стр2;
  3034. перем очередьХода;
  3035. перем ПешкаНаПроходе;
  3036. перем ГдеКороль;
  3037. ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
  3038. ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
  3039. ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
  3040. ТЗХодов.НоваяКолонка("Куда","Число",3,0);
  3041. ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
  3042. ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
  3043. ТЗХодов.Новаяколонка("Оценка","Число",14,6);
  3044. // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
  3045. Если ПозицияВМассиве=0 Тогда
  3046. ПозицияИзСтроки(Поле,стр);
  3047. КонецЕсли;
  3048. ОчередьХода=Поле[103];
  3049. ПешкаНаПроходе=Поле[104];
  3050. ПравоРокировкиБелых=Поле[101];
  3051. ПравоРокировкиЧерных=Поле[102];
  3052. Если ОчередьХода=1 Тогда
  3053. ПравоРокировки=ПравоРокировкиБелых;
  3054. Иначе
  3055. ПравоРокировки=ПравоРокировкиЧерных;
  3056. КонецЕсли;
  3057. // Нужно Найти с каких полей, и чем шахуется король противоположной стороны...
  3058. ГдеКороль=ТаблицаСоответствий1[найти(стр,симв(48+(очередьхода*2-3)*6))];
  3059. Если ОчередьХода=2 Тогда
  3060. Если поле[ГдеКороль+11]=0 Тогда
  3061. ТЗХодовСКоторыхШах.НоваяСтрока();
  3062. ТЗХодовСКоторыхШах.Поле=100+ГдеКороль+11;
  3063. КонецЕсли;
  3064. Если поле[ГдеКороль+9]=0 Тогда
  3065. ТЗХодовСКоторыхШах.НоваяСтрока();
  3066. ТЗХодовСКоторыхШах.Поле=100+ГдеКороль+9;
  3067. КонецЕсли;
  3068. Для а=1 по 8 цикл
  3069. Куда=ГдеКороль+ХодыКоня[а];
  3070. Если (Куда<=0) или (Куда>=100) Тогда
  3071. продолжить;
  3072. КонецЕсли;
  3073. Если поле[Куда]=0 Тогда
  3074. ТЗХодовСКоторыхШах.НоваяСтрока();
  3075. ТЗХодовСКоторыхШах.Поле=200+Куда;
  3076. КонецЕсли;
  3077. КонецЦикла;
  3078. Для а=1 по 4 цикл
  3079. Куда=ГдеКороль+ХодыЛадьи[а];
  3080. Пока поле[Куда]=0 Цикл
  3081. ТЗХодовСКоторыхШах.НоваяСтрока();
  3082. ТЗХодовСКоторыхШах.Поле=400+Куда;
  3083. ТЗХодовСКоторыхШах.НоваяСтрока();
  3084. ТЗХодовСКоторыхШах.Поле=500+Куда;
  3085. Куда=Куда+ХодыЛадьи[а];
  3086. КонецЦикла;
  3087. КонецЦикла;
  3088. Для а=1 по 4 цикл
  3089. Куда=ГдеКороль+ХодыСлона[а];
  3090. Пока поле[Куда]=0 Цикл
  3091. ТЗХодовСКоторыхШах.НоваяСтрока();
  3092. ТЗХодовСКоторыхШах.Поле=300+Куда;
  3093. ТЗХодовСКоторыхШах.НоваяСтрока();
  3094. ТЗХодовСКоторыхШах.Поле=500+Куда;
  3095. Куда=Куда+ХодыСлона[а];
  3096. КонецЦикла;
  3097. КонецЦикла;
  3098. Иначе
  3099. Если поле[ГдеКороль-11]=0 Тогда
  3100. ТЗХодовСКоторыхШах.НоваяСтрока();
  3101. ТЗХодовСКоторыхШах.Поле=100+ГдеКороль-11;
  3102. КонецЕсли;
  3103. Если поле[ГдеКороль-9]=0 Тогда
  3104. ТЗХодовСКоторыхШах.НоваяСтрока();
  3105. ТЗХодовСКоторыхШах.Поле=100+ГдеКороль-9;
  3106. КонецЕсли;
  3107. Для а=1 по 8 цикл
  3108. Куда=ГдеКороль+ХодыКоня[а];
  3109. Если (Куда<=0) или (Куда>=100) Тогда
  3110. продолжить;
  3111. КонецЕсли;
  3112. Если поле[Куда]=0 Тогда
  3113. ТЗХодовСКоторыхШах.НоваяСтрока();
  3114. ТЗХодовСКоторыхШах.Поле=200+Куда;
  3115. КонецЕсли;
  3116. КонецЦикла;
  3117. Для а=1 по 4 цикл
  3118. Куда=ГдеКороль+ХодыЛадьи[а];
  3119. Пока поле[Куда]=0 Цикл
  3120. ТЗХодовСКоторыхШах.НоваяСтрока();
  3121. ТЗХодовСКоторыхШах.Поле=400+Куда;
  3122. ТЗХодовСКоторыхШах.НоваяСтрока();
  3123. ТЗХодовСКоторыхШах.Поле=500+Куда;
  3124. Куда=Куда+ХодыЛадьи[а];
  3125. КонецЦикла;
  3126. КонецЦикла;
  3127. Для а=1 по 4 цикл
  3128. Куда=ГдеКороль+ХодыСлона[а];
  3129. Пока поле[Куда]=0 Цикл
  3130. ТЗХодовСКоторыхШах.НоваяСтрока();
  3131. ТЗХодовСКоторыхШах.Поле=300+Куда;
  3132. ТЗХодовСКоторыхШах.НоваяСтрока();
  3133. ТЗХодовСКоторыхШах.Поле=500+Куда;
  3134. Куда=Куда+ХодыСлона[а];
  3135. КонецЦикла;
  3136. КонецЦикла;
  3137. КонецЕсли;
  3138. оценкаПоВозможностям=0;
  3139. Если ОчередьХода=1 Тогда
  3140. Для а=12 по 89 цикл
  3141. ЧтоДвигаем=Поле[а];
  3142. Если ЧтоДвигаем=0 Тогда
  3143. продолжить;
  3144. ИначеЕсли ЧтоДвигаем=1 Тогда
  3145. Куда=А+10;
  3146. что=Поле[Куда];
  3147. Если (Что=0) Тогда
  3148. Если а>71 Тогда
  3149. Для в=2 по 5 цикл
  3150. ЧтоДвигаем=7-в;
  3151. ТЗХодов.НоваяСтрока();
  3152. ТЗХодов.Откуда=а;
  3153. ТЗХодов.Куда=Куда;
  3154. ОткудаСтр=ТаблицаСоответствий[а];
  3155. КудаСтр=ТаблицаСоответствий[Куда];
  3156. если КудаСтр>ОткудаСтр тогда
  3157. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3158. иначе
  3159. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3160. конецесли;
  3161. ТЗХодов.Превращение=ЧтоДвигаем;
  3162. Конеццикла;
  3163. Иначе
  3164. стр2="";
  3165. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
  3166. ТЗХодов.НоваяСтрока();
  3167. ТЗХодов.Откуда=а;
  3168. ТЗХодов.Куда=Куда;
  3169. ОткудаСтр=ТаблицаСоответствий[а];
  3170. КудаСтр=ТаблицаСоответствий[Куда];
  3171. если КудаСтр>ОткудаСтр тогда
  3172. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3173. иначе
  3174. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3175. конецесли;
  3176. КонецЕсли;
  3177. КонецЕсли;
  3178. Если а<31 Тогда
  3179. Куда=А+20;
  3180. что=Поле[Куда];
  3181. Если (Что=0) Тогда
  3182. стр2="";
  3183. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
  3184. ТЗХодов.НоваяСтрока();
  3185. ТЗХодов.Откуда=а;
  3186. ТЗХодов.Куда=Куда;
  3187. ОткудаСтр=ТаблицаСоответствий[а];
  3188. КудаСтр=ТаблицаСоответствий[Куда];
  3189. Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
  3190. проход=симв(33+Куда-10);
  3191. Иначе
  3192. проход=симв(33);
  3193. КонецЕсли;
  3194. если КудаСтр>ОткудаСтр тогда
  3195. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  3196. иначе
  3197. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  3198. конецесли;
  3199. КонецЕсли;
  3200. КонецЕсли;
  3201. КонецЕсли;
  3202. КонецЕсли;
  3203. Куда=а+11;
  3204. что=Поле[Куда];
  3205. Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  3206. ОткудаСтр=ТаблицаСоответствий[а];
  3207. КудаСтр=ТаблицаСоответствий[Куда];
  3208. Если а>71 Тогда
  3209. Для в=2 по 5 цикл
  3210. ТЗХодов.НоваяСтрока();
  3211. ТЗХодов.Откуда=а;
  3212. ТЗХодов.Куда=Куда;
  3213. ЧтоДвигаем=7-в;
  3214. если КудаСтр>ОткудаСтр тогда
  3215. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3216. иначе
  3217. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3218. конецесли;
  3219. ТЗХодов.Превращение=ЧтоДвигаем;
  3220. ТЗХодов.ВзятаяФигура=Куда;
  3221. КонецЦикла;
  3222. Иначе
  3223. ТЗХодов.НоваяСтрока();
  3224. ТЗХодов.Откуда=а;
  3225. ТЗХодов.Куда=Куда;
  3226. ТЗХодов.ВзятаяФигура=Куда;
  3227. если КудаСтр>ОткудаСтр тогда
  3228. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3229. иначе
  3230. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3231. конецесли;
  3232. Если ПешкаНаПроходе=Куда Тогда
  3233. Кудастр=ТаблицаСоответствий[Куда-10];
  3234. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  3235. ТЗХодов.ВзятаяФигура=Куда-10;
  3236. КонецЕсли;
  3237. КонецЕсли;
  3238. КонецЕсли;
  3239. Куда=а+9;
  3240. что=Поле[Куда];
  3241. Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  3242. ОткудаСтр=ТаблицаСоответствий[а];
  3243. КудаСтр=ТаблицаСоответствий[Куда];
  3244. Если а>71 Тогда
  3245. Для в=2 по 5 цикл
  3246. ТЗХодов.НоваяСтрока();
  3247. ТЗХодов.Откуда=а;
  3248. ТЗХодов.Куда=Куда;
  3249. ЧтоДвигаем=7-в;
  3250. если КудаСтр>ОткудаСтр тогда
  3251. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3252. иначе
  3253. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3254. конецесли;
  3255. ТЗХодов.Превращение=ЧтоДвигаем;
  3256. ТЗХодов.ВзятаяФигура=Куда;
  3257. КонецЦикла;
  3258. Иначе
  3259. ТЗХодов.НоваяСтрока();
  3260. ТЗХодов.Откуда=а;
  3261. ТЗХодов.Куда=Куда;
  3262. ТЗХодов.ВзятаяФигура=Куда;
  3263. если КудаСтр>ОткудаСтр тогда
  3264. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3265. иначе
  3266. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3267. конецесли;
  3268. Если ПешкаНаПроходе=Куда Тогда
  3269. Кудастр=ТаблицаСоответствий[Куда-10];
  3270. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  3271. ТЗХодов.ВзятаяФигура=Куда-10;
  3272. КонецЕсли;
  3273. КонецЕсли;
  3274. КонецЕсли;
  3275. ИначеЕсли ЧтоДвигаем=2 Тогда
  3276. Для в=1 по 8 цикл
  3277. Куда=а+ХодыКоня[в];
  3278. Если (Куда<=0) или (Куда>=100) Тогда
  3279. продолжить;
  3280. КонецЕсли;
  3281. что=Поле[Куда];
  3282. Если Что=0 Тогда
  3283. стр2="";
  3284. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+200,стр2,"Поле")=0 Тогда
  3285. продолжить;
  3286. КонецЕсли;
  3287. КонецЕсли;
  3288. Если (Что<=0) Тогда
  3289. ТЗХодов.НоваяСтрока();
  3290. ТЗХодов.Откуда=а;
  3291. ТЗХодов.Куда=Куда;
  3292. Если что<>0 Тогда
  3293. ТЗХодов.ВзятаяФигура=Куда;
  3294. КонецЕсли;
  3295. ОткудаСтр=ТаблицаСоответствий[а];
  3296. КудаСтр=ТаблицаСоответствий[Куда];
  3297. если КудаСтр>ОткудаСтр тогда
  3298. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3299. иначе
  3300. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3301. конецесли;
  3302. Конецесли;
  3303. КонецЦикла;
  3304. ИначеЕсли ЧтоДвигаем=3 Тогда
  3305. Для в=1 по 4 цикл
  3306. Куда=а;
  3307. Для с=1 по 10 цикл
  3308. Куда=Куда+ХодыСлона[в];
  3309. что=Поле[Куда];
  3310. Если Что=0 Тогда
  3311. стр2="";
  3312. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+300,стр2,"Поле")=0 Тогда
  3313. продолжить;
  3314. КонецЕсли;
  3315. КонецЕсли;
  3316. Если (Что<=0) Тогда
  3317. ТЗХодов.НоваяСтрока();
  3318. ТЗХодов.Откуда=а;
  3319. ТЗХодов.Куда=Куда;
  3320. ОткудаСтр=ТаблицаСоответствий[а];
  3321. КудаСтр=ТаблицаСоответствий[Куда];
  3322. если КудаСтр>ОткудаСтр тогда
  3323. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3324. иначе
  3325. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3326. конецесли;
  3327. Если что<>0 Тогда
  3328. ТЗХодов.ВзятаяФигура=Куда;
  3329. прервать;
  3330. КонецЕсли;
  3331. Конецесли;
  3332. Если Что<>0 Тогда
  3333. прервать;
  3334. КонецЕсли;
  3335. КонецЦикла;
  3336. Конеццикла;
  3337. ИначеЕсли ЧтоДвигаем=4 Тогда
  3338. Для в=1 по 4 цикл
  3339. Куда=а;
  3340. Для с=1 по 10 цикл
  3341. Куда=Куда+ХодыЛадьи[в];
  3342. что=Поле[Куда];
  3343. Если Что=0 Тогда
  3344. стр2="";
  3345. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+400,стр2,"Поле")=0 Тогда
  3346. продолжить;
  3347. КонецЕсли;
  3348. КонецЕсли;
  3349. Если (Что<=0) Тогда
  3350. ТЗХодов.НоваяСтрока();
  3351. ТЗХодов.Откуда=а;
  3352. ТЗХодов.Куда=Куда;
  3353. ОткудаСтр=ТаблицаСоответствий[а];
  3354. КудаСтр=ТаблицаСоответствий[Куда];
  3355. если КудаСтр>ОткудаСтр тогда
  3356. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3357. иначе
  3358. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3359. конецесли;
  3360. Если (а=12)или(Куда=12) Тогда
  3361. Если праворокировки=3 Тогда
  3362. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
  3363. ТзХодов.Оценка=-ПотеряРокировок;
  3364. ИначеЕсли ПравоРокировки=2 Тогда
  3365. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  3366. ТзХодов.Оценка=-ПотеряРокировок;
  3367. КонецЕсли;
  3368. ИначеЕсли (а=19)или(Куда=19) Тогда
  3369. Если праворокировки=3 Тогда
  3370. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
  3371. ТзХодов.Оценка=-ПотеряРокировок;
  3372. ИначеЕсли ПравоРокировки=1 Тогда
  3373. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  3374. ТзХодов.Оценка=-ПотеряРокировок;
  3375. КонецЕсли;
  3376. КонецЕсли;
  3377. Если что<>0 Тогда
  3378. ТЗХодов.ВзятаяФигура=Куда;
  3379. прервать;
  3380. КонецЕсли;
  3381. Конецесли;
  3382. Если Что<>0 Тогда
  3383. прервать;
  3384. КонецЕсли;
  3385. КонецЦикла;
  3386. Конеццикла;
  3387. ИначеЕсли ЧтоДвигаем=5 Тогда
  3388. Для в=1 по 4 цикл
  3389. Куда=а;
  3390. Для с=1 по 10 цикл
  3391. Куда=Куда+ХодыЛадьи[в];
  3392. что=Поле[Куда];
  3393. Если Что=0 Тогда
  3394. стр2="";
  3395. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
  3396. продолжить;
  3397. КонецЕсли;
  3398. КонецЕсли;
  3399. Если (Что<=0) Тогда
  3400. ТЗХодов.НоваяСтрока();
  3401. ТЗХодов.Откуда=а;
  3402. ТЗХодов.Куда=Куда;
  3403. ОткудаСтр=ТаблицаСоответствий[а];
  3404. КудаСтр=ТаблицаСоответствий[Куда];
  3405. если КудаСтр>ОткудаСтр тогда
  3406. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3407. иначе
  3408. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3409. конецесли;
  3410. Если что<>0 Тогда
  3411. ТЗХодов.ВзятаяФигура=Куда;
  3412. прервать;
  3413. КонецЕсли;
  3414. Конецесли;
  3415. Если Что<>0 Тогда
  3416. прервать;
  3417. КонецЕсли;
  3418. КонецЦикла;
  3419. Конеццикла;
  3420. Для в=1 по 4 цикл
  3421. Куда=а;
  3422. Для с=1 по 10 цикл
  3423. Куда=Куда+ХодыСлона[в];
  3424. что=Поле[Куда];
  3425. Если Что=0 Тогда
  3426. стр2="";
  3427. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
  3428. продолжить;
  3429. КонецЕсли;
  3430. КонецЕсли;
  3431. Если (Что<=0) Тогда
  3432. ТЗХодов.НоваяСтрока();
  3433. ТЗХодов.Откуда=а;
  3434. ТЗХодов.Куда=Куда;
  3435. ОткудаСтр=ТаблицаСоответствий[а];
  3436. КудаСтр=ТаблицаСоответствий[Куда];
  3437. если КудаСтр>ОткудаСтр тогда
  3438. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3439. иначе
  3440. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3441. конецесли;
  3442. Если что<>0 Тогда
  3443. ТЗХодов.ВзятаяФигура=Куда;
  3444. прервать;
  3445. КонецЕсли;
  3446. Конецесли;
  3447. Если Что<>0 Тогда
  3448. прервать;
  3449. КонецЕсли;
  3450. КонецЦикла;
  3451. Конеццикла;
  3452. ИначеЕсли ЧтоДвигаем=6 Тогда
  3453. Для в=1 по 4 цикл
  3454. Куда=а+ХодыЛадьи[в];
  3455. что=Поле[Куда];
  3456. Если что=0 Тогда
  3457. продолжить;
  3458. КонецЕсли;
  3459. Если (Что<=0) Тогда
  3460. ТЗХодов.НоваяСтрока();
  3461. ТЗХодов.Откуда=а;
  3462. ТЗХодов.Куда=Куда;
  3463. ОткудаСтр=ТаблицаСоответствий[а];
  3464. КудаСтр=ТаблицаСоответствий[Куда];
  3465. если КудаСтр>ОткудаСтр тогда
  3466. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3467. иначе
  3468. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3469. конецесли;
  3470. Если (а=16) Тогда
  3471. Если праворокировки>0 Тогда
  3472. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  3473. ТзХодов.Оценка=-ПотеряРокировок;
  3474. КонецЕсли;
  3475. КонецЕсли;
  3476. Если что<>0 Тогда
  3477. ТЗХодов.ВзятаяФигура=Куда;
  3478. КонецЕсли;
  3479. Конецесли;
  3480. КонецЦикла;
  3481. Для в=1 по 4 цикл
  3482. Куда=а+ХодыСлона[в];
  3483. что=Поле[Куда];
  3484. Если Что=0 Тогда
  3485. продолжить;
  3486. КонецЕсли;
  3487. Если (Что<=0) Тогда
  3488. ТЗХодов.НоваяСтрока();
  3489. ТЗХодов.Откуда=а;
  3490. ТЗХодов.Куда=Куда;
  3491. ОткудаСтр=ТаблицаСоответствий[а];
  3492. КудаСтр=ТаблицаСоответствий[Куда];
  3493. если КудаСтр>ОткудаСтр тогда
  3494. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3495. иначе
  3496. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3497. конецесли;
  3498. Если (а=16) Тогда
  3499. Если праворокировки>0 Тогда
  3500. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
  3501. ТзХодов.Оценка=-ПотеряРокировок;
  3502. КонецЕсли;
  3503. КонецЕсли;
  3504. Если что<>0 Тогда
  3505. ТЗХодов.ВзятаяФигура=Куда;
  3506. КонецЕсли;
  3507. Конецесли;
  3508. Конеццикла;
  3509. //Короткая Рокировка
  3510. Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
  3511. Если Поле[19]=4 Тогда
  3512. Если (Поле[17]=0) и (Поле[18]=0) Тогда
  3513. стр2="";
  3514. Если ТЗХодовСКоторыхШах.НайтиЗначение(517,стр2,"Поле")>0 Тогда
  3515. Если корольПодБоем(Поле,16,1)=1 Тогда
  3516. продолжить;
  3517. КонецЕсли;
  3518. Если корольПодБоем(Поле,17,1)=0 Тогда
  3519. ТЗХодов.НоваяСтрока();
  3520. ТзХодов.Оценка=СделанаРокировка;
  3521. ТЗХодов.Откуда=а;
  3522. ТЗХодов.Куда=18;
  3523. ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  3524. КонецЕсли;
  3525. КонецЕсли;
  3526. КонецЕсли;
  3527. КонецЕсли;
  3528. КонецЕсли;
  3529. //Длинная Рокировка
  3530. Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
  3531. Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
  3532. стр2="";
  3533. Если ТЗХодовСКоторыхШах.НайтиЗначение(515,стр2,"Поле")>0 Тогда
  3534. Если Поле[12]=4 Тогда
  3535. Если корольПодБоем(Поле,16,1)=1 Тогда
  3536. продолжить;
  3537. КонецЕсли;
  3538. Если корольПодБоем(Поле,15,1)=0 Тогда
  3539. ТЗХодов.НоваяСтрока();
  3540. ТзХодов.Оценка=СделанаРокировка;
  3541. ТЗХодов.Откуда=а;
  3542. ТЗХодов.Куда=14;
  3543. ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
  3544. КонецЕсли;
  3545. КонецЕсли;
  3546. КонецЕсли;
  3547. КонецЕсли;
  3548. КонецЕсли;
  3549. КонецЕсли;
  3550. КонецЦикла;
  3551. Иначе
  3552. Для а=12 по 89 цикл
  3553. ЧтоДвигаем=Поле[а];
  3554. Если ЧтоДвигаем=0 Тогда
  3555. продолжить;
  3556. ИначеЕсли ЧтоДвигаем=-1 Тогда
  3557. Куда=А-10;
  3558. что=Поле[Куда];
  3559. Если (Что=0) Тогда
  3560. Если а<30 Тогда
  3561. Для в=2 по 5 цикл
  3562. ЧтоДвигаем=в-7;
  3563. ТЗХодов.НоваяСтрока();
  3564. ТЗХодов.Откуда=а;
  3565. ТЗХодов.Куда=Куда;
  3566. ОткудаСтр=ТаблицаСоответствий[а];
  3567. КудаСтр=ТаблицаСоответствий[Куда];
  3568. если КудаСтр>ОткудаСтр тогда
  3569. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3570. иначе
  3571. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3572. конецесли;
  3573. ТЗХодов.Превращение=ЧтоДвигаем;
  3574. Конеццикла;
  3575. Иначе
  3576. стр2="";
  3577. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
  3578. ТЗХодов.НоваяСтрока();
  3579. ТЗХодов.Откуда=а;
  3580. ТЗХодов.Куда=Куда;
  3581. ОткудаСтр=ТаблицаСоответствий[а];
  3582. КудаСтр=ТаблицаСоответствий[Куда];
  3583. если КудаСтр>ОткудаСтр тогда
  3584. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3585. иначе
  3586. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3587. конецесли;
  3588. КонецЕсли;
  3589. КонецЕсли;
  3590. Если а>69 Тогда
  3591. Куда=А-20;
  3592. что=Поле[Куда];
  3593. Если (Что=0) Тогда
  3594. стр2="";
  3595. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
  3596. ТЗХодов.НоваяСтрока();
  3597. ТЗХодов.Откуда=а;
  3598. ТЗХодов.Куда=Куда;
  3599. ОткудаСтр=ТаблицаСоответствий[а];
  3600. КудаСтр=ТаблицаСоответствий[Куда];
  3601. Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
  3602. проход=симв(33+Куда+10);
  3603. Иначе
  3604. проход=симв(33);
  3605. КонецЕсли;
  3606. если КудаСтр>ОткудаСтр тогда
  3607. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
  3608. иначе
  3609. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
  3610. конецесли;
  3611. КонецЕсли;
  3612. КонецЕсли;
  3613. КонецЕсли;
  3614. КонецЕсли;
  3615. Куда=а-11;
  3616. что=Поле[Куда];
  3617. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  3618. Если а<30 Тогда
  3619. Для в=2 по 5 цикл
  3620. ЧтоДвигаем=в-7;
  3621. ТЗХодов.НоваяСтрока();
  3622. ТЗХодов.Откуда=а;
  3623. ТЗХодов.Куда=Куда;
  3624. ОткудаСтр=ТаблицаСоответствий[а];
  3625. КудаСтр=ТаблицаСоответствий[Куда];
  3626. если КудаСтр>ОткудаСтр тогда
  3627. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3628. иначе
  3629. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3630. конецесли;
  3631. ТЗХодов.Превращение=ЧтоДвигаем;
  3632. ТЗХодов.ВзятаяФигура=Куда;
  3633. Конеццикла;
  3634. Иначе
  3635. ТЗХодов.НоваяСтрока();
  3636. ТЗХодов.Откуда=а;
  3637. ТЗХодов.Куда=Куда;
  3638. ТЗХодов.ВзятаяФигура=Куда;
  3639. ОткудаСтр=ТаблицаСоответствий[а];
  3640. КудаСтр=ТаблицаСоответствий[Куда];
  3641. если КудаСтр>ОткудаСтр тогда
  3642. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3643. иначе
  3644. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3645. конецесли;
  3646. Если ПешкаНаПроходе=Куда Тогда
  3647. Кудастр=ТаблицаСоответствий[Куда+10];
  3648. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  3649. ТЗХодов.ВзятаяФигура=Куда+10;
  3650. КонецЕсли;
  3651. КонецЕсли;
  3652. КонецЕсли;
  3653. Куда=а-9;
  3654. что=Поле[Куда];
  3655. Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
  3656. Если а<30 Тогда
  3657. Для в=2 по 5 цикл
  3658. ЧтоДвигаем=в-7;
  3659. ТЗХодов.НоваяСтрока();
  3660. ТЗХодов.Откуда=а;
  3661. ТЗХодов.Куда=Куда;
  3662. ТЗХодов.ВзятаяФигура=Куда;
  3663. ОткудаСтр=ТаблицаСоответствий[а];
  3664. КудаСтр=ТаблицаСоответствий[Куда];
  3665. если КудаСтр>ОткудаСтр тогда
  3666. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3667. иначе
  3668. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3669. конецесли;
  3670. ТЗХодов.Превращение=ЧтоДвигаем;
  3671. Конеццикла;
  3672. Иначе
  3673. ТЗХодов.НоваяСтрока();
  3674. ТЗХодов.Откуда=а;
  3675. ТЗХодов.Куда=Куда;
  3676. ТЗХодов.ВзятаяФигура=Куда;
  3677. ОткудаСтр=ТаблицаСоответствий[а];
  3678. КудаСтр=ТаблицаСоответствий[Куда];
  3679. если КудаСтр>ОткудаСтр тогда
  3680. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3681. иначе
  3682. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3683. конецесли;
  3684. Если ПешкаНаПроходе=Куда Тогда
  3685. Кудастр=ТаблицаСоответствий[Куда+10];
  3686. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
  3687. ТЗХодов.ВзятаяФигура=Куда+10;
  3688. КонецЕсли;
  3689. КонецЕсли;
  3690. КонецЕсли;
  3691. ИначеЕсли ЧтоДвигаем=-2 Тогда
  3692. Для в=1 по 8 цикл
  3693. Куда=а+ХодыКоня[в];
  3694. Если (Куда<=0) или (Куда>=100) Тогда
  3695. продолжить;
  3696. КонецЕсли;
  3697. что=Поле[Куда];
  3698. Если Что=0 Тогда
  3699. стр2="";
  3700. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+200,стр2,"Поле")=0 Тогда
  3701. продолжить;
  3702. КонецЕсли;
  3703. КонецЕсли;
  3704. Если (Что>=0)и(Что<8) Тогда
  3705. ТЗХодов.НоваяСтрока();
  3706. ТЗХодов.Откуда=а;
  3707. ТЗХодов.Куда=Куда;
  3708. ОткудаСтр=ТаблицаСоответствий[а];
  3709. КудаСтр=ТаблицаСоответствий[Куда];
  3710. если КудаСтр>ОткудаСтр тогда
  3711. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3712. иначе
  3713. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3714. конецесли;
  3715. Если что<>0 Тогда
  3716. ТЗХодов.ВзятаяФигура=Куда;
  3717. КонецЕсли;
  3718. Конецесли;
  3719. КонецЦикла;
  3720. ИначеЕсли ЧтоДвигаем=-3 Тогда
  3721. Для в=1 по 4 цикл
  3722. Куда=а;
  3723. Для с=1 по 10 цикл
  3724. Куда=Куда+ХодыСлона[в];
  3725. что=Поле[Куда];
  3726. Если Что=0 Тогда
  3727. стр2="";
  3728. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+300,стр2,"Поле")=0 Тогда
  3729. продолжить;
  3730. КонецЕсли;
  3731. КонецЕсли;
  3732. Если (Что>=0) и (Что<7) Тогда
  3733. ТЗХодов.НоваяСтрока();
  3734. ТЗХодов.Откуда=а;
  3735. ТЗХодов.Куда=Куда;
  3736. ОткудаСтр=ТаблицаСоответствий[а];
  3737. КудаСтр=ТаблицаСоответствий[Куда];
  3738. если КудаСтр>ОткудаСтр тогда
  3739. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3740. иначе
  3741. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3742. конецесли;
  3743. Если что<>0 Тогда
  3744. ТЗХодов.ВзятаяФигура=Куда;
  3745. прервать;
  3746. КонецЕсли;
  3747. Конецесли;
  3748. Если Что<>0 Тогда
  3749. прервать;
  3750. КонецЕсли;
  3751. КонецЦикла;
  3752. Конеццикла;
  3753. ИначеЕсли ЧтоДвигаем=-4 Тогда
  3754. Для в=1 по 4 цикл
  3755. Куда=а;
  3756. Для с=1 по 10 цикл
  3757. Куда=Куда+ХодыЛадьи[в];
  3758. что=Поле[Куда];
  3759. Если Что=0 Тогда
  3760. стр2="";
  3761. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+400,стр2,"Поле")=0 Тогда
  3762. продолжить;
  3763. КонецЕсли;
  3764. КонецЕсли;
  3765. Если (Что>=0) и (Что<7) Тогда
  3766. ТЗХодов.НоваяСтрока();
  3767. ТЗХодов.Откуда=а;
  3768. ТЗХодов.Куда=Куда;
  3769. ОткудаСтр=ТаблицаСоответствий[а];
  3770. КудаСтр=ТаблицаСоответствий[Куда];
  3771. если КудаСтр>ОткудаСтр тогда
  3772. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3773. иначе
  3774. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3775. конецесли;
  3776. Если (а=82)или(Куда=82) Тогда
  3777. Если праворокировки=3 Тогда
  3778. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
  3779. ТзХодов.Оценка=ПотеряРокировок;
  3780. ИначеЕсли ПравоРокировки=2 Тогда
  3781. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  3782. ТзХодов.Оценка=ПотеряРокировок;
  3783. КонецЕсли;
  3784. ИначеЕсли (а=89)или(Куда=89) Тогда
  3785. Если праворокировки=3 Тогда
  3786. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
  3787. ТзХодов.Оценка=ПотеряРокировок;
  3788. ИначеЕсли ПравоРокировки=1 Тогда
  3789. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  3790. ТзХодов.Оценка=ПотеряРокировок;
  3791. КонецЕсли;
  3792. КонецЕсли;
  3793. Если что<>0 Тогда
  3794. ТЗХодов.ВзятаяФигура=Куда;
  3795. прервать;
  3796. КонецЕсли;
  3797. Конецесли;
  3798. Если Что<>0 Тогда
  3799. прервать;
  3800. КонецЕсли;
  3801. КонецЦикла;
  3802. Конеццикла;
  3803. ИначеЕсли ЧтоДвигаем=-5 Тогда
  3804. Для в=1 по 4 цикл
  3805. Куда=а;
  3806. Для с=1 по 10 цикл
  3807. Куда=Куда+ХодыЛадьи[в];
  3808. что=Поле[Куда];
  3809. Если Что=0 Тогда
  3810. стр2="";
  3811. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
  3812. продолжить;
  3813. КонецЕсли;
  3814. КонецЕсли;
  3815. Если (Что>=0) и (Что<7) Тогда
  3816. ТЗХодов.НоваяСтрока();
  3817. ТЗХодов.Откуда=а;
  3818. ТЗХодов.Куда=Куда;
  3819. ОткудаСтр=ТаблицаСоответствий[а];
  3820. КудаСтр=ТаблицаСоответствий[Куда];
  3821. если КудаСтр>ОткудаСтр тогда
  3822. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3823. иначе
  3824. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3825. конецесли;
  3826. Если что<>0 Тогда
  3827. ТЗХодов.ВзятаяФигура=Куда;
  3828. прервать;
  3829. КонецЕсли;
  3830. Конецесли;
  3831. Если Что<>0 Тогда
  3832. прервать;
  3833. КонецЕсли;
  3834. КонецЦикла;
  3835. Конеццикла;
  3836. Для в=1 по 4 цикл
  3837. Куда=а;
  3838. Для с=1 по 10 цикл
  3839. Куда=Куда+ХодыСлона[в];
  3840. что=Поле[Куда];
  3841. Если Что=0 Тогда
  3842. стр2="";
  3843. Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
  3844. продолжить;
  3845. КонецЕсли;
  3846. КонецЕсли;
  3847. Если (Что>=0) и (Что<7) Тогда
  3848. ТЗХодов.НоваяСтрока();
  3849. ТЗХодов.Откуда=а;
  3850. ТЗХодов.Куда=Куда;
  3851. ОткудаСтр=ТаблицаСоответствий[а];
  3852. КудаСтр=ТаблицаСоответствий[Куда];
  3853. если КудаСтр>ОткудаСтр тогда
  3854. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3855. иначе
  3856. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3857. конецесли;
  3858. Если что<>0 Тогда
  3859. ТЗХодов.ВзятаяФигура=Куда;
  3860. прервать;
  3861. КонецЕсли;
  3862. Конецесли;
  3863. Если Что<>0 Тогда
  3864. прервать;
  3865. КонецЕсли;
  3866. КонецЦикла;
  3867. Конеццикла;
  3868. ИначеЕсли ЧтоДвигаем=-6 Тогда
  3869. Для в=1 по 4 цикл
  3870. Куда=а+ХодыЛадьи[в];
  3871. что=Поле[Куда];
  3872. Если что=0 Тогда
  3873. продолжить;
  3874. КонецЕсли;
  3875. Если (Что>=0) и (Что<7) Тогда
  3876. ТЗХодов.НоваяСтрока();
  3877. ТЗХодов.Откуда=а;
  3878. ТЗХодов.Куда=Куда;
  3879. ОткудаСтр=ТаблицаСоответствий[а];
  3880. КудаСтр=ТаблицаСоответствий[Куда];
  3881. если КудаСтр>ОткудаСтр тогда
  3882. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3883. иначе
  3884. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3885. конецесли;
  3886. Если (а=86) Тогда
  3887. Если праворокировки>0 Тогда
  3888. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  3889. ТзХодов.Оценка=ПотеряРокировок;
  3890. КонецЕсли;
  3891. КонецЕсли;
  3892. Если что<>0 Тогда
  3893. ТЗХодов.ВзятаяФигура=Куда;
  3894. КонецЕсли;
  3895. Конецесли;
  3896. Конеццикла;
  3897. Для в=1 по 4 цикл
  3898. Куда=а+ХодыСлона[в];
  3899. что=Поле[Куда];
  3900. Если что=0 Тогда
  3901. продолжить;
  3902. КонецЕсли;
  3903. Если (Что>=0) и (Что<7) Тогда
  3904. ТЗХодов.НоваяСтрока();
  3905. ТЗХодов.Откуда=а;
  3906. ТЗХодов.Куда=Куда;
  3907. ОткудаСтр=ТаблицаСоответствий[а];
  3908. КудаСтр=ТаблицаСоответствий[Куда];
  3909. если КудаСтр>ОткудаСтр тогда
  3910. ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
  3911. иначе
  3912. ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
  3913. конецесли;
  3914. Если (а=86) Тогда
  3915. Если праворокировки>0 Тогда
  3916. ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
  3917. ТзХодов.Оценка=ПотеряРокировок;
  3918. КонецЕсли;
  3919. КонецЕсли;
  3920. Если что<>0 Тогда
  3921. ТЗХодов.ВзятаяФигура=Куда;
  3922. КонецЕсли;
  3923. Конецесли;
  3924. Конеццикла;
  3925. //Короткая Рокировка
  3926. Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
  3927. Если Поле[89]=-4 Тогда
  3928. Если (Поле[87]=0) и (Поле[88]=0) Тогда
  3929. стр2="";
  3930. Если ТЗХодовСКоторыхШах.НайтиЗначение(587,стр2,"Поле")>0 Тогда
  3931. Если корольПодБоем(Поле,86,2)=1 Тогда
  3932. продолжить;
  3933. КонецЕсли;
  3934. Если корольПодБоем(Поле,87,2)=0 Тогда
  3935. ТЗХодов.НоваяСтрока();
  3936. ТзХодов.Оценка=-СделанаРокировка;
  3937. ТЗХодов.Откуда=а;
  3938. ТЗХодов.Куда=88;
  3939. ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
  3940. КонецЕсли;
  3941. КонецЕсли;
  3942. КонецЕсли;
  3943. КонецЕсли;
  3944. КонецЕсли;
  3945. //Длинная Рокировка
  3946. Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
  3947. Если Поле[82]=-4 Тогда
  3948. Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
  3949. стр2="";
  3950. Если ТЗХодовСКоторыхШах.НайтиЗначение(585,стр2,"Поле")>0 Тогда
  3951. Если корольПодБоем(Поле,86,2)=1 Тогда
  3952. продолжить;
  3953. КонецЕсли;
  3954. Если корольПодБоем(Поле,85,2)=0 Тогда
  3955. ТЗХодов.НоваяСтрока();
  3956. ТзХодов.Оценка=-СделанаРокировка;
  3957. ТЗХодов.Откуда=а;
  3958. ТЗХодов.Куда=84;
  3959. ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
  3960. КонецЕсли;
  3961. КонецЕсли;
  3962. КонецЕсли;
  3963. КонецЕсли;
  3964. КонецЕсли;
  3965. КонецЕсли;
  3966. КонецЦикла;
  3967. КонецЕсли;
  3968. ТЗХодов.ВыбратьСтроки();
  3969. Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  3970. ЧтоХодит=Поле[ТЗХодов.Откуда];
  3971. съели=0;
  3972. Если ТЗХодов.ВзятаяФигура<>0 Тогда
  3973. ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
  3974. Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
  3975. Если ОчередьХода=1 Тогда
  3976. Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
  3977. Иначе
  3978. Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
  3979. КонецЕсли;
  3980. КонецЕсли;
  3981. Если ТЗХодов.Превращение<>0 Тогда
  3982. Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
  3983. КонецЕсли;
  3984. Если ОчередьХода=1 Тогда
  3985. Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
  3986. Иначе
  3987. Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
  3988. КонецЕсли;
  3989. ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
  3990. КонецЦикла;
  3991. //ТЗХодов.выбратьСтроки();
  3992. //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
  3993. // Если ТЗХодов.Куда=ПослФиг Тогда
  3994. // ТЗХодов.ПослФиг=1;
  3995. // КонецЕсли;
  3996. //КонецЦикла;
  3997. //Если ОчередьХода=1 Тогда
  3998. // ТЗХодов.сортировать("ПослФиг-,Оценка-");
  3999. //Иначе
  4000. // ТЗХодов.сортировать("ПослФиг-,Оценка+");
  4001. //КонецЕсли;
  4002. Если ОчередьХода=1 Тогда
  4003. ТЗХодов.сортировать("Оценка-");
  4004. Иначе
  4005. ТЗХодов.сортировать("Оценка+");
  4006. КонецЕсли;
  4007. ТЗХодовСКоторыхШах.УдалитьСтроки();
  4008. КонецФункции
  4009. Функция ГенераторВозможныхХодов(стр,ТЗХ)
  4010. перем а;
  4011. перем в;
  4012. ОчередьХода=КодСимв(сред(стр,67,1))-33;
  4013. ТЗХ.Очистить();
  4014. ТЗХ=0;
  4015. ТЗХ=Создатьобъект("ТаблицаЗначений");
  4016. ГенераторХодов(Стр,ТЗХ);
  4017. в=ТЗХ.КоличествоСтрок();
  4018. Для а=1 по ТЗХ.КоличествоСтрок() Цикл
  4019. ТЗХ.ПолучитьСтрокуПоНомеру(в-а+1);
  4020. ПозицияИзСтроки(поле,ТЗХ.НоваяПозиция);
  4021. Если КорольПодБоем(поле,ТаблицаСоответствий1[найти(ТЗХ.НоваяПозиция,симв(48+(3-очередьхода*2)*6))],ОчередьХода)=1 Тогда
  4022. ТЗХ.УдалитьСтроку();
  4023. КонецЕсли;
  4024. КонецЦикла;
  4025. ПозицияИзСтроки(поле,стр);
  4026. возврат КорольПодБоем(поле,ТаблицаСоответствий1[найти(стр,симв(48+(3-очередьхода*2)*6))],ОчередьХода);
  4027. КонецФункции
  4028. //----------------------------------------------------
  4029. Процедура инициализация()
  4030. перем СЗ;
  4031. перем стр;
  4032. перем а;
  4033. //попытка
  4034. // таб.очистить();
  4035. // таб.показать(,,-1);
  4036. // таб=0;
  4037. //Исключение
  4038. //КонецПопытки;
  4039. ПотраченоБелыми=0;
  4040. ПотраченоЧерными=0;
  4041. ТЗХодовСКоторыхШах.УдалитьСтроки();
  4042. ТЗДебютов.НоваяКолонка("рн","Число",10,3);
  4043. сброситьгенератор();
  4044. ТЗДебютов.ВыбратьСтроки();
  4045. Пока ТЗДебютов.ПолучитьСтроку()=1 цикл
  4046. ТЗДебютов.рн=СлучайноеЧисло()*10000;
  4047. Конеццикла;
  4048. ТЗДебютов.Сортировать("рн+");
  4049. ТЗДебютов.УдалитьКолонку("рн");
  4050. сч=0;
  4051. номерхода11=0;
  4052. КоэфВес=1.005;
  4053. СделанаРокировка=0.1;
  4054. ПотеряРокировок=0.2;
  4055. //Таб=создатьОбъект("Таблица");
  4056. // Вынесем в ТЗНазванийФигур Названия Секций для вывода на Экран
  4057. СЗ=Создатьобъект("СписокЗначений");
  4058. стр="""Пусто"",""Пусто"",""Пусто"",""ЧКр"",""ЧФ"",""ЧЛ"",""ЧС"",""ЧК"",""Чп"",""Пусто"",""Бп"""+
  4059. ",""БК"",""БС"",""БЛ"",""БФ"",""БКр"",""Пусто"",""Пусто"",""Пусто""";
  4060. ТЗНазванийФигур=СоздатьОбъект("ТаблицаЗначений");
  4061. СЗ.ИзСтрокиСРазделителями(стр);
  4062. СЗ.Выгрузить(ТЗНазванийФигур);
  4063. // Очистим Доску
  4064. Для а=1 по 100 Цикл
  4065. ТекущаяПозиция[а]=0;
  4066. КонецЦикла;
  4067. // Оформим край Доски
  4068. Для а=1 по 10 Цикл
  4069. ТекущаяПозиция[а]=9;
  4070. ТекущаяПозиция[90+а]=9;
  4071. ТекущаяПозиция[а*10-9]=9;
  4072. ТекущаяПозиция[а*10]=9;
  4073. Конеццикла;
  4074. ТекущаяПозиция[101]=3;//Белым Разрешены Обе Рокировки
  4075. ТекущаяПозиция[102]=3;// Черным Разрешены Обе Рокировки
  4076. ТекущаяПозиция[103]=1;// Очередь Хода
  4077. ТекущаяПозиция[104]=0;
  4078. // Проставим На Доску Фигуры (всего - 32) Белые 12-19,22-29; Черные 72-79,82-89;
  4079. Для а=1 по 8 Цикл
  4080. ТекущаяПозиция[а+21]=1;
  4081. ТекущаяПозиция[а+71]=-1;
  4082. КонецЦикла;
  4083.  
  4084. ТекущаяПозиция[12]=4;//Белая Ладья
  4085. ТекущаяПозиция[19]=4;//Белая Ладья
  4086. ТекущаяПозиция[14]=3;//Белый Слон
  4087. ТекущаяПозиция[17]=3;//Белый Слон
  4088. ТекущаяПозиция[13]=2;//Белый Конь
  4089. ТекущаяПозиция[18]=2;//Белый конь
  4090. ТекущаяПозиция[15]=5;//Белый Ферзь
  4091. ТекущаяПозиция[16]=6;//Белый Король
  4092.  
  4093. ТекущаяПозиция[82]=-4;//Черная Ладья
  4094. ТекущаяПозиция[89]=-4;//Черная Ладья
  4095. ТекущаяПозиция[84]=-3;//Черный Слон
  4096. ТекущаяПозиция[87]=-3;//Черный Слон
  4097. ТекущаяПозиция[83]=-2;//Черный Конь
  4098. ТекущаяПозиция[88]=-2;//Черный конь
  4099. ТекущаяПозиция[85]=-5;//Черный Ферзь
  4100. ТекущаяПозиция[86]=-6;//Черный Король
  4101.  
  4102. //ТекущаяПозиция[79]=-6;
  4103. //ТекущаяПозиция[78]=-1;
  4104. //ТекущаяПозиция[76]=5;
  4105. //ТекущаяПозиция[73]=2;
  4106. //ТекущаяПозиция[72]=-1;
  4107. //ТекущаяПозиция[59]=-1;
  4108. //ТекущаяПозиция[58]=6;
  4109. //ТекущаяПозиция[57]=-1;
  4110. //ТекущаяПозиция[55]=1;
  4111. //ТекущаяПозиция[48]=-3;
  4112. //ТекущаяПозиция[44]=1;
  4113. //ТекущаяПозиция[33]=1;
  4114. //ТекущаяПозиция[29]=1;
  4115. //ТекущаяПозиция[28]=-5;
  4116. //ТекущаяПозиция[101]=0;
  4117. //ТекущаяПозиция[102]=0;
  4118. //ТекущаяПозиция[103]=2;// Очередь Хода
  4119. //ТекущаяПозиция[104]=0;
  4120.  
  4121. ТекущаяПозицияСтр=ПозицияВСтроку(Текущаяпозиция);
  4122.  
  4123. ХодыКоня[1]=12;
  4124. ХодыКоня[2]=21;
  4125. ХодыКоня[3]=-12;
  4126. ХодыКоня[4]=-21;
  4127. ХодыКоня[5]=-8;
  4128. ХодыКоня[6]=8;
  4129. ХодыКоня[7]=19;
  4130. ХодыКоня[8]=-19;
  4131. // Ходы Слона
  4132. ХодыСлона[1]=11;
  4133. ХодыСлона[2]=9;
  4134. ХодыСлона[3]=-11;
  4135. ХодыСлона[4]=-9;
  4136. // Ходы Ладьи
  4137. ХодыЛадьи[1]=10;
  4138. ХодыЛадьи[2]=1;
  4139. ХодыЛадьи[3]=-10;
  4140. ХодыЛадьи[4]=-1;
  4141. Для а=1 по 8 цикл
  4142. Для в=1 по 8 цикл
  4143. переворот[а*10+в+1]=90-а*10+в+1;
  4144. КонецЦикла;
  4145. КонецЦикла;
  4146. Для а=1 по 900 цикл
  4147. ОценкаПоложения[а]=0;
  4148. КонецЦикла;
  4149. Для а=2 по 8 цикл
  4150. Для в=4 по 5 цикл
  4151. ОценкаПоложения[101+а*10+в+1]=а*0.003;
  4152. КонецЦикла;
  4153. КонецЦикла;
  4154. Для а=2 по 8 цикл
  4155. Для в=1 по 2 цикл
  4156. Если а=2 Тогда
  4157. ОценкаПоложения[101+а*10+в+1]=0.04;
  4158. ОценкаПоложения[101+а*10+в+7]=0.04;
  4159. ИначеЕсли а=3 Тогда
  4160. ОценкаПоложения[101+а*10+в+1]=0.03;
  4161. ОценкаПоложения[101+а*10+в+7]=0.03;
  4162. КонецЕсли;
  4163. КонецЦикла;
  4164. КонецЦикла;
  4165. Для а=1 по 8 цикл
  4166. Для в=1 по 8 цикл
  4167. ОценкаПоложения[202+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
  4168. КонецЦикла;
  4169. КонецЦикла;
  4170. Для а=3 по 6 цикл
  4171. Для в=3 по 6 цикл
  4172. ОценкаПоложения[202+а*10+в+1]=ОценкаПоложения[202+а*10+в+1]+0.003;
  4173. КонецЦикла;
  4174. КонецЦикла;
  4175. Для а=1 по 8 цикл
  4176. Для в=1 по 8 цикл
  4177. ОценкаПоложения[303+а*10+в+1]=0.03+(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
  4178. КонецЦикла;
  4179. КонецЦикла;
  4180. ОценкаПоложения[303+3*10+4+1]=-0.2;
  4181. ОценкаПоложения[303+3*10+5+1]=-0.2;
  4182. ОценкаПоложения[303+2*10+2+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
  4183. ОценкаПоложения[303+2*10+7+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
  4184. Для а=1 по 8 цикл
  4185. ОценкаПоложения[404+а*10+5+1]=0.0045;
  4186. ОценкаПоложения[404+а*10+4+1]=0.0045;
  4187. ОценкаПоложения[404+а*10+3+1]=0.004;
  4188. ОценкаПоложения[404+а*10+6+1]=0.004;
  4189. КонецЦикла;
  4190. Для в=1 по 8 цикл
  4191. ОценкаПоложения[404+70+в+1]=0.2;
  4192. ОценкаПоложения[404+80+в+1]=0.21;
  4193. КонецЦикла;
  4194. ОценкаПоложения[606+1*10+1+1]=0.0049;
  4195. ОценкаПоложения[606+1*10+2+1]=0.005;
  4196. ОценкаПоложения[606+1*10+7+1]=0.005;
  4197. ОценкаПоложения[606+1*10+8+1]=0.0049;
  4198. Для а=1 по 8 цикл
  4199. Для в=1 по 8 цикл
  4200. ОценкаПоложения[606+а*10+в+1]=ОценкаПоложения[606+а*10+в+1]+((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))*0.00001;
  4201. КонецЦикла;
  4202. КонецЦикла;
  4203. ОценкаПоложения[505+1*10+4+1]=0.2;
  4204. ОткудаПоследнийХод=0;
  4205. КудаПоследнийХод=0;
  4206. Для а=1 по 104 цикл
  4207. Поле[а]=ТекущаяПозиция[а];
  4208. КонецЦикла;
  4209. а=11;
  4210. с=1;
  4211. Пока а<90 Цикл
  4212. Для в=1 по 8 Цикл
  4213. ТаблицаСоответствий[а+в]=с;
  4214. ТаблицаСоответствий1[с]=а+в;
  4215. с=с+1;
  4216. КонецЦикла;
  4217. а=а+10;
  4218. Конеццикла;
  4219. ТЗХ=0;
  4220. ТЗХ=Создатьобъект("ТаблицаЗначений");
  4221. ГенераторХодов(ТекущаяПозицияСтр,ТЗХ);
  4222. // ТЗХ.ВыбратьСтроку();
  4223. идетИгра=1;
  4224. ходовБезВзятий=0;
  4225. ТЗБывшихПозиций1=Создатьобъект("ТаблицаЗначений");
  4226. ТЗБывшихпозиций1.НоваяКолонка("Позиция","Строка",68);
  4227. ТЗБывшихПозиций1.НоваяСтрока();
  4228. ТЗБывшихПозиций1.Позиция=ТекущаяПозицияСтр;
  4229. ТЗБывшихПозиций2=Создатьобъект("ТаблицаЗначений");
  4230. ТЗБывшихпозиций2.НоваяКолонка("Позиция","Строка",68);
  4231. СброситьГенератор();
  4232. ВесФигуры[1]=-10000;
  4233. ВесФигуры[2]=-9;
  4234. ВесФигуры[3]=-5;
  4235. ВесФигуры[4]=-3;
  4236. ВесФигуры[5]=-3;
  4237. ВесФигуры[6]=-1;
  4238. ВесФигуры[7]=0;
  4239. ВесФигуры[8]=1;
  4240. ВесФигуры[9]=3;
  4241. ВесФигуры[10]=3;
  4242. ВесФигуры[11]=5;
  4243. ВесФигуры[12]=9;
  4244. ВесФигуры[13]=10000;
  4245. ТекущееВремя(ч,м,с);
  4246. времяначала=ч*60*60+м*60+с;
  4247. времябелых=0;
  4248. времячерных=0;
  4249. Если идетигра=1 Тогда
  4250. ПоказатьПозицию();
  4251. Если (ТекущаяПозиция[103]=1) и (белыеКомпьютер=1) Тогда
  4252. КомпьютерДелаетХод();
  4253. возврат;
  4254. ИначеЕсли (ТекущаяПозиция[103]=2) и (черныеКомпьютер=1) Тогда
  4255. КомпьютерДелаетХод();
  4256. возврат;
  4257. КонецЕсли;
  4258. КонецЕсли;
  4259. КонецПроцедуры // Инициализация
  4260. //-----------------------------------------------------
  4261. Процедура СделатьХод() //ТЗХ установлено на нужной строке....
  4262. перем а;
  4263. перем стр;
  4264. перем колЛегкихФигур;
  4265. перем ч,м,с;
  4266. перем врем;
  4267. ТекущееВремя(ч,м,с);
  4268. врем=ч*60*60+м*60+с;
  4269. Если номерХода11<>0 Тогда
  4270. Если ТекущаяПозиция[103]=1 Тогда
  4271. Если белыекомпьютер=0 Тогда
  4272. врем=врем-2;
  4273. Иначе
  4274. врем=врем-1;
  4275. КонецЕсли;
  4276. ВремяБелых=ВремяБелых+макс(врем-времяначала,0);
  4277. Иначе
  4278. Если черныекомпьютер=0 Тогда
  4279. врем=врем-2;
  4280. Иначе
  4281. врем=врем-1;
  4282. КонецЕсли;
  4283. ВремяЧерных=ВремяЧерных+макс(врем-времяначала,0);
  4284. КонецЕсли;
  4285. КонецЕсли;
  4286. //сообщить(""+времябелых+" "+времячерных);
  4287. ХодовБезВзятий=ХодовБезВзятий+1;
  4288. Если (ТекущаяПозиция[ТЗХ.Откуда]=1)или(ТекущаяПозиция[ТЗХ.Откуда]=-1)или
  4289. (ТЗХ.ВзятаяФигура<>0)или(ТЗХ.Превращение<>0) Тогда
  4290. ХодовБезВзятий=0;
  4291. ТЗБывшихПозиций1.УдалитьСтроки();
  4292. ТЗБывшихПозиций2.УдалитьСтроки();
  4293. //сообщить("Исключение");
  4294. КонецЕсли;
  4295. ОткудаПоследнийХод=ТЗХ.Откуда;
  4296. КудаПоследнийХод=ТЗХ.Куда;
  4297. //Если (белыеКомпьютер=0) и (черныеКомпьютер=0) Тогда
  4298. // ТЗДебютов.НоваяСтрока();
  4299. // ТЗДебютов.Позиция=ТекущаяПозицияСтр;
  4300. // ТЗДебютов.Ход=ТЗХ.НоваяПозиция;
  4301. //КонецЕсли;
  4302. ТекущаяПозицияСтр=ТЗХ.НоваяПозиция;
  4303. // Сообщить(ТекущаяПозицияСтр);
  4304. ПозицияИзСтроки(ТекущаяПозиция,ТекущаяПозицияСтр);
  4305. ПоказатьПозицию();
  4306. ТекущееВремя(ч,м,с);
  4307. времяначала=ч*60*60+м*60+с;
  4308. НомерХода11=НомерХода11+1;
  4309. Если номерхода11=4 Тогда
  4310. ОценкаПоложения[202+1*10+7+1]=-0.01;
  4311. ОценкаПоложения[303+1*10+6+1]=-0.02;
  4312. КонецЕсли;
  4313. Если НомерХода11=16 Тогда
  4314. Для а=1 по 8 цикл
  4315. Для в=1 по 8 цикл
  4316. ОценкаПоложения[202+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
  4317. КонецЦикла;
  4318. КонецЦикла;
  4319. Для а=3 по 6 цикл
  4320. Для в=3 по 6 цикл
  4321. ОценкаПоложения[202+а*10+в+1]=ОценкаПоложения[202+а*10+в+1]+0.003;
  4322. КонецЦикла;
  4323. КонецЦикла;
  4324. Для а=1 по 8 цикл
  4325. Для в=1 по 8 цикл
  4326. ОценкаПоложения[303+а*10+в+1]=0.03+(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
  4327. КонецЦикла;
  4328. КонецЦикла;
  4329. ОценкаПоложения[505+1*10+4+1]=0;
  4330. ОценкаПоложения[303+2*10+2+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
  4331. ОценкаПоложения[303+2*10+7+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
  4332. КонецЕсли;
  4333. //сообщить(НомерХода11);
  4334. а=ГенераторВозможныхХодов(ТекущаяПозицияСтр,ТЗХ);
  4335. Если ТЗХ.КоличествоСтрок()=0 Тогда
  4336. идетИгра=0;
  4337. Если а=0 Тогда
  4338. предупреждение("Ничья, Пат!");
  4339. ИначеЕсли ТекущаяПозиция[103]=1 тогда
  4340. предупреждение("Черные поставили мат, они выиграли!");
  4341. Иначе
  4342. предупреждение("Белые поставили мат, они выиграли!");
  4343. КонецЕсли;
  4344. возврат;
  4345. КонецЕсли;
  4346. Если ХодовБезВзятий=100 Тогда
  4347. идетИгра=0;
  4348. предупреждение("Ничья по правилу пятидесяти ходов!");
  4349. возврат;
  4350. КонецЕсли;
  4351. стр="";
  4352. Если ТЗБывшихПозиций1.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")=0 Тогда
  4353. ТЗБывшихПозиций1.новаястрока();
  4354. ТЗБывшихПозиций1.позиция=ТекущаяПозицияСтр;
  4355. Иначе
  4356. стр="";
  4357. Если ТЗБывшихПозиций2.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")=0 Тогда
  4358. ТЗБывшихПозиций2.новаястрока();
  4359. ТЗБывшихПозиций2.позиция=ТекущаяПозицияСтр;
  4360. Иначе
  4361. идетИгра=0;
  4362. предупреждение("Ничья, Троекратное повторение позиции!");
  4363. возврат;
  4364. КонецЕсли;
  4365. КонецЕсли;
  4366. колЛегкихФигур=0;
  4367. Для а=1 по 100 цикл
  4368. стр=ТекущаяПозиция[а];
  4369. если (стр=2) или (стр=-2) или (стр=3) или (стр=-3) Тогда
  4370. колЛегкихФигур=колЛегкихФигур+1;
  4371. иначеесли (стр=1) или (стр=-1) или (стр=4) или (стр=-4) или (стр=5) или (стр=-5) тогда
  4372. КолЛегкихФигур=2; // Есть тяжелые фигуры, или пешки.
  4373. прервать;
  4374. КонецЕсли;
  4375. КонецЦикла;
  4376. Если коллегкихФигур<=1 Тогда
  4377. идетИгра=0;
  4378. предупреждение("Ничья, Нехватка материала!");
  4379. возврат;
  4380. КонецЕсли;
  4381. //сообщить("Вошли");
  4382. Если идетигра=1 Тогда
  4383. Если (ТекущаяПозиция[103]=1) и (белыеКомпьютер=1) Тогда
  4384. КомпьютерДелаетХод();
  4385. возврат;
  4386. ИначеЕсли (ТекущаяПозиция[103]=2) и (черныеКомпьютер=1) Тогда
  4387. КомпьютерДелаетХод();
  4388. возврат;
  4389. КонецЕсли;
  4390. КонецЕсли;
  4391. КонецПроцедуры
  4392. //------------------------------------------------------
  4393. Процедура УстановитьВесаФигур(зн)
  4394. Если Зн=0 Тогда
  4395. ВесФигуры[2]=-9;
  4396. ВесФигуры[3]=-5;
  4397. ВесФигуры[4]=-3;
  4398. ВесФигуры[5]=-3;
  4399. ВесФигуры[9]=3;
  4400. ВесФигуры[10]=3;
  4401. ВесФигуры[11]=5;
  4402. ВесФигуры[12]=9;
  4403. Иначеесли зн=1 Тогда
  4404. ВесФигуры[2]=-9*коэфвес;
  4405. ВесФигуры[3]=-5*коэфВес;
  4406. ВесФигуры[4]=-3*коэфВес;
  4407. ВесФигуры[5]=-3*коэфвес;
  4408. ВесФигуры[9]=3;
  4409. ВесФигуры[10]=3;
  4410. ВесФигуры[11]=5;
  4411. ВесФигуры[12]=9;
  4412. Иначеесли зн=2 Тогда
  4413. ВесФигуры[2]=-9;
  4414. ВесФигуры[3]=-5;
  4415. ВесФигуры[4]=-3;
  4416. ВесФигуры[5]=-3;
  4417. ВесФигуры[9]=3*коэфвес;
  4418. ВесФигуры[10]=3*коэфВес;
  4419. ВесФигуры[11]=5*коэфВес;
  4420. ВесФигуры[12]=9*коэфВес;
  4421. КонецЕсли;
  4422. КонецПроцедуры
  4423. //------------------------------------------------------
  4424. Процедура КомпьютерДелаетХод()
  4425. перем минуровень;
  4426. перем ми;
  4427. перем ма;
  4428. перем уровень;
  4429. перем лучшаяоценка;
  4430. перем оценкаперебора;
  4431. перем оценкаПеребора1;
  4432. перем м,ч,с;
  4433. перем допОценка;
  4434. перем а,в;
  4435. перем добавка;
  4436. перем очередьХода;
  4437. перем стр;
  4438. сч=0;
  4439. МинУровень=1;
  4440. МаксКолвоДобавок=2;
  4441. аварийка=0;
  4442. МинВремя=макс(Окр((времяОбдумывания+0.1)/2.5,0),1);
  4443. максВремя=минВремя*10;
  4444. ОчередьХода=ТекущаяПозиция[103];
  4445. //ХешТаблицаХодов.ВыбратьСтроки();
  4446. //Пока ХешТаблицаХодов.ПолучитьСтроку()=1 Цикл
  4447. // попытка
  4448. // ХешТаблицаХодов.Ход.Очистить();
  4449. // исключение
  4450. // КонецПопытки;
  4451. // ХешТаблицаХодов.Ход=0;
  4452. //КонецЦикла;
  4453. ХешТаблицаХодов.УдалитьСтроки();
  4454. ХешКорольБит.Удалитьстроки();
  4455. // сообщить(ОчередьХода);
  4456. Уровень=0;
  4457. ДопОценка=0;
  4458. сумвесб=0;
  4459. ПешекБ=0;
  4460. ПешекЧ=0;
  4461. сумвесч=0;
  4462. установитьвесафигур(0);
  4463. Для а=1 по 100 Цикл
  4464. в=ТекущаяПозиция[а];
  4465. Если (в>-8)и(в<8) Тогда
  4466. Если (в>1)и(в<6) Тогда
  4467. СумВесБ=СумВесБ+весФигуры[в+7];
  4468. КонецЕсли;
  4469. Если (в<-1)и(в>-6) Тогда
  4470. СумВесЧ=СумВесЧ-весФигуры[в+7];
  4471. КонецЕсли;
  4472. Если (в=-1) Тогда
  4473. пешекЧ=ПешекЧ+1;
  4474. Иначеесли в=1 тогда
  4475. пешекБ=пешекБ+1;
  4476. Конецесли;
  4477. ДопОценка=ДопОценка+весФигуры[в+7];
  4478. КонецЕсли;
  4479. КонецЦикла;
  4480. Если (СумВесБ<12)или(СумВесЧ<12) Тогда
  4481. //Эндшпиль
  4482. Для а=1 по 8 цикл
  4483. Для в=1 по 8 цикл
  4484. ОценкаПоложения[606+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.003-(в-4.5)*(в-4.5)*(а-4.5)*(а-4.5)*0.0003;
  4485. КонецЦикла;
  4486. КонецЦикла;
  4487. Для а=3 по 6 цикл
  4488. Для в=3 по 6 цикл
  4489. ОценкаПоложения[606+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))/2)*0.003;
  4490. КонецЦикла;
  4491. КонецЦикла;
  4492. Для а=1 по 8 цикл
  4493. Для в=1 по 8 цикл
  4494. ОценкаПоложения[505+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.0005;
  4495. КонецЦикла;
  4496. КонецЦикла;
  4497. Для а=1 по 8 цикл
  4498. Для в=1 по 8 цикл
  4499. ОценкаПоложения[101+а*10+в+1]=а*0.005+а*а*0.001;
  4500. КонецЦикла;
  4501. КонецЦикла;
  4502. // сообщить("Эндшпиль");
  4503. КонецЕсли;
  4504. Если (СумВесБ+СумВесЧ)<6 Тогда
  4505. Для а=1 по 8 цикл
  4506. Для в=1 по 8 цикл
  4507. ОценкаПоложения[404+а*10+в+1]=((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))*0.0001;
  4508. КонецЦикла;
  4509. КонецЦикла;
  4510. Для а=3 по 6 цикл
  4511. Для в=3 по 6 цикл
  4512. ОценкаПоложения[404+а*10+в+1]=0;
  4513. КонецЦикла;
  4514. КонецЦикла;
  4515. ОценкаПоложения[404+4*10+7+1]=-0.002;
  4516. ОценкаПоложения[404+4*10+2+1]=-0.002;
  4517. ОценкаПоложения[404+2*10+4+1]=-0.002;
  4518. ОценкаПоложения[404+2*10+5+1]=-0.002;
  4519. ОценкаПоложения[404+5*10+2+1]=-0.002;
  4520. ОценкаПоложения[404+5*10+7+1]=-0.002;
  4521. ОценкаПоложения[404+7*10+4+1]=-0.002;
  4522. ОценкаПоложения[404+7*10+5+1]=-0.002;
  4523.  
  4524. ОценкаПоложения[404+2*10+3+1]=-0.002;
  4525. ОценкаПоложения[404+3*10+2+1]=-0.002;
  4526. ОценкаПоложения[404+6*10+7+1]=-0.002;
  4527. ОценкаПоложения[404+7*10+6+1]=-0.002;
  4528. ОценкаПоложения[404+7*10+3+1]=-0.002;
  4529. ОценкаПоложения[404+3*10+7+1]=-0.002;
  4530. ОценкаПоложения[404+6*10+2+1]=-0.002;
  4531. ОценкаПоложения[404+2*10+6+1]=-0.002;
  4532.  
  4533. ОценкаПоложения[404+1*10+3+1]=0;
  4534. ОценкаПоложения[404+3*10+1+1]=0;
  4535. ОценкаПоложения[404+6*10+8+1]=0;
  4536. ОценкаПоложения[404+8*10+6+1]=0;
  4537. ОценкаПоложения[404+8*10+3+1]=0;
  4538. ОценкаПоложения[404+3*10+8+1]=0;
  4539. ОценкаПоложения[404+6*10+1+1]=0;
  4540. ОценкаПоложения[404+1*10+6+1]=0;
  4541. КонецЕсли;
  4542. //Если ДопОценка>1.2 Тогда
  4543. // УстановитьВесаФигур(1);
  4544. //Иначеесли ДопОценка<(-1.2) Тогда
  4545. // УстановитьВесаФигур(2);
  4546. //Иначе
  4547. // УстановитьВесаФигур(0);
  4548. //КонецЕсли;
  4549. Если ((СумВесБ<=5)и(ПешекБ=0))или((СумВесЧ<=5)и(ПешекЧ=0))или((СумВесБ=0)и(пешекБ<2))или((СумВесЧ=0)и(ПешекЧ<2)) Тогда
  4550. Разрешенпустойход=0;
  4551. Иначе
  4552. разрешенпустойход=1;
  4553. КонецЕсли;
  4554. Если очередьХода=1 Тогда
  4555. ДопОценка=Допоценка+0.5;
  4556. Иначе
  4557. ДопОценка=Допоценка-0.5;
  4558. КонецЕсли;
  4559.  
  4560. ТЗХ.ВыбратьСтроки();
  4561. Пока ТЗХ.ПолучитьСтроку()=1 Цикл
  4562. ТЗХ.Оценка=ТЗХ.Оценка+СлучайноеЧисло()*0.0002;
  4563. КонецЦикла;
  4564. ТекущееВремя(ч,м,с);
  4565. врем=ч*60*60+м*60+с;
  4566. врем1=врем;
  4567. стр="";
  4568. Если ТЗДебютов.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")>0 Тогда
  4569. сигнал();
  4570. ДДДХод=ТЗДебютов.ПолучитьЗначение(стр,"Ход");
  4571. стр="";
  4572. Если ТЗХ.НайтиЗначение(ДДДХод,стр,"НоваяПозиция")>0 Тогда
  4573. ТЗХ.СдвинутьСтроку(1-стр,стр);
  4574. ТЗХ.ПолучитьстрокуПоНомеру(1);
  4575. СделатьХод();
  4576. возврат;
  4577. КонецЕсли;
  4578. КонецЕсли;
  4579. Если ОчередьХода=1 Тогда
  4580. ТЗХ.Сортировать("Оценка-");
  4581. Иначе
  4582. ТЗХ.Сортировать("Оценка+");
  4583. КонецЕсли;
  4584. //ТЗХ.ВыбратьСтроку();
  4585. ЛучшаяОценка=ДопОценка+ТЗХ.получитьзначение(1,"Оценка");
  4586. Аварийка=0;
  4587. Nodes=0;
  4588. Пока ((Уровень<=МинУровень) или ((врем1-врем)<=МинВремя))и(ЛучшаяОценка<1000)и(ЛучшаяОценка>-1000)и(ТЗХ.КоличествоСтрок()>1) Цикл
  4589. // ТЗХ.выбратьСтроку();
  4590. //Если уровень>минуровень Тогда
  4591. // разрешитьаварийку=1;
  4592. //Иначе
  4593. // разрешитьаварийку=0;
  4594. //КонецЕсли;
  4595. maxLevel=40;
  4596. последняяоценка=лучшаяоценка;
  4597. Если ОчередьХода=1 Тогда
  4598. ЛучшаяОценка=-10000000;
  4599. Иначе
  4600. ЛучшаяОценка= 10000000;
  4601. КонецЕсли;
  4602. МИ=-1000;
  4603. МА= 1000;
  4604. Для а=1 по ТЗХ.КоличествоСтрок() Цикл
  4605. Если (Уровень>МинУровень)и(((ОчередьХода=1)и(ЛучшаяОценка>-500))или((ОчередьХода=2)и(ЛучшаяОценка<500))или(а=1)) Тогда
  4606. РазрешитьАварийку=1;
  4607. Иначе
  4608. РазрешитьАварийку=0;
  4609. КонецЕсли;
  4610. состояние(""+(макс(Уровень+1,0))+"."+а+"/"+ТЗХ.КоличествоСтрок()+" "+Nodes);
  4611. ТЗХ.ПолучитьСтрокуПоНомеру(а);
  4612. Если а>1 Тогда
  4613. Если ОчередьХода=1 Тогда
  4614. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МИ+0.00001,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4615. Если Аварийка=1 тогда
  4616. ОценкаПеребора=ми-0.00001;
  4617. КонецЕсли;
  4618. Если ОценкаПеребора>МИ Тогда
  4619. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4620. Если Аварийка=1 тогда
  4621. ОценкаПеребора=МИ+0.00001;
  4622. КонецЕсли;
  4623. КонецЕсли;
  4624. Иначе
  4625. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МА-0.00001,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4626. Если Аварийка=1 тогда
  4627. ОценкаПеребора=МА+0.00001;
  4628. КонецЕсли;
  4629. Если ОценкаПеребора<МА Тогда
  4630. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4631. Если Аварийка=1 тогда
  4632. ОценкаПеребора=ма-0.00001;
  4633. КонецЕсли;
  4634. КонецЕсли;
  4635. КонецЕсли;
  4636. Иначе
  4637. Если Уровень<=0 Тогда
  4638. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,ПоследняяОценка-0.5,ПоследняяОценка+0.5,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4639. Если ОценкаПеребора>=ПоследняяОценка+0.5 Тогда
  4640. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,ПоследняяОценка-0.5,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4641. ИначеЕсли ОценкаПеребора<=ПоследняяОценка-0.5 Тогда
  4642. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,ПоследняяОценка+0.5,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4643. КонецЕсли;
  4644. Иначе
  4645. ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
  4646. КонецЕсли
  4647. КонецЕсли;
  4648. Если ОчередьХода=1 Тогда
  4649. МИ=Макс(МИ,ОценкаПеребора);
  4650. Если ОценкаПеребора>ЛучшаяОценка Тогда
  4651. ЛучшаяОценка=ОценкаПеребора+0.0005;
  4652. МИ=ЛучшаяОценка;
  4653. ТЗХ.СдвинутьСтроку(1-а,а);
  4654. КонецЕсли;
  4655. Иначе
  4656. МА=Мин(МА,ОценкаПеребора);
  4657. Если ОценкаПеребора<ЛучшаяОценка Тогда
  4658. ЛучшаяОценка=ОценкаПеребора-0.0005;
  4659. МА=ЛучшаяОценка;
  4660. ТЗХ.СдвинутьСтроку(1-а,а);
  4661. КонецЕсли;
  4662. КонецЕсли;
  4663. Если аварийка=1 тогда
  4664. прервать;
  4665. КонецЕсли;
  4666. //Если разрешитьаварийку=1 Тогда
  4667. // текущеевремя(ч,м,с);
  4668. // врем1=ч*60*60+м*60+с;
  4669. // Если врем1<врем Тогда
  4670. // врем=врем1;
  4671. // КонецЕсли;
  4672. // Если (Врем1>(Врем+МаксВремя)) Тогда
  4673. // Аварийка=1;
  4674. // КонецЕсли;
  4675. //КонецЕсли;
  4676. //Если аварийка=1 тогда
  4677. // прервать;
  4678. //КонецЕсли;
  4679. КонецЦикла;
  4680. текущеевремя(ч,м,с);
  4681. врем1=ч*60*60+м*60+с;
  4682. Если врем1<врем Тогда
  4683. врем=врем1;
  4684. КонецЕсли;
  4685. //сообщить(""+(макс(Уровень+1,1))+"."+а+"/"+ТЗХ.КоличествоСтрок()+" "+Nodes+" "+ЛучшаяОценка+" "+ХешТаблицаХодов.КоличествоСтрок()+" "+(врем1-врем));
  4686. Если аварийка=1 тогда
  4687. прервать;
  4688. КонецЕсли;
  4689. Уровень=Уровень+1;
  4690. //сообщить(""+Уровень+" "+ЛучшаяОценка);
  4691. Если ЛучшаяОценка>1.2 Тогда
  4692. УстановитьВесаФигур(1);
  4693. Иначеесли ЛучшаяОценка<(-1.2) Тогда
  4694. УстановитьВесаФигур(2);
  4695. Иначе
  4696. УстановитьВесаФигур(0);
  4697. КонецЕсли;
  4698. ТекущееВремя(ч,м,с);
  4699. врем1=ч*60*60+м*60+с;
  4700. Если врем1<врем Тогда
  4701. врем=врем1;
  4702. КонецЕсли;
  4703. КонецЦикла;
  4704. //сообщить(""+Уровень+" "+ЛучшаяОценка);
  4705. //ХешТаблицаХодов.ВыбратьСтроки();
  4706. //Пока ХешТаблицаХодов.ПолучитьСтроку()=1 Цикл
  4707. // ХешТаблицаХодов.Ход.Очистить();
  4708. // ХешТаблицаХодов.Ход=0;
  4709. //КонецЦикла;
  4710. ХешТаблицаХодов.УдалитьСтроки();
  4711. ХешКорольБит.Удалитьстроки();
  4712. сигнал();
  4713. ТЗХ.ПолучитьстрокуПоНомеру(1);
  4714. СделатьХод();
  4715. КонецПроцедуры
  4716. Процедура ПоказатьПозицию()
  4717. перем а;
  4718. перем в;
  4719. Таб.Очистить();
  4720. Таб.ИсходнаяТаблица("Таблица");
  4721. // Таб.ВывестиСекцию("Шапка|Поле");
  4722. Если ПовернутаяДоска=0 Тогда
  4723. времчерн=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
  4724. врембел=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
  4725. таб.вывестисекцию("верх|поле");
  4726. Для а=1 по 8 цикл
  4727. таб.вывестисекцию(""+а+"|"+"Белые");
  4728. //таб.вывестиСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[99-а*10]+10,1)+"|"+
  4729. //?(а%2=1,"БелоеПоле","ЧерноеПоле"));
  4730. Для в=0 по 7 цикл
  4731. Координата=92-а*10+в;
  4732. //сообщить(Координата);
  4733. //сообщить(ТекущаяПозиция[92-а*10+в]+10,1);
  4734. таб.ПрисоединитьСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[92-а*10+в]+10,1)+
  4735. ?((КоординаТа=ОткудаПоследнийХод)или(Координата=КудаПоследнийХод),"В","")+"|"+
  4736. ?((а+в)%2=1,"БелоеПоле","ЧерноеПоле"));
  4737. КонецЦикла;
  4738. если (а=3) или (а=6) тогда
  4739. Если ТекущаяПозиция[103]<>1 Тогда
  4740. таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
  4741. Иначе
  4742. таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
  4743. КонецЕсли;
  4744. ИначеЕсли (а=4) или (а=5) Тогда
  4745. таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
  4746. Иначе
  4747. таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
  4748. КонецЕсли;
  4749. таб.ПрисоединитьСекцию(""+а+"|"+"Кнопки");
  4750. КонецЦикла;
  4751. таб.вывестисекцию("Низ1|Поле");
  4752. Иначе
  4753. врембел=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
  4754. времчерн=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
  4755. таб.вывестисекцию("верх|поле");
  4756. Для а=1 по 8 цикл
  4757. таб.вывестисекцию(""+а+"|"+"Черные");
  4758. //таб.вывестиСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[9+а*10]+10,1)+"|"+
  4759. //?(а%2=1,"БелоеПоле","ЧерноеПоле"));
  4760. Для в=0 по 7 цикл
  4761. Координата=9+а*10-в;
  4762. таб.ПрисоединитьСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[9+а*10-в]+10,1)
  4763. +?((КоординаТа=ОткудаПоследнийХод)или(Координата=КудаПоследнийХод),"В","")+"|"+
  4764. ?((а+в)%2=1,"БелоеПоле","ЧерноеПоле"));
  4765. КонецЦикла;
  4766. если (а=3) или (а=6) тогда
  4767. Если ТекущаяПозиция[103]=1 Тогда
  4768. таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
  4769. Иначе
  4770. таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
  4771. КонецЕсли;
  4772. Иначе
  4773. таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
  4774. КонецЕсли;
  4775. таб.ПрисоединитьСекцию(""+а+"|"+"Кнопки");
  4776. КонецЦикла;
  4777. таб.вывестисекцию("Низ|Поле");
  4778. КонецЕсли;
  4779. Таб.Опции(0,0,30,30,"ОпцииШах","ОпцииШахмат",0,3);
  4780. Таб.ТолькоПросмотр(1);
  4781. Таб.Защита(1);
  4782. Таб.Показать("Автор: Нефедов Сергей (NS) v1.83 от 31.12.04 "+ВремяОбдумывания+" сек/ход",,1);
  4783. // ПоказатьВремя();
  4784. КонецПроцедуры // Показать Позицию
  4785. //------------------------------------------------------
  4786.  
  4787. Процедура ПриОткрытии()
  4788. Закрывать=0;
  4789. Времяпосл=0;
  4790. ТекущееВремя(ч,м,с);
  4791. врем=ч*60*60+м*60+с;
  4792. режимконтролявремени=0;
  4793. Каталог=""; Файл="";
  4794. РасположениеФайла(Каталог,Файл);
  4795. ФайлДебютов=Каталог+"Debut.TZ";
  4796. Попытка
  4797. ЗначениеИзФайла(ФайлДебютов,ТЗДебютов);
  4798. Исключение
  4799. КонецПопытки;
  4800. Если ТипЗначенияСтр(ТЗДебютов)<>"ТаблицаЗначений" Тогда
  4801. ТЗДебютов=СоздатьОбъект("ТаблицаЗначений");
  4802. ТЗДебютов.НоваяКолонка("Позиция","Строка",68);
  4803. ТЗДебютов.НоваяКолонка("Ход","Строка",68);
  4804. КонецЕсли;
  4805. ТЗДебютов.НоваяКолонка("рн","Число",10,3);
  4806. сброситьгенератор();
  4807. ТЗДебютов.ВыбратьСтроки();
  4808. Пока ТЗДебютов.ПолучитьСтроку()=1 цикл
  4809. ТЗДебютов.рн=СлучайноеЧисло()*10000;
  4810. Конеццикла;
  4811. ТЗДебютов.Сортировать("рн+");
  4812. ТЗДебютов.УдалитьКолонку("рн");
  4813. ХешТаблицаХодов=Создатьобъект("ТаблицаЗначений");
  4814. ХешТаблицаХодов.НоваяКолонка("Позиция","Строка",68);
  4815. ХешТаблицаХодов.НоваяКолонка("Ход","Строка",68);
  4816. ХешТаблицаХодов.НоваяКолонка("Ход1","Строка",68);
  4817. ХешТаблицаХодов.НоваяКолонка("Ходов","Число",1,0);
  4818. // ХешТаблицаХодов.НоваяКолонка("Тип","число",2,0); //1-взятия, 2-взятия и шахи, 3 - всеХоды.
  4819. ТЗХодовСКоторыхШах=СоздатьОбъект("ТаблицаЗначений");
  4820. ТЗХодовСКоторыхШах.НоваяКолонка("Поле","число",4,0);
  4821. //ХешТаблицаВзятий=Создатьобъект("ТаблицаЗначений");
  4822. //ХешТаблицаВзятий.НоваяКолонка("Позиция","Строка",68);
  4823. //ХешТаблицаВзятий.НоваяКолонка("Ход","ТаблицаЗначений");
  4824. ХешКорольБит=Создатьобъект("ТаблицаЗначений");
  4825. ХешКорольБит.НоваяКолонка("Позиция","Строка",68);
  4826. ХешКорольБит.НоваяКолонка("Бит","Число",2,0);
  4827. ВремяОбдумывания=15;
  4828. ПовернутаяДоска=0;
  4829. ХешТаблица=Создатьобъект("ТаблицаЗначений");
  4830. ХешТаблица.НоваяКолонка("Позиция","строка",70);
  4831. //ХешТаблица.ОценкаПоВозможностям
  4832. //ХешТаблица.НоваяКолонка("Ходы");
  4833. Таб=создатьобъект("Таблица");
  4834. Инициализация();
  4835. ПоказатьПозицию();
  4836. ИдетИгра=0;
  4837. БелыеКомпьютер=0;
  4838. ЧерныеКомпьютер=0;
  4839. //вр=_GetPerformanceCounter();
  4840. //Для а=1 по 1000 цикл
  4841. ////ПозицияИЗСтроки(ТекущаяПозиция,ТекущаяПозицияСтр);
  4842. ////КорольПодБоем(ТекущаяПозиция,50,1);
  4843. // ГенераторХодов(ТекущаяПозицияСтр);
  4844. //КонецЦикла;
  4845. //Сообщить(_GetPerformanceCounter()-вр);
  4846. //ГенераторХодов(ТекущаяПозицияСтр).Выбратьстроку();
  4847. //стр=ТЗДебютов.КоличествоСтрок();
  4848. //Для стр1=1 по стр цикл
  4849. // ТЗДебютов.ПолучитьСтрокуПоНомеру(стр-стр1+1);
  4850. // ТекущаяПозицияСтр=ТЗДебютов.Позиция;
  4851. // ПозицияИзСтроки(ТекуЩаяПозиция,ТекущаяПозицияСтр);
  4852. // показатьПозицию();
  4853. // Для а=1 по 100000 цикл
  4854. // КонецЦикла;
  4855. // ТекущаяПозицияСтр=ТЗДебютов.Ход;
  4856. // ПозицияИзСтроки(ТекуЩаяПозиция,ТекущаяПозицияСтр);
  4857. // показатьПозицию();
  4858. // Если Вопрос("УдалитьХод?",4)=6 Тогда
  4859. // ТЗДебютов.УдалитьСтроку();
  4860. // КонецЕсли;
  4861. //КонецЦикла;
  4862. КонецПроцедуры // ПриОткрытии
  4863.  
  4864. //------------------------------------
  4865. Процедура ОбработкаЯчейкиТаблицы(ЗН,ФЛ,Т,Адр)
  4866. перем а;
  4867. перем в;
  4868. //сообщить(Адр);
  4869. Если Адр="R4C12" Тогда
  4870. ПовернутаяДоска=1-ПовернутаяДоска;
  4871. ПоказатьПозицию();
  4872. ИначеЕсли Адр="R5C12" Тогда
  4873. сп=создатьобъект("СписокЗначений");
  4874. з=0;
  4875. поз=0;
  4876. сп.ДобавитьЗначение("Компьютер играет белыми");
  4877. сп.ДобавитьЗначение("Компьютер играет черными");
  4878. сп.ДобавитьЗначение("Компьютер - Компьютер");
  4879. // сп.ДобавитьЗначение("Человек - Человек");
  4880. сп.ВыбратьЗначение(з,"",поз,,1);
  4881. Если поз>0 Тогда
  4882. Если Вопрос("Вы действительно хотите начать новую партию?",4)=6 Тогда
  4883. Если (Поз=1) или (поз=3) Тогда
  4884. БелыеКомпьютер=1;
  4885. Иначе
  4886. БелыеКомпьютер=0;
  4887. КонецЕсли;
  4888. Если (Поз=2) или (поз=3) Тогда
  4889. ЧерныеКомпьютер=1;
  4890. Иначе
  4891. ЧерныеКомпьютер=0;
  4892. КонецЕсли;
  4893. Инициализация();
  4894. ПоказатьПозицию();
  4895. КонецЕсли;
  4896. КонецЕсли;
  4897. ИначеЕсли Адр="R6C12" Тогда
  4898. сп=создатьобъект("СписокЗначений");
  4899. з=0;
  4900. поз=0;
  4901. //сп.ДобавитьЗначение(1," 1 сек/ход");
  4902. //сп.ДобавитьЗначение(2," 2 сек/ход");
  4903. сп.ДобавитьЗначение(3," 3 сек/ход");
  4904. сп.ДобавитьЗначение(5," 5 сек/ход");
  4905. сп.ДобавитьЗначение(7," 7 сек/ход");
  4906. сп.ДобавитьЗначение(10,"10 сек/ход");
  4907. сп.ДобавитьЗначение(15,"15 сек/ход");
  4908. сп.ДобавитьЗначение(20,"20 сек/ход");
  4909. сп.ДобавитьЗначение(30,"30 сек/ход");
  4910. сп.ДобавитьЗначение(45,"45 сек/ход");
  4911. сп.ДобавитьЗначение(60,"60 сек/ход");
  4912. сп.ДобавитьЗначение(90,"1.5 мин/ход");
  4913. сп.ДобавитьЗначение(120,"2 мин/ход");
  4914. сп.ДобавитьЗначение(180,"3 мин/ход");
  4915. сп.ДобавитьЗначение(300,"5 мин/ход");
  4916. сп.ДобавитьЗначение(600,"10 мин/ход");
  4917. сп.ДобавитьЗначение(1200,"20 мин/ход");
  4918. сп.ДобавитьЗначение(1800,"30 мин/ход");
  4919. сп.ДобавитьЗначение(2700,"45 мин/ход");
  4920. сп.ДобавитьЗначение(3600,"1 час/ход");
  4921. сп.ДобавитьЗначение(7200,"2 час/ход");
  4922. сп.ДобавитьЗначение(18000,"5 час/ход");
  4923. сп.ДобавитьЗначение(36000,"10 час/ход");
  4924. сп.ДобавитьЗначение(54000,"15 час/ход");
  4925. сп.ДобавитьЗначение(72000,"20 час/ход");
  4926. сп.ДобавитьЗначение(86400,"Сутки/ход");
  4927. сп.ВыбратьЗначение(з,"",поз,,1);
  4928. Если поз>0 Тогда
  4929. ВремяОбдумывания=з;
  4930. ПоказатьПозицию();
  4931. КонецЕсли;
  4932. ИначеЕсли Лев(Адр,1)="D" Тогда
  4933. Если идетИгра=1 Тогда
  4934. коорд=ЗН;
  4935. Если ОткудаПоследнийХод>0 Тогда
  4936. ТЗХ.ВыбратьСтроки();
  4937. Пока ТЗХ.ПолучитьСтроку()=1 Цикл
  4938. Если (ТЗХ.Откуда<>ОткудаПоследнийХод) или (ТЗХ.Куда<>Коорд) Тогда
  4939. продолжить;
  4940. КонецЕсли;
  4941. Если ТЗХ.превращение<>0 Тогда
  4942. з=0;
  4943. поз=0;
  4944. сп=создатьобъект("СписокЗначений");
  4945. сп.ДобавитьЗначение(5,"Ферзь");
  4946. сп.ДобавитьЗначение(4,"Ладья");
  4947. сп.ДобавитьЗначение(3,"Слон");
  4948. сп.ДобавитьЗначение(2,"Конь");
  4949. сп.выбратьЗначение(з,"",поз,,0);
  4950. Если поз=0 тогда
  4951. поз=1;
  4952. Конецесли;
  4953. Если пустоеЗначение(поз)=1 Тогда
  4954. поз=1;
  4955. КонецЕсли;
  4956. ТЗХ.ВыбратьСтроки();
  4957. Пока ТЗХ.ПолучитьСтроку()=1 Цикл
  4958. Если (ТЗХ.Откуда<>ОткудаПоследнийХод) или (ТЗХ.Куда<>Коорд)или (((6-поз)<>ТЗХ.Превращение)и(((поз-6)<>ТЗХ.Превращение))) Тогда
  4959. продолжить;
  4960. КонецЕсли;
  4961. прервать;
  4962. КонецЦикла;
  4963. Конецесли;
  4964. КудапоследнийХод=Коорд;
  4965. СделатьХод();
  4966. Возврат;
  4967. КонецЦикла;
  4968. КонецЕсли;
  4969. стр="";
  4970. Если ТЗХ.НайтиЗначение(Коорд,стр,"Откуда")>0 Тогда
  4971. Если откудапоследнийХод<>Коорд Тогда
  4972. ОткудаПоследнийХод=Коорд;
  4973. КудапоследнийХод=0;
  4974. ПоказатьПозицию();
  4975. КонецЕсли;
  4976. // сообщить(Коорд);
  4977. КонецЕсли;
  4978. КонецЕсли;
  4979. КонецЕсли;
  4980. КонецПроцедуры
  4981. //-----------------------------------------------------
  4982. Процедура призакрытии()
  4983. Если Закрывать=1 Тогда
  4984. СтатусВозврата(0);
  4985. Таб.Показать();
  4986. Закрывать=0;
  4987. Иначе
  4988. попытка
  4989. таб.очистить();
  4990. таб.показать(,,-1);
  4991. таб=0;
  4992. Исключение
  4993. КонецПопытки;
  4994. КонецЕсли;
  4995. //попытка
  4996. // ТЗДебютов.Свернуть("Позиция,Ход","");
  4997. // ЗначениеВФайл(ФайлДебютов,ТЗДебютов);
  4998. //Исключение
  4999. //КонецПопытки;
  5000. КонецПроцедуры
Add Comment
Please, Sign In to add comment