ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

Шахматная ΠΈΠ³Ρ€Π° Π² Python

Π― Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π» Π½Π° 2 мСсяца, ΠΈ я Π½Π°Ρ‡Π°Π» ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. Π― Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист Π² Python, поэтому, поТалуйста, ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ ΠΌΠΎΠΉ ΠΊΠΎΠ΄.

4 ΠΎΡ‚Π²Π΅Ρ‚Π°

Π­Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΈ Ρƒ мСня ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ я Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π·Π°Π±Ρ€ΠΎΡˆΡƒ свои Π΄Π²Π° Ρ†Π΅Π½Ρ‚Π°. Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с вашСй ΠΊΠΎΠΏΠΈΠ΅ΠΉ /вставкой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вСсь ваш ΠΊΠΎΠ΄ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° class опрСдСлСния) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ отступом Π΅Ρ‰Π΅ 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту запись для ΡƒΡ‡Π΅Ρ‚Π° этого.

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Ρƒ мСня Π΅ΡΡ‚ΡŒ для вас:

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ

ΠŸΠ»ΠΎΡ…ΠΎΠΉ

По большСй части, это всС Π²Π΅Ρ‰ΠΈ pep8, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости. На самом Π΄Π΅Π»Π΅ я Π½Π΅ запускал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС, Ρ‡Π΅Π³ΠΎ я пропустил. МнС нравится ΠΈΠ΄Ρ‚ΠΈ Π½Π° ΡΡ‚ΠΈΠ»ΡŒ & Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ Π² любом случаС.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ для удобства чтСния ΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, Π² ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈ простой Ρ„ΠΎΡ€ΠΌΠ΅.

Π•ΡΡ‚ΡŒ нСсколько Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠΏΠ°Π»ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ.

По ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ваша бСлая ладья начинаСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ мСстС. Π§Ρ‚ΠΎ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ладьи?

Π’Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ сСбя классом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ просто ΠΈΠΌΠ΅Ρ‚ΡŒ рыцарский класс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС 4 рыцаря (с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны) ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свою ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Для Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список ΠΈΠ· 8 ‘.’ s с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ умноТСния.

И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ 2 оси с Π²Π΅Ρ‰ΡŒΡŽ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ списка. Π­Ρ‚ΠΎ Π² основном сокращСниС для создания списка с Ρ†ΠΈΠΊΠ»ΠΎΠΌ for.:

Π’Π°ΠΊΠΆΠ΅ смутно Π²Ρ‹, каТСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части доски. Если это ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ Π½Π΅ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ людСй Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π‘Π΅Π»Ρ‹ΠΉ ΠšΠΎΡ€ΠΎΠ»ΡŒ. Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наслСдованиС смСшно, я Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ копию доски. ΠŸΠΎΡ…ΠΎΠΆΠ΅, это создаст ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΡƒΡŽ доску ΠΏΡ€ΠΈ создании этой ΠΏΡŒΠ΅ΡΡ‹. Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠšΠΎΡ€ΠΎΠ»Ρ Π² доску, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎ сущСству создаСтС ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π½Π° доскС. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΡƒΡŽ доску Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π½ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€ΠΎΠ»ΡŒ связан с доской, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ наслСдованиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΡƒΠΌΠ½Π΅Π΅, Ссли Π±Ρ‹ Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° доску, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ кусок ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ‹. НапримСр, Π½Π΅ сбрасывая края ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π²Π·ΡΡ‚ΡŒ короля (Π² послСднСм случаС ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сам кусок ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с сообщСниСм ΠΈΠ³Ρ€ΠΎΠΊΡƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Ρ‚.Π΅. ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ короля ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ Π·Π° Ρ€Π°Π·).

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ эти Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ прСдлоТСния, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ большС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΡ€ΠΎΠ»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π»ΠΈ Π΅ΠΌΡƒ ΠΈΠ΄Ρ‚ΠΈ Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ 8, 4. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° совСта!

, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» Π΅Π³ΠΎ Π² качСствС модуля, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Если имя == » main «: ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли выполняСтся фактичСский Ρ„Π°ΠΉΠ».

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ нСслоТный ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹ΠΉ ИИ: 5 простых этапов

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

ΠŸΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ для вас ΡΡ‚Π°Ρ‚ΡŒΡŽ Π›ΠΎΡ€ΠΈ Π₯Π°Ρ€Ρ‚ΠΈΠΊΠΊΠ° (Lauri Hartikka) ΠΎ создании ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ ИИ для ΡˆΠ°Ρ…ΠΌΠ°Ρ‚. Она написана Π΅Ρ‰Π΅ Π² 2017 Π³ΠΎΠ΄Ρƒ, Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅. ВсС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовал Π›ΠΎΡ€ΠΈ, Ρ‚ΠΎΠΆΠ΅ доступны.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ искусствСнный ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° Π±Π°Π·Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ:

