Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸπŸƒ Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ пасьянс Π½Π° Python

ОглавлСниС

Пасьянс Β«ΠšΠΎΡΡ‹Π½ΠΊΠ°Β» – ΠΎΠ΄Π½Π° ΠΈΠ· самых популярных ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠšΠΎΡΡ‹Π½ΠΊΡƒΒ» с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Tkinter: Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрим Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹, настройки интСрфСйса, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ ΠΊΠ°Ρ€Ρ‚.

Как пасьянс стал любимой ΠΈΠ³Ρ€ΠΎΠΉ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ²

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ пасьянс ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ 200 Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄. ВСроятно, ΠΈΠ³Ρ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ французскоС происхоТдСниС (ΠΏΠΎ Π»Π΅Π³Π΅Π½Π΄Π΅, НаполСон Π‘ΠΎΠ½Π°ΠΏΠ°Ρ€Ρ‚ Π² ΠΈΠ·Π³Π½Π°Π½ΠΈΠΈ развлСкался пасьянсом), ΠΎΠ΄Π½Π°ΠΊΠΎ наибольшСС распространСниС ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° сначала Π² Π’Π΅Π»ΠΈΠΊΠΎΠ±Ρ€ΠΈΡ‚Π°Π½ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ Π² БША ΠΈ КанадС. АнглоязычноС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ самой извСстной вСрсии пасьянса, Klondike, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, связано с Π΅Π΅ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ срСди золотоискатСлСй Π²ΠΎ врСмя Π»ΠΈΡ…ΠΎΡ€Π°Π΄ΠΊΠΈ Π² КлондайкС. На русском эту Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠšΠΎΡΡ‹Π½ΠΊΠΎΠΉΒ» ΠΈΠ·-Π·Π° Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ расклада ΠΊΠ°Ρ€Ρ‚ Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ пасьянс, FreeCell, Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² ΠΊΠΎΠ½Ρ†Π΅ 60-Ρ…: дСсятилСтний Пол ΠΠ»ΡŒΡ„ΠΈΠ»Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΠ» Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ – постоянноС тасованиС ΠΊΠ°Ρ€Ρ‚ ΠΈ подсчСт ΠΎΡ‡ΠΊΠΎΠ². К 1979 Π³ΠΎΠ΄Ρƒ ΠΠ»ΡŒΡ„ΠΈΠ»Π», Π² Ρ‚ΠΎ врСмя студСнт мСдицинского Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚Π°, написал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для сСти УнивСрситСта Иллинойса PLATO, которая позволяла ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π΄ΠΎ 1000 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π’ Π½Π°Ρ‡Π°Π»Π΅ 90-Ρ… Π³ΠΎΠ΄ΠΎΠ² Microsoft Ρ€Π΅ΡˆΠΈΠ»Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ разновидности пасьянса Π² Windows, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ освоСниС Π½ΠΎΠ²ΠΎΠΉ систСмы ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌ усторойства – ΠΌΡ‹ΡˆΠΈ. Π˜Π³Ρ€Π° стала ΠΈΠ·Π»ΡŽΠ±Π»Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ офисных слуТащих: Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Сю ΡƒΠ²Π»Π΅ΠΊΠ°Π»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ руководство ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Coca-Cola, Sears ΠΈ Boeing) приняло Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС стандартныС ΠΈΠ³Ρ€Ρ‹ ΠΈΠ· ОБ. Появлялись исслСдования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Windows-ΠΈΠ³Ρ€Ρ‹ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ слуТащих ΠΈ Ρ‚Π΅ΠΌ самым наносят ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΡƒΡ‰Π΅Ρ€Π± экономикС – Π΄ΠΎ $800 Ρ‚Ρ€Π»Π½ Π² Π³ΠΎΠ΄! Пасьянс послуТил ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ многочислСнных ΡƒΠ²ΠΎΠ»ΡŒΠ½Π΅Π½ΠΈΠΉ, слуТСбных Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² ΠΈ открытия ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ»ΠΈΠ½ΠΈΠΊΠΈ для лСчСния ΠΎΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ зависимости. Π‘Π»ΠΎΠ²ΠΎΠΌ, это ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Ρ„Π΅Π½ΠΎΠΌΠ΅Π½, Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ воплощСния – Π½Π° самом популярном ЯП соврСмСнности.

ΠžΠ±Π·ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

   Пасьянс Β«ΠšΠΎΡΡ‹Π½ΠΊΠ°Β» Π½Π° Python
Пасьянс Β«ΠšΠΎΡΡ‹Π½ΠΊΠ°Β» Π½Π° Python

Π›ΠΎΠ³ΠΈΠΊΠ° ΠΈΠ³Ρ€Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° стандартному ΠΏΠ°ΡΡŒΡΠ½ΡΡƒ Windows:

  • Колода состоит ΠΈΠ· 52 ΠΊΠ°Ρ€Ρ‚.
  • Основная Ρ†Π΅Π»ΡŒ – ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠ°Ρ€Ρ‚Ρ‹ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ стопки (ΠΏΠΎ мастям) Π² порядкС возрастания ΠΎΡ‚ Ρ‚ΡƒΠ·Π° Π΄ΠΎ короля.
  • БСмь столбцов ΠΊΠ°Ρ€Ρ‚ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ столбСц состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠ°Ρ€Ρ‚ (ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ свСрху), Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ – ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠ°Ρ€Ρ‚ (Π΄Π²Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΈ ΠΎΠ΄Π½Π° открытая свСрху) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ сСдьмого столбца, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сСмь ΠΊΠ°Ρ€Ρ‚ (ΡˆΠ΅ΡΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΈ ΠΎΠ΄Π½Π° открытая).
  • ΠžΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΊΠ°Ρ€Ρ‚Ρ‹ кладутся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ стопку. Π’ стандартном Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠ΅Ρ€Π΅ΡΠ΄Π°Ρ‚ΡŒ (ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ) ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ 3 Ρ€Π°Π·Π°, Π² Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ пСрСсдачи Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹.

Π’ ΠΈΠ³Ρ€Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ подсказки:

   Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ…ΠΎΠ΄ подсвСчиваСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ…ΠΎΠ΄ подсвСчиваСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ

Настройки ΠΈΠ³Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Ρ…ΠΎΠ΄Ρƒ, Π±Π΅Π· пСрСзапуска расклада. ΠžΠΏΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

  • Π’Ρ‹Π±ΠΎΡ€ способа пСрСмСщСния ΠΊΠ°Ρ€Ρ‚ – ΠΊΠ»ΠΈΠΊ ΠΈΠ»ΠΈ пСрСтаскиваниС.
  • Π Π΅ΠΆΠΈΠΌ ΠΈΠ³Ρ€Ρ‹ – стандартный ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ.
  • Π ΡƒΠ±Π°ΡˆΠΊΠ° (обратная сторона ΠΊΠ°Ρ€Ρ‚) – тСмная ΠΈΠ»ΠΈ свСтлая.
  • Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°.
  • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ мСню ΠΈ Ρ„ΡƒΡ‚Π΅Ρ€Π° со статистикой.
   ПослС сохранСния настроСк ΠΈΠ³Ρ€Π° продолТаСтся с Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ мСста, Π³Π΄Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Π»Π°ΡΡŒ
ПослС сохранСния настроСк ΠΈΠ³Ρ€Π° продолТаСтся с Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ мСста, Π³Π΄Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Π»Π°ΡΡŒ

Π“ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄, изобраТСния ΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠΈ находятся Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

🐍 Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 21: ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€ Π½Π° Pygame

РСализация

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€ Π½Π° Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Pygame. Однако для создания ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ Π²ΠΏΠΎΠ»Π½Π΅ достаточно стандартной GUI-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Tkinter: Π² Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ подходящая для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ манипуляций с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ – find_overlapping, bbox, find_withtag, gettags ΠΈ addtag_withtag:

  • ΠœΠ΅Ρ‚ΠΎΠ΄ bbox ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° холстС. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (x1, y1, x2, y2) с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°:
  • ΠœΠ΅Ρ‚ΠΎΠ΄ find_overlapping Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ нСльзя Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для поиска ΠΊΠ°Ρ€Ρ‚, находящихся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области:
  • ΠœΠ΅Ρ‚ΠΎΠ΄ find_withtag ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π΅Π³ (ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€). Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ID всСх элСмСнтов, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ‚Π΅Π³Ρƒ:
  • ΠœΠ΅Ρ‚ΠΎΠ΄ gettags позволяСт динамичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° холстС. Π’ этом пасьянсС ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ элСмСнтами (ΠΊΠ°Ρ€Ρ‚Ρ‹, слоты ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), опрСдСляя ΠΈΡ… статус ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° основС Ρ‚Π΅Π³ΠΎΠ² – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ ΠΊΠ°Ρ€Ρ‚Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ, ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΉ ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ:
  • ΠœΠ΅Ρ‚ΠΎΠ΄ canvas.addtag_withtag добавляСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Π³ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³. Π’ ΠΈΠ³Ρ€Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для динамичСской ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ свойств ΠΊΠ°Ρ€Ρ‚:

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Pillow, ImageTk.PhotoImage, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ изобраТСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² интСрфСйсС Tkinter. Π­Ρ‚Π° функция ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ изобраТСния ΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠΈ для использования Π² Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π² качСствС ΠΊΠ½ΠΎΠΏΠΎΠΊ:

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

🐍 ПишСм ВСтрис Π½Π° Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Pygame

Π’Π΅Ρ€Ρ…Π½Π΅Π΅ мСню ΠΈ Ρ„ΡƒΡ‚Π΅Ρ€

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ мСню Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ:

  • Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.
  • ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.
  • ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ…ΠΎΠ΄.
  • ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ подсказку.
  • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ настройки.
  • ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² полноэкранный Ρ€Π΅ΠΆΠΈΠΌ (ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ).

Если Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ какая-Ρ‚ΠΎ опСрация нСдоступна (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΌΠ΅Π½Π° ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ Ρ…ΠΎΠ΄Π° Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΈΠ³Ρ€Ρ‹), эта ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅:

-4

ΠŸΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‚ подсказки (Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΡ‹):

-5

Π’ tkinter.tix Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ для создания Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠΎΠ² (balloon), Π½ΠΎ ΠΎΠ½ ΡƒΠΆΠ΅ устарСл – ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ скором ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² пасьянсС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ кастомныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΏΠΎΠΊΠ°Π·Π°/скрытия Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠΎΠ²:

Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π΅ мСню, ΠΈΠΊΠΎΠ½ΠΊΠ° настроСк Π±ΡƒΠ΄Π΅Ρ‚ располоТСна слСва Π½Π°Π΄ Ρ„ΡƒΡ‚Π΅Ρ€ΠΎΠΌ:

-6

Π’ Ρ„ΡƒΡ‚Π΅Ρ€Π΅ выводится статистика – число ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ пСрСсдач (для стандартного Ρ€Π΅ΠΆΠΈΠΌΠ°), количСство ΠΊΠ°Ρ€Ρ‚, ΠΎΡ‡ΠΊΠΈ ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΈΠ³Ρ€Ρƒ врСмя (Ρ‚Π°ΠΉΠΌΠ΅Ρ€ останавливаСтся Π²ΠΎ врСмя автоматичСского пСрСмСщСния ΠΊΠ°Ρ€Ρ‚ Π² слоты для Ρ‚ΡƒΠ·ΠΎΠ²):

-7

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΊΠ°Ρ€Ρ‚

ΠšΠ°Ρ€Ρ‚Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  • draw_card_slots создаСт пустыС слоты – для Ρ‚ΡƒΠ·ΠΎΠ², ΠΊΠ°Ρ€Ρ‚ Π² 7 ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… ΠΈ остатка ΠΊΠΎΠ»ΠΎΠ΄Ρ‹ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ.
  • draw_up_cards ΠΈ draw_down_cards – Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ Π² 7 ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ….
  • draw_remaining_cards – опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ послС формирования 7 ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ стопки Ρ€ΡƒΠ±Π°ΡˆΠΊΠΎΠΉ Π²Π²Π΅Ρ€Ρ….

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python для собСса

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python для собСса»

🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ пСрСмСщСния ΠΊΠ°Ρ€Ρ‚ занимаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ move_card. Когда ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π½Π° ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΌΠ΅Ρ‚ΠΎΠ΄ провСряСт, находится Π»ΠΈ ΠΊΠ°Ρ€Ρ‚Π° Π² состоянии пСрСмСщСния self.move_flag. Если Π½Π΅Ρ‚, Ρ‚ΠΎ всС Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Π³ΠΎΠΌ "moveable", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоя Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ поднимаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tag_raise("moveable"), Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ курсора event.x ΠΈ event.y Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅.

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ пСрСсчитываСтся смСщСниС курсора. ΠšΠ°Ρ€Ρ‚Π° пСрСмСщаСтся Π½Π° это смСщСниС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ своих Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ self.canvas.move("moveable", ...), послС Ρ‡Π΅Π³ΠΎ вызываСтся подсвСтка допустимых мСст для пСрСмСщСния. ΠŸΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΊΠ° допустимых ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ highlight_available_cards провСряСт пСрСсСчСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, вычисляСт bbox-ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ ΠΈΡ‰Π΅Ρ‚ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ с этой ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΈ этом ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ нСподходящиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€ΡƒΠ±Π°ΡˆΠΊΠΎΠΉ Π²Π½ΠΈΠ· ΠΈΠ»ΠΈ пустыС слоты). Если Π½Π°ΠΉΠ΄Π΅Π½Π° подходящая ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ»ΠΈ слот, создаСтся ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ для подсвСтки, Π° всС ΠΊΠ°Ρ€Ρ‚Ρ‹ Π² стопкС ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²Ρ‹ΡˆΠ΅ подсвСтки self.canvas.tag_raise(card):

Когда ΠΈΠ³Ρ€ΠΎΠΊ отпускаСт ΠΊΠ°Ρ€Ρ‚Ρƒ, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ drop_card. Он удаляСт подсвСтку допустимых ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΈ снимаСт с ΠΊΠ°Ρ€Ρ‚Ρ‹ Ρ‚Π΅Π³ "moveable", послС Ρ‡Π΅Π³ΠΎ провСряСт пСрСсСчСния с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹. Если ΠΊΠ°Ρ€Ρ‚Π° пСрСсСкаСтся с допустимым мСстом, провСряСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ΄Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ мСсто Π² соотвСтствии с установлСнными для этой стопки ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ). Если ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚Π° размСщаСтся свСрху стопки, Ссли Π½Π΅Ρ‚ – возвращаСтся Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

ГСнСрация подсказок

Ѐункция generate_hint ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ подсказок Π² ΠΈΠ³Ρ€Π΅, показывая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ…ΠΎΠ΄ для ΠΈΠ³Ρ€ΠΎΠΊΠ°. КаТдая ΠΊΠ°Ρ€Ρ‚Π° ΠΈΠ· доступных face_up_cards анализируСтся Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния. Для этого:

  • Π’Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ bbox-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ области пСрСсСчСния.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π° пСрСмСщСния – ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ стопку, Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с пустым слотом ΠΈΠ»ΠΈ слотом для Ρ‚ΡƒΠ·Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, провСряСтся Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· check_move_validity ΠΈ Π½Π΅ находится Π»ΠΈ ΠΊΠ°Ρ€Ρ‚Π° Π½Π°Π΄ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ слотами.
  • ΠšΠΎΡ€ΠΎΠ»ΠΈ ΠΈ Ρ‚ΡƒΠ·Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ Π½ΠΈΡ… особыС ΠΏΡ€Π°Π²ΠΈΠ»Π° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΡƒΠ· ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ Π² слотС для Ρ‚ΡƒΠ·Π°; Ρ‚ΠΎΠ»ΡŒΠΊΠΎ короля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° пустой слот Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· 7 ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ).

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠ°Ρ€Π° ΠΊΠ°Ρ€Ρ‚ для Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΠ΄Π° подсвСчиваСтся Π·Π΅Π»Π΅Π½Ρ‹ΠΌ свСтом:

АвтоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π±Π°Π·Ρƒ

Ѐункция send_cards_up ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° автоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСх подходящих ΠΊΠ°Ρ€Ρ‚ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ слоты для Ρ‚ΡƒΠ·ΠΎΠ² (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π±Π°Π·Ρƒ/Π΄ΠΎΠΌ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всС ситуации, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ освобоТдСниС Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ для пСрСмСщСния, функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ»Ρ‹, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ рСкурсивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

  • Π‘ΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ список всСх ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚ face_up_cards.
  • Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΊΠ°Ρ€Ρ‚Ρƒ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΅ΠΉ Π±Π°Π·Ρƒ.
  • РСкурсивно Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈΡΡŒ Π»ΠΈ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ подходящиС для пСрСмСщСния ΠΊΠ°Ρ€Ρ‚Ρ‹.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Tkinter ΠΈ Pillow ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с графичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, которая идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ пасьянса:

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ bbox, find_overlapping, find_withtag, gettags ΠΈ addtag_withtag ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ ΠΈ ΠΈΡ… состояниями.
  • ImageTk.PhotoImage ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния ΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΈΠΊΠΎΠ½ΠΎΠΊ Π² ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для отобраТСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ созданиС слоТной ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ Π² ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ процСсс: большая Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ взаимодСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² рСализуСтся Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ нСсколькими строками ΠΊΠΎΠ΄Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ ΠΏΡ€ΠΈ этом сопоставима с ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ вСрсиями пасьянса.

***

Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Python