Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //0 - путое поле
- //1 - Белая пешка
- //2 - Белый Конь
- //3 - Белый слон
- //4 - белая ладья
- //5 - Белый Ферзь
- //6 - Белый Король
- // с минусом - тоже самое, только за черных......
- //9 - Поле, на которое ходить нельзя (Край доски)
- // Массив от 1 до 100......
- // Возможность короткой рокировки - 1, Длинной 2, обеих три: - по числу за белых, и за черных
- // очередь хода - число -1 или 1
- // 104 - Пешка, Сделавшая Двойной ход, Которую Можно взять.
- перем разрешенпустойход;
- перем Nodes;
- перем времяпосл;
- перем ВремяБелыхПосл;
- перем ВремяЧерныхПосл;
- перем таб;
- перем КорольБелыхГПХ,КорольЧерныхГПХ;
- перем ТЗХодовСКоторыхШах;
- перем ТЗНазванийФигур;
- перем ОткудаПоследнийХод;
- перем КудаПоследнийХод;
- перем максКолвоДобавок;
- перем ТекущаяПозиция[104];
- перем ТекущаяПозицияСтр;
- перем режимконтролявремени;
- перем ПотраченоБелыми, ПотраченоЧерными;
- перем разрешитьаварийку;
- перем ХодыКоня[8];
- перем ХодыСлона[4];
- перем ХодыЛадьи[4];
- перем ХешТаблица;
- перем НомерХода11;
- перем ПовернутаяДоска;
- перем ВремяБелых;
- перем ВремяЧерных;
- перем времяНачала;
- перем ТаблицаСоответствий[100];
- перем ТаблицаСоответствий1[100];
- перем поле[104];
- перем ТЗДебютов;
- перем ТЗХ;
- перем идетИгра;
- перем ходовБезВзятий;
- перем ТЗБывшихПозиций1;
- перем ТЗБывшихПозиций2;
- перем белыеКомпьютер;
- перем черныеКомпьютер;
- перем случ;
- перем весФигуры[13];
- перем СписокПозиций;
- перем времяОбдумывания;
- перем ХешТаблицаХодов;
- //перем ХешТаблицаВзятий;
- перем ХешКорольБит;
- перем СделанаРокировка;
- перем ПотеряРокировок;
- перем коэфвес;
- перем врем,врем1;
- перем сч;
- перем оценкаПоложения[1000];
- перем минвремя;
- перем максвремя;
- перем аварийка;
- перем переворот[100];
- перем ч,м,с;
- перем maxLevel;
- перем Каталог,Файл,ФайлДебютов;
- перем гг;
- Перем Закрывать;
- //*******************************************
- Процедура показатьпозицию() Далее
- Процедура КомпьютерДелаетХод() Далее
- Функция ГенераторШахов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
- Функция ГенераторХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
- Функция ГенераторПравильныхХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
- Функция ГенераторВзятий(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0) Далее
- Функция ПодБоемКорольСтр(знач стр) Далее
- //Функция показатьВремя()
- // перем прошловрем;
- // текущеевремя(ч,м,с);
- // врем1=ч*60*60+м*60+с;
- // Если врем1<>времяпосл Тогда
- // времяпосл=врем1;
- // Если врем1<врем Тогда
- // врем=врем1;
- // КонецЕсли;
- // врембел=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
- // времчерн=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
- // Если ПовернутаяДоска=1 тогда
- // Таб.Область(2,12).Текст=времБел;
- // Таб.Область(9,12).Текст=времЧерн;
- // Иначе
- // Таб.Область(9,12).Текст=времБел;
- // Таб.Область(2,12).Текст=времЧерн;
- // КонецЕсли;
- // Закрывать=1;
- // Форма.Закрыть();
- // Конецесли;
- // Форма.Обновить();
- //КонецФункции
- Функция Перебор(Позиция,Уровень,знач Оценка,МИ1,МА1,знач Глубина,ПослФиг,Вес,Доб,ОтслеживатьПовторения=0,БылПустойХод=0)
- перем ми2;
- перем ма2;
- перем ми;
- перем ма;
- перем оценка1;
- перем ОчередьХода;
- перем стр,стр1;
- перем Ходы;
- перем а,в;
- перем ТХ;
- перем ТХ1;
- перем Добавка;
- перем КорольБит;
- перем Оценка2;
- перем номстрпоз;
- перем ПозицияВМассиве;
- Перем Глубин;
- Cтр="";
- Если Аварийка=1 Тогда
- возврат 0;
- КонецЕсли;
- сч=сч+1;
- Если сч%100=0 Тогда
- текущеевремя(ч,м,с);
- врем1=ч*60*60+м*60+с;
- Если врем1<врем Тогда
- врем=врем1;
- КонецЕсли;
- Если ((Врем1>(Врем+МаксВремя))и(РазрешитьАварийку=1))или(Врем1>(Врем+МаксВремя*3)) Тогда
- Аварийка=1;
- возврат 0;
- КонецЕсли;
- КонецЕсли;
- Если (ТЗБывшихПозиций1.найтиЗначение(Позиция,Cтр,"Позиция")>0)и(ОтслеживатьПовторения=0) Тогда
- Возврат 0;
- ИначеЕсли (Оценка>3000) Тогда
- Возврат (Уровень*10)+5000;
- ИначеЕсли (Оценка<-3000) Тогда
- Возврат (-Уровень*10)-5000;
- ИначеЕсли уровень<(-maxLevel) Тогда
- Возврат Оценка;
- Иначе
- ОчередьХода=КодСимв(сред(Позиция,67,1))-33;
- Если ОчередьХода=1 Тогда
- Оценка1=-2000000;
- Иначе
- Оценка1=2000000;
- КонецЕсли;
- стр="";
- Ходы=0;
- стр="";
- ТХ=создатьобъект("ТаблицаЗначений");
- корольбит=0;
- позициявМассиве=0;
- Если (глубина>0)или((Глубина=0)и(((очередьХода=1)и(Оценка>=(ми1)))или((ОчередьХода=2)и(Оценка<=(ма1))))) Тогда
- КорольБит=подБоемКорольСтр(Позиция);
- ПозицияВМассиве=1;
- Конецесли;
- если (глубина>0)или(корольбит=1) тогда
- Если ((глубина<=2)и(Глубина>0)и(КорольБит=0))и(разрешенпустойход=1)и((БылПустойХод=0)или(Глубина=1)) тогда
- Если ОчередьХода=1 тогда
- Если оценка>=ма1 тогда
- позициявмассиве=0;
- оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МА1-0.00001,МА1,-1,0,0,0,1,1);
- Если Оценка2>=ма1 Тогда
- возврат Оценка2;
- КонецЕсли;
- Конецесли;
- иначе
- Если оценка<=ми1 Тогда
- позициявмассиве=0;
- оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МИ1,МИ1+0.00001,-1,0,0,0,1,1);
- Если Оценка2<=ми1 Тогда
- возврат Оценка2;
- КонецЕсли;
- Конецесли;
- конецесли;
- Иначеесли (Глубина>2)и(корольБит=0)и(разрешенпустойход=1)и(БылПустойХод=0) тогда
- Если ОчередьХода=1 тогда
- позициявмассиве=0;
- оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МА1-0.00001,МА1,макс(Глубина-3,1),0,0,0,1,1);
- Если Оценка2>=ма1 Тогда
- возврат Оценка2;
- КонецЕсли;
- иначе
- позициявмассиве=0;
- оценка2=Перебор(лев(Позиция,66)+симв(36-очередьхода)+симв(33),Уровень-1,Оценка,МИ1,МИ1+0.00001,макс(Глубина-3,1),0,0,0,1,1);
- Если Оценка2<=ми1 Тогда
- возврат Оценка2;
- КонецЕсли;
- конецесли;
- Конецесли;
- Если КорольБит=0 Тогда
- Если (разрешенпустойход=0)или(Глубина>1)или((Глубина=1)и(((очередьхода=1)и(оценка>ми1-0.3))или((очередьхода=2)и(оценка<ма1+0.3)))) тогда
- ГенераторХодов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
- Иначе
- ГенераторШахов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
- Ходы=1;
- КонецЕсли;
- Иначе
- ГенераторПравильныхХодов(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
- Если ТХ.КоличествоСтрок()=0 Тогда
- Если очередьХода=1 тогда
- возврат -(((Уровень-2)*10)+5000);
- Иначе
- возврат (((Уровень-2)*10)+5000);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Иначе
- Оценка1=Оценка;
- Если очередьХода=1 Тогда
- Если Оценка1>=ма1 Тогда
- возврат Оценка1;
- КонецЕсли;
- Иначе
- Если Оценка1<=ми1 Тогда
- возврат Оценка1;
- КонецЕсли;
- КонецЕсли;
- ГенераторВзятий(Позиция,ТХ,ПозицияВМассиве,ПослФиг);
- КонецЕсли;
- стр1=ТХ.КоличествоСтрок();
- стр=0;
- Если ХешТаблицаХодов.НайтиЗначение(Позиция,стр,"Позиция")>0 Тогда
- если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ходов")=1 Тогда
- стр12=0;
- Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход1"),стр12,"НоваяПозиция")>0 Тогда
- ТХ.СдвинутьСтроку(1-стр12,стр12);
- КонецЕсли;
- КонецЕсли;
- стр12=0;
- Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"),стр12,"НоваяПозиция")>0 Тогда
- ТХ.СдвинутьСтроку(1-стр12,стр12);
- КонецЕсли;
- Иначе
- стр=0;
- Конецесли;
- МИ=МИ1;
- МА=МА1;
- Если ОчередьХода=1 Тогда
- МИ=макс(Оценка1,МИ);
- Иначе
- МА=Мин(Оценка1,МА);
- КонецЕсли;
- Если (стр=0)и(Глубина>=2)и(ХешТаблицаХодов.Количествострок()<14000) Тогда
- позициявМассиве=0;
- Оценка2=Перебор(Позиция,Уровень,Оценка,МИ,МА,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
- Если (очередьХода=1)и(Оценка2<=МИ) Тогда
- Оценка2=Перебор(Позиция,Уровень,Оценка,-1000,МА,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
- ИначеЕсли (ОчередьХода=2)и(Оценка2>=МА) Тогда
- Оценка2=Перебор(Позиция,Уровень,Оценка,МИ,1000,Глубина-2,ТХ.Куда,Вес,доб,ОтслеживатьПовторения);
- КонецЕсли;
- стр=0;
- Если ХешТаблицаХодов.НайтиЗначение(Позиция,стр,"Позиция")>0 Тогда
- если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ходов")=1 Тогда
- стр12=0;
- Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход1"),стр12,"НоваяПозиция")>0 Тогда
- ТХ.СдвинутьСтроку(1-стр12,стр12);
- КонецЕсли;
- КонецЕсли;
- стр12=0;
- Если ТХ.НайтиЗначение(ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"),стр12,"НоваяПозиция")>0 Тогда
- ТХ.СдвинутьСтроку(1-стр12,стр12);
- КонецЕсли;
- Иначе
- стр=0;
- Конецесли;
- Конецесли;
- если (глубина>0)или(корольбит=1) тогда
- Если ОчередьХода=1 Тогда
- Оценка1=-200000;
- Иначе
- Оценка1=200000;
- КонецЕсли;
- КонецЕсли;
- Если Ходы=1 Тогда
- Оценка1=Оценка;
- КонецЕсли;
- Глубин=Глубина;
- ТЗБывшихПозиций1.НоваяСтрока();
- ТЗБывшихПозиций1.Позиция=Позиция;
- номстрпоз=ТЗБывшихПозиций1.КоличествоСтрок();
- Для а=1 по стр1 цикл
- Nodes=Nodes+1;
- ТХ.ПолучитьСтрокуПоНомеру(а);
- Добавка=0;
- Если КорольБит=1 Тогда
- Добавка=1; //
- Иначеесли (ТХ.ВзятаяФигура<>0)и(ТХ.ВзятаяФигура=ПослФиг)и(окр(ТХ.Оценка,0)=-вес)и(Доб=0) Тогда
- Добавка=1; //
- Иначе
- Добавка=0;
- КонецЕсли;
- Если глубина>0 Тогда
- Глубина=Глубин+Добавка;
- КонецЕсли;
- Если (а>1)
- //и((Глубина>0)или(КорольБит=1))
- Тогда
- Если ОчередьХода=1 Тогда
- Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,мин(МИ+0.00001,ма),Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
- Если (Оценка2>=МИ+0.00001)и(Оценка2<МА) Тогда
- Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
- КонецЕсли;
- Иначе
- Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,макс(МА-0.00001,ми),МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
- Если (Оценка2<=МА-0.00001)и(Оценка2>МИ) Тогда
- Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
- КонецЕсли;
- КонецЕсли;
- Иначе
- Оценка2=Перебор(ТХ.НоваяПозиция,Уровень-1,Оценка+ТХ.Оценка,МИ,МА,Глубина-1,ТХ.ВзятаяФигура,Окр(ТХ.Оценка,0),Добавка,ОтслеживатьПовторения);
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- Если (оценка2>Оценка1)и(Оценка2>ми)
- Тогда
- Если стр>0 Тогда
- Если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход")<>ТХ.НоваяПозиция Тогда
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход1",ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"));
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ходов",1);
- КонецЕсли;
- ИначеЕсли ХешТаблицаХодов.Количествострок()<15000 Тогда
- ХешТаблицаХодов.НоваяСтрока();
- ХешТаблицаХодов.Позиция=Позиция;
- стр=ХешТаблицаХодов.КоличествоСтрок();
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
- КонецЕсли;
- КонецЕсли;
- Оценка1=Макс(Оценка1,Оценка2);
- МИ=макс(Оценка1,МИ);
- Иначе
- Если (оценка1>Оценка2)и(оценка2<ма)
- Тогда
- Если стр>0 Тогда
- Если ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход")<>ТХ.НоваяПозиция Тогда
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход1",ХешТаблицаХодов.ПолучитьЗначение(стр,"Ход"));
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ходов",1);
- КонецЕсли;
- ИначеЕсли ХешТаблицаХодов.Количествострок()<15000 Тогда
- ХешТаблицаХодов.НоваяСтрока();
- ХешТаблицаХодов.Позиция=Позиция;
- стр=ХешТаблицаХодов.КоличествоСтрок();
- ХешТаблицаХодов.УстановитьЗначение(стр,"Ход",ТХ.НоваяПозиция);
- КонецЕсли;
- КонецЕсли;
- Оценка1=Мин(Оценка1,Оценка2);
- МА=Мин(Оценка1,МА);
- КонецЕсли;
- Если (МА<=МИ)или((ОчередьХода=1)и(Оценка1>1000))или((ОчередьХода=2)и(Оценка1<-1000)) Тогда
- Прервать;
- КонецЕсли;
- Конеццикла;
- ТХ.Очистить();
- ТХ=0;
- ТЗБывшихПозиций1.Удалитьстроку(номстрпоз);
- Если (((Оценка1=((Уровень-2)*10)+5000)или(-Оценка1=((Уровень-2)*10)+5000))и(КорольБит=0)) Тогда
- возврат 0;
- КонецЕсли;
- Возврат Оценка1;
- КонецЕсли;
- КонецФункции
- Процедура СброситьГенератор()
- перем м,с,ч;
- текущеевремя(ч,м,с);
- Случ=ч*60*60+м*60+с;
- Случ=случ%65536;
- КонецПроцедуры
- Функция СлучайноеЧисло()
- Случ=(13*Случ+13849)%65536;
- Возврат Случ/65536;
- КонецФункции
- Функция ПозицияВСтроку(Поле[])
- перем стр;
- перем а;
- перем в;
- стр="";
- а=11;
- Пока а<90 Цикл
- Для в=1 по 8 Цикл
- стр=стр+симв(Поле[а+в]+48);
- КонецЦикла;
- а=а+10;
- Конеццикла;
- стр=стр+симв(Поле[101]+33);
- стр=стр+симв(Поле[102]+33);
- стр=стр+симв(Поле[103]+33);
- стр=стр+симв(Поле[104]+33);
- возврат стр;
- КонецФункции
- Процедура ПозицияИзСтроки(Поле[],стр)
- перем а;
- перем в;
- перем с;
- а=11;
- с=1;
- Пока а<90 Цикл
- Для в=1 по 8 Цикл
- Поле[а+в]=Кодсимв(сред(стр,с,1))-48;
- с=с+1;
- КонецЦикла;
- а=а+10;
- Конеццикла;
- поле[101]=Кодсимв(сред(стр,65,1))-33;
- поле[102]=Кодсимв(сред(стр,66,1))-33;
- поле[103]=Кодсимв(сред(стр,67,1))-33;
- поле[104]=Кодсимв(сред(стр,68,1))-33;
- КонецПроцедуры
- Функция Корольподбоем(Поле1[],ГдеКороль,ОчередьХода)
- перем а;
- перем куда;
- Если ОчередьХода=1 Тогда
- Если поле1[ГдеКороль+11]=-1 Тогда
- Возврат 1; //Можно взять пешкой......
- КонецЕсли;
- Если поле1[ГдеКороль+9]=-1 Тогда
- Возврат 1; //Можно взять пешкой.......
- КонецЕсли;
- Для а=1 по 8 цикл
- Куда=ГдеКороль+ХодыКоня[а];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- Если поле1[Куда]=-2 Тогда
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыЛадьи[а];
- Если поле1[Куда]=-6 Тогда //Король
- возврат 1;
- КонецЕсли;
- Пока поле1[Куда]=0 Цикл
- Куда=Куда+ХодыЛадьи[а];
- КонецЦикла;
- Если (поле1[Куда]=-4)или(поле1[Куда]=-5) Тогда // Ладья или ферзь
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыСлона[а];
- Если поле1[Куда]=-6 Тогда //Король
- возврат 1;
- КонецЕсли;
- Пока поле1[Куда]=0 Цикл
- Куда=Куда+ХодыСлона[а];
- КонецЦикла;
- Если (поле1[Куда]=-3)или(поле1[Куда]=-5) Тогда // Слон или ферзь
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- Иначе
- Если поле1[ГдеКороль-11]=1 Тогда
- Возврат 1; //Можно взять пешкой......
- КонецЕсли;
- Если поле1[ГдеКороль-9]=1 Тогда
- Возврат 1; //Можно взять пешкой.......
- КонецЕсли;
- Для а=1 по 8 цикл
- Куда=ГдеКороль+ХодыКоня[а];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- Если поле1[Куда]=2 Тогда
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыЛадьи[а];
- Если поле1[Куда]=6 Тогда //Король
- возврат 1;
- КонецЕсли;
- Пока поле1[Куда]=0 Цикл
- Куда=Куда+ХодыЛадьи[а];
- КонецЦикла;
- Если (поле1[Куда]=4)или(поле1[Куда]=5) Тогда // Ладья или ферзь
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыСлона[а];
- Если поле1[Куда]=6 Тогда //Король
- возврат 1;
- КонецЕсли;
- Пока поле1[Куда]=0 Цикл
- Куда=Куда+ХодыСлона[а];
- КонецЦикла;
- Если (поле1[Куда]=3)или(поле1[Куда]=5) Тогда // Слон или ферзь
- возврат 1;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- возврат 0;
- КонецФункции
- Функция ПодБоемКорольСтр(знач стр)
- перем очередьХода;
- ОчередьХода=КодСимв(сред(стр,67,1))-33;
- ПозицияИзСтроки(поле,стр);
- //сообщить(стр);
- возврат КорольПодБоем(поле,ТаблицаСоответствий1[найти(стр,симв(48+(3-очередьхода*2)*6))],ОчередьХода);
- КонецФункции
- Функция ГенераторХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
- перем а;
- перем в;
- перем с;
- перем Куда;
- перем что;
- перем чтоДвигаем;
- перем ОценкаПоВозможностям;
- перем стр1;
- перем очередьХода;
- перем ПешкаНаПроходе;
- ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
- ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
- ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
- ТЗХодов.НоваяКолонка("Куда","Число",3,0);
- ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
- ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
- ТЗХодов.Новаяколонка("Оценка","Число",14,6);
- // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
- Если ПозицияВМассиве=0 Тогда
- ПозицияИзСтроки(Поле,стр);
- КонецЕсли;
- ОчередьХода=Поле[103];
- ПешкаНаПроходе=Поле[104];
- ПравоРокировкиБелых=Поле[101];
- ПравоРокировкиЧерных=Поле[102];
- Если ОчередьХода=1 Тогда
- ПравоРокировки=ПравоРокировкиБелых;
- Иначе
- ПравоРокировки=ПравоРокировкиЧерных;
- КонецЕсли;
- //сообщить(ПравоРокировки);
- //стр="";
- //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
- // Возврат ХешТаблица.ТЗХодов;
- //КонецЕсли;
- оценкаПоВозможностям=0;
- Если ОчередьХода=1 Тогда
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=1 Тогда
- Куда=А+10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=7-в;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- Если а<31 Тогда
- Куда=А+20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
- проход=симв(33+Куда-10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+11;
- что=Поле[Куда];
- Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+9;
- что=Поле[Куда];
- Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=12)или(Куда=12) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=19)или(Куда=19) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- //Короткая Рокировка
- Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
- Если Поле[19]=4 Тогда
- Если (Поле[17]=0) и (Поле[18]=0) Тогда
- Если корольПодБоем(Поле,16,1)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,17,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=18;
- ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- //Длинная Рокировка
- Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
- Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
- Если Поле[12]=4 Тогда
- Если корольПодБоем(Поле,16,1)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,15,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=14;
- ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Иначе
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=-1 Тогда
- Куда=А-10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- Если а>69 Тогда
- Куда=А-20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
- проход=симв(33+Куда+10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-11;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-9;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=-2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что>=0)и(Что<8) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=-3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=82)или(Куда=82) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=89)или(Куда=89) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- //Короткая Рокировка
- Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
- Если Поле[89]=-4 Тогда
- Если (Поле[87]=0) и (Поле[88]=0) Тогда
- Если корольПодБоем(Поле,86,2)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,87,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=-СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=88;
- ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- //Длинная Рокировка
- Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
- Если Поле[82]=-4 Тогда
- Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
- Если корольПодБоем(Поле,86,2)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,85,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=-СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=84;
- ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- ТЗХодов.ВыбратьСтроки();
- Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- ЧтоХодит=Поле[ТЗХодов.Откуда];
- съели=0;
- Если ТЗХодов.ВзятаяФигура<>0 Тогда
- ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
- Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
- Иначе
- Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
- КонецЕсли;
- КонецЕсли;
- Если ТЗХодов.Превращение<>0 Тогда
- Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
- Иначе
- Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
- КонецЕсли;
- ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
- КонецЦикла;
- //ТЗХодов.выбратьСтроки();
- //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- // Если ТЗХодов.Куда=ПослФиг Тогда
- // ТЗХодов.ПослФиг=1;
- // КонецЕсли;
- //КонецЦикла;
- //Если ОчередьХода=1 Тогда
- // ТЗХодов.сортировать("ПослФиг-,Оценка-");
- //Иначе
- // ТЗХодов.сортировать("ПослФиг-,Оценка+");
- //КонецЕсли;
- Если ОчередьХода=1 Тогда
- ТЗХодов.сортировать("Оценка-");
- Иначе
- ТЗХодов.сортировать("Оценка+");
- КонецЕсли;
- КонецФункции
- Функция ГенераторПравильныхХодов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
- перем а;
- перем в;
- перем с;
- перем Куда;
- перем что;
- перем чтоДвигаем;
- перем ОценкаПоВозможностям;
- перем стр1;
- перем очередьХода;
- перем ПешкаНаПроходе;
- ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
- ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
- ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
- ТЗХодов.НоваяКолонка("Куда","Число",3,0);
- ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
- ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
- ТЗХодов.Новаяколонка("Оценка","Число",14,6);
- // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
- Если ПозицияВМассиве=0 Тогда
- ПозицияИзСтроки(Поле,стр);
- КонецЕсли;
- ОчередьХода=Поле[103];
- ПешкаНаПроходе=Поле[104];
- ПравоРокировкиБелых=Поле[101];
- ПравоРокировкиЧерных=Поле[102];
- КорольБелыхГПХ=ТаблицаСоответствий1[найти(стр,симв(54))];
- КорольЧерныхГПХ=ТаблицаСоответствий1[найти(стр,симв(42))];
- Если ОчередьХода=1 Тогда
- ПравоРокировки=ПравоРокировкиБелых;
- Иначе
- ПравоРокировки=ПравоРокировкиЧерных;
- КонецЕсли;
- //сообщить(ПравоРокировки);
- //стр="";
- //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
- // Возврат ХешТаблица.ТЗХодов;
- //КонецЕсли;
- оценкаПоВозможностям=0;
- Если ОчередьХода=1 Тогда
- Если корольподбоем(Поле,КорольЧерныхГПХ,2)>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Оценка=5000;
- возврат 0;
- КонецЕсли;
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=1 Тогда
- Куда=А+10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Поле[а]=0;
- Поле[Куда]=1;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=7-в;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=1;
- Поле[Куда]=0;
- Если а<31 Тогда
- Куда=А+20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Поле[а]=0;
- Поле[Куда]=1;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
- проход=симв(33+Куда-10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- Поле[а]=1;
- Поле[Куда]=0;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+11;
- что=Поле[Куда];
- Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Поле[а]=0;
- Поле[Куда]=1;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда-10]=0;
- КонецЕсли;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=1;
- Поле[Куда]=Что;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда-10]=-1;
- КонецЕсли;
- КонецЕсли;
- Куда=а+9;
- что=Поле[Куда];
- Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Поле[а]=0;
- Поле[Куда]=1;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда-10]=0;
- КонецЕсли;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=1;
- Поле[Куда]=Что;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда-10]=-1;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Поле[Куда]=2;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- Поле[а]=2;
- Поле[Куда]=Что;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Поле[Куда]=3;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=3;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=3;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Поле[Куда]=4;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=12)или(Куда=12) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=19)или(Куда=19) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=4;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=4;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Поле[Куда]=5;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=5;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=5;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Поле[Куда]=5;
- Если корольПодБоем(Поле,КорольБелыхГПХ,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=5;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=5;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Если корольПодБоем(Поле,Куда,1)=1 Тогда
- Поле[а]=6;
- продолжить;
- КонецЕсли;
- Поле[а]=6;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<=0) Тогда
- Поле[а]=0;
- Если корольПодБоем(Поле,Куда,1)=1 Тогда
- Поле[а]=6;
- продолжить;
- КонецЕсли;
- Поле[а]=6;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- ////Короткая Рокировка
- //Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
- // Если Поле[19]=4 Тогда
- // Если (Поле[17]=0) и (Поле[18]=0) Тогда
- // Если корольПодБоем(Поле,16,1)=1 Тогда
- // продолжить;
- // КонецЕсли;
- // Если корольПодБоем(Поле,17,1)=0 Тогда
- // ТЗХодов.НоваяСтрока();
- // ТзХодов.Оценка=СделанаРокировка;
- // ТЗХодов.Откуда=а;
- // ТЗХодов.Куда=18;
- // ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- // КонецЕсли;
- // КонецЕсли;
- // КонецЕсли;
- //КонецЕсли;
- ////Длинная Рокировка
- //Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
- // Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
- // Если Поле[12]=4 Тогда
- // Если корольПодБоем(Поле,16,1)=1 Тогда
- // продолжить;
- // КонецЕсли;
- // Если корольПодБоем(Поле,15,1)=0 Тогда
- // ТЗХодов.НоваяСтрока();
- // ТзХодов.Оценка=СделанаРокировка;
- // ТЗХодов.Откуда=а;
- // ТЗХодов.Куда=14;
- // ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- // КонецЕсли;
- // КонецЕсли;
- // КонецЕсли;
- //КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Иначе
- Если корольподбоем(Поле,КорольБелыхГПХ,1)>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Оценка=-5000;
- возврат 0;
- КонецЕсли;
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=-1 Тогда
- Куда=А-10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Поле[а]=0;
- Поле[Куда]=-1;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-1;
- Поле[Куда]=0;
- Если а>69 Тогда
- Куда=А-20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Поле[а]=0;
- Поле[Куда]=-1;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
- проход=симв(33+Куда+10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- Поле[а]=-1;
- Поле[Куда]=0;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-11;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Поле[а]=0;
- Поле[Куда]=-1;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда+10]=0;
- КонецЕсли;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-1;
- Поле[Куда]=Что;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда+10]=1;
- КонецЕсли;
- КонецЕсли;
- Куда=а-9;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Поле[а]=0;
- Поле[Куда]=-1;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда+10]=0;
- КонецЕсли;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-1;
- Поле[Куда]=Что;
- Если пешкаНаПроходе=Куда Тогда
- Поле[Куда+10]=1;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=-2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что>=0)и(Что<8) Тогда
- Поле[а]=0;
- Поле[Куда]=-2;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-2;
- Поле[Куда]=Что;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=-3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Поле[Куда]=-3;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=-3;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-3;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Поле[Куда]=-4;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=82)или(Куда=82) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=89)или(Куда=89) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=-4;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-4;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Поле[Куда]=-5;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- Поле[а]=-5;
- Поле[Куда]=Что;
- прервать;
- КонецЕсли;
- КонецЕсли;
- Поле[а]=-5;
- Поле[Куда]=Что;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Поле[Куда]=-5;
- Если корольПодБоем(Поле,КорольЧерныхГПХ,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- Поле[а]=-5;
- Поле[Куда]=Что;
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Поле[а]=-5;
- Поле[Куда]=Что;
- КонецЕсли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Если корольПодБоем(Поле,Куда,2)=1 Тогда
- Поле[а]=-6;
- продолжить;
- КонецЕсли;
- Поле[а]=-6;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>=0) и (Что<7) Тогда
- Поле[а]=0;
- Если корольПодБоем(Поле,Куда,2)=1 Тогда
- Поле[а]=-6;
- продолжить;
- КонецЕсли;
- Поле[а]=-6;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- ////Короткая Рокировка
- //Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
- // Если Поле[89]=-4 Тогда
- // Если (Поле[87]=0) и (Поле[88]=0) Тогда
- // Если корольПодБоем(Поле,86,2)=1 Тогда
- // продолжить;
- // КонецЕсли;
- // Если корольПодБоем(Поле,87,2)=0 Тогда
- // ТЗХодов.НоваяСтрока();
- // ТзХодов.Оценка=-СделанаРокировка;
- // ТЗХодов.Откуда=а;
- // ТЗХодов.Куда=88;
- // ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
- // КонецЕсли;
- // КонецЕсли;
- // КонецЕсли;
- //КонецЕсли;
- ////Длинная Рокировка
- //Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
- // Если Поле[82]=-4 Тогда
- // Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
- // Если корольПодБоем(Поле,86,2)=1 Тогда
- // продолжить;
- // КонецЕсли;
- // Если корольПодБоем(Поле,85,2)=0 Тогда
- // ТЗХодов.НоваяСтрока();
- // ТзХодов.Оценка=-СделанаРокировка;
- // ТЗХодов.Откуда=а;
- // ТЗХодов.Куда=84;
- // ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
- // КонецЕсли;
- // КонецЕсли;
- // КонецЕсли;
- //КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- ТЗХодов.ВыбратьСтроки();
- Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- ЧтоХодит=Поле[ТЗХодов.Откуда];
- съели=0;
- Если ТЗХодов.ВзятаяФигура<>0 Тогда
- ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
- Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
- Иначе
- Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
- КонецЕсли;
- КонецЕсли;
- Если ТЗХодов.Превращение<>0 Тогда
- Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
- Иначе
- Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
- КонецЕсли;
- ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
- КонецЦикла;
- //ТЗХодов.выбратьСтроки();
- //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- // Если ТЗХодов.Куда=ПослФиг Тогда
- // ТЗХодов.ПослФиг=1;
- // КонецЕсли;
- //КонецЦикла;
- //Если ОчередьХода=1 Тогда
- // ТЗХодов.сортировать("ПослФиг-,Оценка-");
- //Иначе
- // ТЗХодов.сортировать("ПослФиг-,Оценка+");
- //КонецЕсли;
- Если ОчередьХода=1 Тогда
- ТЗХодов.сортировать("Оценка-");
- Иначе
- ТЗХодов.сортировать("Оценка+");
- КонецЕсли;
- КонецФункции
- Функция ГенераторВзятий(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
- перем а;
- перем в;
- перем с;
- перем Куда;
- перем что;
- перем чтоДвигаем;
- перем ОценкаПоВозможностям;
- перем стр1;
- перем очередьХода;
- перем ПешкаНаПроходе;
- ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
- ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
- ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
- ТЗХодов.НоваяКолонка("Куда","Число",3,0);
- ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
- ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
- ТЗХодов.Новаяколонка("Оценка","Число",14,6);
- //ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
- Если ПозицияВМассиве=0 Тогда
- ПозицияИзСтроки(Поле,стр);
- КонецЕсли;
- ОчередьХода=Поле[103];
- ПешкаНаПроходе=Поле[104];
- ПравоРокировкиБелых=Поле[101];
- ПравоРокировкиЧерных=Поле[102];
- Если ОчередьХода=1 Тогда
- ПравоРокировки=ПравоРокировкиБелых;
- Иначе
- ПравоРокировки=ПравоРокировкиЧерных;
- КонецЕсли;
- //сообщить(ПравоРокировки);
- //стр="";
- //Если ХешТаблица.НайтиЗначение(Поле,стр,"Позиция")=1 Тогда
- // Возврат ХешТаблица.ТЗХодов;
- //КонецЕсли;
- оценкаПоВозможностям=0;
- Если ОчередьХода=1 Тогда
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=1 Тогда
- Куда=А+10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=7-в;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- КонецЕсли;
- КонецЕсли;
- Куда=а+11;
- что=Поле[Куда];
- Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+9;
- что=Поле[Куда];
- Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для гг=0 по 1 цикл
- в=гг*3+2;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что<0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=12)или(Куда=12) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=19) или (Куда=19) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что<0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что<0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- КонецЕсли;
- КонецЦикла;
- Иначе
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=-1 Тогда
- Куда=А-10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- КонецЕсли;
- КонецЕсли;
- Куда=а-11;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-9;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для гг=0 по 1 цикл
- в=гг*3+2;
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=-2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если (Что>0)и(Что<8) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=-3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=82)или(Куда=82) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=89)или(Куда=89) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Пока что=0 Цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- КонецЦикла;
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если (Что>0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- ТЗХодов.ВыбратьСтроки();
- Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- ЧтоХодит=Поле[ТЗХодов.Откуда];
- съели=0;
- Если ТЗХодов.ВзятаяФигура<>0 Тогда
- Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
- ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
- Иначе
- Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
- КонецЕсли;
- КонецЕсли;
- Если ТЗХодов.Превращение<>0 Тогда
- Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
- Иначе
- Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
- КонецЕсли;
- ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
- КонецЦикла;
- //ТЗХодов.выбратьСтроки();
- //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- // Если ТЗХодов.Куда=ПослФиг Тогда
- // ТЗХодов.ПослФиг=1;
- // КонецЕсли;
- //КонецЦикла;
- //Если ОчередьХода=1 Тогда
- // ТЗХодов.сортировать("ПослФиг-,Оценка-");
- //Иначе
- // ТЗХодов.сортировать("ПослФиг-,Оценка+");
- //КонецЕсли;
- Если ОчередьХода=1 Тогда
- ТЗХодов.сортировать("Оценка-");
- Иначе
- ТЗХодов.сортировать("Оценка+");
- КонецЕсли;
- КонецФункции
- Функция ГенераторШахов(знач стр,ТЗХодов,ПозицияВМассиве=0,послФиг=0)
- перем а;
- перем в;
- перем с;
- перем Куда;
- перем что;
- перем чтоДвигаем;
- перем ОценкаПоВозможностям;
- перем стр1;
- перем стр2;
- перем очередьХода;
- перем ПешкаНаПроходе;
- перем ГдеКороль;
- ТЗХодов=СоздатьОбъект("ТаблицаЗначений");
- ТЗХодов.НоваяКолонка("НоваяПозиция","Строка",68);
- ТЗХодов.НоваяКолонка("Откуда","Число",3,0);
- ТЗХодов.НоваяКолонка("Куда","Число",3,0);
- ТЗХодов.НоваяКолонка("ВзятаяФигура","Число",3,0);// Что скушали
- ТЗХодов.НоваяКолонка("Превращение","Число",2,0);//Фигура в которую превращаемся
- ТЗХодов.Новаяколонка("Оценка","Число",14,6);
- // ТЗХодов.НоваяКолонка("ПослФиг","Число",3,0);
- Если ПозицияВМассиве=0 Тогда
- ПозицияИзСтроки(Поле,стр);
- КонецЕсли;
- ОчередьХода=Поле[103];
- ПешкаНаПроходе=Поле[104];
- ПравоРокировкиБелых=Поле[101];
- ПравоРокировкиЧерных=Поле[102];
- Если ОчередьХода=1 Тогда
- ПравоРокировки=ПравоРокировкиБелых;
- Иначе
- ПравоРокировки=ПравоРокировкиЧерных;
- КонецЕсли;
- // Нужно Найти с каких полей, и чем шахуется король противоположной стороны...
- ГдеКороль=ТаблицаСоответствий1[найти(стр,симв(48+(очередьхода*2-3)*6))];
- Если ОчередьХода=2 Тогда
- Если поле[ГдеКороль+11]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=100+ГдеКороль+11;
- КонецЕсли;
- Если поле[ГдеКороль+9]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=100+ГдеКороль+9;
- КонецЕсли;
- Для а=1 по 8 цикл
- Куда=ГдеКороль+ХодыКоня[а];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- Если поле[Куда]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=200+Куда;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыЛадьи[а];
- Пока поле[Куда]=0 Цикл
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=400+Куда;
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=500+Куда;
- Куда=Куда+ХодыЛадьи[а];
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыСлона[а];
- Пока поле[Куда]=0 Цикл
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=300+Куда;
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=500+Куда;
- Куда=Куда+ХодыСлона[а];
- КонецЦикла;
- КонецЦикла;
- Иначе
- Если поле[ГдеКороль-11]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=100+ГдеКороль-11;
- КонецЕсли;
- Если поле[ГдеКороль-9]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=100+ГдеКороль-9;
- КонецЕсли;
- Для а=1 по 8 цикл
- Куда=ГдеКороль+ХодыКоня[а];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- Если поле[Куда]=0 Тогда
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=200+Куда;
- КонецЕсли;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыЛадьи[а];
- Пока поле[Куда]=0 Цикл
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=400+Куда;
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=500+Куда;
- Куда=Куда+ХодыЛадьи[а];
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 4 цикл
- Куда=ГдеКороль+ХодыСлона[а];
- Пока поле[Куда]=0 Цикл
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=300+Куда;
- ТЗХодовСКоторыхШах.НоваяСтрока();
- ТЗХодовСКоторыхШах.Поле=500+Куда;
- Куда=Куда+ХодыСлона[а];
- КонецЦикла;
- КонецЦикла;
- КонецЕсли;
- оценкаПоВозможностям=0;
- Если ОчередьХода=1 Тогда
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=1 Тогда
- Куда=А+10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=7-в;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- КонецЕсли;
- Если а<31 Тогда
- Куда=А+20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=-1) или (поле[Куда-1]=-1) Тогда
- проход=симв(33+Куда-10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+11;
- что=Поле[Куда];
- Если (Что<0) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а+9;
- что=Поле[Куда];
- Если (Что<0) или((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если а>71 Тогда
- Для в=2 по 5 цикл
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ЧтоДвигаем=7-в;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЦикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда-10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда-10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+200,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+300,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+400,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=12)или(Куда=12) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(34)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=19)или(Куда=19) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(35)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если что=0 Тогда
- продолжить;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- продолжить;
- КонецЕсли;
- Если (Что<=0) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=16) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,64)+симв(33)+сред(ТЗХодов.НоваяПозиция,66);
- ТзХодов.Оценка=-ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- //Короткая Рокировка
- Если ((Праворокировки=1) или (праворокировки=3))и(а=16) Тогда
- Если Поле[19]=4 Тогда
- Если (Поле[17]=0) и (Поле[18]=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(517,стр2,"Поле")>0 Тогда
- Если корольПодБоем(Поле,16,1)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,17,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=18;
- ТЗХодов.НоваяПозиция=лев(стр,4)+"0460"+сред(стр,9,56)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- //Длинная Рокировка
- Если ((Праворокировки=2) или (праворокировки=3))и(а=16) Тогда
- Если (Поле[15]=0) и (Поле[14]=0)и(Поле[13]=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(515,стр2,"Поле")>0 Тогда
- Если Поле[12]=4 Тогда
- Если корольПодБоем(Поле,16,1)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,15,1)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=14;
- ТЗХодов.НоваяПозиция="00640"+сред(стр,6,59)+симв(33)+сред(стр,66,1)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Иначе
- Для а=12 по 89 цикл
- ЧтоДвигаем=Поле[а];
- Если ЧтоДвигаем=0 Тогда
- продолжить;
- ИначеЕсли ЧтоДвигаем=-1 Тогда
- Куда=А-10;
- что=Поле[Куда];
- Если (Что=0) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- КонецЕсли;
- КонецЕсли;
- Если а>69 Тогда
- Куда=А-20;
- что=Поле[Куда];
- Если (Что=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+100,стр2,"Поле")>0 Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- Если (поле[Куда+1]=1) или (поле[Куда-1]=1) Тогда
- проход=симв(33+Куда+10);
- Иначе
- проход=симв(33);
- КонецЕсли;
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+Проход;
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+Проход;
- конецесли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-11;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- ТЗХодов.ВзятаяФигура=Куда;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Куда=а-9;
- что=Поле[Куда];
- Если ((Что>0)и(Что<7)) или ((ПешкаНаПроходе=Куда)и(Что=0)) Тогда
- Если а<30 Тогда
- Для в=2 по 5 цикл
- ЧтоДвигаем=в-7;
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- ТЗХодов.Превращение=ЧтоДвигаем;
- Конеццикла;
- Иначе
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ТЗХодов.ВзятаяФигура=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если ПешкаНаПроходе=Куда Тогда
- Кудастр=ТаблицаСоответствий[Куда+10];
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,КудаСтр-1)+"0"+сред(ТЗХодов.НоваяПозиция,Кудастр+1);
- ТЗХодов.ВзятаяФигура=Куда+10;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли ЧтоДвигаем=-2 Тогда
- Для в=1 по 8 цикл
- Куда=а+ХодыКоня[в];
- Если (Куда<=0) или (Куда>=100) Тогда
- продолжить;
- КонецЕсли;
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+200,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что>=0)и(Что<8) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- КонецЦикла;
- ИначеЕсли ЧтоДвигаем=-3 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+300,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-4 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+400,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=82)или(Куда=82) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(34)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=2 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- ИначеЕсли (а=89)или(Куда=89) Тогда
- Если праворокировки=3 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(35)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- ИначеЕсли ПравоРокировки=1 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-5 Тогда
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыЛадьи[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а;
- Для с=1 по 10 цикл
- Куда=Куда+ХодыСлона[в];
- что=Поле[Куда];
- Если Что=0 Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(Куда+500,стр2,"Поле")=0 Тогда
- продолжить;
- КонецЕсли;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- прервать;
- КонецЕсли;
- Конецесли;
- Если Что<>0 Тогда
- прервать;
- КонецЕсли;
- КонецЦикла;
- Конеццикла;
- ИначеЕсли ЧтоДвигаем=-6 Тогда
- Для в=1 по 4 цикл
- Куда=а+ХодыЛадьи[в];
- что=Поле[Куда];
- Если что=0 Тогда
- продолжить;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- Для в=1 по 4 цикл
- Куда=а+ХодыСлона[в];
- что=Поле[Куда];
- Если что=0 Тогда
- продолжить;
- КонецЕсли;
- Если (Что>=0) и (Что<7) Тогда
- ТЗХодов.НоваяСтрока();
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=Куда;
- ОткудаСтр=ТаблицаСоответствий[а];
- КудаСтр=ТаблицаСоответствий[Куда];
- если КудаСтр>ОткудаСтр тогда
- ТЗХодов.НоваяПозиция=лев(стр,ОткудаСтр-1)+"0"+сред(стр,ОткудаСтр+1,КудаСтр-ОткудаСтр-1)+симв(ЧтоДвигаем+48)+сред(Стр,КудаСтр+1,66-КудаСтр)+симв(36-ОчередьХода)+симв(33);
- иначе
- ТЗХодов.НоваяПозиция=лев(стр,КудаСтр-1)+симв(ЧтоДвигаем+48)+сред(стр,КудаСтр+1,ОткудаСтр-КудаСтр-1)+"0"+сред(Стр,ОткудаСтр+1,66-ОткудаСтр)+симв(36-ОчередьХода)+симв(33);
- конецесли;
- Если (а=86) Тогда
- Если праворокировки>0 Тогда
- ТЗХодов.НоваяПозиция=лев(ТЗХодов.НоваяПозиция,65)+симв(33)+сред(ТЗХодов.НоваяПозиция,67);
- ТзХодов.Оценка=ПотеряРокировок;
- КонецЕсли;
- КонецЕсли;
- Если что<>0 Тогда
- ТЗХодов.ВзятаяФигура=Куда;
- КонецЕсли;
- Конецесли;
- Конеццикла;
- //Короткая Рокировка
- Если ((Праворокировки=1) или (праворокировки=3))и(а=86) Тогда
- Если Поле[89]=-4 Тогда
- Если (Поле[87]=0) и (Поле[88]=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(587,стр2,"Поле")>0 Тогда
- Если корольПодБоем(Поле,86,2)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,87,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=-СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=88;
- ТЗХодов.НоваяПозиция=лев(стр,60)+"0"+симв(44)+симв(42)+"0"+сред(стр,65,1)+симв(33)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- //Длинная Рокировка
- Если ((Праворокировки=2) или (праворокировки=3))и(а=86) Тогда
- Если Поле[82]=-4 Тогда
- Если (Поле[85]=0) и (Поле[84]=0)и(Поле[83]=0) Тогда
- стр2="";
- Если ТЗХодовСКоторыхШах.НайтиЗначение(585,стр2,"Поле")>0 Тогда
- Если корольПодБоем(Поле,86,2)=1 Тогда
- продолжить;
- КонецЕсли;
- Если корольПодБоем(Поле,85,2)=0 Тогда
- ТЗХодов.НоваяСтрока();
- ТзХодов.Оценка=-СделанаРокировка;
- ТЗХодов.Откуда=а;
- ТЗХодов.Куда=84;
- ТЗХодов.НоваяПозиция=лев(стр,56)+"00"+симв(42)+симв(44)+"0"+сред(стр,62,4)+симв(33)+симв(36-ОчередьХода)+симв(33);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- ТЗХодов.ВыбратьСтроки();
- Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- ЧтоХодит=Поле[ТЗХодов.Откуда];
- съели=0;
- Если ТЗХодов.ВзятаяФигура<>0 Тогда
- ЧтоСъели=Поле[ТЗХодов.ВзятаяФигура];
- Съели=Съели-весФигуры[Поле[ТЗХодов.ВзятаяФигура]+7];
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[-ЧтоСъели*101+переворот[ТЗХодов.ВзятаяФигура]];
- Иначе
- Съели=Съели-ОценкаПоложения[ЧтоСъели*101+ТЗХодов.ВзятаяФигура];
- КонецЕсли;
- КонецЕсли;
- Если ТЗХодов.Превращение<>0 Тогда
- Съели=Съели+весФигуры[ТЗХодов.Превращение+7]-весФигуры[Поле[ТЗХодов.Откуда]+7];
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- Съели=Съели+ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Куда]-ОценкаПоложения[ЧтоХодит*101+ТЗХодов.Откуда];
- Иначе
- Съели=Съели-ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.Куда]]+ОценкаПоложения[-ЧтоХодит*101+переворот[ТЗХодов.ОтКуда]];
- КонецЕсли;
- ТЗХодов.Оценка=ТЗХодов.Оценка+Съели;
- КонецЦикла;
- //ТЗХодов.выбратьСтроки();
- //Пока ТЗХодов.ПолучитьСтроку()=1 Цикл
- // Если ТЗХодов.Куда=ПослФиг Тогда
- // ТЗХодов.ПослФиг=1;
- // КонецЕсли;
- //КонецЦикла;
- //Если ОчередьХода=1 Тогда
- // ТЗХодов.сортировать("ПослФиг-,Оценка-");
- //Иначе
- // ТЗХодов.сортировать("ПослФиг-,Оценка+");
- //КонецЕсли;
- Если ОчередьХода=1 Тогда
- ТЗХодов.сортировать("Оценка-");
- Иначе
- ТЗХодов.сортировать("Оценка+");
- КонецЕсли;
- ТЗХодовСКоторыхШах.УдалитьСтроки();
- КонецФункции
- Функция ГенераторВозможныхХодов(стр,ТЗХ)
- перем а;
- перем в;
- ОчередьХода=КодСимв(сред(стр,67,1))-33;
- ТЗХ.Очистить();
- ТЗХ=0;
- ТЗХ=Создатьобъект("ТаблицаЗначений");
- ГенераторХодов(Стр,ТЗХ);
- в=ТЗХ.КоличествоСтрок();
- Для а=1 по ТЗХ.КоличествоСтрок() Цикл
- ТЗХ.ПолучитьСтрокуПоНомеру(в-а+1);
- ПозицияИзСтроки(поле,ТЗХ.НоваяПозиция);
- Если КорольПодБоем(поле,ТаблицаСоответствий1[найти(ТЗХ.НоваяПозиция,симв(48+(3-очередьхода*2)*6))],ОчередьХода)=1 Тогда
- ТЗХ.УдалитьСтроку();
- КонецЕсли;
- КонецЦикла;
- ПозицияИзСтроки(поле,стр);
- возврат КорольПодБоем(поле,ТаблицаСоответствий1[найти(стр,симв(48+(3-очередьхода*2)*6))],ОчередьХода);
- КонецФункции
- //----------------------------------------------------
- Процедура инициализация()
- перем СЗ;
- перем стр;
- перем а;
- //попытка
- // таб.очистить();
- // таб.показать(,,-1);
- // таб=0;
- //Исключение
- //КонецПопытки;
- ПотраченоБелыми=0;
- ПотраченоЧерными=0;
- ТЗХодовСКоторыхШах.УдалитьСтроки();
- ТЗДебютов.НоваяКолонка("рн","Число",10,3);
- сброситьгенератор();
- ТЗДебютов.ВыбратьСтроки();
- Пока ТЗДебютов.ПолучитьСтроку()=1 цикл
- ТЗДебютов.рн=СлучайноеЧисло()*10000;
- Конеццикла;
- ТЗДебютов.Сортировать("рн+");
- ТЗДебютов.УдалитьКолонку("рн");
- сч=0;
- номерхода11=0;
- КоэфВес=1.005;
- СделанаРокировка=0.1;
- ПотеряРокировок=0.2;
- //Таб=создатьОбъект("Таблица");
- // Вынесем в ТЗНазванийФигур Названия Секций для вывода на Экран
- СЗ=Создатьобъект("СписокЗначений");
- стр="""Пусто"",""Пусто"",""Пусто"",""ЧКр"",""ЧФ"",""ЧЛ"",""ЧС"",""ЧК"",""Чп"",""Пусто"",""Бп"""+
- ",""БК"",""БС"",""БЛ"",""БФ"",""БКр"",""Пусто"",""Пусто"",""Пусто""";
- ТЗНазванийФигур=СоздатьОбъект("ТаблицаЗначений");
- СЗ.ИзСтрокиСРазделителями(стр);
- СЗ.Выгрузить(ТЗНазванийФигур);
- // Очистим Доску
- Для а=1 по 100 Цикл
- ТекущаяПозиция[а]=0;
- КонецЦикла;
- // Оформим край Доски
- Для а=1 по 10 Цикл
- ТекущаяПозиция[а]=9;
- ТекущаяПозиция[90+а]=9;
- ТекущаяПозиция[а*10-9]=9;
- ТекущаяПозиция[а*10]=9;
- Конеццикла;
- ТекущаяПозиция[101]=3;//Белым Разрешены Обе Рокировки
- ТекущаяПозиция[102]=3;// Черным Разрешены Обе Рокировки
- ТекущаяПозиция[103]=1;// Очередь Хода
- ТекущаяПозиция[104]=0;
- // Проставим На Доску Фигуры (всего - 32) Белые 12-19,22-29; Черные 72-79,82-89;
- Для а=1 по 8 Цикл
- ТекущаяПозиция[а+21]=1;
- ТекущаяПозиция[а+71]=-1;
- КонецЦикла;
- ТекущаяПозиция[12]=4;//Белая Ладья
- ТекущаяПозиция[19]=4;//Белая Ладья
- ТекущаяПозиция[14]=3;//Белый Слон
- ТекущаяПозиция[17]=3;//Белый Слон
- ТекущаяПозиция[13]=2;//Белый Конь
- ТекущаяПозиция[18]=2;//Белый конь
- ТекущаяПозиция[15]=5;//Белый Ферзь
- ТекущаяПозиция[16]=6;//Белый Король
- ТекущаяПозиция[82]=-4;//Черная Ладья
- ТекущаяПозиция[89]=-4;//Черная Ладья
- ТекущаяПозиция[84]=-3;//Черный Слон
- ТекущаяПозиция[87]=-3;//Черный Слон
- ТекущаяПозиция[83]=-2;//Черный Конь
- ТекущаяПозиция[88]=-2;//Черный конь
- ТекущаяПозиция[85]=-5;//Черный Ферзь
- ТекущаяПозиция[86]=-6;//Черный Король
- //ТекущаяПозиция[79]=-6;
- //ТекущаяПозиция[78]=-1;
- //ТекущаяПозиция[76]=5;
- //ТекущаяПозиция[73]=2;
- //ТекущаяПозиция[72]=-1;
- //ТекущаяПозиция[59]=-1;
- //ТекущаяПозиция[58]=6;
- //ТекущаяПозиция[57]=-1;
- //ТекущаяПозиция[55]=1;
- //ТекущаяПозиция[48]=-3;
- //ТекущаяПозиция[44]=1;
- //ТекущаяПозиция[33]=1;
- //ТекущаяПозиция[29]=1;
- //ТекущаяПозиция[28]=-5;
- //ТекущаяПозиция[101]=0;
- //ТекущаяПозиция[102]=0;
- //ТекущаяПозиция[103]=2;// Очередь Хода
- //ТекущаяПозиция[104]=0;
- ТекущаяПозицияСтр=ПозицияВСтроку(Текущаяпозиция);
- ХодыКоня[1]=12;
- ХодыКоня[2]=21;
- ХодыКоня[3]=-12;
- ХодыКоня[4]=-21;
- ХодыКоня[5]=-8;
- ХодыКоня[6]=8;
- ХодыКоня[7]=19;
- ХодыКоня[8]=-19;
- // Ходы Слона
- ХодыСлона[1]=11;
- ХодыСлона[2]=9;
- ХодыСлона[3]=-11;
- ХодыСлона[4]=-9;
- // Ходы Ладьи
- ХодыЛадьи[1]=10;
- ХодыЛадьи[2]=1;
- ХодыЛадьи[3]=-10;
- ХодыЛадьи[4]=-1;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- переворот[а*10+в+1]=90-а*10+в+1;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 900 цикл
- ОценкаПоложения[а]=0;
- КонецЦикла;
- Для а=2 по 8 цикл
- Для в=4 по 5 цикл
- ОценкаПоложения[101+а*10+в+1]=а*0.003;
- КонецЦикла;
- КонецЦикла;
- Для а=2 по 8 цикл
- Для в=1 по 2 цикл
- Если а=2 Тогда
- ОценкаПоложения[101+а*10+в+1]=0.04;
- ОценкаПоложения[101+а*10+в+7]=0.04;
- ИначеЕсли а=3 Тогда
- ОценкаПоложения[101+а*10+в+1]=0.03;
- ОценкаПоложения[101+а*10+в+7]=0.03;
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[202+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
- КонецЦикла;
- КонецЦикла;
- Для а=3 по 6 цикл
- Для в=3 по 6 цикл
- ОценкаПоложения[202+а*10+в+1]=ОценкаПоложения[202+а*10+в+1]+0.003;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[303+а*10+в+1]=0.03+(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
- КонецЦикла;
- КонецЦикла;
- ОценкаПоложения[303+3*10+4+1]=-0.2;
- ОценкаПоложения[303+3*10+5+1]=-0.2;
- ОценкаПоложения[303+2*10+2+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
- ОценкаПоложения[303+2*10+7+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
- Для а=1 по 8 цикл
- ОценкаПоложения[404+а*10+5+1]=0.0045;
- ОценкаПоложения[404+а*10+4+1]=0.0045;
- ОценкаПоложения[404+а*10+3+1]=0.004;
- ОценкаПоложения[404+а*10+6+1]=0.004;
- КонецЦикла;
- Для в=1 по 8 цикл
- ОценкаПоложения[404+70+в+1]=0.2;
- ОценкаПоложения[404+80+в+1]=0.21;
- КонецЦикла;
- ОценкаПоложения[606+1*10+1+1]=0.0049;
- ОценкаПоложения[606+1*10+2+1]=0.005;
- ОценкаПоложения[606+1*10+7+1]=0.005;
- ОценкаПоложения[606+1*10+8+1]=0.0049;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[606+а*10+в+1]=ОценкаПоложения[606+а*10+в+1]+((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))*0.00001;
- КонецЦикла;
- КонецЦикла;
- ОценкаПоложения[505+1*10+4+1]=0.2;
- ОткудаПоследнийХод=0;
- КудаПоследнийХод=0;
- Для а=1 по 104 цикл
- Поле[а]=ТекущаяПозиция[а];
- КонецЦикла;
- а=11;
- с=1;
- Пока а<90 Цикл
- Для в=1 по 8 Цикл
- ТаблицаСоответствий[а+в]=с;
- ТаблицаСоответствий1[с]=а+в;
- с=с+1;
- КонецЦикла;
- а=а+10;
- Конеццикла;
- ТЗХ=0;
- ТЗХ=Создатьобъект("ТаблицаЗначений");
- ГенераторХодов(ТекущаяПозицияСтр,ТЗХ);
- // ТЗХ.ВыбратьСтроку();
- идетИгра=1;
- ходовБезВзятий=0;
- ТЗБывшихПозиций1=Создатьобъект("ТаблицаЗначений");
- ТЗБывшихпозиций1.НоваяКолонка("Позиция","Строка",68);
- ТЗБывшихПозиций1.НоваяСтрока();
- ТЗБывшихПозиций1.Позиция=ТекущаяПозицияСтр;
- ТЗБывшихПозиций2=Создатьобъект("ТаблицаЗначений");
- ТЗБывшихпозиций2.НоваяКолонка("Позиция","Строка",68);
- СброситьГенератор();
- ВесФигуры[1]=-10000;
- ВесФигуры[2]=-9;
- ВесФигуры[3]=-5;
- ВесФигуры[4]=-3;
- ВесФигуры[5]=-3;
- ВесФигуры[6]=-1;
- ВесФигуры[7]=0;
- ВесФигуры[8]=1;
- ВесФигуры[9]=3;
- ВесФигуры[10]=3;
- ВесФигуры[11]=5;
- ВесФигуры[12]=9;
- ВесФигуры[13]=10000;
- ТекущееВремя(ч,м,с);
- времяначала=ч*60*60+м*60+с;
- времябелых=0;
- времячерных=0;
- Если идетигра=1 Тогда
- ПоказатьПозицию();
- Если (ТекущаяПозиция[103]=1) и (белыеКомпьютер=1) Тогда
- КомпьютерДелаетХод();
- возврат;
- ИначеЕсли (ТекущаяПозиция[103]=2) и (черныеКомпьютер=1) Тогда
- КомпьютерДелаетХод();
- возврат;
- КонецЕсли;
- КонецЕсли;
- КонецПроцедуры // Инициализация
- //-----------------------------------------------------
- Процедура СделатьХод() //ТЗХ установлено на нужной строке....
- перем а;
- перем стр;
- перем колЛегкихФигур;
- перем ч,м,с;
- перем врем;
- ТекущееВремя(ч,м,с);
- врем=ч*60*60+м*60+с;
- Если номерХода11<>0 Тогда
- Если ТекущаяПозиция[103]=1 Тогда
- Если белыекомпьютер=0 Тогда
- врем=врем-2;
- Иначе
- врем=врем-1;
- КонецЕсли;
- ВремяБелых=ВремяБелых+макс(врем-времяначала,0);
- Иначе
- Если черныекомпьютер=0 Тогда
- врем=врем-2;
- Иначе
- врем=врем-1;
- КонецЕсли;
- ВремяЧерных=ВремяЧерных+макс(врем-времяначала,0);
- КонецЕсли;
- КонецЕсли;
- //сообщить(""+времябелых+" "+времячерных);
- ХодовБезВзятий=ХодовБезВзятий+1;
- Если (ТекущаяПозиция[ТЗХ.Откуда]=1)или(ТекущаяПозиция[ТЗХ.Откуда]=-1)или
- (ТЗХ.ВзятаяФигура<>0)или(ТЗХ.Превращение<>0) Тогда
- ХодовБезВзятий=0;
- ТЗБывшихПозиций1.УдалитьСтроки();
- ТЗБывшихПозиций2.УдалитьСтроки();
- //сообщить("Исключение");
- КонецЕсли;
- ОткудаПоследнийХод=ТЗХ.Откуда;
- КудаПоследнийХод=ТЗХ.Куда;
- //Если (белыеКомпьютер=0) и (черныеКомпьютер=0) Тогда
- // ТЗДебютов.НоваяСтрока();
- // ТЗДебютов.Позиция=ТекущаяПозицияСтр;
- // ТЗДебютов.Ход=ТЗХ.НоваяПозиция;
- //КонецЕсли;
- ТекущаяПозицияСтр=ТЗХ.НоваяПозиция;
- // Сообщить(ТекущаяПозицияСтр);
- ПозицияИзСтроки(ТекущаяПозиция,ТекущаяПозицияСтр);
- ПоказатьПозицию();
- ТекущееВремя(ч,м,с);
- времяначала=ч*60*60+м*60+с;
- НомерХода11=НомерХода11+1;
- Если номерхода11=4 Тогда
- ОценкаПоложения[202+1*10+7+1]=-0.01;
- ОценкаПоложения[303+1*10+6+1]=-0.02;
- КонецЕсли;
- Если НомерХода11=16 Тогда
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[202+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
- КонецЦикла;
- КонецЦикла;
- Для а=3 по 6 цикл
- Для в=3 по 6 цикл
- ОценкаПоложения[202+а*10+в+1]=ОценкаПоложения[202+а*10+в+1]+0.003;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[303+а*10+в+1]=0.03+(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.00001;
- КонецЦикла;
- КонецЦикла;
- ОценкаПоложения[505+1*10+4+1]=0;
- ОценкаПоложения[303+2*10+2+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
- ОценкаПоложения[303+2*10+7+1]=ОценкаПоложения[303+2*10+7+1]+0.001;
- КонецЕсли;
- //сообщить(НомерХода11);
- а=ГенераторВозможныхХодов(ТекущаяПозицияСтр,ТЗХ);
- Если ТЗХ.КоличествоСтрок()=0 Тогда
- идетИгра=0;
- Если а=0 Тогда
- предупреждение("Ничья, Пат!");
- ИначеЕсли ТекущаяПозиция[103]=1 тогда
- предупреждение("Черные поставили мат, они выиграли!");
- Иначе
- предупреждение("Белые поставили мат, они выиграли!");
- КонецЕсли;
- возврат;
- КонецЕсли;
- Если ХодовБезВзятий=100 Тогда
- идетИгра=0;
- предупреждение("Ничья по правилу пятидесяти ходов!");
- возврат;
- КонецЕсли;
- стр="";
- Если ТЗБывшихПозиций1.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")=0 Тогда
- ТЗБывшихПозиций1.новаястрока();
- ТЗБывшихПозиций1.позиция=ТекущаяПозицияСтр;
- Иначе
- стр="";
- Если ТЗБывшихПозиций2.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")=0 Тогда
- ТЗБывшихПозиций2.новаястрока();
- ТЗБывшихПозиций2.позиция=ТекущаяПозицияСтр;
- Иначе
- идетИгра=0;
- предупреждение("Ничья, Троекратное повторение позиции!");
- возврат;
- КонецЕсли;
- КонецЕсли;
- колЛегкихФигур=0;
- Для а=1 по 100 цикл
- стр=ТекущаяПозиция[а];
- если (стр=2) или (стр=-2) или (стр=3) или (стр=-3) Тогда
- колЛегкихФигур=колЛегкихФигур+1;
- иначеесли (стр=1) или (стр=-1) или (стр=4) или (стр=-4) или (стр=5) или (стр=-5) тогда
- КолЛегкихФигур=2; // Есть тяжелые фигуры, или пешки.
- прервать;
- КонецЕсли;
- КонецЦикла;
- Если коллегкихФигур<=1 Тогда
- идетИгра=0;
- предупреждение("Ничья, Нехватка материала!");
- возврат;
- КонецЕсли;
- //сообщить("Вошли");
- Если идетигра=1 Тогда
- Если (ТекущаяПозиция[103]=1) и (белыеКомпьютер=1) Тогда
- КомпьютерДелаетХод();
- возврат;
- ИначеЕсли (ТекущаяПозиция[103]=2) и (черныеКомпьютер=1) Тогда
- КомпьютерДелаетХод();
- возврат;
- КонецЕсли;
- КонецЕсли;
- КонецПроцедуры
- //------------------------------------------------------
- Процедура УстановитьВесаФигур(зн)
- Если Зн=0 Тогда
- ВесФигуры[2]=-9;
- ВесФигуры[3]=-5;
- ВесФигуры[4]=-3;
- ВесФигуры[5]=-3;
- ВесФигуры[9]=3;
- ВесФигуры[10]=3;
- ВесФигуры[11]=5;
- ВесФигуры[12]=9;
- Иначеесли зн=1 Тогда
- ВесФигуры[2]=-9*коэфвес;
- ВесФигуры[3]=-5*коэфВес;
- ВесФигуры[4]=-3*коэфВес;
- ВесФигуры[5]=-3*коэфвес;
- ВесФигуры[9]=3;
- ВесФигуры[10]=3;
- ВесФигуры[11]=5;
- ВесФигуры[12]=9;
- Иначеесли зн=2 Тогда
- ВесФигуры[2]=-9;
- ВесФигуры[3]=-5;
- ВесФигуры[4]=-3;
- ВесФигуры[5]=-3;
- ВесФигуры[9]=3*коэфвес;
- ВесФигуры[10]=3*коэфВес;
- ВесФигуры[11]=5*коэфВес;
- ВесФигуры[12]=9*коэфВес;
- КонецЕсли;
- КонецПроцедуры
- //------------------------------------------------------
- Процедура КомпьютерДелаетХод()
- перем минуровень;
- перем ми;
- перем ма;
- перем уровень;
- перем лучшаяоценка;
- перем оценкаперебора;
- перем оценкаПеребора1;
- перем м,ч,с;
- перем допОценка;
- перем а,в;
- перем добавка;
- перем очередьХода;
- перем стр;
- сч=0;
- МинУровень=1;
- МаксКолвоДобавок=2;
- аварийка=0;
- МинВремя=макс(Окр((времяОбдумывания+0.1)/2.5,0),1);
- максВремя=минВремя*10;
- ОчередьХода=ТекущаяПозиция[103];
- //ХешТаблицаХодов.ВыбратьСтроки();
- //Пока ХешТаблицаХодов.ПолучитьСтроку()=1 Цикл
- // попытка
- // ХешТаблицаХодов.Ход.Очистить();
- // исключение
- // КонецПопытки;
- // ХешТаблицаХодов.Ход=0;
- //КонецЦикла;
- ХешТаблицаХодов.УдалитьСтроки();
- ХешКорольБит.Удалитьстроки();
- // сообщить(ОчередьХода);
- Уровень=0;
- ДопОценка=0;
- сумвесб=0;
- ПешекБ=0;
- ПешекЧ=0;
- сумвесч=0;
- установитьвесафигур(0);
- Для а=1 по 100 Цикл
- в=ТекущаяПозиция[а];
- Если (в>-8)и(в<8) Тогда
- Если (в>1)и(в<6) Тогда
- СумВесБ=СумВесБ+весФигуры[в+7];
- КонецЕсли;
- Если (в<-1)и(в>-6) Тогда
- СумВесЧ=СумВесЧ-весФигуры[в+7];
- КонецЕсли;
- Если (в=-1) Тогда
- пешекЧ=ПешекЧ+1;
- Иначеесли в=1 тогда
- пешекБ=пешекБ+1;
- Конецесли;
- ДопОценка=ДопОценка+весФигуры[в+7];
- КонецЕсли;
- КонецЦикла;
- Если (СумВесБ<12)или(СумВесЧ<12) Тогда
- //Эндшпиль
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[606+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.003-(в-4.5)*(в-4.5)*(а-4.5)*(а-4.5)*0.0003;
- КонецЦикла;
- КонецЦикла;
- Для а=3 по 6 цикл
- Для в=3 по 6 цикл
- ОценкаПоложения[606+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))/2)*0.003;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[505+а*10+в+1]=(30-((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5)))*0.0005;
- КонецЦикла;
- КонецЦикла;
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[101+а*10+в+1]=а*0.005+а*а*0.001;
- КонецЦикла;
- КонецЦикла;
- // сообщить("Эндшпиль");
- КонецЕсли;
- Если (СумВесБ+СумВесЧ)<6 Тогда
- Для а=1 по 8 цикл
- Для в=1 по 8 цикл
- ОценкаПоложения[404+а*10+в+1]=((а-4.5)*(а-4.5)+(в-4.5)*(в-4.5))*0.0001;
- КонецЦикла;
- КонецЦикла;
- Для а=3 по 6 цикл
- Для в=3 по 6 цикл
- ОценкаПоложения[404+а*10+в+1]=0;
- КонецЦикла;
- КонецЦикла;
- ОценкаПоложения[404+4*10+7+1]=-0.002;
- ОценкаПоложения[404+4*10+2+1]=-0.002;
- ОценкаПоложения[404+2*10+4+1]=-0.002;
- ОценкаПоложения[404+2*10+5+1]=-0.002;
- ОценкаПоложения[404+5*10+2+1]=-0.002;
- ОценкаПоложения[404+5*10+7+1]=-0.002;
- ОценкаПоложения[404+7*10+4+1]=-0.002;
- ОценкаПоложения[404+7*10+5+1]=-0.002;
- ОценкаПоложения[404+2*10+3+1]=-0.002;
- ОценкаПоложения[404+3*10+2+1]=-0.002;
- ОценкаПоложения[404+6*10+7+1]=-0.002;
- ОценкаПоложения[404+7*10+6+1]=-0.002;
- ОценкаПоложения[404+7*10+3+1]=-0.002;
- ОценкаПоложения[404+3*10+7+1]=-0.002;
- ОценкаПоложения[404+6*10+2+1]=-0.002;
- ОценкаПоложения[404+2*10+6+1]=-0.002;
- ОценкаПоложения[404+1*10+3+1]=0;
- ОценкаПоложения[404+3*10+1+1]=0;
- ОценкаПоложения[404+6*10+8+1]=0;
- ОценкаПоложения[404+8*10+6+1]=0;
- ОценкаПоложения[404+8*10+3+1]=0;
- ОценкаПоложения[404+3*10+8+1]=0;
- ОценкаПоложения[404+6*10+1+1]=0;
- ОценкаПоложения[404+1*10+6+1]=0;
- КонецЕсли;
- //Если ДопОценка>1.2 Тогда
- // УстановитьВесаФигур(1);
- //Иначеесли ДопОценка<(-1.2) Тогда
- // УстановитьВесаФигур(2);
- //Иначе
- // УстановитьВесаФигур(0);
- //КонецЕсли;
- Если ((СумВесБ<=5)и(ПешекБ=0))или((СумВесЧ<=5)и(ПешекЧ=0))или((СумВесБ=0)и(пешекБ<2))или((СумВесЧ=0)и(ПешекЧ<2)) Тогда
- Разрешенпустойход=0;
- Иначе
- разрешенпустойход=1;
- КонецЕсли;
- Если очередьХода=1 Тогда
- ДопОценка=Допоценка+0.5;
- Иначе
- ДопОценка=Допоценка-0.5;
- КонецЕсли;
- ТЗХ.ВыбратьСтроки();
- Пока ТЗХ.ПолучитьСтроку()=1 Цикл
- ТЗХ.Оценка=ТЗХ.Оценка+СлучайноеЧисло()*0.0002;
- КонецЦикла;
- ТекущееВремя(ч,м,с);
- врем=ч*60*60+м*60+с;
- врем1=врем;
- стр="";
- Если ТЗДебютов.НайтиЗначение(ТекущаяПозицияСтр,стр,"Позиция")>0 Тогда
- сигнал();
- ДДДХод=ТЗДебютов.ПолучитьЗначение(стр,"Ход");
- стр="";
- Если ТЗХ.НайтиЗначение(ДДДХод,стр,"НоваяПозиция")>0 Тогда
- ТЗХ.СдвинутьСтроку(1-стр,стр);
- ТЗХ.ПолучитьстрокуПоНомеру(1);
- СделатьХод();
- возврат;
- КонецЕсли;
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- ТЗХ.Сортировать("Оценка-");
- Иначе
- ТЗХ.Сортировать("Оценка+");
- КонецЕсли;
- //ТЗХ.ВыбратьСтроку();
- ЛучшаяОценка=ДопОценка+ТЗХ.получитьзначение(1,"Оценка");
- Аварийка=0;
- Nodes=0;
- Пока ((Уровень<=МинУровень) или ((врем1-врем)<=МинВремя))и(ЛучшаяОценка<1000)и(ЛучшаяОценка>-1000)и(ТЗХ.КоличествоСтрок()>1) Цикл
- // ТЗХ.выбратьСтроку();
- //Если уровень>минуровень Тогда
- // разрешитьаварийку=1;
- //Иначе
- // разрешитьаварийку=0;
- //КонецЕсли;
- maxLevel=40;
- последняяоценка=лучшаяоценка;
- Если ОчередьХода=1 Тогда
- ЛучшаяОценка=-10000000;
- Иначе
- ЛучшаяОценка= 10000000;
- КонецЕсли;
- МИ=-1000;
- МА= 1000;
- Для а=1 по ТЗХ.КоличествоСтрок() Цикл
- Если (Уровень>МинУровень)и(((ОчередьХода=1)и(ЛучшаяОценка>-500))или((ОчередьХода=2)и(ЛучшаяОценка<500))или(а=1)) Тогда
- РазрешитьАварийку=1;
- Иначе
- РазрешитьАварийку=0;
- КонецЕсли;
- состояние(""+(макс(Уровень+1,0))+"."+а+"/"+ТЗХ.КоличествоСтрок()+" "+Nodes);
- ТЗХ.ПолучитьСтрокуПоНомеру(а);
- Если а>1 Тогда
- Если ОчередьХода=1 Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МИ+0.00001,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- Если Аварийка=1 тогда
- ОценкаПеребора=ми-0.00001;
- КонецЕсли;
- Если ОценкаПеребора>МИ Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- Если Аварийка=1 тогда
- ОценкаПеребора=МИ+0.00001;
- КонецЕсли;
- КонецЕсли;
- Иначе
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МА-0.00001,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- Если Аварийка=1 тогда
- ОценкаПеребора=МА+0.00001;
- КонецЕсли;
- Если ОценкаПеребора<МА Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- Если Аварийка=1 тогда
- ОценкаПеребора=ма-0.00001;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- Иначе
- Если Уровень<=0 Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,ПоследняяОценка-0.5,ПоследняяОценка+0.5,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- Если ОценкаПеребора>=ПоследняяОценка+0.5 Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,ПоследняяОценка-0.5,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- ИначеЕсли ОценкаПеребора<=ПоследняяОценка-0.5 Тогда
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,ПоследняяОценка+0.5,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- КонецЕсли;
- Иначе
- ОценкаПеребора=Перебор(ТЗХ.НоваяПозиция,Уровень,ДопОценка+ТЗХ.Оценка,МИ,МА,макс(Уровень,0),ТЗХ.ВзятаяФигура,Окр(ТЗХ.Оценка,0),0);
- КонецЕсли
- КонецЕсли;
- Если ОчередьХода=1 Тогда
- МИ=Макс(МИ,ОценкаПеребора);
- Если ОценкаПеребора>ЛучшаяОценка Тогда
- ЛучшаяОценка=ОценкаПеребора+0.0005;
- МИ=ЛучшаяОценка;
- ТЗХ.СдвинутьСтроку(1-а,а);
- КонецЕсли;
- Иначе
- МА=Мин(МА,ОценкаПеребора);
- Если ОценкаПеребора<ЛучшаяОценка Тогда
- ЛучшаяОценка=ОценкаПеребора-0.0005;
- МА=ЛучшаяОценка;
- ТЗХ.СдвинутьСтроку(1-а,а);
- КонецЕсли;
- КонецЕсли;
- Если аварийка=1 тогда
- прервать;
- КонецЕсли;
- //Если разрешитьаварийку=1 Тогда
- // текущеевремя(ч,м,с);
- // врем1=ч*60*60+м*60+с;
- // Если врем1<врем Тогда
- // врем=врем1;
- // КонецЕсли;
- // Если (Врем1>(Врем+МаксВремя)) Тогда
- // Аварийка=1;
- // КонецЕсли;
- //КонецЕсли;
- //Если аварийка=1 тогда
- // прервать;
- //КонецЕсли;
- КонецЦикла;
- текущеевремя(ч,м,с);
- врем1=ч*60*60+м*60+с;
- Если врем1<врем Тогда
- врем=врем1;
- КонецЕсли;
- //сообщить(""+(макс(Уровень+1,1))+"."+а+"/"+ТЗХ.КоличествоСтрок()+" "+Nodes+" "+ЛучшаяОценка+" "+ХешТаблицаХодов.КоличествоСтрок()+" "+(врем1-врем));
- Если аварийка=1 тогда
- прервать;
- КонецЕсли;
- Уровень=Уровень+1;
- //сообщить(""+Уровень+" "+ЛучшаяОценка);
- Если ЛучшаяОценка>1.2 Тогда
- УстановитьВесаФигур(1);
- Иначеесли ЛучшаяОценка<(-1.2) Тогда
- УстановитьВесаФигур(2);
- Иначе
- УстановитьВесаФигур(0);
- КонецЕсли;
- ТекущееВремя(ч,м,с);
- врем1=ч*60*60+м*60+с;
- Если врем1<врем Тогда
- врем=врем1;
- КонецЕсли;
- КонецЦикла;
- //сообщить(""+Уровень+" "+ЛучшаяОценка);
- //ХешТаблицаХодов.ВыбратьСтроки();
- //Пока ХешТаблицаХодов.ПолучитьСтроку()=1 Цикл
- // ХешТаблицаХодов.Ход.Очистить();
- // ХешТаблицаХодов.Ход=0;
- //КонецЦикла;
- ХешТаблицаХодов.УдалитьСтроки();
- ХешКорольБит.Удалитьстроки();
- сигнал();
- ТЗХ.ПолучитьстрокуПоНомеру(1);
- СделатьХод();
- КонецПроцедуры
- Процедура ПоказатьПозицию()
- перем а;
- перем в;
- Таб.Очистить();
- Таб.ИсходнаяТаблица("Таблица");
- // Таб.ВывестиСекцию("Шапка|Поле");
- Если ПовернутаяДоска=0 Тогда
- времчерн=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
- врембел=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
- таб.вывестисекцию("верх|поле");
- Для а=1 по 8 цикл
- таб.вывестисекцию(""+а+"|"+"Белые");
- //таб.вывестиСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[99-а*10]+10,1)+"|"+
- //?(а%2=1,"БелоеПоле","ЧерноеПоле"));
- Для в=0 по 7 цикл
- Координата=92-а*10+в;
- //сообщить(Координата);
- //сообщить(ТекущаяПозиция[92-а*10+в]+10,1);
- таб.ПрисоединитьСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[92-а*10+в]+10,1)+
- ?((КоординаТа=ОткудаПоследнийХод)или(Координата=КудаПоследнийХод),"В","")+"|"+
- ?((а+в)%2=1,"БелоеПоле","ЧерноеПоле"));
- КонецЦикла;
- если (а=3) или (а=6) тогда
- Если ТекущаяПозиция[103]<>1 Тогда
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
- Иначе
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
- КонецЕсли;
- ИначеЕсли (а=4) или (а=5) Тогда
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
- Иначе
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
- КонецЕсли;
- таб.ПрисоединитьСекцию(""+а+"|"+"Кнопки");
- КонецЦикла;
- таб.вывестисекцию("Низ1|Поле");
- Иначе
- врембел=формат(цел(времябелых/60/60),"Ч(0)2")+":"+формат(цел(времябелых/60)%60,"Ч(0)2")+":"+формат(времябелых%60,"Ч(0)2");
- времчерн=формат(цел(времячерных/60/60),"Ч(0)2")+":"+формат(цел(времячерных/60)%60,"Ч(0)2")+":"+формат(времячерных%60,"Ч(0)2");
- таб.вывестисекцию("верх|поле");
- Для а=1 по 8 цикл
- таб.вывестисекцию(""+а+"|"+"Черные");
- //таб.вывестиСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[9+а*10]+10,1)+"|"+
- //?(а%2=1,"БелоеПоле","ЧерноеПоле"));
- Для в=0 по 7 цикл
- Координата=9+а*10-в;
- таб.ПрисоединитьСекцию(ТЗНазванийФигур.ПолучитьЗначение(ТекущаяПозиция[9+а*10-в]+10,1)
- +?((КоординаТа=ОткудаПоследнийХод)или(Координата=КудаПоследнийХод),"В","")+"|"+
- ?((а+в)%2=1,"БелоеПоле","ЧерноеПоле"));
- КонецЦикла;
- если (а=3) или (а=6) тогда
- Если ТекущаяПозиция[103]=1 Тогда
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
- Иначе
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные2");
- КонецЕсли;
- Иначе
- таб.ПрисоединитьСекцию(""+а+"|"+"Черные1");
- КонецЕсли;
- таб.ПрисоединитьСекцию(""+а+"|"+"Кнопки");
- КонецЦикла;
- таб.вывестисекцию("Низ|Поле");
- КонецЕсли;
- Таб.Опции(0,0,30,30,"ОпцииШах","ОпцииШахмат",0,3);
- Таб.ТолькоПросмотр(1);
- Таб.Защита(1);
- Таб.Показать("Автор: Нефедов Сергей (NS) v1.83 от 31.12.04 "+ВремяОбдумывания+" сек/ход",,1);
- // ПоказатьВремя();
- КонецПроцедуры // Показать Позицию
- //------------------------------------------------------
- Процедура ПриОткрытии()
- Закрывать=0;
- Времяпосл=0;
- ТекущееВремя(ч,м,с);
- врем=ч*60*60+м*60+с;
- режимконтролявремени=0;
- Каталог=""; Файл="";
- РасположениеФайла(Каталог,Файл);
- ФайлДебютов=Каталог+"Debut.TZ";
- Попытка
- ЗначениеИзФайла(ФайлДебютов,ТЗДебютов);
- Исключение
- КонецПопытки;
- Если ТипЗначенияСтр(ТЗДебютов)<>"ТаблицаЗначений" Тогда
- ТЗДебютов=СоздатьОбъект("ТаблицаЗначений");
- ТЗДебютов.НоваяКолонка("Позиция","Строка",68);
- ТЗДебютов.НоваяКолонка("Ход","Строка",68);
- КонецЕсли;
- ТЗДебютов.НоваяКолонка("рн","Число",10,3);
- сброситьгенератор();
- ТЗДебютов.ВыбратьСтроки();
- Пока ТЗДебютов.ПолучитьСтроку()=1 цикл
- ТЗДебютов.рн=СлучайноеЧисло()*10000;
- Конеццикла;
- ТЗДебютов.Сортировать("рн+");
- ТЗДебютов.УдалитьКолонку("рн");
- ХешТаблицаХодов=Создатьобъект("ТаблицаЗначений");
- ХешТаблицаХодов.НоваяКолонка("Позиция","Строка",68);
- ХешТаблицаХодов.НоваяКолонка("Ход","Строка",68);
- ХешТаблицаХодов.НоваяКолонка("Ход1","Строка",68);
- ХешТаблицаХодов.НоваяКолонка("Ходов","Число",1,0);
- // ХешТаблицаХодов.НоваяКолонка("Тип","число",2,0); //1-взятия, 2-взятия и шахи, 3 - всеХоды.
- ТЗХодовСКоторыхШах=СоздатьОбъект("ТаблицаЗначений");
- ТЗХодовСКоторыхШах.НоваяКолонка("Поле","число",4,0);
- //ХешТаблицаВзятий=Создатьобъект("ТаблицаЗначений");
- //ХешТаблицаВзятий.НоваяКолонка("Позиция","Строка",68);
- //ХешТаблицаВзятий.НоваяКолонка("Ход","ТаблицаЗначений");
- ХешКорольБит=Создатьобъект("ТаблицаЗначений");
- ХешКорольБит.НоваяКолонка("Позиция","Строка",68);
- ХешКорольБит.НоваяКолонка("Бит","Число",2,0);
- ВремяОбдумывания=15;
- ПовернутаяДоска=0;
- ХешТаблица=Создатьобъект("ТаблицаЗначений");
- ХешТаблица.НоваяКолонка("Позиция","строка",70);
- //ХешТаблица.ОценкаПоВозможностям
- //ХешТаблица.НоваяКолонка("Ходы");
- Таб=создатьобъект("Таблица");
- Инициализация();
- ПоказатьПозицию();
- ИдетИгра=0;
- БелыеКомпьютер=0;
- ЧерныеКомпьютер=0;
- //вр=_GetPerformanceCounter();
- //Для а=1 по 1000 цикл
- ////ПозицияИЗСтроки(ТекущаяПозиция,ТекущаяПозицияСтр);
- ////КорольПодБоем(ТекущаяПозиция,50,1);
- // ГенераторХодов(ТекущаяПозицияСтр);
- //КонецЦикла;
- //Сообщить(_GetPerformanceCounter()-вр);
- //ГенераторХодов(ТекущаяПозицияСтр).Выбратьстроку();
- //стр=ТЗДебютов.КоличествоСтрок();
- //Для стр1=1 по стр цикл
- // ТЗДебютов.ПолучитьСтрокуПоНомеру(стр-стр1+1);
- // ТекущаяПозицияСтр=ТЗДебютов.Позиция;
- // ПозицияИзСтроки(ТекуЩаяПозиция,ТекущаяПозицияСтр);
- // показатьПозицию();
- // Для а=1 по 100000 цикл
- // КонецЦикла;
- // ТекущаяПозицияСтр=ТЗДебютов.Ход;
- // ПозицияИзСтроки(ТекуЩаяПозиция,ТекущаяПозицияСтр);
- // показатьПозицию();
- // Если Вопрос("УдалитьХод?",4)=6 Тогда
- // ТЗДебютов.УдалитьСтроку();
- // КонецЕсли;
- //КонецЦикла;
- КонецПроцедуры // ПриОткрытии
- //------------------------------------
- Процедура ОбработкаЯчейкиТаблицы(ЗН,ФЛ,Т,Адр)
- перем а;
- перем в;
- //сообщить(Адр);
- Если Адр="R4C12" Тогда
- ПовернутаяДоска=1-ПовернутаяДоска;
- ПоказатьПозицию();
- ИначеЕсли Адр="R5C12" Тогда
- сп=создатьобъект("СписокЗначений");
- з=0;
- поз=0;
- сп.ДобавитьЗначение("Компьютер играет белыми");
- сп.ДобавитьЗначение("Компьютер играет черными");
- сп.ДобавитьЗначение("Компьютер - Компьютер");
- // сп.ДобавитьЗначение("Человек - Человек");
- сп.ВыбратьЗначение(з,"",поз,,1);
- Если поз>0 Тогда
- Если Вопрос("Вы действительно хотите начать новую партию?",4)=6 Тогда
- Если (Поз=1) или (поз=3) Тогда
- БелыеКомпьютер=1;
- Иначе
- БелыеКомпьютер=0;
- КонецЕсли;
- Если (Поз=2) или (поз=3) Тогда
- ЧерныеКомпьютер=1;
- Иначе
- ЧерныеКомпьютер=0;
- КонецЕсли;
- Инициализация();
- ПоказатьПозицию();
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли Адр="R6C12" Тогда
- сп=создатьобъект("СписокЗначений");
- з=0;
- поз=0;
- //сп.ДобавитьЗначение(1," 1 сек/ход");
- //сп.ДобавитьЗначение(2," 2 сек/ход");
- сп.ДобавитьЗначение(3," 3 сек/ход");
- сп.ДобавитьЗначение(5," 5 сек/ход");
- сп.ДобавитьЗначение(7," 7 сек/ход");
- сп.ДобавитьЗначение(10,"10 сек/ход");
- сп.ДобавитьЗначение(15,"15 сек/ход");
- сп.ДобавитьЗначение(20,"20 сек/ход");
- сп.ДобавитьЗначение(30,"30 сек/ход");
- сп.ДобавитьЗначение(45,"45 сек/ход");
- сп.ДобавитьЗначение(60,"60 сек/ход");
- сп.ДобавитьЗначение(90,"1.5 мин/ход");
- сп.ДобавитьЗначение(120,"2 мин/ход");
- сп.ДобавитьЗначение(180,"3 мин/ход");
- сп.ДобавитьЗначение(300,"5 мин/ход");
- сп.ДобавитьЗначение(600,"10 мин/ход");
- сп.ДобавитьЗначение(1200,"20 мин/ход");
- сп.ДобавитьЗначение(1800,"30 мин/ход");
- сп.ДобавитьЗначение(2700,"45 мин/ход");
- сп.ДобавитьЗначение(3600,"1 час/ход");
- сп.ДобавитьЗначение(7200,"2 час/ход");
- сп.ДобавитьЗначение(18000,"5 час/ход");
- сп.ДобавитьЗначение(36000,"10 час/ход");
- сп.ДобавитьЗначение(54000,"15 час/ход");
- сп.ДобавитьЗначение(72000,"20 час/ход");
- сп.ДобавитьЗначение(86400,"Сутки/ход");
- сп.ВыбратьЗначение(з,"",поз,,1);
- Если поз>0 Тогда
- ВремяОбдумывания=з;
- ПоказатьПозицию();
- КонецЕсли;
- ИначеЕсли Лев(Адр,1)="D" Тогда
- Если идетИгра=1 Тогда
- коорд=ЗН;
- Если ОткудаПоследнийХод>0 Тогда
- ТЗХ.ВыбратьСтроки();
- Пока ТЗХ.ПолучитьСтроку()=1 Цикл
- Если (ТЗХ.Откуда<>ОткудаПоследнийХод) или (ТЗХ.Куда<>Коорд) Тогда
- продолжить;
- КонецЕсли;
- Если ТЗХ.превращение<>0 Тогда
- з=0;
- поз=0;
- сп=создатьобъект("СписокЗначений");
- сп.ДобавитьЗначение(5,"Ферзь");
- сп.ДобавитьЗначение(4,"Ладья");
- сп.ДобавитьЗначение(3,"Слон");
- сп.ДобавитьЗначение(2,"Конь");
- сп.выбратьЗначение(з,"",поз,,0);
- Если поз=0 тогда
- поз=1;
- Конецесли;
- Если пустоеЗначение(поз)=1 Тогда
- поз=1;
- КонецЕсли;
- ТЗХ.ВыбратьСтроки();
- Пока ТЗХ.ПолучитьСтроку()=1 Цикл
- Если (ТЗХ.Откуда<>ОткудаПоследнийХод) или (ТЗХ.Куда<>Коорд)или (((6-поз)<>ТЗХ.Превращение)и(((поз-6)<>ТЗХ.Превращение))) Тогда
- продолжить;
- КонецЕсли;
- прервать;
- КонецЦикла;
- Конецесли;
- КудапоследнийХод=Коорд;
- СделатьХод();
- Возврат;
- КонецЦикла;
- КонецЕсли;
- стр="";
- Если ТЗХ.НайтиЗначение(Коорд,стр,"Откуда")>0 Тогда
- Если откудапоследнийХод<>Коорд Тогда
- ОткудаПоследнийХод=Коорд;
- КудапоследнийХод=0;
- ПоказатьПозицию();
- КонецЕсли;
- // сообщить(Коорд);
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецПроцедуры
- //-----------------------------------------------------
- Процедура призакрытии()
- Если Закрывать=1 Тогда
- СтатусВозврата(0);
- Таб.Показать();
- Закрывать=0;
- Иначе
- попытка
- таб.очистить();
- таб.показать(,,-1);
- таб=0;
- Исключение
- КонецПопытки;
- КонецЕсли;
- //попытка
- // ТЗДебютов.Свернуть("Позиция,Ход","");
- // ЗначениеВФайл(ФайлДебютов,ТЗДебютов);
- //Исключение
- //КонецПопытки;
- КонецПроцедуры
Add Comment
Please, Sign In to add comment