<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - yariko</title>
		<link>https://www.cyberforum.ru/blogs/914198/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Sun, 04 Oct 2026 01:28:21 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - yariko</title>
			<link>https://www.cyberforum.ru/blogs/914198/</link>
		</image>
		<item>
			<title>Хак домофона или как открыть дверь по номеру</title>
			<link>https://www.cyberforum.ru/blogs/914198/10438.html</link>
			<pubDate>Wed, 25 Jun 2025 04:30:11 GMT</pubDate>
			<description>Забыли дома ключ. Не проблема. Можно открыть дверь домофона, просто позвонив на свой номер...</description>
			<content:encoded><![CDATA[<div>Забыли дома ключ. Не проблема. Можно открыть дверь домофона, просто позвонив на свой номер квартиры.<br />
Идея состоит в следующем. Внутрь трубки абонента встраивается контроллер, который по звонку сам снимает трубку и сам открывает дверь.<br />
Принципиальная схема:<br />
<img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10924&amp;d=1750824569" border="0" alt="Название: домофон кодовый замок.jpg
Просмотров: 43909

Размер: 113.4 Кб" style="margin: 5px" /><br />
Код и прошивка МК:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10925&amp;d=1750824764" >main.zip</a><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=10930&amp;d=1751004504" >DomofonHak.zip</a><br />
Немного о работе. Схема контроллера открытия была проверена и полностью работает на домофоне Факториал. Конечно, былобы глупо просто взять и открыть дверь любому встречному, поэтому алгоритм усложнен. При поступлении звонка, вызывной сигнал с линии попадает на порт РВ2 через фильтр-ВЧ, отрезающий постоянное напряжение линии, и микроконтроллер начинает считать вызывные сигналы. Предполагается, что посетитель не знает сколько звонков нужно сделать. Для открытия &quot;свой&quot; звонящий в свою очередь должен считать вызывные сигналы на хосте (то есть двери) и при определенном количестве сигналов вызова, нажать на хосте (пульте двери) кнопку СБРОС. В перерыве между звонками микроконтроллер сверит счетчик звонков с кодовой последовательностью заранее зашитой в ППЗУ (EEPROM) и если все цифры совпадут, то при следующем звонке контроллер снимает трубку и открывает дверь. В представленной прошивке в качестве ключа используется одна кодовая цифра, т.е. нужно позвонить, подождав два &quot;гудка&quot;, нажать &quot;сброс&quot; и при следующем звонке дверь открывается автоматически. Поддерживается кодовая последовательность из большего количества цифр (сложность кода ограничена только ППЗУ микроконтроллера и удобством, чем длиннее код открытия, тем больше звонков вызова нужно сделать - один вызов это одна цифра кода.)<br />
Особенностью данной схемы является полное автономное питание от линии домофона, благодаря малой потребляемой мощности МК. Данная схема без доп. питания обеспечивает все необходимые параметры линии: сопротивление при поступающем звонке около 50 Ом (ключ Q2,Q3 открыт), сопротивление при снятии трубки более 50 Ом (ключ Q2,Q3 закрыт), а также сопротивление более 2000 Ом при нажатии кнопки открытия (ключ Q4 закрыт). Заряда конденсаторов С1, С2 хватает для работы контроллера в течение нескольких минут.</div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/10438.html</guid>
		</item>
		<item>
			<title>Измерение емкости на ATMEGA8</title>
			<link>https://www.cyberforum.ru/blogs/914198/8256.html</link>
			<pubDate>Mon, 18 Sep 2023 10:27:32 GMT</pubDate>
			<description>Как измерить емкость конденсатора? Емкость это реактивный параметр электрической цепи, а потому его...</description>
			<content:encoded><![CDATA[<div>Как измерить емкость конденсатора? Емкость это реактивный параметр электрической цепи, а потому его нельзя измерить простым омметром или вольтметром. Однако с этой задачей может легко справиться микроконтроллер (МК).<br />
У любой емкости существует параметр &quot;постоянная времени&quot; RC, также называемая &quot;тау&quot;. Постоянная времени (в секундах) RC-схемы, равна произведению сопротивления схемы (в Омах) и емкости схемы (в Фарадах), т.е.:<br />
<b>Vc(t) = Vo*(1 - e^(-t / τ)),<br />
τ = R * C</b>,<br />
данный параметр характеризует за какое время (секунд) напряжение на заряжаемой емкости Vc окажется равным 62,3% от номинального Vo.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8268&amp;d=1695031037" rel="Lightbox" id="attachment8268" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8268&amp;thumb=1&amp;d=1695031037" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: Series_RC_capacitor_voltage-ru.svg.png
Просмотров: 188
Размер:	52.2 Кб
ID:	8268" style="margin: 5px" /></a><br />
Таким образом, зная сопротивление и время заряда емкости до значения 0,632*Vo, можно рассчитать значение измеряемой емкости. Время заряда можно легко измерить с помощью МК.<br />
Тестировать устройство будем в среде моделирования Proteus 8.<br />
<br />
<b>Схема</b><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8267&amp;d=1695031037" rel="Lightbox" id="attachment8267" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8267&amp;thumb=1&amp;d=1695031037" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: схема.png
Просмотров: 296
Размер:	35.6 Кб
ID:	8267" style="margin: 5px" /></a><br />
Рассмотрим кратко схему<br />
LCD1 экран 122*32 точек, на нем будет выводится измеренное значение емкости конденсатора С1. (а почему матричный? спросите вы. - этоже круто, добавим в нашу разработку немного графики!)<br />
U2-U4 формируют тактовые импульсы Е1, Е2 для LCD1. (да, знаю о чем вы подумали, их можно былобы формировать и программно с МК.)<br />
С1 - &quot;виновник торжества&quot;.<br />
R1 - разрядное сопротивление для конденсатора С1. (выбрано с учетом ограничения по току порта МК, хотя реально &quot;пожечь&quot; здесь ничего нельзя.)<br />
R3 - зарядное сопротивление для конденсатора С1.<br />
U1 - &quot;царь всей схемы&quot;.<br />
МК работает от 5 Вольт, опорное напряжение АЦП принимаем также 5 Вольт. Стоит заметить, что среда разработки Proteus довольно вольно относится к построению схем, например, питание на некоторые узлы подается по умолчанию, например, питание экрана и МК.<br />
Итак, схема есть. Теперь прикинем алгоритм, что нужно сделать, чтоб измерить емкость:<br />
1.подключить измеряемую емкость (С1).<br />
2.разрядить емкость, до видимого 0 Вольт. Почему &quot;видимого&quot;? Все просто, по экспоненте до абсолютного ноля емкость будет долго разряжаться. В данном случае пренебрежем небольшой погрешностью (нам же не на Андромеду лететь).<br />
3.произвести заряд емкости до напряжения 0,632 * 5 Вольт (напряжение питания), одновременно измерив данный промежуток времени.<br />
4.вывести измеренное значение в читаемом (десятичном) виде на экран.<br />
<br />
<b>Программная реализация</b><br />
Программа МК не только измеряет емкость, но и работает с выводом информации на экран. Рассмотрим только основные детали, кто хочет посмотреть код целиком будет ссылка в конце статьи.<br />
<br />
Перед началом измерений сбрасываем таймер.<br />
<div class="codeblock"><table class="asm"><thead><tr><td colspan="2" id="549825255"  class="head">Assembler</td></tr></thead><tbody><tr class="li1"><td><div id="549825255" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1">Timer_res<span class="sy1">:</span>
clr temp
<span class="kw1">out</span> TCCR1B<span class="sy1">,</span>temp <span class="co1">;стоп таймер</span>
<span class="kw1">out</span> TCNT1H<span class="sy1">,</span>temp <span class="co1">;сброс счетчика</span>
<span class="kw1">out</span> TCNT1L<span class="sy1">,</span>temp
ldi temp<span class="sy1">,</span>C_TOIE1
<span class="kw1">out</span> TIMSK<span class="sy1">,</span>temp <span class="co1">;уст.прерывание по таймеру</span>
<span class="kw1">ret</span></pre></td></tr></table></div></td></tr></tbody></table></div>Подпрограмма разряда выглядит так. C помощью команд sbi/cbi подключаем конденсатор через R1 к земле и начинаем измерение на нем 0 Вольт, активировав АЦП sbi ADCSRA,6. Разряд будет продолжаться до достижения r1 = 0.<br />
<div class="codeblock"><table class="asm"><thead><tr><td colspan="2" id="289289607"  class="head">Assembler</td></tr></thead><tbody><tr class="li1"><td><div id="289289607" style="height: 270px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="de1"><pre class="de1">Emk_R<span class="sy1">:</span>
<span class="co1">;притягиваем конденсатор к &quot;земле&quot; схемы</span>
sbi DDRC<span class="sy1">,</span><span class="nu0">1</span>
cbi PORTC<span class="sy1">,</span><span class="nu0">1</span>
sbi DDRC<span class="sy1">,</span><span class="nu0">2</span>
cbi PORTC<span class="sy1">,</span><span class="nu0">2</span>
Emk_R_0<span class="sy1">:</span>
sbi ADCSRA<span class="sy1">,</span><span class="nu0">6</span> <span class="co1">;начать измерение</span>
Emk_R_1<span class="sy1">:</span>
sbic ADCSRA<span class="sy1">,</span><span class="nu0">6</span>
rjmp Emk_R_1 <span class="co1">;ожидание готовности АЦП</span>
<span class="kw1">in</span> r1<span class="sy1">,</span>ADCH
tst r1
brne Emk_R_0 <span class="co1">;продолжить разряд</span>
<span class="kw1">ret</span></pre></td></tr></table></div></td></tr></tbody></table></div>Подпрограмма заряда чуть сложнее, здесь нам надо будет измерять время. Переменная vc устанавливает уровень значения на входе АЦП для напряжения 0,632 от максимального зарядного напряжения. Далее R1 отключаем от цепи, переводя порт в Z-состояние, а на R3 подаем логический 1 ~ 5 Вольт (незначительным падением напряжения на порту пренебрегаем). Затем стартуем таймер и АЦП. При достижении r1 = vc = 0,632*255 цикл измерения завершается, а измеренное время из регистров таймера записывается в регистр Х. Значение 161 берется из расчета, что при максимальном заряде конденсатора напряжение на нем 5 Вольт, так как опорное напряжение АЦП тоже 5 Вольт, то это соответствует значению АЦП = 255. Соответственно значение 161 достигнет как раз при 0,632*5 = 3,16 Вольт.<br />
<div class="codeblock"><table class="asm"><thead><tr><td colspan="2" id="889833232"  class="head">Assembler</td></tr></thead><tbody><tr class="li1"><td><div id="889833232" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="de1"><pre class="de1">Emk_Z<span class="sy1">:</span>
ldi vc<span class="sy1">,</span><span class="nu0">161</span><span class="co1">;=255 * 0,632 уст.уровень заряда при T=R*C (при условии АЦП_опор = V_зар.конд. = 5 Вольт)</span>
cbi DDRC<span class="sy1">,</span><span class="nu0">1</span> <span class="co1">;переводим порт в Z-состояние</span>
sbi PORTC<span class="sy1">,</span><span class="nu0">2</span> <span class="co1">;подключаем конденсатор к питанию</span>
ldi temp<span class="sy1">,</span>C_TCCR1B
<span class="kw1">out</span> TCCR1B<span class="sy1">,</span>temp <span class="co1">;старт таймера</span>
Emk_Z_0<span class="sy1">:</span>
sbi ADCSRA<span class="sy1">,</span><span class="nu0">6</span> <span class="co1">;начать измерение</span>
Emk_Z_1<span class="sy1">:</span>
sbic ADCSRA<span class="sy1">,</span><span class="nu0">6</span>
rjmp Emk_Z_1 <span class="co1">;ожидание готовности АЦП</span>
<span class="kw1">in</span> r1<span class="sy1">,</span>ADCH
cp r1<span class="sy1">,</span>vc
brlo Emk_Z_0 <span class="co1">;продолжить заряд</span>
clr temp
<span class="kw1">out</span> TCCR1B<span class="sy1">,</span>temp <span class="co1">;стоп таймера</span>
<span class="kw1">out</span> TIMSK<span class="sy1">,</span>temp
<span class="kw1">in</span> xl<span class="sy1">,</span>TCNT1L <span class="co1">;сохранение времени в Х</span>
<span class="kw1">in</span> xh<span class="sy1">,</span>TCNT1H
<span class="kw1">ret</span></pre></td></tr></table></div></td></tr></tbody></table></div>Теперь нам остается только по формуле τ = R * C, вычислить емкость подключенного конденсатора (несмотря на то, что мы ее уже знаем, да). В данном случае нам дополнительно потребуются подпрограммы умножения и деления больших чисел Umnozh32, Delenie32, а также подпрограммы вывода результата измерения на экран (их можно посмотреть в приложенном файле по ссылке в конце статьи). Текущая емкость рассчитывается в нанофарадах, а для удобства выводится в микрофарадах, подставлением запятой после 3-х десятичных разрядов.<br />
<div class="codeblock"><table class="asm"><thead><tr><td colspan="2" id="600746239"  class="head">Assembler</td></tr></thead><tbody><tr class="li1"><td><div id="600746239" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="de1"><pre class="de1">Emk_convert<span class="sy1">:</span>
<span class="co1">;расчет Т = TCNT1 * 128 (мкс), где 128 мкс период таймера</span>
clr r7
clr r6
movw r5<span class="sy1">:</span>r4<span class="sy1">,</span>X
clr r3
clr r2
clr r1
ldi temp<span class="sy1">,</span><span class="nu0">128</span>
<span class="kw1">mov</span> r0<span class="sy1">,</span>temp
rcall Umnozh32 <span class="co1">;r7_r4 * r3_r0 = r11_r8</span>
<span class="co1">;расчет С = Т / R (нанофарад), где R сопротивление разряда в килоомах </span>
movw r7<span class="sy1">:</span>r6<span class="sy1">,</span><span class="kw4">r11</span><span class="sy1">:</span><span class="kw4">r10</span>
movw r5<span class="sy1">:</span>r4<span class="sy1">,</span><span class="kw4">r9</span><span class="sy1">:</span><span class="kw4">r8</span>
ldi xh<span class="sy1">,</span>byte4<span class="br0">&#40;</span><span class="nu0">1100</span><span class="br0">&#41;</span><span class="co1">;сопротивление разряда в килоомах</span>
ldi xl<span class="sy1">,</span>byte3<span class="br0">&#40;</span><span class="nu0">1100</span><span class="br0">&#41;</span>
movw r3<span class="sy1">:</span>r2<span class="sy1">,</span>X
ldi xh<span class="sy1">,</span>byte2<span class="br0">&#40;</span><span class="nu0">1100</span><span class="br0">&#41;</span>
ldi xl<span class="sy1">,</span>byte1<span class="br0">&#40;</span><span class="nu0">1100</span><span class="br0">&#41;</span>
movw r1<span class="sy1">:</span>r0<span class="sy1">,</span>X
rcall Delenie32 <span class="co1">;r7_r4 / r3_r0 = r15_r12</span>
<span class="co1">;вывод полученного значения на дисплэй</span>
rcall Line0Disp
movw r5<span class="sy1">:</span>r4<span class="sy1">,</span><span class="kw4">r13</span><span class="sy1">:</span><span class="kw4">r12</span>
rcall KonvertChar
rcall Char_to_disp
ldi temp<span class="sy1">,</span><span class="st0">' '</span>
rcall LoadChar
ldi temp<span class="sy1">,</span><span class="st0">'М'</span>
rcall LoadChar
ldi temp<span class="sy1">,</span><span class="st0">'К'</span>
rcall LoadChar
ldi temp<span class="sy1">,</span><span class="st0">'Ф'</span>
rcall LoadChar
rcall ClearDispEnd
rcall VivNaDisp
<span class="kw1">ret</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Тестирование</b><br />
Запускаем Proteus (при наличии) и смотрим полученный результат. Можно поиграть с емкостью С1 и посмотреть какие результаты будут выводится на экране. Вот для примера измерение, как видно, текущее и измеренное значение емкости совпало:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8269&amp;d=1695031037" rel="Lightbox" id="attachment8269" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8269&amp;thumb=1&amp;d=1695031037" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: proteus_test_1.png
Просмотров: 242
Размер:	36.3 Кб
ID:	8269" style="margin: 5px" /></a><br />
<br />
<b>Заключение</b><br />
Из теста программы можно сделать вывод, что программа работает, и измеряет емкость конденсатора почти точно в диапазоне от 0,01 мкф до 5 мкф с точностью 10 нф. Для большей точности видимо следует внести коррекцию падения напряжения на порте МК или использовать больше бит АЦП преобразователя и поставить кварц вместо встроенного тактового генератора, а для увеличения диапазона измерений нужно уменьшить\увеличить выборку ТАЙМЕРА и\или зарядный ток через R3. Например, увеличивая период измерения ТАЙМЕРА или уменьшив сопротивление R3, можно мерить большие емкости, а уменьшив - наоборот. В общем еще много вариантов усовершенствования данной схемы.<br />
<br />
<b>Файлы проекта</b><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8270&amp;d=1695031974" >Proteus_TestC.zip</a></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/8256.html</guid>
		</item>
		<item>
			<title>2-x канальный графический уровень аудио с защитой АС от постоянки</title>
			<link>https://www.cyberforum.ru/blogs/914198/7945.html</link>
			<pubDate>Sat, 11 Feb 2023 11:26:44 GMT</pubDate>
			<description>Графический аудио стерео-уровень и защита акустической системы от постоянного напряжения всего на...</description>
			<content:encoded><![CDATA[<div>Графический аудио стерео-уровень и защита акустической системы от постоянного напряжения всего на одной микросхеме. А так разве можно было? Да запросто!<br />
Решил я собрать себе для усилителя звуковой частоты (который собрал ранее) &quot;графический уровень громкости&quot; и, как полагается, еще &quot;защиту акустической системы от постоянного напряжения&quot;, все таки сгоревший транзистор дешевле самой акустики, поэтому подстраховка не помешает. Поискав варианты в великом и могучем Интернете, мне попадались только варианты на LM3915 и ее подобных, а так же отдельно защитные схемы. Выходит слишком сложно. Первое: нужно по микросхеме на канал (т.е. для стерео их нужно 2 штуки). Второе: LM3915 выполняет лишь свою одну функцию, для схемы защиты придется мутить еще дополнительные детали.<br />
И зародилась мысль, <b>а что если все это сделать на одной микросхеме?</b> Как говориться, любое дело является невозможным только до тех пор, пока ктото его не сделает.<br />
Поэтому долой LM3915 и ежи с ней!, нам нужен микроконтроллер, который один может не только измерить все каналы аудио, но и бонусом еще будет проверять сигнал на наличие постоянного и/или низкочастотного напряжения.<br />
То есть у нас получиться устройство как бы &quot;2 в 1&quot; всего на одной микросхеме!<br />
<br />
Постановка задачи проекта:<br />
Измерение аудио сигнала, и вывод его уровня на экран.<br />
Защита АС от постоянного/НЧ напряжения.<br />
<br />
В качестве МК выбор пал на ATtiny261. Он содержит все что нужно для разрабатываемого устройства: порты ввода вывода для шкалы диодов, многоканальный АЦП для измерения аудио сигнала, встроенный источник опорного напряжения, а так же таймеры необходимые для измерения сигнала в заданные промежутки времени и работы шкалы светодиодов в динамическом режиме.<br />
<br />
Экран шкалы выполнен на 23 светодиодах (LD1-LD23) по 11*2 светодиодов на каждый канал сигнала (левый и правый канал аудио), а также 1 сервисный светодиод, отображающий режим работы. Светодиоды соединяются в матрицу 6*4 и занимают 10 пинов МК.<br />
Для измерения аудио сигнала используется делители напряжения на резисторах, а также два канала АЦП МК, которые занимают 3 пина МК. Это вызвано необходимостью, что будет измеряться переменное напряжение, то есть АЦП будет работать в биполярном режиме, измеряя не только амплитуду, но и знак сигнала, а также его частоту. При распознавании частоты ниже 2 Герц срабатывает защита, которая с помощью реле отключает АС от выхода усилителя.<br />
В качестве узла защиты АС используется оптоключ H11G1 (VQ1) и реле (K1) на 24 Вольта.<br />
Для питания МК используется параметрический стабилизатор (R1, D1), подключенный к основному питанию (+25В).<br />
Для питания реле используется основное питание (-25В).<br />
<i>Первый вариант схемы был с общей землей, но как выяснилось это вызывает нежелательный эффект, как я понял, отрицательный полупериод аудио сигнала с усилителя &quot;садится&quot; на цифровую землю, через порт ввода-вывода МК, что срезает отрицательную амплитуду измеряемого аудио сигнала более чем на 50%, работоспособность при этом сохраняется. Поэтому хоть на схеме выше и указаны две земли - аналоговая (gnd_analog) и цифровая (gnd), их все же можно соединить вместе, если вы не хотите собирать отдельную схему (или гальваническую развязку) для питания схемы контроллера.</i><br />

			   <div class="spoiler-wrap">
				   <div class="spoiler-head folded clickable">Схема</div>
				   <div class="spoiler-body">
					   <img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7934&amp;d=1676113045" border="0" alt="Название: схема2.jpg
Просмотров: 371

Размер: 148.8 Кб" style="margin: 5px" />
				   </div>
			   </div><br />
<br />
Данная графическая шкала может работать в трех режимах, режимы управляются с помощю кнопки S1. 1 - Линейный, 2 - Логарифмический, 3 - Двоичный (в этом режиме шкала отображает напрямую код АЦП).<br />
На изображении ниже представлен пример работы уже установленного в УМЗЧ модуля в логарифмическом режиме.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7935&amp;d=1676113679" rel="Lightbox" id="attachment7935" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7935&amp;thumb=1&amp;d=1676113679" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: orig.gif
Просмотров: 278
Размер:	253.0 Кб
ID:	7935" style="margin: 5px" /></a><br />
<br />
МК работает от внутреннего генератора на 8 МГц.<br />
Необходимо прописать Fuse-биты МК таким образом (жирным шрифтом выделены изменяемые биты, обычным шрифтом - по умолчанию, проставленными с завода):<br />
Будьте внимательны при изменении Fuse-бит МК. Изменение Бит не отмеченные жирным шрифтом, в частности RSTDISBL и SPIEN, может привести к отключению последовательного программирования МК! За дополнительной информацией следует обращаться к даташиту на данный МК.<br />
Fuse High Byte:<br />
RSTDISBL=1 (unprogrammed)<br />
DWEN=1 (unprogrammed)<br />
SPIEN=0 (programmed)<br />
WDTON=1 (unprogrammed)<br />
<b>EESAVE=0 (programmed)</b><br />
BODLEVEL2=1 (unprogrammed)<br />
<b>BODLEVEL1=0 (programmed)</b><br />
BODLEVEL0=1 (unprogrammed)<br />
Fuse Low Byte:<br />
<b>CKDIV8=1 (unprogrammed)</b><br />
CKOUT=1 (unprogrammed)<br />
SUT1=1 (unprogrammed)<br />
SUT0=0 (programmed)<br />
CKSEL3=0 (programmed)<br />
CKSEL2=0 (programmed)<br />
CKSEL1=1 (unprogrammed)<br />
CKSEL0=0 (programmed)<br />
Необходимо прошить .hex и .eep. В пользовательской памяти МК находяться рабочие константы. При желании их можно изменить для настройки работы шкалы, например, можно изменить уровни напряжений включения светодиодов шкалы, динамическую яркость светодиодов, коррекцию ноля шкалы и другие настройки.<br />
Прошивку и сам код можно скачать по ссылке:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7936&amp;d=1676113816" >AudioGraficheskiUroven.zip</a><br />
<br />
Модуль в сборке<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7937&amp;d=1676114229" rel="Lightbox" id="attachment7937" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7937&amp;thumb=1&amp;d=1676114229" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20221222_154642.jpg
Просмотров: 187
Размер:	152.9 Кб
ID:	7937" style="margin: 5px" /></a><br />
<br />
Экран из 23 светодиодов подключается к основной плате через разъемное соединение<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7938&amp;d=1676114527" rel="Lightbox" id="attachment7938" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7938&amp;thumb=1&amp;d=1676114527" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20221222_154948.jpg
Просмотров: 195
Размер:	116.2 Кб
ID:	7938" style="margin: 5px" /></a><br />
<br />
В составе усилителя<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7939&amp;d=1676115361" rel="Lightbox" id="attachment7939" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7939&amp;thumb=1&amp;d=1676115361" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20221211_141927-720.jpg
Просмотров: 196
Размер:	118.7 Кб
ID:	7939" style="margin: 5px" /></a><br />
<br />
<b>Все материалы статьи разрешено копировать, при условии ссылки на автора Yariko Ookami и оригинальный материал, находящийся на данной странице.</b><br />
<br />
Есть хотите обсудить преимущества и недостатки данного устройства, или идеи по улучшению, пишите в комментариях.</div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/7945.html</guid>
		</item>
		<item>
			<title>USB-Программатор для AVR без паяльника</title>
			<link>https://www.cyberforum.ru/blogs/914198/7196.html</link>
			<pubDate>Fri, 16 Jul 2021 04:17:47 GMT</pubDate>
			<description>*USBasp - USB программатор для Atmel AVR контроллеров.* 
 
USB уже постепенно вытесняют...</description>
			<content:encoded><![CDATA[<div><b>USBasp - USB программатор для Atmel AVR контроллеров.</b><br />
<br />
USB уже постепенно вытесняют последовательный и параллельный порты ПЭВМ. Хорошо, что на моем компьютере есть все перечисленные порты! Однако обладание возможностью прошивать контроллеры через USB тоже актуальна, тем более что не на всех ПЭВМ сейчас ставят COM и LPT.<br />
Поискав схемы решения, я нашел готовую схему и прошивку для USB-Программатора на ATMEGA8 и решил попробовать ее собрать.<br />
<br />
Список деталек не большой:<br />
C1	<b>4,7u</b><br />
C2	<b>100n</b><br />
C3, C4	<b>22p</b><br />
D1, D2	<b>3V6</b><br />
IC1	<b>ATMEGA 8A</b><br />
LED1	<b>5mm LED green</b><br />
LED2	<b>5mm LED red</b><br />
Q1	<b>12Mhz</b><br />
R1, R2	<b>68-82</b><br />
R3	<b>2,2k</b><br />
R4, R5, R6, R7	<b>220-270</b><br />
*R8	<b>10k</b> *работает без него, можно не ставить (но на схеме присутствует)<br />
R9, R10	<b>1k</b><br />
Макетная плата<br />
Перемычки для макетной платы<br />
Провод с плоским USB штекером<br />
<br />
Собираем программатор на макетной плате согласно схеме<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7031&amp;d=1626407296" rel="Lightbox" id="attachment7031" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7031&amp;thumb=1&amp;d=1626407296" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: usbasp_circuit.png
Просмотров: 567
Размер:	5.7 Кб
ID:	7031" style="margin: 5px" /></a><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7040&amp;d=1626437503" rel="Lightbox" id="attachment7040" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7040&amp;thumb=1&amp;d=1626437503" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210716_171113.jpg
Просмотров: 435
Размер:	436.2 Кб
ID:	7040" style="margin: 5px" /></a><br />
<br />
Прошиваем готовой прошивкой (находится по адресу <a rel="nofollow noopener noreferrer" href="https://www.fischl.de/usbasp/" target="_blank" title="https://www.fischl.de/usbasp/">https://www.fischl.de/usbasp/</a>)<br />
или <a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7037&amp;d=1626408481" >usbasp.atmega8.2011-05-28.zip</a>. Работа прошивки рассчитана на частоту 12 МГц, поэтому также настраиваем Fuse контроллера.<br />
<br />
Так уж и быть, для прошивки USB-программатора придется использовать старые <i>добрые </i>технологии. Например, можно использовать программатор <i>Громова </i>через COM порт, не смотря на немного грозное название, он тоже отлично справляется!<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7038&amp;d=1626408746" rel="Lightbox" id="attachment7038" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7038&amp;thumb=1&amp;d=1626408746" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: gromov.jpg
Просмотров: 403
Размер:	22.0 Кб
ID:	7038" style="margin: 5px" /></a><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7033&amp;d=1626407296" rel="Lightbox" id="attachment7033" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7033&amp;thumb=1&amp;d=1626407296" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210716_081005.jpg
Просмотров: 620
Размер:	329.1 Кб
ID:	7033" style="margin: 5px" /></a><br />
<br />
Устанавливаем драйвер <b>usbasp-win-driver-x86-x64-v3.0.7</b><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7036&amp;d=1626407571" >usbasp-win-driver-x86-x64-v3.0.7(рабочий win10).zip</a><br />
<br />
Подключаем наш новый программатор к компьютеру.<br />
<br />
Подключаем программатор к программируемому контроллеру и запускаем программу для прошивки. Например, <b>AVRDUDE_PROG 3.3</b> для Windows.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7039&amp;d=1626437503" rel="Lightbox" id="attachment7039" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7039&amp;thumb=1&amp;d=1626437503" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210716_171014.jpg
Просмотров: 543
Размер:	372.7 Кб
ID:	7039" style="margin: 5px" /></a><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7035&amp;d=1626407296" rel="Lightbox" id="attachment7035" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7035&amp;thumb=1&amp;d=1626407296" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: проверка усб-программатора.jpg
Просмотров: 564
Размер:	147.3 Кб
ID:	7035" style="margin: 5px" /></a><br />
<br />
Как показала проверка программатор работает отлично. Обновил прошивку на своих часах (<a href="https://www.cyberforum.ru/blogs/914198/blog4551.html">https://www.cyberforum.ru/blog... g4551.html</a>).<br />
<br />
:good: ОБНОВЛЕНИЕ! Версия программатора на монтажной плате (см. под спойлером).<br />

			   <div class="spoiler-wrap">
				   <div class="spoiler-head folded clickable">Разработка монтажной платы для программатора</div>
				   <div class="spoiler-body">
					   Встречаем вариант программатора на плате! Разводка дорожек - авторская. В процессе разработки платы для минимизации размеров было решено отказаться от необязательных деталей: перемычки JP2 и резистора R8. Так как они КРИТИЧНО не влияют на работу устройства. В результате размер программатора составляет чуть больше стандартной флэшки! Разъем USB выполнен непосредственно на монтажной плате, металлический ободок снят со сломанной флэшки и приклеен к плате программатора. Из недостатков стоит отметить отсутствие обозначений выходов на плате, опять же в целях минимизации размеров. Размер данного одноплатного программатора 72*30 мм, несмотря на использование полноразмерного контроллера в DIP корпусе.<br />
Разработка платы и готовое устройство (кожух не разрабатывался):<br />
Плата с нарисованными дорожками:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7117&amp;d=1631105955" rel="Lightbox" id="attachment7117" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7117&amp;thumb=1&amp;d=1631105955" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210902_065523.jpg
Просмотров: 171
Размер:	623.2 Кб
ID:	7117" style="margin: 5px" /></a><br />
Карта установки деталей:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7118&amp;d=1631105955" rel="Lightbox" id="attachment7118" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7118&amp;thumb=1&amp;d=1631105955" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210902_103615+.jpg
Просмотров: 219
Размер:	636.3 Кб
ID:	7118" style="margin: 5px" /></a><br />
Программатор в собранном виде:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7121&amp;d=1631107289" rel="Lightbox" id="attachment7121" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7121&amp;thumb=1&amp;d=1631107289" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210902_140048.jpg
Просмотров: 193
Размер:	352.9 Кб
ID:	7121" style="margin: 5px" /></a><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7120&amp;d=1631106252" rel="Lightbox" id="attachment7120" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7120&amp;thumb=1&amp;d=1631106252" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20210907_092754.jpg
Просмотров: 221
Размер:	777.6 Кб
ID:	7120" style="margin: 5px" /></a><br />

				   </div>
			   </div></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/7196.html</guid>
		</item>
		<item>
			<title>Игра Сёги на Visual Studio</title>
			<link>https://www.cyberforum.ru/blogs/914198/7076.html</link>
			<pubDate>Sat, 10 Apr 2021 09:49:57 GMT</pubDate>
			<description>Этой игре насчитывается уже много веков, но она все еще настолько же интересна и актуальна как и во...</description>
			<content:encoded><![CDATA[<div>Этой игре насчитывается уже много веков, но она все еще настолько же интересна и актуальна как и во времена когда компьютеры были еще в далеком будущем и имя этой увлекательной игры Сёги (将棋 - syogi /shogi), что в переводе с японского переводится как &quot;Игра генералов&quot;. В начале партии каждый игрок имеет по 20 фигур: 1 король, 1 ладья, 1 слон, 2 золотых и 2 серебряных генерала, 2 коня, 2 копья и 9 пешек. Фигуры имеют форму вытянутого пятиугольника со скосом в сторону противника, на обеих поверхностях которого иероглифами надписано название основной и превращенной фигуры. Как и в шахматах, игра заканчивается, когда одна из сторон ставит &quot;мат&quot; королю противника, то есть создаёт позицию, в которой король противника находится под боем (шахом) и этот шах противник не может устранить никаким ходом. Поставивший мат выигрывает. Говорить &quot;шах&quot; и &quot;мат&quot; при этом считается неэтичным. Также игра заканчивается, если один из игроков сдается. В Японии признание своего поражения выражается словом 負けました (яп. макэмасита - проиграл) и небольшим поклоном.<br />
<br />
Проникнувшись всем великолепием данной игры, я решил написать свою программу игры в Syogi. Основная и самая сложная в реализации ее часть - это игровой ИИ (искусственный интеллект - позволяющий компьютеру вычислять наиболее релевантные ходы). Задачей ИИ здесь является пройти на заданную глубину все ветвления (ну, или по крайней мере основную их часть) партии для последующей оценки хода. Перебор ходов здесь самая затратная по времени для ЦПУ задача, ведь варианты ходов в Syogi растут крайне быстро. Только на 2 ходу их уже около 1000 (примерно 30 ходов для каждой из сторон), на 4 ход их будет не меньше 1000^2. В дальнейшем ветвления ходов возрастают многократно, а с учетом того, что есть еще ходы сброса фигур, их становится еще больше, ибо сброс ранее взятой фигуры производится почти на любую свободную клетку, за исключением некоторых правил.<br />
<br />
Тесты показали, что на доске 9*9 клеток с прогнозированием партии на 4-6 ходов просчитываемое число ветвлений в игре достигает нескольких миллионов и более. Конечно, даже не смотря на довольно большую выборку для человеческого понимания, все равно машинный алгоритм ИИ сложно сравнивать с человеческим интеллектом, ведь у человека и машины совсем разный принцип понимания игры. Тем не менее, даже при учете некоторого превосходства биологического разума, нужно быть крайне внимательным, ведь потерпеть поражение можно просто не заметив шах (как писалось выше здесь не принято его объявлять), а можно и вовсе не удачно разменять фигуры, две на одну например. Компьютер удачно пользуется любой ошибкой игрока.<br />
<br />
<b>Системные требования:</b><br />
ОС Windows;<br />
.NET Framework2+;<br />
Клавиатура и /или мыша<br />
Свободное место ~20 МБ.<br />
<br />
<b>Установка:</b><br />
Распаковать архив<br />
Запустить EXE<br />
<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6936&amp;d=1618047614" rel="Lightbox" id="attachment6936" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6936&amp;thumb=1&amp;d=1618047614" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: сёги.jpg
Просмотров: 372
Размер:	121.5 Кб
ID:	6936" style="margin: 5px" /></a><br />
<br />
<a rel="nofollow noopener noreferrer" href="https://disk.yandex.ru/d/UiexJ9Jfgxhu9Q?w=1" target="_blank" title="https://disk.yandex.ru/d/UiexJ9Jfgxhu9Q?w=1">СКАЧАТЬ ИГРУ</a><br />
<br />
Если вы любите шахматы, то Сёги Вам тоже понравятся, ведь эта игра дает еще больше возможностей и тактических приемов, это как &quot;прокачанные&quot; шахматы!</div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/7076.html</guid>
		</item>
		<item>
			<title>Еще один японско-русский словарь</title>
			<link>https://www.cyberforum.ru/blogs/914198/7010.html</link>
			<pubDate>Wed, 03 Mar 2021 12:46:25 GMT</pubDate>
			<description>Точнее программа для поиска слов из словарной базы данных на основе известного  *японско-русского...</description>
			<content:encoded><![CDATA[<div>Точнее программа для поиска слов из словарной базы данных на основе известного  <b>японско-русского словаря Warodai</b><br />
<br />
Возможности программы:<br />
Выбор языка поиска.<br />
Поиск по слову целиком или части слова.<br />
<br />
В качестве базы данных словаря используется обычный текстовый файл словаря Warodai.<br />
<br />
Системные требования:<br />
Windows 7, 8, 9, 10<br />
NET Framework 2<br />
<br />
Установка:<br />
Распаковать<br />
Запустить ЕХЕ<br />
<br />
Скачать:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6845&amp;d=1614775094" >NihongoRu.zip</a><br />
<br />
Экранфотки:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6846&amp;d=1614775455" rel="Lightbox" id="attachment6846" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6846&amp;thumb=1&amp;d=1614775455" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 0.jpg
Просмотров: 287
Размер:	84.0 Кб
ID:	6846" style="margin: 5px" /></a></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/7010.html</guid>
		</item>
		<item>
			<title>C# ~ Ревизор Диска - программа для быстрого просмотра папок и файлов</title>
			<link>https://www.cyberforum.ru/blogs/914198/6947.html</link>
			<pubDate>Thu, 28 Jan 2021 04:26:54 GMT</pubDate>
			<description>Дано: 
Большой диск забитый под завязку папками и файлами. 
 
Задача: 
Быстро и качественно узнать...</description>
			<content:encoded><![CDATA[<div>Дано:<br />
Большой диск забитый под завязку папками и файлами.<br />
<br />
Задача:<br />
Быстро и качественно узнать какие папки и файлы больше всего занимают пространства.<br />
<br />
Решение:<br />
1. Обход всех папок и файлов заданного размещения с последующим подсчетом занимаемого места.<br />
2. Сохранение собранных данных (п.1) в подготовленный массив.<br />
3. Вывод данных из массива (п.2) в таблицу.<br />
<br />
Программа написана в среде MS Visual Studio C#.<br />
<br />
Попробовать программу и ознакомится с кодом можно по ссылке:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6738&amp;d=1611807239" >DiskRevizor1.0.0.28.zip</a><br />
<br />
Скринфоты:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6739&amp;d=1611807864" rel="Lightbox" id="attachment6739" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6739&amp;thumb=1&amp;d=1611807864" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: DiskRevizor.jpg
Просмотров: 276
Размер:	82.1 Кб
ID:	6739" style="margin: 5px" /></a></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/6947.html</guid>
		</item>
		<item>
			<title>C# Добавить ToolStripSplitButton на MenuStrip</title>
			<link>https://www.cyberforum.ru/blogs/914198/5552.html</link>
			<pubDate>Fri, 23 Nov 2018 13:40:03 GMT</pubDate>
			<description>Если нужно добавить *ToolStripSplitButton* на *MenuStrip* может получиться так, что в Визуальной...</description>
			<content:encoded><![CDATA[<div>Если нужно добавить <b>ToolStripSplitButton</b> на <b>MenuStrip</b> может получиться так, что в <i>Визуальной Студии</i> не будет в контекстном меню такой опции. Пример<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5105&amp;d=1542979367" rel="Lightbox" id="attachment5105" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5105&amp;thumb=1&amp;d=1542979367" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 01.jpg
Просмотров: 456
Размер:	21.0 Кб
ID:	5105" style="margin: 5px" /></a><br />
<br />
Как видно с картинки Визуал Студия <u>не способна</u> просто добавить <b>ToolStripSplitButton </b>на <b>MenuStrip</b>.<br />
<br />
Решение довольно простое!<br />
<br />
Нужно создать <b>ToolStrip</b>, а на нем обычной командой создать <b>ToolStripSplitButton</b>. Пример<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5106&amp;d=1542979536" rel="Lightbox" id="attachment5106" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5106&amp;thumb=1&amp;d=1542979536" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 02.jpg
Просмотров: 671
Размер:	12.8 Кб
ID:	5106" style="margin: 5px" /></a><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5107&amp;d=1542980081" rel="Lightbox" id="attachment5107" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5107&amp;thumb=1&amp;d=1542980081" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 03.jpg
Просмотров: 543
Размер:	11.6 Кб
ID:	5107" style="margin: 5px" /></a><br />
<br />
<br />
Теперь достаточно &quot;вырезать&quot; элемент из ToolStrip и &quot;вставить&quot; его на MenuStrip. Пример<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5108&amp;d=1542980081" rel="Lightbox" id="attachment5108" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5108&amp;thumb=1&amp;d=1542980081" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 04.jpg
Просмотров: 691
Размер:	18.3 Кб
ID:	5108" style="margin: 5px" /></a><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5109&amp;d=1542980081" rel="Lightbox" id="attachment5109" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5109&amp;thumb=1&amp;d=1542980081" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 05.jpg
Просмотров: 637
Размер:	12.2 Кб
ID:	5109" style="margin: 5px" /></a><br />
<br />
И, о чудо, <b>ToolStripSplitButton</b> <i>появился </i>на <b>MenuStrip</b>!!<br />
<br />
Однако, почему добавление <b>ToolStripSplitButton</b> изначально не было предусмотрено в добавлении непосредственно к <b>MenuStrip</b>?<br />
Могут ли быть какие то баги в использовании не предусмотренной возможности?</div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/5552.html</guid>
		</item>
		<item>
			<title>Собираем эксклюзивные часы на микроконтроллере AVR</title>
			<link>https://www.cyberforum.ru/blogs/914198/4551.html</link>
			<pubDate>Mon, 30 Jan 2017 05:13:26 GMT</pubDate>
			<description>Можно подумать, что в магазинах мало подобного добра. Конечно нет. Купить можно и более...</description>
			<content:encoded><![CDATA[<div>Можно подумать, что в магазинах мало подобного добра. Конечно нет. Купить можно и более функциональное устройсво, потратив меньше труда и денежных знаков. Однако комуто нравиться брать чтото готовое, другому творить своё. Тем более сделанное чтото своими руками всегда эксклюзив, чем можно хвастаться или гордиться.<br />
<br />
Схема часов выполнена на микроконтроллере ATMEGA8. Схема состоит из следующих основных элементов.<br />
Регистры 555ИР22 (4)<br />
Матричный светодиодный индикатор 8*8 точек (4)<br />
Микроконтроллер ATMEGA8 (1)<br />
+ а также транзисторы, резисторы и прочая мелоч (см. схему)<br />
<br />
Программа часов написана на ассемблере и в данный момент содержит все основные функции для управления ими. Настройка часов и календаря, времени показа режимов, корректировки хода часов (с интервалом 1,3824 секунд/сутки или 1/62500 сек/сек). Реализован режим вывода строки текста в праздничные дни, например, &quot;С новым годом&quot; и т.п.<br />
<br />
Схема часов выполнена на одностороннем фольгированном текстолите, в связи с чем на обратной стороне многочисленные электрические соединения выполнены с помощью множества отдельных проводников.<br />
<br />
Принципиальноя схема<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4120&amp;d=1485753142" rel="Lightbox" id="attachment4120" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4120&amp;thumb=1&amp;d=1485753142" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 1200_1.png
Просмотров: 1624
Размер:	298.5 Кб
ID:	4120" style="margin: 5px" /></a><br />
<br />
!примечание1. <b>Некоторые порты контроллера не соответствуют схеме.</b> Так как были перепутаны перемычки на плате при монтаже, вследствие чего исправление перепутанных портов регистров было выполнено программно.<br />
!примечание2. <b>Все транзисторы заменены на PNP тип, что немного повлияло на программный код.</b><br />
<br />
Часы на финальной сборке. Корпус часов сделан с помощью степлера из полутвердой пластиковой пленки. Тестирование работы показало: характеристики вторичной цепи: <b>5 Вольт 0,2..0,22 Ампера</b>, первичной цепи: сеть <b>220 В</b>, активная мощьность <b>2,5 Вт</b>(зависит от КПД блока питания).<br />
<br />
Прошивка для ATMEGA8 (актуальная версия):<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4205&amp;d=1492237139" >chasi.zip</a></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4159&amp;d=1489030199" target="attachment" rel="Lightbox" id="attachment4159"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4159&amp;stc=1&amp;thumb=1&amp;d=1489030199" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20170306_081406.jpg
Просмотров: 761
Размер:	193.2 Кб
ID:	4159" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4160&amp;d=1489030199" target="attachment" rel="Lightbox" id="attachment4160"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4160&amp;stc=1&amp;thumb=1&amp;d=1489030199" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20170306_081422.jpg
Просмотров: 771
Размер:	171.2 Кб
ID:	4160" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4161&amp;d=1489030199" target="attachment" rel="Lightbox" id="attachment4161"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4161&amp;stc=1&amp;thumb=1&amp;d=1489030199" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20170306_082848.jpg
Просмотров: 799
Размер:	169.7 Кб
ID:	4161" /></a>
	&nbsp;
	
		<br /><br />
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4162&amp;d=1489030199" target="attachment" rel="Lightbox" id="attachment4162"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4162&amp;stc=1&amp;thumb=1&amp;d=1489030199" border="0" alt="Нажмите на изображение для увеличения
Название: IMG_20170306_210316.jpg
Просмотров: 571
Размер:	189.4 Кб
ID:	4162" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4193&amp;d=1492059804" target="attachment" rel="Lightbox" id="attachment4193"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4193&amp;stc=1&amp;thumb=1&amp;d=1492059804" border="0" alt="Нажмите на изображение для увеличения
Название: 2017-04-12 21-17-16.jpg
Просмотров: 436
Размер:	200.0 Кб
ID:	4193" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4194&amp;d=1492059804" target="attachment" rel="Lightbox" id="attachment4194"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4194&amp;stc=1&amp;thumb=1&amp;d=1492059804" border="0" alt="Нажмите на изображение для увеличения
Название: 2017-04-12 21-17-19.jpg
Просмотров: 638
Размер:	208.4 Кб
ID:	4194" /></a>
	&nbsp;
	
		<br /><br />
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4195&amp;d=1492059804" target="attachment" rel="Lightbox" id="attachment4195"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4195&amp;stc=1&amp;thumb=1&amp;d=1492059804" border="0" alt="Нажмите на изображение для увеличения
Название: 2017-04-12 21-17-22.jpg
Просмотров: 594
Размер:	203.9 Кб
ID:	4195" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4196&amp;d=1492059804" target="attachment" rel="Lightbox" id="attachment4196"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4196&amp;stc=1&amp;thumb=1&amp;d=1492059804" border="0" alt="Нажмите на изображение для увеличения
Название: 2017-04-10 14-22-46.jpg
Просмотров: 426
Размер:	306.7 Кб
ID:	4196" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/4551.html</guid>
		</item>
		<item>
			<title>Игра Шашки на Питоне</title>
			<link>https://www.cyberforum.ru/blogs/914198/4540.html</link>
			<pubDate>Fri, 13 Jan 2017 10:35:30 GMT</pubDate>
			<description>Любить игрушки я начал еще очень давно. Однако в то время у меня не было ни достаточных знаний, ни...</description>
			<content:encoded><![CDATA[<div>Любить игрушки я начал еще очень давно. Однако в то время у меня не было ни достаточных знаний, ни тем более желания кроме как в них играть. Однако только любить игры мне показалось скучно и я решил попробовать написать свою собственную игру. В начале написал простой шарик сбивающий блоки. Однако, подумал я, ПЭВМ ведь создан для более зложных вычислений, а также для оживления загадочного ИИ. Почему бы не написать чтото более сложное. Так появились Шашки на Питоне. Конечно, получился далеко не Искуствернный Интеллект. Однако первый раз я даже не выиграл свою программу (возможно просто не внимательно играл). Сложность, а точнее количество рассчитываемых ходов ПЭВМ можно регулировать значением переменной <i>ur</i>. Игра выполнена в виде оконного приложения<br />
<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4106&amp;d=1484304598" rel="Lightbox" id="attachment4106" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4106&amp;thumb=1&amp;d=1484304598" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 2525
Размер:	66.3 Кб
ID:	4106" style="margin: 5px" /></a><br />
<br />
Файлы здесь <a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4108&amp;d=1484362264" >Шашки.zip</a><br />
<br />
<div class="codeblock"><table class="python"><thead><tr><td colspan="2" id="354133709"  class="head">Python</td></tr></thead><tbody><tr class="li1"><td><div id="354133709" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
</pre></td><td class="de1"><pre class="de1"><span class="co1">#Python 3.2.3 / IDLE 3.3.0</span>
<span class="co1">#Игра &quot;Шашки&quot;. Автор: Я</span>
<span class="co1">#08.08.2012-22.04.2013</span>
<span class="kw1">from</span> tkinter <span class="kw1">import</span> *
<span class="kw1">import</span> <span class="kw3">random</span>
<span class="kw1">import</span> <span class="kw3">time</span>
<span class="kw1">import</span> <span class="kw3">copy</span>
&nbsp;
gl_okno<span class="sy0">=</span>Tk<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#создаём окно</span>
gl_okno.<span class="me1">title</span><span class="br0">&#40;</span><span class="st0">'Шашки от YARIKO'</span><span class="br0">&#41;</span><span class="co1">#заголовок окна</span>
doska<span class="sy0">=</span>Canvas<span class="br0">&#40;</span>gl_okno<span class="sy0">,</span> width<span class="sy0">=</span><span class="nu0">800</span><span class="sy0">,</span>height<span class="sy0">=</span><span class="nu0">800</span><span class="sy0">,</span>bg<span class="sy0">=</span><span class="st0">'#FFFFFF'</span><span class="br0">&#41;</span>
doska.<span class="me1">pack</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp;
n2_spisok<span class="sy0">=</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#конечный список ходов компьютера</span>
ur<span class="sy0">=</span><span class="nu0">3</span><span class="co1">#количество предсказываемых компьютером ходов</span>
k_rez<span class="sy0">=</span><span class="nu0">0</span><span class="co1">#!!!</span>
o_rez<span class="sy0">=</span><span class="nu0">0</span>
poz1_x<span class="sy0">=</span>-<span class="nu0">1</span><span class="co1">#клетка не задана</span>
f_hi<span class="sy0">=</span><span class="kw2">True</span><span class="co1">#определение хода игрока(да)</span>
&nbsp;
<span class="kw1">def</span> izobrazheniya_peshek<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#загружаем изображения пешек</span>
&nbsp; &nbsp; <span class="kw1">global</span> peshki
&nbsp; &nbsp; i1<span class="sy0">=</span>PhotoImage<span class="br0">&#40;</span><span class="kw2">file</span><span class="sy0">=</span><span class="st0">&quot;res<span class="es0">\\</span>1b.gif&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; i2<span class="sy0">=</span>PhotoImage<span class="br0">&#40;</span><span class="kw2">file</span><span class="sy0">=</span><span class="st0">&quot;res<span class="es0">\\</span>1bk.gif&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; i3<span class="sy0">=</span>PhotoImage<span class="br0">&#40;</span><span class="kw2">file</span><span class="sy0">=</span><span class="st0">&quot;res<span class="es0">\\</span>1h.gif&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; i4<span class="sy0">=</span>PhotoImage<span class="br0">&#40;</span><span class="kw2">file</span><span class="sy0">=</span><span class="st0">&quot;res<span class="es0">\\</span>1hk.gif&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; peshki<span class="sy0">=</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span>i1<span class="sy0">,</span>i2<span class="sy0">,</span>i3<span class="sy0">,</span>i4<span class="br0">&#93;</span>
&nbsp;
<span class="kw1">def</span> novaya_igra<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#начинаем новую игру</span>
&nbsp; &nbsp; <span class="kw1">global</span> pole
&nbsp; &nbsp; pole<span class="sy0">=</span><span class="br0">&#91;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#93;</span>
&nbsp;
<span class="kw1">def</span> vivod<span class="br0">&#40;</span>x_poz_1<span class="sy0">,</span>y_poz_1<span class="sy0">,</span>x_poz_2<span class="sy0">,</span>y_poz_2<span class="br0">&#41;</span>:<span class="co1">#рисуем игровое поле</span>
&nbsp; &nbsp; <span class="kw1">global</span> peshki
&nbsp; &nbsp; <span class="kw1">global</span> pole
&nbsp; &nbsp; <span class="kw1">global</span> kr_ramka<span class="sy0">,</span>zel_ramka
&nbsp; &nbsp; k<span class="sy0">=</span><span class="nu0">100</span>
&nbsp; &nbsp; x<span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; doska.<span class="me1">delete</span><span class="br0">&#40;</span><span class="st0">'all'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; kr_ramka<span class="sy0">=</span>doska.<span class="me1">create_rectangle</span><span class="br0">&#40;</span>-<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span>outline<span class="sy0">=</span><span class="st0">&quot;red&quot;</span><span class="sy0">,</span>width<span class="sy0">=</span><span class="nu0">5</span><span class="br0">&#41;</span>
&nbsp; &nbsp; zel_ramka<span class="sy0">=</span>doska.<span class="me1">create_rectangle</span><span class="br0">&#40;</span>-<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span> -<span class="nu0">5</span><span class="sy0">,</span>outline<span class="sy0">=</span><span class="st0">&quot;green&quot;</span><span class="sy0">,</span>width<span class="sy0">=</span><span class="nu0">5</span><span class="br0">&#41;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">while</span> x<span class="sy0">&lt;</span><span class="nu0">8</span>*k:<span class="co1">#рисуем доску</span>
&nbsp; &nbsp; &nbsp; &nbsp; y<span class="sy0">=</span><span class="nu0">1</span>*k
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> y<span class="sy0">&lt;</span><span class="nu0">8</span>*k:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">create_rectangle</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> x+k<span class="sy0">,</span> y+k<span class="sy0">,</span>fill<span class="sy0">=</span><span class="st0">&quot;black&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y+<span class="sy0">=</span><span class="nu0">2</span>*k
&nbsp; &nbsp; &nbsp; &nbsp; x+<span class="sy0">=</span><span class="nu0">2</span>*k
&nbsp; &nbsp; x<span class="sy0">=</span><span class="nu0">1</span>*k
&nbsp; &nbsp; <span class="kw1">while</span> x<span class="sy0">&lt;</span><span class="nu0">8</span>*k:<span class="co1">#рисуем доску</span>
&nbsp; &nbsp; &nbsp; &nbsp; y<span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> y<span class="sy0">&lt;</span><span class="nu0">8</span>*k:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">create_rectangle</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> x+k<span class="sy0">,</span> y+k<span class="sy0">,</span>fill<span class="sy0">=</span><span class="st0">&quot;black&quot;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y+<span class="sy0">=</span><span class="nu0">2</span>*k
&nbsp; &nbsp; &nbsp; &nbsp; x+<span class="sy0">=</span><span class="nu0">2</span>*k
&nbsp; &nbsp; 
&nbsp; &nbsp; <span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:<span class="co1">#рисуем стоячие пешки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z<span class="sy0">=</span>pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> z: &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>x_poz_1<span class="sy0">,</span>y_poz_1<span class="br0">&#41;</span><span class="sy0">!=</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span>:<span class="co1">#стоячие пешки?</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">create_image</span><span class="br0">&#40;</span>x*k<span class="sy0">,</span>y*k<span class="sy0">,</span> anchor<span class="sy0">=</span>NW<span class="sy0">,</span> image<span class="sy0">=</span>peshki<span class="br0">&#91;</span>z<span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="co1">#рисуем активную пешку &nbsp; &nbsp; &nbsp; &nbsp; </span>
&nbsp; &nbsp; z<span class="sy0">=</span>pole<span class="br0">&#91;</span>y_poz_1<span class="br0">&#93;</span><span class="br0">&#91;</span>x_poz_1<span class="br0">&#93;</span>
&nbsp; &nbsp; <span class="kw1">if</span> z:<span class="co1">#???</span>
&nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">create_image</span><span class="br0">&#40;</span>x_poz_1*k<span class="sy0">,</span>y_poz_1*k<span class="sy0">,</span> anchor<span class="sy0">=</span>NW<span class="sy0">,</span> image<span class="sy0">=</span>peshki<span class="br0">&#91;</span>z<span class="br0">&#93;</span><span class="sy0">,</span>tag<span class="sy0">=</span><span class="st0">'ani'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="co1">#вычисление коэф. для анимации</span>
&nbsp; &nbsp; kx <span class="sy0">=</span> <span class="nu0">1</span> <span class="kw1">if</span> x_poz_1<span class="sy0">&lt;</span>x_poz_2 <span class="kw1">else</span> -<span class="nu0">1</span>
&nbsp; &nbsp; ky <span class="sy0">=</span> <span class="nu0">1</span> <span class="kw1">if</span> y_poz_1<span class="sy0">&lt;</span>y_poz_2 <span class="kw1">else</span> -<span class="nu0">1</span>
&nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">abs</span><span class="br0">&#40;</span>x_poz_1-x_poz_2<span class="br0">&#41;</span><span class="br0">&#41;</span>:<span class="co1">#анимация перемещения пешки</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ii <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">33</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">move</span><span class="br0">&#40;</span><span class="st0">'ani'</span><span class="sy0">,</span><span class="nu0">0.03</span>*k*kx<span class="sy0">,</span><span class="nu0">0.03</span>*k*ky<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">update</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#обновление</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="nu0">0.01</span><span class="br0">&#41;</span>
&nbsp;
<span class="kw1">def</span> soobsenie<span class="br0">&#40;</span>s<span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">global</span> f_hi
&nbsp; &nbsp; z<span class="sy0">=</span><span class="st0">'Игра завершена'</span>
&nbsp; &nbsp; <span class="kw1">if</span> s<span class="sy0">==</span><span class="nu0">1</span>:
&nbsp; &nbsp; &nbsp; &nbsp; i<span class="sy0">=</span>messagebox.<span class="me1">askyesno</span><span class="br0">&#40;</span>title<span class="sy0">=</span>z<span class="sy0">,</span> message<span class="sy0">=</span><span class="st0">'Вы победили!<span class="es0">\n</span>Нажми &quot;Да&quot; что бы начать заново.'</span><span class="sy0">,</span>icon<span class="sy0">=</span><span class="st0">'info'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> s<span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; i<span class="sy0">=</span>messagebox.<span class="me1">askyesno</span><span class="br0">&#40;</span>title<span class="sy0">=</span>z<span class="sy0">,</span> message<span class="sy0">=</span><span class="st0">'Вы проиграли!<span class="es0">\n</span>Нажми &quot;Да&quot; что бы начать заново.'</span><span class="sy0">,</span>icon<span class="sy0">=</span><span class="st0">'info'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> s<span class="sy0">==</span><span class="nu0">3</span>:
&nbsp; &nbsp; &nbsp; &nbsp; i<span class="sy0">=</span>messagebox.<span class="me1">askyesno</span><span class="br0">&#40;</span>title<span class="sy0">=</span>z<span class="sy0">,</span> message<span class="sy0">=</span><span class="st0">'Ходов больше нет.<span class="es0">\n</span>Нажми &quot;Да&quot; что бы начать заново.'</span><span class="sy0">,</span>icon<span class="sy0">=</span><span class="st0">'info'</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> i:
&nbsp; &nbsp; &nbsp; &nbsp; novaya_igra<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; vivod<span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="co1">#рисуем игровое поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; f_hi<span class="sy0">=</span><span class="kw2">True</span><span class="co1">#ход игрока доступен</span>
&nbsp;
<span class="kw1">def</span> pozici_1<span class="br0">&#40;</span>event<span class="br0">&#41;</span>:<span class="co1">#выбор клетки для хода 1</span>
&nbsp; &nbsp; x<span class="sy0">,</span>y<span class="sy0">=</span><span class="br0">&#40;</span>event.<span class="me1">x</span><span class="br0">&#41;</span>//<span class="nu0">100</span><span class="sy0">,</span><span class="br0">&#40;</span>event.<span class="me1">y</span><span class="br0">&#41;</span>//<span class="nu0">100</span><span class="co1">#вычисляем координаты клетки</span>
&nbsp; &nbsp; doska.<span class="me1">coords</span><span class="br0">&#40;</span>zel_ramka<span class="sy0">,</span>x*<span class="nu0">100</span><span class="sy0">,</span>y*<span class="nu0">100</span><span class="sy0">,</span>x*<span class="nu0">100</span>+<span class="nu0">100</span><span class="sy0">,</span>y*<span class="nu0">100</span>+<span class="nu0">100</span><span class="br0">&#41;</span><span class="co1">#рамка в выбранной клетке</span>
&nbsp;
<span class="kw1">def</span> pozici_2<span class="br0">&#40;</span>event<span class="br0">&#41;</span>:<span class="co1">#выбор клетки для хода 2</span>
&nbsp; &nbsp; <span class="kw1">global</span> poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y
&nbsp; &nbsp; <span class="kw1">global</span> f_hi
&nbsp; &nbsp; x<span class="sy0">,</span>y<span class="sy0">=</span><span class="br0">&#40;</span>event.<span class="me1">x</span><span class="br0">&#41;</span>//<span class="nu0">100</span><span class="sy0">,</span><span class="br0">&#40;</span>event.<span class="me1">y</span><span class="br0">&#41;</span>//<span class="nu0">100</span><span class="co1">#вычисляем координаты клетки</span>
&nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:<span class="co1">#проверяем пешку игрока в выбранной клетке</span>
&nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">coords</span><span class="br0">&#40;</span>kr_ramka<span class="sy0">,</span>x*<span class="nu0">100</span><span class="sy0">,</span>y*<span class="nu0">100</span><span class="sy0">,</span>x*<span class="nu0">100</span>+<span class="nu0">100</span><span class="sy0">,</span>y*<span class="nu0">100</span>+<span class="nu0">100</span><span class="br0">&#41;</span><span class="co1">#рамка в выбранной клетке</span>
&nbsp; &nbsp; &nbsp; &nbsp; poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">=</span>x<span class="sy0">,</span>y
&nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> poz1_x<span class="sy0">!=</span>-<span class="nu0">1</span>:<span class="co1">#клетка выбрана</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; poz2_x<span class="sy0">,</span>poz2_y<span class="sy0">=</span>x<span class="sy0">,</span>y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> f_hi:<span class="co1">#ход игрока?</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hod_igroka<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>f_hi<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="nu0">0.5</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hod_kompjutera<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#передаём ход компьютеру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#gl_okno.after(500,hod_kompjutera(0))#!!!#передаём ход компьютеру</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; poz1_x<span class="sy0">=</span>-<span class="nu0">1</span><span class="co1">#клетка не выбрана</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doska.<span class="me1">coords</span><span class="br0">&#40;</span>kr_ramka<span class="sy0">,</span>-<span class="nu0">5</span><span class="sy0">,</span>-<span class="nu0">5</span><span class="sy0">,</span>-<span class="nu0">5</span><span class="sy0">,</span>-<span class="nu0">5</span><span class="br0">&#41;</span><span class="co1">#рамка вне поля &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
&nbsp; &nbsp; &nbsp;
<span class="kw1">def</span> hod_kompjutera<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#!!!</span>
&nbsp; &nbsp; <span class="kw1">global</span> f_hi
&nbsp; &nbsp; <span class="kw1">global</span> n2_spisok
&nbsp; &nbsp; proverka_hk<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> n2_spisok:<span class="co1">#проверяем наличие доступных ходов</span>
&nbsp; &nbsp; &nbsp; &nbsp; kh<span class="sy0">=</span><span class="kw2">len</span><span class="br0">&#40;</span>n2_spisok<span class="br0">&#41;</span><span class="co1">#количество ходов</span>
&nbsp; &nbsp; &nbsp; &nbsp; th<span class="sy0">=</span><span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>kh-<span class="nu0">1</span><span class="br0">&#41;</span><span class="co1">#случайный ход</span>
&nbsp; &nbsp; &nbsp; &nbsp; dh<span class="sy0">=</span><span class="kw2">len</span><span class="br0">&#40;</span>n2_spisok<span class="br0">&#91;</span>th<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#длина хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> h <span class="kw1">in</span> n2_spisok:<span class="co1">#!!!для отладки!!!</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h<span class="sy0">=</span>h<span class="co1">#!!!для отладки!!!</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>dh-<span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#выполняем ход</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>hod<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>n2_spisok<span class="br0">&#91;</span>th<span class="br0">&#93;</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>n2_spisok<span class="br0">&#91;</span>th<span class="br0">&#93;</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span>n2_spisok<span class="br0">&#91;</span>th<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span>+i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span>n2_spisok<span class="br0">&#91;</span>th<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span>+i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; n2_spisok<span class="sy0">=</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="co1">#очищаем список ходов</span>
&nbsp; &nbsp; &nbsp; &nbsp; f_hi<span class="sy0">=</span><span class="kw2">True</span><span class="co1">#ход игрока доступен</span>
&nbsp;
&nbsp; &nbsp; <span class="co1">#определяем победителя </span>
&nbsp; &nbsp; s_k<span class="sy0">,</span>s_i<span class="sy0">=</span>skan<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>s_i<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; soobsenie<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw1">not</span><span class="br0">&#40;</span>s_k<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; soobsenie<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">elif</span> f_hi <span class="kw1">and</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok_hi<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; soobsenie<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw1">not</span><span class="br0">&#40;</span>f_hi<span class="br0">&#41;</span> <span class="kw1">and</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok_hk<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; soobsenie<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span>
&nbsp;
<span class="kw1">def</span> spisok_hk<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#составляем список ходов компьютера</span>
&nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_k1<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#здесь проверяем обязательные ходы</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_k2<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#здесь проверяем оставшиеся ходы</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> proverka_hk<span class="br0">&#40;</span>tur<span class="sy0">,</span>n_spisok<span class="sy0">,</span>spisok<span class="br0">&#41;</span>:<span class="co1">#!!!</span>
&nbsp; &nbsp; <span class="kw1">global</span> pole
&nbsp; &nbsp; <span class="kw1">global</span> n2_spisok
&nbsp; &nbsp; <span class="kw1">global</span> l_rez<span class="sy0">,</span>k_rez<span class="sy0">,</span>o_rez
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:<span class="co1">#если список ходов пустой...</span>
&nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>spisok_hk<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#заполняем</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> spisok:
&nbsp; &nbsp; &nbsp; &nbsp; k_pole<span class="sy0">=</span><span class="kw3">copy</span>.<span class="me1">deepcopy</span><span class="br0">&#40;</span>pole<span class="br0">&#41;</span><span class="co1">#копируем поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">in</span> spisok:<span class="co1">#проходим все ходы по списку</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_spisok<span class="sy0">=</span>hod<span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> t_spisok:<span class="co1">#если существует ещё ход</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proverka_hk<span class="br0">&#40;</span>tur<span class="sy0">,</span><span class="br0">&#40;</span>n_spisok+<span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span>t_spisok<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proverka_hi<span class="br0">&#40;</span>tur<span class="sy0">,</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> tur<span class="sy0">==</span><span class="nu0">1</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_rez<span class="sy0">=</span>o_rez/k_rez
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>n2_spisok<span class="br0">&#41;</span>:<span class="co1">#записыаем если пустой</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n2_spisok<span class="sy0">=</span><span class="br0">&#40;</span>n_spisok+<span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_rez<span class="sy0">=</span>t_rez<span class="co1">#сохряняем наилучший результат</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> t_rez<span class="sy0">==</span>l_rez:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n2_spisok<span class="sy0">=</span>n2_spisok+<span class="br0">&#40;</span>n_spisok+<span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> t_rez<span class="sy0">&gt;</span>l_rez:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n2_spisok<span class="sy0">=</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n2_spisok<span class="sy0">=</span><span class="br0">&#40;</span>n_spisok+<span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_rez<span class="sy0">=</span>t_rez<span class="co1">#сохряняем наилучший результат</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; o_rez<span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k_rez<span class="sy0">=</span><span class="nu0">0</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pole<span class="sy0">=</span><span class="kw3">copy</span>.<span class="me1">deepcopy</span><span class="br0">&#40;</span>k_pole<span class="br0">&#41;</span><span class="co1">#возвращаем поле</span>
&nbsp; &nbsp; <span class="kw1">else</span>:<span class="co1">#???</span>
&nbsp; &nbsp; &nbsp; &nbsp; s_k<span class="sy0">,</span>s_i<span class="sy0">=</span>skan<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#подсчёт результата хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; o_rez+<span class="sy0">=</span><span class="br0">&#40;</span>s_k-s_i<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; k_rez+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp;
<span class="kw1">def</span> spisok_hi<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#составляем список ходов игрока</span>
&nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_i1<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#здесь проверяем обязательные ходы</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_i2<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#здесь проверяем оставшиеся ходы</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp; &nbsp; 
<span class="kw1">def</span> proverka_hi<span class="br0">&#40;</span>tur<span class="sy0">,</span>spisok<span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">global</span> pole<span class="sy0">,</span>k_rez<span class="sy0">,</span>o_rez
&nbsp; &nbsp; <span class="kw1">global</span> ur
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span><span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>spisok_hi<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> spisok:<span class="co1">#проверяем наличие доступных ходов</span>
&nbsp; &nbsp; &nbsp; &nbsp; k_pole<span class="sy0">=</span><span class="kw3">copy</span>.<span class="me1">deepcopy</span><span class="br0">&#40;</span>pole<span class="br0">&#41;</span><span class="co1">#копируем поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">in</span> spisok: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_spisok<span class="sy0">=</span>hod<span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> t_spisok:<span class="co1">#если существует ещё ход</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proverka_hi<span class="br0">&#40;</span>tur<span class="sy0">,</span>t_spisok<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> tur<span class="sy0">&lt;</span>ur:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proverka_hk<span class="br0">&#40;</span>tur+<span class="nu0">1</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s_k<span class="sy0">,</span>s_i<span class="sy0">=</span>skan<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#подсчёт результата хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; o_rez+<span class="sy0">=</span><span class="br0">&#40;</span>s_k-s_i<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k_rez+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pole<span class="sy0">=</span><span class="kw3">copy</span>.<span class="me1">deepcopy</span><span class="br0">&#40;</span>k_pole<span class="br0">&#41;</span><span class="co1">#возвращаем поле</span>
&nbsp; &nbsp; <span class="kw1">else</span>:<span class="co1">#доступных ходов нет</span>
&nbsp; &nbsp; &nbsp; &nbsp; s_k<span class="sy0">,</span>s_i<span class="sy0">=</span>skan<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#подсчёт результата хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; o_rez+<span class="sy0">=</span><span class="br0">&#40;</span>s_k-s_i<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; k_rez+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp;
<span class="kw1">def</span> skan<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="co1">#подсчёт пешек на поле</span>
&nbsp; &nbsp; <span class="kw1">global</span> pole
&nbsp; &nbsp; s_i<span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; s_k<span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ii <span class="kw1">in</span> pole<span class="br0">&#91;</span>i<span class="br0">&#93;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ii<span class="sy0">==</span><span class="nu0">1</span>:s_i+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ii<span class="sy0">==</span><span class="nu0">2</span>:s_i+<span class="sy0">=</span><span class="nu0">3</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ii<span class="sy0">==</span><span class="nu0">3</span>:s_k+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ii<span class="sy0">==</span><span class="nu0">4</span>:s_k+<span class="sy0">=</span><span class="nu0">3</span>
&nbsp; &nbsp; <span class="kw1">return</span> s_k<span class="sy0">,</span>s_i
&nbsp;
<span class="kw1">def</span> hod_igroka<span class="br0">&#40;</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">global</span> poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y
&nbsp; &nbsp; <span class="kw1">global</span> f_hi
&nbsp; &nbsp; f_hi<span class="sy0">=</span><span class="kw2">False</span><span class="co1">#считаем ход игрока выполненным</span>
&nbsp; &nbsp; spisok<span class="sy0">=</span>spisok_hi<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">if</span> spisok:
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">in</span> spisok:<span class="co1">#проверяем ход на соответствие правилам игры</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t_spisok<span class="sy0">=</span>hod<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="co1">#если всё хорошо, делаем ход &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> t_spisok:<span class="co1">#если есть ещё ход той же пешкой</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f_hi<span class="sy0">=</span><span class="kw2">True</span><span class="co1">#считаем ход игрока невыполненным</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f_hi<span class="sy0">=</span><span class="kw2">True</span><span class="co1">#считаем ход игрока невыполненным</span>
&nbsp; &nbsp; doska.<span class="me1">update</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#!!!обновление</span>
&nbsp;
<span class="kw1">def</span> hod<span class="br0">&#40;</span>f<span class="sy0">,</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">global</span> pole
&nbsp; &nbsp; <span class="kw1">if</span> f:vivod<span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="co1">#рисуем игровое поле</span>
&nbsp; &nbsp; <span class="co1">#превращение</span>
&nbsp; &nbsp; <span class="kw1">if</span> poz2_y<span class="sy0">==</span><span class="nu0">0</span> <span class="kw1">and</span> pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span>:
&nbsp; &nbsp; &nbsp; &nbsp; pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span><span class="sy0">=</span><span class="nu0">2</span>
&nbsp; &nbsp; <span class="co1">#превращение</span>
&nbsp; &nbsp; <span class="kw1">if</span> poz2_y<span class="sy0">==</span><span class="nu0">7</span> <span class="kw1">and</span> pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span>:
&nbsp; &nbsp; &nbsp; &nbsp; pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span><span class="sy0">=</span><span class="nu0">4</span>
&nbsp; &nbsp; <span class="co1">#делаем ход &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span>
&nbsp; &nbsp; pole<span class="br0">&#91;</span>poz2_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz2_x<span class="br0">&#93;</span><span class="sy0">=</span>pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span>
&nbsp; &nbsp; pole<span class="br0">&#91;</span>poz1_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz1_x<span class="br0">&#93;</span><span class="sy0">=</span><span class="nu0">0</span>
&nbsp;
&nbsp; &nbsp; <span class="co1">#рубим пешку игрока</span>
&nbsp; &nbsp; kx<span class="sy0">=</span>ky<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; <span class="kw1">if</span> poz1_x<span class="sy0">&lt;</span>poz2_x:kx<span class="sy0">=</span>-<span class="nu0">1</span>
&nbsp; &nbsp; <span class="kw1">if</span> poz1_y<span class="sy0">&lt;</span>poz2_y:ky<span class="sy0">=</span>-<span class="nu0">1</span>
&nbsp; &nbsp; x_poz<span class="sy0">,</span>y_poz<span class="sy0">=</span>poz2_x<span class="sy0">,</span>poz2_y
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>poz1_x<span class="sy0">!=</span>x_poz<span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>poz1_y<span class="sy0">!=</span>y_poz<span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; x_poz+<span class="sy0">=</span>kx
&nbsp; &nbsp; &nbsp; &nbsp; y_poz+<span class="sy0">=</span>ky
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y_poz<span class="br0">&#93;</span><span class="br0">&#91;</span>x_poz<span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pole<span class="br0">&#91;</span>y_poz<span class="br0">&#93;</span><span class="br0">&#91;</span>x_poz<span class="br0">&#93;</span><span class="sy0">=</span><span class="nu0">0</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> f:vivod<span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="co1">#рисуем игровое поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#проверяем ход той же пешкой...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>poz2_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz2_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>poz2_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz2_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:<span class="co1">#...компьютера</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> prosmotr_hodov_k1p<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="co1">#возвращаем список доступных ходов</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> pole<span class="br0">&#91;</span>poz2_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz2_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>poz2_y<span class="br0">&#93;</span><span class="br0">&#91;</span>poz2_x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:<span class="co1">#...игрока</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> prosmotr_hodov_i1p<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="co1">#возвращаем список доступных ходов</span>
&nbsp; &nbsp; <span class="kw1">if</span> f:vivod<span class="br0">&#40;</span>poz1_x<span class="sy0">,</span>poz1_y<span class="sy0">,</span>poz2_x<span class="sy0">,</span>poz2_y<span class="br0">&#41;</span><span class="co1">#рисуем игровое поле</span>
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_k1<span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:<span class="co1">#проверка наличия обязательных ходов</span>
&nbsp; &nbsp; <span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:<span class="co1">#сканируем всё поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_k1p<span class="br0">&#40;</span>spisok<span class="sy0">,</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_k1p<span class="br0">&#40;</span>spisok<span class="sy0">,</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span>:<span class="co1">#пешка</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy+iy<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix+ix<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix+ix<span class="sy0">,</span>y+iy+iy<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:<span class="co1">#пешка с короной</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh<span class="sy0">=</span><span class="nu0">0</span><span class="co1">#определение правильности хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> &nbsp;<span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*i<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*i<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> osh<span class="sy0">==</span><span class="nu0">1</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*i<span class="sy0">,</span>y+iy*i<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span> <span class="kw1">or</span> osh<span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> osh<span class="sy0">&gt;</span><span class="nu0">0</span>:spisok.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#удаление хода из списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_k2<span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:<span class="co1">#проверка наличия остальных ходов</span>
&nbsp; &nbsp; <span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:<span class="co1">#сканируем всё поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span>:<span class="co1">#пешка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix<span class="sy0">,</span>y+iy<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*<span class="nu0">2</span><span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*<span class="nu0">2</span><span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*<span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*<span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*<span class="nu0">2</span><span class="sy0">,</span>y+iy*<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:<span class="co1">#пешка с короной</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh<span class="sy0">=</span><span class="nu0">0</span><span class="co1">#определение правильности хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*i<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*i<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*i<span class="sy0">,</span>y+iy*i<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span> <span class="kw1">or</span> osh<span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_i1<span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:<span class="co1">#проверка наличия обязательных ходов</span>
&nbsp; &nbsp; spisok<span class="sy0">=</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="co1">#список ходов</span>
&nbsp; &nbsp; <span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:<span class="co1">#сканируем всё поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok<span class="sy0">=</span>prosmotr_hodov_i1p<span class="br0">&#40;</span>spisok<span class="sy0">,</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_i1p<span class="br0">&#40;</span>spisok<span class="sy0">,</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span>:
&nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span>:<span class="co1">#пешка</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy+iy<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix+ix<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix+ix<span class="sy0">,</span>y+iy+iy<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:<span class="co1">#пешка с короной</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh<span class="sy0">=</span><span class="nu0">0</span><span class="co1">#определение правильности хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> &nbsp;<span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*i<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*i<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> osh<span class="sy0">==</span><span class="nu0">1</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*i<span class="sy0">,</span>y+iy*i<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span> <span class="kw1">or</span> osh<span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> osh<span class="sy0">&gt;</span><span class="nu0">0</span>:spisok.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#удаление хода из списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
<span class="kw1">def</span> prosmotr_hodov_i2<span class="br0">&#40;</span>spisok<span class="br0">&#41;</span>:<span class="co1">#проверка наличия остальных ходов</span>
&nbsp; &nbsp; <span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:<span class="co1">#сканируем всё поле</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span>:<span class="co1">#пешка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix<span class="sy0">,</span>y+iy<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*<span class="nu0">2</span><span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*<span class="nu0">2</span><span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*<span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*<span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*<span class="nu0">2</span><span class="sy0">,</span>y+iy*<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y<span class="br0">&#93;</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span>:<span class="co1">#пешка с короной</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> ix<span class="sy0">,</span>iy <span class="kw1">in</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh<span class="sy0">=</span><span class="nu0">0</span><span class="co1">#определение правильности хода</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">8</span><span class="br0">&#41;</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>y+iy*i<span class="sy0">&lt;=</span><span class="nu0">7</span> <span class="kw1">and</span> <span class="nu0">0</span><span class="sy0">&lt;=</span>x+ix*i<span class="sy0">&lt;=</span><span class="nu0">7</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">0</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spisok.<span class="me1">append</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="br0">&#41;</span><span class="sy0">,</span><span class="br0">&#40;</span>x+ix*i<span class="sy0">,</span>y+iy*i<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="co1">#запись хода в конец списка</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">3</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">4</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osh+<span class="sy0">=</span><span class="nu0">1</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">1</span> <span class="kw1">or</span> pole<span class="br0">&#91;</span>y+iy*i<span class="br0">&#93;</span><span class="br0">&#91;</span>x+ix*i<span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">2</span> <span class="kw1">or</span> osh<span class="sy0">==</span><span class="nu0">2</span>:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>
&nbsp; &nbsp; <span class="kw1">return</span> spisok
&nbsp;
izobrazheniya_peshek<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#здесь загружаем изображения пешек</span>
novaya_igra<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1">#начинаем новую игру</span>
vivod<span class="br0">&#40;</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="sy0">,</span>-<span class="nu0">1</span><span class="br0">&#41;</span><span class="co1">#рисуем игровое поле</span>
doska.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;Motion&gt;&quot;</span><span class="sy0">,</span> pozici_1<span class="br0">&#41;</span><span class="co1">#движение мышки по полю</span>
doska.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;Button-1&gt;&quot;</span><span class="sy0">,</span> pozici_2<span class="br0">&#41;</span><span class="co1">#нажатие левой кнопки</span>
&nbsp;
mainloop<span class="br0">&#40;</span><span class="br0">&#41;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/4540.html</guid>
		</item>
		<item>
			<title>Сравнитель картинок - программа для поиска похожих изображений</title>
			<link>https://www.cyberforum.ru/blogs/914198/4536.html</link>
			<pubDate>Tue, 10 Jan 2017 09:47:29 GMT</pubDate>
			<description>Не так давно (!) мне понадобилось выполнить поиск похожих изображений на своём диске. Я находил в...</description>
			<content:encoded><![CDATA[<div>Не так давно (!) мне понадобилось выполнить поиск похожих изображений на своём диске. Я находил в Инете программы подобного рода, но захотел написать свою (уникальную). Получилось вполне привлекательно, имхо. Возможно буду и дальше работать над этой программой, если она будет востребована, а также если будут идеи и возможность их реализации.<br />
Скачать программу <b>Rikou - Сравнитель картинок</b> можно по прямой ссылке<br />
<a rel="nofollow noopener noreferrer" href="https://disk.yandex.ru/d/BrVjhBJYe9XvKg?w=1" target="_blank" title="https://disk.yandex.ru/d/BrVjhBJYe9XvKg?w=1">Rikou - Сравнитель картинок</a><br />
или с моего сайта <br />
<a rel="nofollow noopener noreferrer" href="https://rikou.ucoz.net" target="_blank" title="https://rikou.ucoz.net">Программы Rikou</a><br />
<br />
<i>Описание:</i><br />
Программа для нахождения похожих изображений. Часто или не очень, но бывает так, что на жёстком диске скапливается множество похожих или одинаковых изображений. Дублирование файлов вещь хорошая, в качестве резерва, однако должна быть контролируемой. Программа <a rel="nofollow noopener noreferrer" href="https://yadi.sk/d/SK_mklMk3JM9rD" target="_blank" title="https://yadi.sk/d/SK_mklMk3JM9rD">Rikou - Сравнитель картинок</a> призвана помочь в этом нелёгком деле!<br />
<br />
<i>Возможности:</i><br />
Поддержка расширений *.JPG, *.GIF, *.PNG, *.BMP, *.TIF.<br />
Просмотр изображений и удаление, перемещение выбранных изображений.<br />
Сохранение результата поиска в файл.<br />
Язык интерфейса: только русский.<br />
<br />
<i>Основные системные требования:</i><br />
ОС Windows;<br />
.NET Framework4.5+;<br />
Свободное место менее 0,5 МБ.<br />
<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4096&amp;d=1484038539" rel="Lightbox" id="attachment4096" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=4096&amp;thumb=1&amp;d=1484038539" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 0000.jpg
Просмотров: 514
Размер:	76.9 Кб
ID:	4096" style="margin: 5px" /></a></div>

]]></content:encoded>
			<dc:creator>yariko</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/914198/4536.html</guid>
		</item>
	</channel>
</rss>