НапоминаСм: для всСх Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Β«Π₯Π°Π±Ρ€Π°Β» β€” скидка 10 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ ΠΏΡ€ΠΈ записи Π½Π° любой курс Skillbox ΠΏΠΎ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρƒ Β«Π₯Π°Π±Ρ€Β».

Π“ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° GitHub.

I’m having trouble beating a chess program I wrote.

Not sure if I’m a bad player or the algorithm is decent.

Π­Ρ‚Π°ΠΏ 1. Визуализация ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски с Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ…ΠΎΠ΄ΠΎΠ²

На этом этапС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ chess.js для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ chessboard.js для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ доски. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ…ΠΎΠ΄ΠΎΠ², позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ всС ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ располоТСния Ρ„ΠΈΠ³ΡƒΡ€.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
ΠŸΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΎΠ½Π° откроСтся Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ.

Π Π°Π±ΠΎΡ‚Π° с этими Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ позволяСт ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ β€” поискС ΠΈ создании Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΠΎΠ΄. Π Π°Π±ΠΎΡ‚Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ случайный Ρ…ΠΎΠ΄ ΠΈΠ· списка всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ….

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ являСтся ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹, для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π΅Π³ΠΎ уровня этого Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ достаточно.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
Π§Π΅Ρ€Π½Ρ‹Π΅ ходят случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. (исходники ΠΈ ΠΈΠ³Ρ€Π° ΠΎΠ½Π»Π°ΠΉΠ½)

Π­Ρ‚Π°ΠΏ 2. ΠžΡ†Π΅Π½ΠΊΠ° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρƒ ΠΊΠ°ΠΊΠΎΠΉ стороны прСимущСство Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡƒΡ‚ΡŒ β€” ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ силу Ρ„ΠΈΠ³ΡƒΡ€ Π½Π° доскС, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ†Π΅Π½ΠΊΠΈ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ…ΠΎΠ΄ с максимальной ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ, Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Ρ‡ΡƒΠΆΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, ΠΊΠΎΠ³Π΄Π° такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
Π§Π΅Ρ€Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°Ρ‚ΡŒ Π±Π΅Π»Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. (Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³Ρ€Π° здСсь).

Π­Ρ‚Π°ΠΏ 3. Π”Π΅Ρ€Π΅Π²ΠΎ поиска с минимакс

ПослС этого ΠΌΡ‹ создаСм Π΄Π΅Ρ€Π΅Π²ΠΎ поиска. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΉ Ρ…ΠΎΠ΄. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ минимакс-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π—Π΄Π΅ΡΡŒ рСкурсивноС Π΄Π΅Ρ€Π΅Π²ΠΎ с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ…ΠΎΠ΄ΠΎΠ² анализируСтся Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΆΠ΅ оцСниваСтся ΠΏΠΎ Π»ΠΈΡΡ‚ΡŒΡΠΌ нашСго Π΄Π΅Ρ€Π΅Π²Π°.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ минимальноС ΠΈΠ»ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΠ·Π΅Π». ВсС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ…ΠΎΠ΄ ΠΊΠ°ΠΊΠΎΠΉ стороны сСйчас просчитываСтся. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ максимизируСтся ΠΈΠ»ΠΈ минимизируСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Π‘ минимакс-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ наш ИИ ΡƒΠΆΠ΅ стал ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚.

Минимакс с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ 2 (Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³Ρ€Π° здСсь)

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ минимакс-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° увСличиваСтся с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ поиска. Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап.

Π­Ρ‚Π°ΠΏ 4. ΠΠ»ΡŒΡ„Π°-Π±Π΅Ρ‚Π°-отсСчСния

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ минимакс-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π΄Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‚Π²ΠΈ Π² Π΄Π΅Ρ€Π΅Π²Π΅ поиска. А это позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ поиска, затрачивая ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ объСм рСсурсов.

ΠΠ»ΡŒΡ„Π°-Π±Π΅Ρ‚Π°-отсСчСниС основано Π½Π° ситуации, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ, Ссли обнаруТиваСтся, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΉ ситуации, Ρ‡Π΅ΠΌ Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

На Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ минимакса оптимизация Π½Π΅ влияСт, Π½ΠΎ всС Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС.

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивСн Π² Ρ‚ΠΎΠΌ случаС, Ссли сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ, Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ…ΠΎΠ΄Π°ΠΌ.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ дСмонстрируСт Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ становятся Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Π² процСссС использования Π°Π»ΡŒΡ„Π°-Π±Π΅Ρ‚Π°-отсСчСния.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, с Π°Π»ΡŒΡ„Π°-Π±Π΅Ρ‚Π°-отсСчСниСм минимакс оптимизируСтся, ΠΈ вСсьма Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π² случаС поиска с Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ 4 ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ, которая ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π²Ρ‹ΡˆΠ΅. (исходники ΠΈ ΠΈΠ³Ρ€Π° доступны здСсь)

Π­Ρ‚Π°ΠΏ 5. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ функция ΠΎΡ†Π΅Π½ΠΊΠΈ

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ функция ΠΎΡ†Π΅Π½ΠΊΠΈ достаточно простая, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° просто считаСт ΠΎΡ‡ΠΊΠΈ Ρ„ΠΈΠ³ΡƒΡ€, находящихся Π½Π° доскС. Для Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ коня Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ доски, Ρ‚ΠΎ ΠΎΠ½ становится Π΄ΠΎΡ€ΠΎΠΆΠ΅ β€” спСктр доступных Ρ…ΠΎΠ΄ΠΎΠ² для этой Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡΡ.

На этом этапС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколько Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ вСрсиСй ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ описанной Π² Π²ΠΈΠΊΠΈ Chess Programming.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ наш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΡƒΠΆΠ΅ вСсьма Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со срСдним ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄
Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΈΠ³Ρ€Π° доступны здСсь

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Достоинством ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ совсСм ΡƒΠΆ Π³Π»ΡƒΠΏΡ‹Ρ… ошибок. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ здСсь слоТно Π½Π°Π·Π²Π°Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅.

РСализация нашСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° всСго Π² 200 строк ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ достаточно просты. Π€ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ github.com/lhartikk/simple-chess-ai’>Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° GitHub.

Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ:

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π° Chess Programming Wiki.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π¨Π°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

Python Easy Chess GUI

A Chess GUI based from Python using PySimpleGUI and Python-Chess modules. Users can also load a chess engine and play with it. This program is based on a demo chess against ai from PySimpleGUI.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

If you want to run from the python source the following are required or see the installation section below.

Or you can just download the executable file along with other files such as book and images.

1. Save games to repertoire pgn files

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

2. Install uci engine of your choice

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

2.1 It is recommended to configure the engine setting after installation

Configure engine via Engine->Manage->Edit, select engine and press modify.

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

3. Need book assistance? Right-click on BOOK 2 and press show

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

4. Need what engine adviser will think about the position? Right-click on Adviser and press start

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

To set opponent engine book options

To Hide/Unhide engine search info

To Hide/Unhide Book info

To request Adviser search info

To select opponent engine

To set time control of engine

To set time control of user

To delete engine from config file

About

A Chess GUI based from Python using PySimpleGUI and Python-Chess.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Making Chess in Python

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹ Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠΎΠ΄

I will first describe what’s happening and then show the code afterward.

This is a large project that me and a friend in school conducted. This is pretty funny because we had plans on doing this over several months and 7 days later we have the entire thing completed. I must say, this would not have been possible if it weren’t for the help of my friend Edwin. Firstly we abstracted the entire game since this is a very complex game to code and we decided that I would be responsible for the interface(what the user can see) while Edwin was responsible for the actual behaviour of each piece. They both have their own forms of difficulties to make and we did have to co-ordinate a lot so it wasn’t like we didn’t help each other make each other’s parts eg. i did teach him a bit of list comprehension to speed up his code while he exposed my pretty stupid mistake of doing column row instead of row column.

This code is everything that I wrote alongside some of the dictionary and methods above it. First we create the window object which is the window that comes up when we run the chess game on. We set the dimensions to 800×800 which is the tuple argument which we passed into it. We specifically chose 800 x 800 because the images for the chess pieces that we hard were all 100×100 which meant it would fit perfectly if the board was 800×800.

