Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ³ΡΡ Β«Π¨Π°ΡΠΊΠΈΒ» Π½Π° Delphi
ΠΡΠ±ΠΈΡΡ ΡΠ°ΡΠΊΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΡΠΊΠΎΡΠΈΠ² Π΅Π΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ°ΡΠΊΠΎΠΉ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°, Π° ΠΏΠΎΠ·Π°Π΄ΠΈ Π½Π΅Π΅ Π΄ΠΎΠ»ΠΆΠΎ Π±ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅. ΠΡΠΈΡΠ΅ΠΌ Π²ΡΠ±ΠΈΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄ΠΎΠΌ Π²ΠΏΠ΅ΡΠ΅Π΄, Π½ΠΎ ΠΈ Π½Π°Π·Π°Π΄. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Ρ ΠΎΠ΄Π°, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΡ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΡΠΊΠΎΠΉ Π΄ΡΡΠ³ΡΡ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΡΡ ΡΠ°ΡΠΊΡ, ΡΠΎ ΠΈΠ³ΡΠΎΠΊ Π΄Π΅Π»Π°Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ΄Π°ΡΠ½ΡΠΉ Ρ ΠΎΠ΄, Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΡΠ°Π²Π° Ρ ΠΎΠ΄Π° ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΡ. Π’. Π΅. Π·Π° ΡΠ°Π· ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ³ΡΡ Β«Π¨Π°ΡΠΊΠΈΒ» Π½Π° Delphi (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π€Π΅Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π°Π³Π΅Π½ΡΡΡΠ²ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π Π΅ΡΠΏΡΠ±Π»ΠΈΠΊΠΈ ΠΡΡΡΡΠΈΡ ΠΡΡΡΡΡΠΊΠΈΠΉ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ ΠΠ½ΡΡΠΈΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠΈ ΠΠ°ΡΠ΅Π΄ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΡΡΡΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ°
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ³ΡΡ «Π¨Π°ΡΠΊΠΈ» Π½Π° Delphi
ΠΡΠΏΠΎΠ»Π½ΠΈΠ»Π°: Π Π°Π΄Π½Π°Π΅Π²Π° Π., Π³ΡΡΠΏΠΏΠ° 5 470
ΠΠ°ΡΡΠ½ΡΠΉ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ: ΠΠΎΡΠ΄ΠΎΠ²ΡΠΊΠΎΠΉ Π. Π.
Π£Π»Π°Π½-Π£Π΄Ρ
1. ΠΠ· ΠΈΡΡΠΎΡΠΈΠΈ
2. ΠΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
3. ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ
4. ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
1. ΠΠ· ΠΈΡΡΠΎΡΠΈΠΈ
ΠΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΈΠ³Ρ, ΡΠ°ΡΠΊΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ ΠΈ Π²ΠΎ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π½Π΅ΠΌΠ°Π»ΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΡ. Π’ΠΎΡΠ½ΠΎΠΉ ΠΈΡΡΠΎΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ, Ρ ΠΎΡΡ ΠΏΡΠΈ ΡΠ°ΡΠΊΠΎΠΏΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π² ΠΠ³ΠΈΠΏΡΠ΅, Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° Π΄ΡΠ΅Π²Π½ΡΡ Π΄ΠΎΡΠΊΠ° ΠΈ Π½Π°Π±ΠΎΡ ΠΈΠ· ΡΠΈΡΠ΅ΠΊ Π΄Π²ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ΄Π°Π»Π΅Π½Π½ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΡ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΠΎΡΠΈΠΈ, ΡΠ°ΡΠΊΠΈ Π²Π·ΡΠ»ΠΈ ΡΠ²ΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΠΎΡ ΠΈΠ³ΡΡ «Π»Π°ΡΡΡΠ½ΠΊΡΠ»ΠΈ», ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π° Π² Π ΠΈΠΌΠ΅. ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠ°ΡΠΊΠ°ΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠ°Π½ΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΠΎΠΉ ΠΈΠ³ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Ρ ΠΎΠ΄Π°, Π·Π°ΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π΄Π°ΠΌΠΎΠΊ — ΠΈΠΌΠΈ ΡΡΠΈΡΠ°Π»ΠΈΡΡ ΡΠΈΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΡΠΈΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ°ΡΠΊΠ°ΠΌΠΈ.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠΎ Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΈ ΠΈΡΡΠΎΡΠΈΡ ΠΎΠ± ΠΈΠ³ΡΠ΅ «Π°Π»ΡΠΊΠ΅ΡΠΊ» — ΠΌΠ°Π²ΡΠΈΡΠ°Π½ΡΠΊΠΎΠΉ Π½Π°ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°Π»ΠΎ Π΄Π²Π΅ Π°ΡΠΌΠΈΠΈ ΠΏΠΎ 12 ΡΠ°ΡΠ΅ΠΊ, Π° Ρ ΠΎΠ΄ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΡΡ ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ»Π΅ΡΠΎΠΊ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ΅ΠΎΡΠΈΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΠ³ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°ΠΊΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ Π»Π΅Π³Π΅Π½Π΄Π°. Π Π½Π΅ΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΡΠΊΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½Ρ Π³ΡΠ΅ΡΠ΅ΡΠΊΠΈΠΌ Π±ΠΎΠ³ΠΎΠΌ ΠΠ΅ΡΠΌΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ°ΡΡΠΈΠΈ, Π²ΡΠΈΠ³ΡΠ°Π» 5 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄Π½Π΅ΠΉ Π² Π³ΠΎΠ΄Ρ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈΡΡ ΠΊ 360 Π΄Π½ΡΠΌ, ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΡΡΠΆΡΠ½Π½ΠΎΡΡΡ Π³ΠΎΠ΄Π°.
ΠΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ ΠΎΠ± ΠΈΡΡΠΎΡΠΈΠΈ, ΡΠΎ Π·Π°ΡΠ°ΡΡΡΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΡΠ°ΡΡΠΊΠ°Π· ΠΎ Π³ΡΠ΅ΡΠ΅ΡΠΊΠΎΠΌ Π²ΠΎΠΈΠ½Π΅ ΠΠ°Π»Π°ΠΌΠ΅Π΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π» ΠΈΠ³ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ°ΡΠΊΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ±ΠΈΡΡ ΡΠΊΡΠΊΡ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π° Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠ½Π΅ΠΉ ΠΎΡΠ°Π΄Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π³ΠΎΡΠΎΠ΄ΠΎΠ². ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ³ΡΡ Π±ΡΠ»ΠΎ ΡΠΎ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΆΠ΅Π»Π°ΡΡΠΈΠΉ ΠΌΠΎΠ³ Π² Π½Π΅Π΅ ΡΡΠ³ΡΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΎΡΠΊΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°Π² ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π° Π·Π΅ΠΌΠ»Π΅.
ΠΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΈΠ· Π²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅ΠΎΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²Π΄ΠΈΠ²ΠΎΠΉ ΠΈ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΠΉ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, Π·Π°ΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΡΠΈΡ Π΄ΡΠ΅Π²Π½Π΅ΠΉ Π ΡΡΠΈ ΡΠ°ΡΠΊΠΈ ΠΏΠΎΠΏΠ°Π»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² Π₯ Π²Π΅ΠΊΠ΅ Π½Π°ΡΠ΅ΠΉ ΡΡΡ. ΠΡΠΈ Π°ΡΡ Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΡΠΊΠΎΠΏΠΊΠ°Ρ Π±ΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ ΡΠ°ΡΠΊΠΈ ΠΈΠ· Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΠΌΠ½Ρ, Π³Π»ΠΈΠ½Ρ ΠΈ Π΄ΡΡΠ³ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ².
Π§ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅, Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠ΅ΡΡΠ° I, ΠΈΠ³ΡΠ° ΡΠΆΠ΅ ΡΡΠ°Π»Π° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π° ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Π°, ΡΡΠΎ Π΄Π»Ρ Π½Π΅Ρ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π»ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ½Π°ΡΡ. ΠΠΎΠ·ΠΆΠ΅ ΡΡΠ°Π»ΠΈ ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΡΡΡΠ½ΠΈΡΡ ΠΈ ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΊΠΎΡΠ΅Π½ΠΈΠ»ΠΎ ΡΡΠΎΡ Π²ΠΈΠ΄ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠ΅ΡΠ²Π°Ρ ΡΡΠ°ΡΡΡ ΠΎ ΡΠ°ΡΠΊΠ°Ρ Π² Π ΠΎΡΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² 1803 Π³ΠΎΠ΄Ρ. ΠΠ΅ Π°Π²ΡΠΎΡ — Π. Π. ΠΠ°ΡΠ°ΠΌΠ·ΠΈΠ½. ΠΡΠ±ΠΈΡΠ΅Π»ΡΠΌΠΈ ΡΠ°ΡΠ΅ΠΊ Π±ΡΠ»ΠΈ ΠΠ΅ΡΠΆΠ°Π²ΠΈΠ½, ΠΡΡΠΊΠΈΠ½. Π. Π. Π’ΠΎΠ»ΡΡΠΎΠΉ Π² «ΠΠΎΠΉΠ½Π΅ ΠΈ ΠΌΠΈΡΠ΅» ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π²ΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΡΡΡΡΠ²Π° ΡΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ ΡΠ°ΡΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ³ΡΡ. ΠΠ°ΠΏΠΎΠ»Π΅ΠΎΠ½ ΡΠ°Ρ ΠΌΠ°ΡΠ°ΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π» ΡΠ°ΡΠΊΠΈ, ΡΠ΅ΡΠΏΠ°Ρ Π² ΡΡΠΎΠΉ ΠΈΠ³ΡΠ΅ ΠΈΠ΄Π΅ΠΈ Π΄Π»Ρ ΡΠ°ΠΊΡΠΈΠΊΠΈ Π²Π΅Π΄Π΅Π½ΠΈΡ Π±ΠΎΡ, ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°ΡΡΡΠ°Π²Π°Π»ΡΡ Π²ΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠ΅ΡΠ»Π°ΠΌΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°ΡΠ΅ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΎΠΉ.
Π¨Π°ΡΠΊΠΈ — ΠΈΠ³ΡΠ° Π΄Π»Ρ Π΄Π²ΡΡ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ»Π΅ΡΠΎΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠΊΠ°ΠΌΠΈ — ΡΠ°ΡΠΊΠ°ΠΌΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Ρ ΠΌΠ°ΡΠ°ΠΌ, ΡΠ°ΡΠΊΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠ°ΠΆΠ°ΡΡΠΈΡ ΡΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΡΠΈΠ».
2. ΠΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
ΡΠ°ΡΠΊΠΈ ΠΈΠ³ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠ΄ ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΡΠ΅ΡΠ½ΡΡ ΠΈΠ³Ρ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΡΠΊΠΈ ΠΈ «ΠΈΠ³ΡΡ ΡΠ°ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°», ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π½Π°Π·ΡΠ²Π°ΡΡ (Π³ΠΎ, ΡΡΠ½Π΄Π·Ρ, ΠΈ ΠΏΡ., ΡΠΌ. Π²ΡΡΠ΅). ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΡ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ.
ΠΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌ Π΄ΠΎΡΠΊΠΈ — 12×12 (ΠΊΠ°Π½Π°Π΄ΡΠΊΠΈΠ΅), 10×10 (ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠ΅), 8×8 (ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅Π΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ°ΡΠ΅ΠΊ).
ΠΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌ ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ³ΡΡ. Π Π½ΠΈΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ:
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΠ΅ΠΊ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ.
ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ΄Π° ΠΈ Π²Π·ΡΡΠΈΡ: ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ/Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΠΎΡ Π½Π°Π·Π°Π΄ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΡΠΊΠΎΠΉ.
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡ Π²Π·ΡΡΠΈΡ: ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π±ΠΎΡ Π² ΠΎΠ΄Π½ΠΈΡ ΠΈΠ³ΡΠ°Ρ ΠΈΠ³ΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π² Π΄ΡΡΠ³ΠΈΡ — Π΅Π³ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π° Π²ΡΠ±ΠΎΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°.
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΡΠΊΠΈ Π² Π΄Π°ΠΌΠΊΡ: ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΠΏΡΠ°Π²ΠΈΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² Π΄Π°ΠΌΠΊΡ ΠΏΡΠΈ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π΄Π°ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π·ΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΡΠ΅ΠΊ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°. Π ΠΎΠ΄Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°Ρ ΡΠ°ΡΠΊΠ°, ΠΏΠΎΠΏΠ°Π²ΡΠ°Ρ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ Ρ ΠΎΠ΄Π° Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π°ΠΌΠΊΠΎΠΉ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π±ΠΈΡΡ, ΠΊΠ°ΠΊ Π΄Π°ΠΌΠΊΠ°, Π² Π΄ΡΡΠ³ΠΈΡ — ΠΏΡΠΎΡΡΠ°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π°ΠΌΠΊΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Ρ ΠΎΠ΄Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠΈΠ°Π½ΡΡ ΡΠ°ΡΠ΅ΠΊ
ΠΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΠ³ΡΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π° Π² ΠΠ²ΡΠΎΠΏΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΠΎΡΠΊΠ° 10Π§10 ΠΊΠ»Π΅ΡΠΎΠΊ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠΎ 20 ΡΠ°ΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΡΡΠ΄Π° Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, «ΠΏΡΠΎΡΡΠ°Ρ» ΡΠ°ΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΠΈΡΡ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ Π½Π°Π·Π°Π΄, Π΄Π°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΎΠ΄ΠΈΡΡ ΠΈ Π±ΠΈΡΡ Π½Π° Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. «ΠΡΠΎΡΡΠ°Ρ» ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π΄Π°ΠΌΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉ Ρ ΠΎΠ΄ Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈ Π±ΠΎΠ΅ «ΠΏΡΠΎΡΡΠΎΠΉ» ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΎΠ½Π° Π½Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π±ΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠ°Ρ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ «ΠΏΡΠΎΡΡΠ°Ρ» ΠΌΠΎΠΆΠ΅Ρ Π±ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ Π΄Π°ΠΌΠΊΠ°, ΠΎΠ½Π° ΠΎΡΡΠ°ΡΡΡΡ Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π±ΠΈΡΡ ΠΊΠ°ΠΊ Π΄Π°ΠΌΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Ρ ΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΡΡΡΡΠΊΠΈΡ ΡΠ°ΡΠΊΠ°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ «ΡΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π°ΡΠ°». ΠΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π²Π·ΡΡΠΈΡ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π±ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ΅ΠΊ. Π¦Π΅Π»Ρ ΠΈΠ³ΡΡ, ΠΊΠ°ΠΊ ΠΈ Π² ΡΡΡΡΠΊΠΈΡ ΡΠ°ΡΠΊΠ°Ρ , — ΡΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ΅ΡΠ΅ΡΡ Π²ΡΠ΅ ΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°.
ΠΠ»ΡΠ°ΠΉΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. Π‘ΠΎΡΠ΅ΡΠ°ΡΡ Π² ΡΠ΅Π±Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°ΡΠ΅ΠΊ ΠΈ ΡΠ°Ρ ΠΌΠ°Ρ.
ΠΡΠ°Π·ΠΈΠ»ΡΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌ ΡΠ°ΡΠΊΠ°ΠΌ, Π½ΠΎ ΠΈΠ³ΡΠ° Π²Π΅Π΄ΡΡΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅ 8Π§8, ΠΏΠΎ 12 ΡΠ°ΡΠ΅ΠΊ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΠ°Π½Π°Π΄ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. Π ΠΊΠ°Π½Π°Π΄ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ ΠΈΠ³ΡΠ°ΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅ 12Π§12, ΠΏΠΎ 24 ΡΠ°ΡΠΊΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ. Π ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌ ΡΠ°ΡΠΊΠ°ΠΌ.
ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ ΠΈΠ»ΠΈ Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ, ΠΈΠ»ΠΈ ΡΠ΅ΠΊΠ΅ΡΡ (Π°Π½Π³Π». Checkers). ΠΠΎΡΠΊΠ° 8Π§8, Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎ 12 ΡΠ°ΡΠ΅ΠΊ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΡ ΡΡΠ΄Π°Ρ Π½Π° ΡΡΡΠ½ΡΡ ΠΊΠ»Π΅ΡΠΊΠ°Ρ . ΠΠ΅ΡΠ²ΡΠΉ Ρ ΠΎΠ΄ Π΄Π΅Π»Π°ΡΡ ΡΡΡΠ½ΡΠ΅. «ΠΡΠΎΡΡΡΠ΅» ΡΠ°ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Ρ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π½Π° ΠΎΠ΄Π½Ρ ΠΊΠ»Π΅ΡΠΊΡ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ Π±ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΏΠ΅ΡΡΠ΄, Π΄Π°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΊΠ»Π΅ΡΠΊΡ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ Π½Π°Π·Π°Π΄ ΠΈ Π±ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½Ρ ΠΊΠ»Π΅ΡΠΊΡ Π² Π»ΡΠ±ΡΡ ΡΡΠΎΡΠΎΠ½Ρ. ΠΠΈΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠ΅ΠΉ, ΠΈΠ³ΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ, Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΌΡΠΉ Π΄Π»ΠΈΠ½Π½ΡΠΉ, Π½ΠΎ ΠΏΡΠΎΠΉΡΠΈ Π΅Π³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°. Π 2007 Π³ΠΎΠ΄Ρ ΠΠΆΠΎΠ½Π°ΡΠ°Π½ Π¨Π΅ΡΡΠ΅Ρ Π΄ΠΎΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±Π΅ΡΠΏΡΠΎΠΈΠ³ΡΡΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΡΠ»Π΅Π΄ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΈΠ³ΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π° Π½ΠΈΡΡΡ Π² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΡ ΡΠ°ΡΠΊΠ°Ρ , Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΎΠ½ ΠΈΠ³ΡΠ°Π΅Ρ. Π―Π²Π»ΡΡΡΡ Π±Π΅ΡΠΏΡΠΎΠΈΠ³ΡΡΡΠ½ΡΠΌ, Π΄Π°Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ.
ΠΡΠ» (Pool Checkers). ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ Π² Π‘Π¨Π Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ³ΡΡ. ΠΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠΌ ΡΠ°ΡΠΊΠ°ΠΌ, Π½ΠΎ ΠΈΠ³ΡΠ° Π²Π΅Π΄ΡΡΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅ 8Π§8, ΠΏΠΎ 12 ΡΠ°ΡΠ΅ΠΊ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ — Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ΅ΠΊ.
ΠΡΠ°Π»ΡΡΠ½ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. Π ΠΈΡΠ°Π»ΡΡΠ½ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ ΠΈΠ³ΡΠ°ΡΡ Π½Π° ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 8Π§8 ΠΊΠ»Π΅ΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΠ° Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ. Π¨Π°ΡΠΊΠΈ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΡΡΠ΄Π° Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° Π±Π΅Π»ΡΡ ΠΏΠΎΠ»ΡΡ . ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ Π² ΠΈΡΠ°Π»ΡΡΠ½ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ ΡΠ΅ΠΊΠ΅ΡΡ, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ: ΠΏΡΠΎΡΡΠ°Ρ ΡΠ°ΡΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΠΈΡΡ Π½Π°Π·Π°Π΄ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΠΈΡΡ Π΄Π°ΠΌΠΊΡ; Π±ΠΈΡΡ Π½ΡΠΆΠ½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ΅ΠΊ ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΠ°, Π° ΠΏΡΠΈ ΡΠ°Π²Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ Π±ΠΎΡ Π½ΡΠΆΠ½ΠΎ Π±ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°ΠΌΠΎΠΊ.
ΠΡΠΏΠ°Π½ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π±ΡΠ°Π·ΠΈΠ»ΡΡΠΊΠΈΠΌ ΡΠ°ΡΠΊΠ°ΠΌ, Π½ΠΎ Π΄ΠΎΡΠΊΠ° ΠΏΠΎΠ²ΡΡΠ½ΡΡΠ° Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ. Π¨Π°ΡΠΊΠΈ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΡΡΠ΄Π° Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° Π±Π΅Π»ΡΡ ΠΏΠΎΠ»ΡΡ . ΠΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ — ΠΏΡΠΎΡΡΡΠ΅ ΡΠ°ΡΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΠΈΡΡ Π½Π°Π·Π°Π΄.
Π’ΡΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Ρ ΠΏΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ Π²ΠΈΠ΄Ρ ΡΡΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. Π Π½ΠΈΡ ΠΈΠ³ΡΠ° Π²Π΅Π΄ΡΡΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ 64-ΠΊΠ»Π΅ΡΠΎΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅, Π½ΠΎ ΡΠ°ΡΠΊΠΈ Ρ ΠΎΠ΄ΡΡ ΠΈ Π±ΡΡΡ Π½Π΅ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠΌ, Π° ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠΌ ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠΌ, Π²Π·ΡΡΠΈΠ΅ Π½Π°Π·Π°Π΄ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΡΠΊΠΈ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ. ΠΡΡ ΠΎΠ΄Π½Π° ΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ — Π½Π°Π»ΠΈΡΠΈΠ΅ «Π΄ΠΆΠ΅Π½ΡΠ»ΡΠΌΠ΅Π½ΡΠΊΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»» — ΠΏΡΠ°Π²ΠΈΠ», ΡΡΠ΅Π±ΡΡΡΠΈΡ ΠΎΡ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΡΠ°ΡΠΊΠΈ ΡΡΠ°Π²ΡΡΡΡ ΠΏΠΎΠ΄ ΡΠ΄Π°Ρ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΠ°Ρ ΡΠ°ΡΠΊΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ΅Π΄ΡΠΌΠΎΠΉ ΠΈΠ»ΠΈ Π²ΠΎΡΡΠΌΠΎΠΉ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ.
ΠΠΎΠ΄Π΄Π°Π²ΠΊΠΈ (ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΡΠ°ΡΠΊΠΈ). ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ Π² ΠΏΠΎΠ΄Π΄Π°Π²ΠΊΠΈ (Π·Π΄Π΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ 8Π§8 ΠΈ 10Π§10) Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΠΈΠ΅ ΠΈ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΡΠΊΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π»Ρ ΠΈΠ³ΡΡ — ΠΏΠΎΠ΄Π΄Π°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠ΅ΡΠ΅ΡΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠ°ΡΠΊΠΈ.
Π¨Π°ΡΠΊΠΈ-ΡΠ°ΠΌΠΎΠ΅Π΄Ρ. ΠΠ³ΡΠ°ΡΡΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅ 8*8. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΡΡΠΊΠΈΡ ΡΠ°ΡΠ΅ΠΊ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ (ΠΈ ΠΎΠ±ΡΠ·Π°Π½ ΠΏΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ, Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° ΠΈΠ³ΡΡ) Π±ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°, ΡΠ°ΠΊ ΠΈ ΡΠ²ΠΎΠΈ ΡΠ°ΡΠΊΠΈ (Π²Π·ΡΡΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°ΡΠΊΠΎΠΉ). ΠΠΎΠΆΠ½ΠΎ Π±ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠ΅ΠΊ ΠΎΠ±ΠΎΠΈΡ ΡΠ²Π΅ΡΠΎΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ ΠΎΠ΄. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈΠ³ΡΠ° Π½Π° Π΄ΠΎΡΠΊΠ΅ 10*10, Π½ΠΎ Π±Π΅Π· ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π·ΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π°.
Π‘ΡΠΎΠ»Π±ΠΎΠ²ΡΠ΅ ΡΠ°ΡΠΊΠΈ. Π‘ΡΠ°ΡΠΈΠ½Π½ΡΠΉ ΡΡΡΡΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π³Π΄Π΅ ΠΏΠΎΠ±ΠΈΡΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΡΠ°ΡΠΊΠ° Π½Π΅ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠ»Ρ, Π° ΡΡΠ°Π²ΠΈΡΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΠ±ΠΈΠ²ΡΡΡ Π΅Ρ Π±Π°ΡΠ½Ρ.
Π‘ΡΠ°Π²ΡΠΎΠΏΠΎΠ»ΡΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΡΡΡΠΊΠΈΠΌΠΈ ΡΠ°ΡΠΊΠ°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ΅Π·ΠΊΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΠ²ΡΠ΅Π΅ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ Π±ΠΎΡΡΠ±Ρ: Π² ΡΡΠ°Π²ΡΠΎΠΏΠΎΠ»ΡΡΠΊΠΈΡ ΡΠ°ΡΠΊΠ°Ρ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ Ρ ΠΎΠ΄Π° ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°ΡΠΊΠΎΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ΄ Π·Π° ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°. Π’Π°ΠΊ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΈΠ³ΡΡ, Π±Π΅Π»ΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΎ ΠΈΠ³ΡΠ°ΡΡ ΡΡΡΠ½ΠΎΠΉ ΡΠ°ΡΠΊΠΎΠΉ. ΠΠ²ΠΈΠ³Π°ΡΡ ΡΡΠΆΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ°ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ²ΠΎΡ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ Π±ΡΠ°ΡΡ ΠΈΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΈ ΡΠ°ΡΠΊΠΈ. ΠΠ·ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ°ΡΠΊΠΈ. ΠΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π² ΡΡΡΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ, Π½ΠΎ Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° — ΠΈΠ½Π°Ρ (Π±ΠΎΠ»ΡΡΠ°Ρ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°, ΡΠ²Π΅ΡΡ Ρ ΠΈ ΡΠ»Π΅Π²Π° ΠΎΡ Π½Π΅Π΅ Π²ΡΠ΅ ΠΊΠ»Π΅ΡΠΊΠΈ Π·Π°Π½ΡΡΡ ΡΠ΅ΡΠ½ΡΠΌΠΈ ΡΠ°ΡΠΊΠ°ΠΌΠΈ, ΡΠ½ΠΈΠ·Ρ ΠΈ ΡΠΏΡΠ°Π²Π° — Π±Π΅Π»ΡΠΌΠΈ).
3. ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ
ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ³ΡΡ Π² ΡΡΡΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ
ΠΠ»Ρ ΠΈΠ³ΡΡ Π² ΡΡΡΡΠΊΠΈΠ΅ ΡΠ°ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ° ΠΆΠ΅ Π΄ΠΎΡΠΊΠ°, ΡΡΠΎ ΠΈ Π΄Π»Ρ ΠΈΠ³ΡΡ Π² ΡΠ°Ρ ΠΌΠ°ΡΡ. ΠΠ³ΡΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° Π΅ΡΡΡ ΠΏΠΎ 12 ΡΠ°ΡΠ΅ΠΊ. ΠΠ΅ΡΠ²ΡΠΉ Ρ ΠΎΠ΄ Π²ΡΠ΅Π³Π΄Π° Π΄Π΅Π»Π°ΡΡ Π±Π΅Π»ΡΠ΅. ΠΠ³ΡΠΎΠΊΠΈ Ρ ΠΎΠ΄ΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅1:
Π¦Π΅Π»Ρ ΠΈΠ³ΡΡ Π² ΡΠ°ΡΠΊΠΈ: Π²ΡΠ±ΠΈΡΡ Π²ΡΠ΅ ΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ.
Π₯ΠΎΠ΄ΡΡ ΡΠ°ΡΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Π²ΠΏΠ΅ΡΠ΅Π΄.
ΠΡΠ±ΠΈΡΡ ΡΠ°ΡΠΊΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΡΠΊΠΎΡΠΈΠ² Π΅Π΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ°ΡΠΊΠΎΠΉ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°, Π° ΠΏΠΎΠ·Π°Π΄ΠΈ Π½Π΅Π΅ Π΄ΠΎΠ»ΠΆΠΎ Π±ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅. ΠΡΠΈΡΠ΅ΠΌ Π²ΡΠ±ΠΈΠ²Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄ΠΎΠΌ Π²ΠΏΠ΅ΡΠ΅Π΄, Π½ΠΎ ΠΈ Π½Π°Π·Π°Π΄. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Ρ ΠΎΠ΄Π°, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΡ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΡΠΊΠΎΠΉ Π΄ΡΡΠ³ΡΡ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΡΡ ΡΠ°ΡΠΊΡ, ΡΠΎ ΠΈΠ³ΡΠΎΠΊ Π΄Π΅Π»Π°Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ΄Π°ΡΠ½ΡΠΉ Ρ ΠΎΠ΄, Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΡΠ°Π²Π° Ρ ΠΎΠ΄Π° ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΡ. Π’. Π΅. Π·Π° ΡΠ°Π· ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΠΈΡΡ ΠΎΠ΄Π½Ρ-Π΄Π²Π΅-ΡΡΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠ΅ΠΊ.
ΠΡΠ»ΠΈ Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΡ ΡΠ°ΡΠΊΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°, ΡΠΎ ΠΎΠ½ ΠΎΠ±ΡΠ·Π°Π½ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡ ΡΠ΄Π°ΡΠ½ΡΠΉ Ρ ΠΎΠ΄, Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π΅Π³ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠΉ.
Π¨Π°ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΡΠ»Π° Π΄ΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ Π΄ΠΎΡΠΊΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π°ΠΌΠΊΠΎΠΉ. ΠΠ°ΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄. ΠΡΠ»ΠΈ Π΄Π°ΠΌΠΊΠ° Π²ΡΠ±ΠΈΠ»Π° ΡΠ°ΡΠΊΡ ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΠ°, ΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, Π³Π΄Π΅ ΡΡΠΎΡΠ»ΠΎ Π²ΡΠ±ΠΈΡΠ°Ρ ΡΠ°ΡΠΊΠ°. ΠΠ°ΠΌΠΊΠ°, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½Π°Ρ ΡΠ°ΡΠΊΠ°, ΠΎΠ±ΡΠ·Π°Π½Π° Π²ΡΠ±ΠΈΡΡ ΡΡΠΆΡΡ ΡΠ°ΡΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ. ΠΠ°ΠΌΠΊΠ° ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π° ΡΠ°Π· Π²ΡΠ±ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠ΅ΠΊ.
ΠΡΠ»ΠΈ Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΡ ΡΡΠΆΠΈΠ΅ ΡΠ°ΡΠΊΠΈ Π² ΡΠ°Π·Π½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ , ΡΠΎ ΠΎΠ½ ΡΠ°ΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ.
4. ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
const
MM_DOMOVE = WM_USER + 1;
MM_DEBUG = WM_USER + 2;
MM_IS_ANIMATION = WM_USER + 3;
implementation
uses GameTactics;
{$R *.DFM}
function Thinker (APosition: Pointer): Integer;
var
Position: TPosition;
Estimate: Integer;
begin
Position := TPosition (APosition^);
SelectMove (Position, MainForm. Deep, Estimate);
SendMessage (MainForm.Handle, MM_DOMOVE, Integer (@Position), Estimate);
Result := 0;
end;
procedure TMainForm. SelectCellBtnClick (Sender: TObject);
begin
PositionFrame.SelectCell (1, 6);
end;
procedure TMainForm. AcceptMove (Sender: TObject; const NewPosition: TPosition);
var
St: string;
begin
GameHistory.AddMove (NewPosition);
PositionFrame.SetPosition (NewPosition);
St := GameOver (NewPosition);
if St <> '' then
begin
ShowMessage (St);
PositionFrame.AcceptMove := False;
Exit;
end;
TuneState;
end;
procedure TMainForm. FormResize (Sender: TObject);
begin
PositionFrame.Left := 3;
PositionFrame.Top := 3;
Memo.Left := 3;
Memo.Top := PositionFrame. Top + PositionFrame. Height + 3;
Memo.Width := ClientWidth — 6;
Memo.Height := ClientHeight — PositionFrame. Height — 9;
PartyView.Left := PositionFrame. Left + PositionFrame. Width + 3;
PartyView.Width := ClientWidth — PositionFrame. Width — 9;
PartyView.Top := 3;
PartyView.Height := PositionFrame. Height;
PartyView.Columns[0]. Width := 30;
PartyView.Columns[1]. Width := (PartyView.Width — 40) div 2;
PartyView.Columns[2]. Width := (PartyView.Width — 40) div 2;
end;
procedure TMainForm. DoMove (var Message: TMessage);
var
NewPosition: TPosition;
begin
NewPosition := TPosition (Pointer (Message.WParam)^);
CloseHandle (ThreadHandle);
ThreadHandle := 0;
AcceptMove (nil, NewPosition);
end;
procedure TMainForm. FormCreate (Sender: TObject);
begin
FMode := mdMachineBlack;
Memo.Clear;
DoubleBuffered := True;
FGameHistory := TGameHistory. Create;
end;
procedure TMainForm. TuneState;
var
RunThinker: Boolean;
ThreadId: Cardinal;
Index: Integer;
V: Integer;
begin
if ThreadHandle <> 0 then StopThinking;
PositionFrame.AcceptMove := (Mode = mdView)
or ((Mode = mdMachineWhite) and (PositionFrame.Position.Active = ActiveBlack))
or ((Mode = mdMachineBlack) and (PositionFrame.Position.Active = ActiveWhite));
RunThinker := (Mode = mdTwoMachine)
or ((Mode = mdMachineWhite) and (PositionFrame.Position.Active = ActiveWhite))
or ((Mode = mdMachineBlack) and (PositionFrame.Position.Active = ActiveBlack));
if DebugMenu. Visible then
begin
Index := Lib. IndexOf (FormatPosition (PositionFrame.Position));
if Index <> -1 then
begin
V := Integer (Lib.Objects[Index]);
Memo.Lines.Add (Format ('Theory = %.3f', [V/200]));
end;
end;
if not RunThinker then Exit;
ThreadHandle := BeginThread (nil, 8*4096, @Thinker, @PositionFrame.Position, CREATE_SUSPENDED, ThreadId);
SetThreadPriority (ThreadHandle, THREAD_PRIORITY_BELOW_NORMAL);
ResumeThread (ThreadHandle);
end;
Position := Pointer (Message.WPAram);
Memo.Lines.Add (Format ('E=%d N=%.3f M=%s',
[Message.LParam, Message. LParam/200, GetLastMove (Position^)]));
end;
const
MAX_LEN = 60;
procedure TMainForm. StopThinking;
begin
TerminateThread (ThreadHandle, 0);
CloseHandle (ThreadHandle);
ThreadHandle := 0;
end;
procedure TGameHistory. AddWhiteMove (const Move: string);
var
NewItem: TListItem;
begin
NewItem := PartyView.Items.Add;
NewItem.Caption := IntToStr ((MoveNo div 2) + 1);
NewItem.Subitems.Add (Move);
PartyView.Selected := NewItem;
PartyView.Selected.MakeVisible (False);
end;
procedure TGameHistory. AddBlackMove (const Move: string);
var
Item: TListItem;
begin
Assert (MainForm.PartyView.Items.Count > 0);
Item := PartyView. Items[PartyView.Items.Count-1];
Item.Subitems.Add (Move);
PartyView.Selected := Item;
PartyView.Selected.MakeVisible (False);
end;
procedure TGameHistory. AddMove (NewPosition: TPosition);
var
Move: string;
begin
Move := GetLastMove (NewPosition);
if Move <> '' then
if FPositions[MoveNo]. Active = ActiveWhite
then AddWhiteMove (Move)
else AddBlackMove (Move);
MoveNo := MoveNo + 1;
FPositions[MoveNo] := NewPosition;
end;
procedure TGameHistory. NewGame;
begin
MoveNo := 0;
PartyView.Items.Clear;
FPositions[0] := StartBoard;
PositionFrame.SetPosition (StartBoard);
end;
function TGameHistory. GetPartyView: TListView;
begin
Result := MainForm. PartyView;
end;
function TGameHistory. GetPositionFrame: TPositionFrame;
begin
Result := MainForm. PositionFrame;
end;
procedure TGameHistory. Undo;
var
Last: Integer;
Item: TListItem;
begin
Assert (MoveNo > 0);
MainForm.ViewItem.Click;
MoveNo := MoveNo — 1;
PositionFrame.SetPosition (FPositions[MoveNo], False);
Last := PartyView.Items.Count-1;
Assert (Last >= 0);
Item := PartyView. Items[Last];
if Item.SubItems.Count > 1
then Item.SubItems.Delete (1)
else PartyView.Items.Delete (Last);
end;
procedure TMainForm. NewGameActionExecute (Sender: TObject);
begin
StopThinking;
GameHistory.NewGame;
if Mode in [mdMachineWhite, mdTwoMachine] then MachineBlackItem. Click;
PositionFrame.AcceptMove := True;
end;
procedure TMainForm. Deselect (Action: TAction; const Category: string);
var
I: Integer;
begin
for I := 0 to ActionList. ActionCount — 1 do
begin
if ActionList. Actions[I]. Category <> Category then Continue;
if ActionList. Actions[I] = Action then Continue;
(ActionList.Actions[I] as TAction).Checked := False;
end;
end;
procedure TMainForm. LevelActionExecute (Sender: TObject);
begin
Deselect (Sender as TAction, 'Level');
with Sender as TAction do
begin
Checked := True;
Deep := Tag;
end;
end;
procedure TMainForm. UndoMoveActionExecute (Sender: TObject);
begin
GameHistory.Undo;
end;
procedure TMainForm. ActionListUpdate (Action: TBasicAction;
var Handled: Boolean);
begin
UndoMoveAction.Enabled := GameHistory. MoveNo > 0;
end;
procedure TMainForm. ExitActionExecute (Sender: TObject);
begin
ViewItem.Click;
Close;
end;
procedure TMainForm. MachineWhiteActionExecute (Sender: TObject);
begin
Deselect (Sender as TAction, 'Mode');
(Sender as TAction).Checked := True;
if Mode = mdMachineWhite then Exit;
FMode := mdMachineWhite;
PositionFrame.FlipBoard := True;
TuneState;
end;
procedure TMainForm. MachineBlackActionExecute (Sender: TObject);
begin
Deselect (Sender as TAction, 'Mode');
(Sender as TAction).Checked := True;
if Mode = mdMachineBlack then Exit;
FMode := mdMachineBlack;
PositionFrame.FlipBoard := False;
TuneState;
end;
procedure TMainForm. TwoMachineActionExecute (Sender: TObject);
begin
Deselect (Sender as TAction, 'Mode');
(Sender as TAction).Checked := True;
if Mode = mdTwoMachine then Exit;
FMode := mdTwoMachine;
TuneState;
end;
procedure TMainForm. ViewGameActionExecute (Sender: TObject);
begin
Deselect (Sender as TAction, 'Mode');
(Sender as TAction).Checked := True;
if Mode = mdView then Exit;
FMode := mdView;
ViewItem.Checked := True;
if ThreadHandle <> 0 then StopThinking;
end;
procedure TMainForm. SetPositionActionExecute (Sender: TObject);
var
Position: TPosition;
begin
ViewItem.Click;
FillChar (Position.Field, 32, $ 00);
Position.Field[31] := -20;
Position.Field[29] := 70;
Position.Active := ActiveWhite;
// Position. Field[0] := 20;
// Position. Field[2] := -70;
// Position. Active := ActiveBlack;
Position.MoveCount := 0;
PositionFrame.SetPosition (Position);
end;
procedure TMainForm. AddToLibraryActionExecute (Sender: TObject);
var
V: Integer;
Estimate: string;
PositionFmt: string;
Index: Integer;
begin
DecimalSeparator := '.';
Estimate := InputBox ('Input', 'Please, enter estimate', '');
if Estimate = '' then Exit;
Estimate := StringReplace (Estimate, ',', '.', []);
V := Round (200 * StrToFloat (Estimate));
PositionFmt := FormatPosition (PositionFrame.Position);
Index := Lib. IndexOf (PositionFmt);
if Index = -1 then
Lib.AddObject (PositionFmt, TObject (V))
else begin
Lib.Sorted := False;
Lib[Index] := PositionFmt;
Lib.Objects[Index] := TObject (V);
Lib.Sorted := True;
end;
SaveLib;
end;
procedure TMainForm. CopyGameActionExecute (Sender: TObject);
var
MoveNo: Integer;
Item: TListItem;
CurrentSt: string;
AllParty: TStringList;
procedure Add (const St: string);
begin
if Length (CurrentSt) + Length (St) + 1 > MAX_LEN then
begin
AllParty.Add (CurrentSt);
CurrentSt := '';
end;
if CurrentSt <> '' then CurrentSt := CurrentSt + ' ';
CurrentSt := CurrentSt + St;
end;
begin
AllParty := TStringList. Create;
try
CurrentSt := '';
for MoveNo := 0 to PartyView.Items.Count-1 do
begin
Item := PartyView. Items[MoveNo];
Add (Item.Caption + '.');
Add (Item.SubItems[0]);
if Item.SubItems.Count > 1 then
Add (Item.SubItems[1]);
end;
if CurrentSt <> '' then AllParty. Add (CurrentSt);
Clipboard.AsText := AllParty. Text;
finally
AllParty.Free;
end;
end;
end.
procedure TPositionFrame. BeginDebug;
begin
{$IFDEF SELECT_DEBUG}
if Assigned (Debug) then
begin
Debug.BeginUpdate;
Debug.Clear;
end;
{$ENDIF}
end;
procedure TPositionFrame. EndDebug;
begin
{$IFDEF SELECT_DEBUG}
if Assigned (Debug) then Debug. EndUpdate;
{$ENDIF}
end;
procedure TPositionFrame. OutputDebug (const St: string);
begin
{$IFDEF SELECT_DEBUG}
Debug.Add (St);
{$ENDIF}
end;
procedure TPositionFrame. OutputDebug (const St: string; const Args: array of const);
begin
{$IFDEF SELECT_DEBUG}
OutputDebug (Format (St, Args));
{$ENDIF}
end;
procedure TPositionFrame. OutputDebugSelectMove;
{$IFDEF SELECT_DEBUG}
var
I, J: Integer;
St: string;
{$ENDIF}
begin
{$IFDEF SELECT_DEBUG}
OutputDebug ('ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Ρ ΠΎΠ΄Π°:');
for I := 0 to FAnswersCount — 1 do
begin
St := PointsDef[FAnswers[I]. MoveStr[0]];
J := 1;
repeat
if FAnswers[I]. MoveStr[J] = -1 then Break;
St := St + FAnswers[I]. TakeChar + PointsDef[FAnswers[I]. MoveStr[J]];
J := J + 1;
until False;
OutputDebug ('(%d) %s', [I, St]);
end;
OutputDebug ('');
St := '';
for I := 0 to 31 do
if FSelectedCells[I] then St := ' ' + PointsDef[I];
OutputDebug ('Selected =' + St);
St := '';
for I := 0 to FAnswersCount-1 do
St := St + Format (' %d (%d)', [FEnabledAnswer[I], I]);
OutputDebug ('EnabledAnswer =' + St);
St := '';
for I := 0 to FUserSelectCount-1 do
St := St + ' ' + PointsDef[FUserSelect[I]];
OutputDebug ('UserSelect =' + St);
{$ENDIF}
end;
function TPositionFrame. CellToField (X, Y: Integer): Integer;
begin
if FlipBoard
then Result := 4*Y + (7-X) div 2
else Result := 28 — 4*Y + (X div 2);
end;
procedure TPositionFrame. ClearSelect;
begin
FSelected := -1;
RefreshView;
end;
procedure TPositionFrame. DrawField (X, Y, Index: Integer);
begin
ImageList.Draw (Image.Canvas, X*ImageList.Width, Y*ImageList.Height, Index);
end;
function TPositionFrame. IsWhite (X, Y: Integer): Boolean;
begin
Result := ((X xor Y) and 1) = 0;
end;
procedure TPositionFrame. Loaded;
begin
inherited;
FSelected := -1;
end;
procedure TPositionFrame. RefreshView;
var
X, Y: Integer;
X1, X2, Y1, Y2: Integer;
P, Q: Single;
FieldIndex: Integer;
OutPosition: PPosition;
begin
if Animate
then OutPosition := @FAnimatePosition
else OutPosition := @FPosition;
ClientWidth := 8 * ImageList. Width;
ClientWidth := 8 * ImageList. Height;
for Y := 0 to 7 do
for X := 0 to 7 do
if IsWhite (X, Y) then
DrawField (X, Y, 0)
else begin
FieldIndex := CellToField (X, Y);
if Animate and (Position.MoveStr[0] = FieldIndex) then
DrawField (X, Y, 1)
else
case OutPosition. Field[FieldIndex] of
brWhiteSingle: DrawField (X, Y, 2);
brBlackSingle: DrawField (X, Y, 3);
brWhiteMam: DrawField (X, Y, 4);
brBlackMam: DrawField (X, Y, 5);
brEmpty: DrawField (X, Y, 1)
else DrawField (X, Y, 6)
end;
if FSelectedCells[FieldIndex] then
begin
Image.Canvas.Brush.Style := bsClear;
Image.Canvas.Pen.Width := 1;
Image.Canvas.Pen.Color := clGreen;
Image.Canvas.Rectangle (CellRect (X, Y));
Image.Canvas.Rectangle (CellRect (X, Y, -1));
end;
end;
if Animate then
begin
if FlipBoard then
begin
X1 := ImageList. Width * (7 — FAnimateWay[FAnimateStep-1] mod 8);
Y1 := ImageList. Height * (FAnimateWay[FAnimateStep-1] div 8);
X2 := ImageList. Width * (7 — FAnimateWay[FAnimateStep] mod 8);
Y2 := ImageList. Height * (FAnimateWay[FAnimateStep] div 8);
end
else begin
X1 := ImageList. Width * (FAnimateWay[FAnimateStep-1] mod 8);
Y1 := ImageList. Height * (7 — FAnimateWay[FAnimateStep-1] div 8);
X2 := ImageList. Width * (FAnimateWay[FAnimateStep] mod 8);
Y2 := ImageList. Height * (7 — FAnimateWay[FAnimateStep] div 8);
end;
P := FAnimateSubStep /ANIMATE_SUBSTEP_COUNT;
Q := 1 — P;
X := Round (Q*X1+P*X2);
Y := Round (Q*Y1+P*Y2);
TransparentImages.Draw (Image.Canvas, X, Y, FAnimateObject);
end;
Image.Refresh;
end;
procedure TPositionFrame. SelectCell (X, Y: Integer);
begin
if IsWhite (X, Y) then Exit;
FSelected := CellToField (X, Y);
RefreshView;
end;
procedure TPositionFrame. SetFlipBoard (const Value: Boolean);
begin
if FFlipBoard = Value then Exit;
FFlipBoard := Value;
RefreshView;
end;
procedure TPositionFrame. SetPosition (const Position: TPosition; NeedAnimate: Boolean);
begin
FAnimatePosition := FPosition;
FPosition := Position;
if AcceptMove then PrepareAccept;
if NeedAnimate and (Position.MoveStr[0] <> -1)
then BeginAnimate (Position)
else RefreshView
end;
function TPositionFrame. CellRect (X, Y: Integer; Grow: Integer = 0): TRect;
begin
Result.Left := X * ImageList. Width — Grow;
Result.Top := Y * ImageList. Height — Grow;
Result.Right := Result. Left + ImageList. Width + 2*Grow;
Result.Bottom := Result. Top + ImageList. Height + 2*Grow;
end;
procedure TPositionFrame. SetAcceptMove (const Value: Boolean);
begin
if FAcceptMove = Value then Exit;
if Value and not PrepareAccept then Exit;
FAcceptMove := Value;
end;
procedure TPositionFrame. InitSelectMoveVars;
begin
FillChar (FSelectedCells, SizeOf (FSelectedCells), $ 00);
FillChar (FEnabledAnswer, SizeOf (FEnabledAnswer), $ 00);
FUserSelectCount := 0;
end;
function TPositionFrame. PrepareAccept: Boolean;
begin
FAnswersCount := GetMoves (FPosition, @FAnswers, ANSWERS_SIZE);
Result := (FAnswersCount <> 0) and (FAnswersCount <= ANSWERS_SIZE);
InitSelectMoveVars;
end;
procedure TPositionFrame. AddCellToMove (X, Y: Integer);
begin
if IsWhite (X, Y) then Exit;
if FUserSelectCount = 0 then
begin
BeginMove (CellToField (X, Y));
Exit;
end;
if Unselect (CellToField (X, Y)) then Exit;
if ThinkBetter (CellToField (X, Y)) then Exit;
if MoveComplete (CellToField (X, Y)) then Exit;
ContinueMove (CellToField (X, Y));
end;
procedure TPositionFrame. BeginMove (Field: Integer);
var
I: Integer;
FindMove: Boolean;
begin
FindMove := False;
for I := 0 to FAnswersCount-1 do
if FAnswers[I]. MoveStr[0] = Field then
begin
FindMove := True;
FEnabledAnswer[I] := 1;
end;
if not FindMove then Exit;
FUserSelect[0] := Field;
FUserSelectCount := 1;
FSelectedCells[Field] := True;
RefreshView;
end;
function TPositionFrame. Unselect (Field: Integer): Boolean;
var
I: Integer;
begin
Result := False;
if FUserSelectCount = 0 then Exit;
if FUserSelect[FUserSelectCount-1] <> Field then Exit;
FSelectedCells[Field] := False;
for I := 0 to FAnswersCount-1 do
if FEnabledAnswer[I] = FUserSelectCount then
FEnabledAnswer[I] := FEnabledAnswer[I] - 1;
FUserSelectCount := FUserSelectCount — 1;
RefreshView;
Result := True;
end;
function TPositionFrame. ThinkBetter (Field: Integer): Boolean;
var
I: Integer;
begin
Result := False;
if FUserSelectCount <> 1 then Exit;
for I := 0 to FAnswersCount-1 do
begin
if FAnswers[I]. MoveStr[0] = Field then
begin
InitSelectMoveVars;
BeginMove (Field);
Result := True;
Exit;
end;
end;
end;
function TPositionFrame. MoveComplete (Field: Integer): Boolean;
var
I, J: Integer;
UserMove: Integer;
begin
Result := False;
UserMove := -1;
for I := 0 to FAnswersCount-1 do
begin
if FEnabledAnswer[I] <> FUserSelectCount then Continue;
J := 2;
while FAnswers[I]. MoveStr[J] <> -1 do J := J + 1;
if FAnswers[I]. MoveStr[J-1] = Field then
if UserMove <> -1 then Exit
else UserMove := I;
end;
if UserMove = -1 then Exit;
AcceptMove := False;
FillChar (FSelectedCells, SizeOf (FSelectedCells), $ 00);
if Assigned (FOnAcceptMove) then FOnAcceptMove (Self, FAnswers[UserMove]);
Result := True;
end;
procedure TPositionFrame. ContinueMove (Field: Integer);
var
I: Integer;
FindMove: Boolean;
function FreeWay (Field1, Field2: Integer): Boolean;
var
NextI: Integer;
Direction: TDirection;
begin
Result := False;
for Direction := Low (TDirection) to High (TDirection) do
begin
NextI := Field1;
repeat
NextI := DirectionTable[Direction, NextI];
if NextI = -1 then Break;
if FPosition. Field[NextI] <> 0 then Break;
if NextI = Field2 then
begin
Result := True;
Exit;
end;
until False;
end;
end;
function SameDiagonal (StartField, Field1, Field2, Field3: Integer): Boolean;
var
FindCount: Integer;
NextI: Integer;
Direction: TDirection;
begin
Result := False;
for Direction := Low (TDirection) to High (TDirection) do
begin
NextI := StartField;
FindCount := 0;
repeat
NextI := DirectionTable[Direction, NextI];
if NextI = -1 then Break;
if NextI = Field1 then FindCount := FindCount + 1;
if NextI = Field2 then FindCount := FindCount + 1;
if NextI = Field3 then FindCount := FindCount + 1;
if FindCount = 3 then
begin
Result := True;
Exit;
end;
until False;
end;
end;
function AcceptMarginaly: Boolean;
begin
Assert (FUserSelectCount > 0);
Result :=
(FAnswers[I]. MoveStr[FUserSelectCount+1] <> -1) and // ΡΡΠΎ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΠΎΠ»Π΅
FreeWay (FAnswers[I]. MoveStr[FUserSelectCount], Field) and // ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ
SameDiagonal (// ΠΠ΄Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Ρ
FAnswers[I]. MoveStr[FUserSelectCount-1],
FAnswers[I].MoveStr[FUserSelectCount],
Field,
FAnswers[I].MoveStr[FUserSelectCount+1])
end;
function AcceptDirectly: Boolean;
begin
Result := Field = FAnswers[I]. MoveStr[FUserSelectCount];
end;
function AcceptVariant: Boolean;
begin
Result := AcceptDirectly or AcceptMarginaly;
end;
begin
FindMove := False;
for I := 0 to FAnswersCount-1 do
begin if FEnabledAnswer[I] <> FUserSelectCount then Continue;
if AcceptVariant then
begin
FindMove := True;
FEnabledAnswer[I] := FEnabledAnswer[I] + 1;
end; end;
if FindMove then
begin
FUserSelect[FUserSelectCount] := Field;
FUserSelectCount := FUserSelectCount + 1;
FSelectedCells[Field] := True;
RefreshView; end;
end;
function TPositionFrame. GetAnimate: Boolean;
begin
Result := Timer. Enabled;
end;
procedure TPositionFrame. BeginAnimate (const Position: TPosition);
var
AnimateWayPos: Integer;
I: Integer;
procedure ProcessPair (Field1, Field2: Integer);
var
Delta: Integer;
Step: Integer;
NextI: Integer;
begin
Delta := Abs (Field1 — Field2);
if Field1 > Field2 then
begin
if Delta mod 9 = 0
then Step := -9
else Step := -7
end
else begin
if Delta mod 9 = 0
then Step := 9
else Step := 7
end;
NextI := Field1;
repeat
NextI := NextI + Step;
FAnimateWay[AnimateWayPos] := NextI;
AnimateWayPos := AnimateWayPos + 1;
until NextI = Field2;
end;
begin
with Position do // ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΏΡΡΡ
begin if MoveStr[0] = -1 then Exit;
FAnimateWay[0] := DecodeField[MoveStr[0]];
AnimateWayPos := 1; I := 1;
while MoveStr[I] <> -1 do begin
ProcessPair (DecodeField[MoveStr[I-1]], DecodeField[MoveStr[I]]);
I := I + 1; end;
case FAnimatePosition. Field[MoveStr[0]] of
brWhiteSingle: FAnimateObject := 0;
brBlackSingle: FAnimateObject := 1;
brWhiteMam: FAnimateObject := 2;
brBlackMam: FAnimateObject := 3; end;
end;
FAnimateWay[AnimateWayPos] := -1;
FAnimateStep := 1;
FAnimateSubStep := 0;
Timer.Enabled := True;
end;
procedure TPositionFrame. TimerTimer (Sender: TObject);
begin
FAnimateSubStep := FAnimateSubStep + 1;
if FAnimateSubStep = ANIMATE_SUBSTEP_COUNT then
begin
FAnimateStep := FAnimateStep + 1;
if FAnimateWay[FAnimateStep] = -1 then Timer. Enabled := False;
if (FAnimateObject = 0) and (FAnimateWay[FAnimateStep] >= 56) then FAnimateObject := 2;
if (FAnimateObject = 1) and (FAnimateWay[FAnimateStep] <= 7) then FAnimateObject := 3;
FAnimateSubStep := 0;
end;
RefreshView;
end;
end.