The main thing that makes my program work are these node objects and they are just the containers which hold the chess pieces(they are simulated as the tiles of the chess board in this case. They have their attributes which are their row, column,x,y co-ordinates. We need these separately because all these nodes are going to be stored in a 8×8 2d list so if we call it we would need to call it using its row and col numbers while if we were drawing it onto the screen we need its x,y pixel values(we could just do row*100 but that would risk us forgetting to add that 1 time in the entire code and watching the entire thing break).

The draw function is used to used to draw the tile onto the screen(so the black and white pattern) while the setup method is used to draw any images onto the screen if we had a piece on the screen at that position. You draw onto the screen using blit.

Draw grid draws the boundaries to the grid(so the black horizontal and vertical lines that separate the tiles) and draw grid and make grid is creating the 2d list which are going to use to access all the nodes later. Update display is used to update the screen every-time the tick. I think to avoid the CPU being overloaded, we chose to run the program at 20fps which is ofc completely unreasonable for chess but we didn’t want too much delay.

When the user clicks on the screen, we need to figure out what tile they have clicked on which is what find_node does. Display_potential_moves is a function edwin made but it just takes a list of potential moves and for those moves, changes the colour of the tile so that it stands out.

Do_move is used to acc make the swap on the screen but swapping the values on my dictionary, when the screen updates, this change will be visible on the screen.

remove_highlight is used because it is hard to remove the highlights for specific tiles so we decided to just to redraw the black colours for all the tiles instead.

The main function then contains a lot fo standard logic which I would hope you would have a grasp on if you know pygame. I will attach a video here too just incase you don’t

If I were to explain the entirety of the code, this would take hours on hours to write so I am going to explain the functions and any complex concepts which may be in them and leave you to solve out the rest.

We used pygame to write this program since it can easily give us the interface and I have experience from my A* algorithm on how to make a grid so most of the grid is just recycled code from that.

Except from the starting order dict, all of this was edwins code and all of it used for the move calculations. Theoretically you could have done this with only one of either a dictionary or a 2d list like he has done but since we both needed access to an array for our parts while we were coding and we couldn’t share a python script, we made our own versions. Edwin makes a class for the pieces since it is easier to manage and at the bottom he is setting up his 2d list so all the pieces are in their starting positions. In my dictionary, I hard wrote all the positions automatically since I needed to put the name of each of the individual image files into the load. pygame.image.load() is going to load an image onto the python file and then we only need to draw the image onto the screen. It is better this way than loading the image and then drawing because it means we only need to load the image once for the entire program and then just translate this image onto new positions on the screen.

The rest of edwins code is pretty self-explanatory and is just choosing the correct positions that each piece can move to and then putting those β€˜legal’ tiles on the chessboard for us to use on the interface as a way of highlighting the board.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

rsheldiii / chess.py

This comment has been minimized.

Copy link Quote reply

d3mon1231 commented Nov 24, 2017

pawn can moves two forward from their starting place. I dont think yours can

This comment has been minimized.

Copy link Quote reply

MichaelGitHubHype commented Dec 7, 2017

Seems to always return error with input for me
You should probably make clearer instructions

This comment has been minimized.

Copy link Quote reply

Kwame0 commented May 3, 2018

why dont u guys just code it urselves if ur having problems lmao

This comment has been minimized.

Copy link Quote reply

Menocha commented Aug 12, 2018

hey! I’m gonna try it. Any recommendations?

This comment has been minimized.

Copy link Quote reply

ChessMast commented Dec 6, 2018

The following are the issues that I found:
Boards sideways instead of up and down
Black and white are on the wrong side of the board
The white king and queen are in the wrong positions
It doesn’t recognize checkmate
It lets you take into check
Pawns only move one square
No en passant
No castling
Crashes when you capture king
Not proper notation

This comment has been minimized.

Copy link Quote reply

Shadowking1235 commented Mar 8, 2019

Very educative, Thanks for the upload.

This comment has been minimized.

Copy link Quote reply

JayTesla commented Mar 8, 2019

This program run which complier

This comment has been minimized.

Copy link Quote reply

Julius2005 commented Mar 26, 2019

hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?

This comment has been minimized.

Copy link Quote reply

TheRealKinglogic commented Mar 31, 2019

hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?

This comment has been minimized.

Copy link Quote reply

inigmati commented Apr 5, 2019

Start as a white player i.e. e7 e6

This comment has been minimized.

Copy link Quote reply

mikelittle88 commented May 16, 2019

also its not put for first moving pawns to go 2 spaces

This comment has been minimized.

Copy link Quote reply

martin5852 commented Aug 6, 2019

This comment has been minimized.

Copy link Quote reply

mcwaffles2003 commented Nov 1, 2019

«why dont u guys just code it urselves if ur having problems lmao»
I came ere to learn how to but how can I dissect code if I cant even interact with it to see how its working (if it even does)

This comment has been minimized.

Copy link Quote reply

Ogrone commented Nov 28, 2019

hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?

i have the same problem

This comment has been minimized.

Copy link Quote reply

rishisankhla commented Feb 22, 2020

hi, i really like your chess program, but i have can not figure out how to move the pieces. I am trying to type e4 but it dont work, i have also tried e2 e4 but it doesnt work. Can you please tell me how the moving works?

This comment has been minimized.

Copy link Quote reply

ManzhouYang commented Jun 23, 2020

I can’t promote my pawn to a queen

This comment has been minimized.

Copy link Quote reply

NicholasSager55 commented Jul 6, 2020 β€’

If you are having difficulties with the other code, I improved it with some minor fixes. If you want to know how to move your pieces, type a2-a4 as an example. Make sure to copy all of the code after this text:

«»»CONVENTIONS:
positions are done row-column from the bottom left and are both numbers.
This corresponds to the alpha-number system in traditional chess while being computationally useful.
They are specified as tuples
«»»
import itertools
import copy
import inspect
WHITE = «white»
BLACK = «black»
gameboard = None

def canSeeKing(kingpos,piecelist, overridegameboard = None):
global gameboard
overridegameboard = overridegameboard or gameboard
for piece,position in piecelist:
if piece.isValid(position,kingpos,piece.Color,overridegameboard):
return True

def isCheck(overridegameboard = None):
global gameboard
#ascertain where the kings are, check all pieces of opposing color against those kings,
# then if either get hit, check if its checkmate
overridegameboard = overridegameboard or gameboard
king = King
kingDict = <>
pieceDict =
for position,piece in overridegameboard.items():
if type(piece) == king:
kingDict[piece.Color] = position
print(piece)
pieceDict[piece.Color].append((piece,position))
#white
if canSeeKing(kingDict[WHITE],pieceDict[BLACK], overridegameboard):
return WHITE
if canSeeKing(kingDict[BLACK],pieceDict[WHITE], overridegameboard):
return BLACK
return False

class Game:
def init(self):
global gameboard
self.playersturn = WHITE
self.message = «Input Your Move»
gameboard = self.gameboard = <>
self.placePieces()
print(«Chess program. Enter moves in algebraic notation separated by space. Example: a2-a4»)
self.main()

chessCardinals = [(1,0),(0,1),(-1,0),(0,-1)]
chessDiagonals = [(1,1),(-1,1),(1,-1),(-1,-1)]

def knightList(x,y,int1,int2):
«»»Sepcifically for the rook, permutes the values needed around a position for noConflict tests»»»
return [(x+int1,y+int2),(x-int1,y+int2),(x+int1,y-int2),(x-int1,y-int2),(x+int2,y+int1),(x-int2,y+int1),(x+int2,y-int1),(x-int2,y-int1)]
def kingList(x,y):
return [(x+1,y),(x+1,y+1),(x+1,y-1),(x,y+1),(x,y-1),(x-1,y),(x-1,y+1),(x-1,y-1)]

class Knight(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return [(xx,yy) for xx,yy in knightList(x,y,2,1) if self.noConflict(gameboard, Color, xx, yy)]

class Bishop(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return self.AdNauseum(x, y, gameboard, Color, chessDiagonals)

class Queen(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return self.AdNauseum(x, y, gameboard, Color, chessCardinals+chessDiagonals)

class King(Piece):
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
return [(xx,yy) for xx,yy in kingList(x,y) if self.noConflict(gameboard, Color, xx, yy)]

class Pawn(Piece):
def init(self,color,name,direction):
self.name = name
self.Color = color
self.direction = direction
def availableMoves(self,x,y,gameboard, Color = None):
if Color is None : Color = self.Color
answers = []
if (x+1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x+1, y+self.direction) : answers.append((x+1,y+self.direction))
if (x-1,y+self.direction) in gameboard and self.noConflict(gameboard, Color, x-1, y+self.direction) : answers.append((x-1,y+self.direction))
if (x,y+self.direction) not in gameboard and Color == self.Color and self.noConflict(gameboard, Color, x, y+self.direction) : answers.append((x,y+self.direction))# the condition after the and is to make sure the non-0capturing movement is not used in the calculation of checkmate
if (x,y+self.direction2) not in gameboard and Color == self.Color and self.noConflict(gameboard, Color, x, y+self.direction2) : answers.append((x,y+self.direction*2))# the condition after the and is to make sure the non-0capturing movement is not used in the calculation of checkmate
return answers

if (name == «main«):
input(«Press the Enter Key to Exit»)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *