πŸπŸ•ΉοΈ Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π½Π° Python: 5 ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ²

Π’ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π½Π° Python (ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Unity ΠΈΠ»ΠΈ Unreal Engine). НапишСм ΠΊΠΎΠ΄ простой ΠΈΠ³Ρ€Ρ‹ со сбором ΠΌΠΎΠ½Π΅Ρ‚ ΠΈ сравним Π½Π° Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ сдСлаСм ΠΏΠ°Ρ€Ρƒ ΠΈΠ³Ρ€ Π² стилях Interactive Fiction ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€ΠΎΠΌΠ°Π½Π°.

πŸ’‘ Π‘Ρ‚Π°Ρ‚ΡŒΡ прСдставляСт собой Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращСнный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π»ΠΎΠ½Π³Ρ€ΠΈΠ΄Π° Π”ΠΆΠΎΠ½Π° Π€ΠΈΡˆΠ΅Ρ€Π° Π² сообщСствС Real Python Top Python Game Engines. Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ· Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° хранится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Github.

Один ΠΈΠ· популярных ΠΌΠΎΡ‚ΠΈΠ²ΠΎΠ² обучСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ β€” ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ сравним нСсколько ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΈΠ· этого руководства, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Python, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π² языкС рСализуСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Для нСзависимой установки Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΌΡ‹ совСтуСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ окруТСния.

ΠžΠ±Π·ΠΎΡ€ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Python

Π˜Π³Ρ€ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ для Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° pip ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΎΠΊ распространСния ΠΊΠΎΠ΄Π°. Π’ противовСс ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ срСды, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для написания ΠΈΠ³Ρ€:

Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Python Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… аспСктах:

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ языки. Π‘Ρ€Π΅Π΄Ρ‹ программирования ΠΈΠ³Ρ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ написаны Π½Π° C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… языках ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ языки для написания ΠΈΠ³Ρ€: Π² Unity это C#, Π² Unreal Engine β€” C++.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. АвтономныС срСды ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ устройства. Напротив, пСрСнос Python-ΠΈΠ³Ρ€Ρ‹ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ устройства β€” Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ ΠΈΠ· Π»Ρ‘Π³ΠΊΠΈΡ….
  • Π›ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π˜Π³Ρ€Ρ‹, написанныС с использованиСм Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ°, ΠΈΠΌΠ΅ΡŽΡ‚ особыС условия лицСнзирования ΠΈ дальнСйшСго распространСния.

Π—Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python для написания ΠΈΠ³Ρ€? ИспользованиС GameDev-срСд Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ изучСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ β€” овладСния Π½ΠΎΠ²Ρ‹ΠΌ языком программирования. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ Π½Π° Python питонисты ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π² основном ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ знания. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстрСС Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΎΡ‚Π±ΠΎΡ€Π° Python-Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅:

  • ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ,
  • Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°,
  • качСствСнная докумСнтация.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° ΠΌΡ‹ рассмотрим способ установки, Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ΠΈ основныС возмоТности для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€.

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

Pygame

Pygame β€” ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡƒΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ± ΠΈΠ³Ρ€Π°Ρ… Π½Π° Python.

Pygame Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SDL (сокр. ΠΎΡ‚ Simple DirectMedia Layer), ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ доступа ΠΊ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹ΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ систСмы: ΠΌΡ‹ΡˆΠΈ, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅, дТойстику, Π°ΡƒΠ΄ΠΈΠΎ- ΠΈ видСоустройствам.

Pygame опрСдСляСт мноТСство классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π½Π΅ зависящиС ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² Π»ΡŽΠ±Ρ‹Ρ… систСмах, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Установка Pygame

ПослС создания ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния установитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip :

(venv) $ python -m pip install pygame

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ установки, запуститС ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поставляСмый вмСстС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ:

(venv) $ python -m pygame.examples.aliens

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ трудностСй Π² процСссС установки, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ руководству ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описаны извСстныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Pygame

Game loop. Для управлСния Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ понятиС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€, Π° Pygame прСдоставляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. КаТдая итСрация ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° называСтся ΠΊΠ°Π΄Ρ€ΠΎΠΌ (frame). Π—Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π΄Ρ€ ΠΈΠ³Ρ€Π° выполняСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ дСйствия:

  1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ дТойстика с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ событий.
  2. ОбновлСниС состояния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: спрайтов (ΠΎΠ±Ρ€Π°Π·Ρ‹ Π³Π΅Ρ€ΠΎΠ΅Π² ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²), ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ подходящими структурами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ классов Pygame.
  3. ОбновлСниС дисплСя ΠΈ Π°ΡƒΠ΄ΠΈΠΎΠ²Ρ‹Ρ…ΠΎΠ΄Π°. Pygame обСспСчиваСт абстрактный доступ ΠΊ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ для отобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π·Π²ΡƒΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ display, mixer ΠΈ music.
  4. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ скорости ΠΈΠ³Ρ€Ρ‹. ΠœΠΎΠ΄ΡƒΠ»ΡŒ pygame.time позволяСт Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ ΠΈΠ³Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹. Π—Π° счёт этого ΠΈΠ³Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π° Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Pygame

Π’ Ρ‚Ρ€Π΅Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ… ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ рассмотрСниС с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²ΠΈΠΆΠΎΠΊ рисуСт Π½Π° Π½Π° экранС ΠΏΠ°Ρ€Ρƒ Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ тСкст.

# Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ
import pygame

pygame.init()

# УстанавливаСм ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту ΠΎΠΊΠ½Π° Π² пиксСлях
WIDTH = 800
HEIGHT = 600

# НастраиваСм ΠΎΠΊΠ½ΠΎ отрисовки
screen = pygame.display.set_mode([WIDTH, HEIGHT])

# Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» выполняСтся, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ
running = True
while running:

    # НаТал Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ зыкрытия ΠΎΠΊΠ½Π°?
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # ЗаполняСм Ρ„ΠΎΠ½ Π±Π΅Π»Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ
    screen.fill((255, 255, 255))

    # РисуСм синий ΠΊΡ€ΡƒΠ³ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана радиусом 50
    pygame.draw.circle(screen, (0, 0, 255), (WIDTH // 2, HEIGHT // 2), 50)

    # РисуСм красный ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ экрана
    red_square = pygame.Rect((50, 50), (100, 100))
    pygame.draw.rect(screen, (200, 0, 0), red_square, 1)

    # РисуСм ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ тСкст с ΠΊΠ΅Π³Π»Π΅ΠΌ 60
    text_font = pygame.font.SysFont("any_font", 60)
    text_block = text_font.render(
        "Hello, World! From Pygame", False, (200, 100, 0)
    )
    screen.blit(text_block, (50, HEIGHT - 50))

		# ОбновляСм экран
    pygame.display.flip()

# Π¦ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ! Π£Ρ…ΠΎΠ΄ΠΈΠΌ.
pygame.quit()

Для запуска ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

(venv) $ python pygame/pygame_basic.py

Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π² Ρ‚Π°ΠΊΠΎΠΉ скромной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½ управляСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ running. Π•Ρ‘ установка Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ False Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий. Бобытия хранятся Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈΠ· Π½Π΅Ρ‘ события ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pygame.event.get(). Π’ рассматриваСмом случаС обрабатываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ событиС pygame.QUIT, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ этого события ΠΌΡ‹ устанавливаСм running = False.

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ тСкста. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ для отрисовки Ρ„ΠΈΠ³ΡƒΡ€ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, отрисовка тСкста выглядит нСсколько слоТнСС. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ ΠΈ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡˆΡ€ΠΈΡ„Ρ‚Π°. Π”Π°Π»Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ .render() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ тСкст, ΡˆΡ€ΠΈΡ„Ρ‚ ΠΈ Ρ†Π²Π΅Ρ‚. Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Surface. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° экран screen, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ screen.blit().

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ Π΄Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° дисплСС всС, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π½Π΅Π΅ нарисовано.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ³Ρ€Ρ‹ Π½Π° Pygame

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ возмоТности Pygame, напишСм Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.

Π“Π΅ΠΉΠΌΠΏΠ»Π΅ΠΉ. Π“Π»Π°Π²Π½Ρ‹ΠΉ Π³Π΅Ρ€ΠΎΠΉ прСдставлСн ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ спрайтом, управляСмым ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΌΡ‹ΡˆΠΈ. Π§Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° экранС ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹. Когда пСрсонаТ пСрСмСщаСтся ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ сталкиваСтся с Π½Π΅ΠΉ, ΠΌΠΎΠ½Π΅Ρ‚Π° исчСзаСт, Π° ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 10 ΠΎΡ‡ΠΊΠΎΠ². По Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ быстрСС. Π˜Π³Ρ€Π° заканчиваСтся, ΠΊΠΎΠ³Π΄Π° Π½Π° экранС присутствуСт Π±ΠΎΠ»Π΅Π΅ дСсяти ΠΌΠΎΠ½Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ Π·Π°ΠΊΡ€Ρ‹Π» ΠΎΠΊΠ½ΠΎ.

ΠŸΡ€ΠΈ запускС ΠΈΠ³Ρ€Π° выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ
# Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ инициализация
import pygame

# Для случайного размСщСния ΠΌΠΎΠ½Π΅Ρ‚
from random import randint

# Для поиска рСсурсов
from pathlib import Path

# Для Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²
from typing import Tuple

# УстанавливаСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°
WIDTH = 800
HEIGHT = 600

# Как часто Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ (мс)
coin_countdown = 2500
coin_interval = 100

# Бколько ΠΌΠΎΠ½Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ
COIN_COUNT = 10

# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ спрайт для ΠΈΠ³Ρ€ΠΎΠΊΠ°
class Player(pygame.sprite.Sprite):
    def __init__(self):
        """Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ спрайт ΠΈΠ³Ρ€ΠΎΠΊΠ°"""
        super(Player, self).__init__()

        # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ пСрсонаТа
        player_image = str(
            Path.cwd() / "pygame" / "images" / "alien_green_stand.png"
        )
        # Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, настраиваСм Π°Π»ΡŒΡ„Π° ΠΊΠ°Π½Π°Π» для прозрачности
        self.surf = pygame.image.load(player_image).convert_alpha()
        # БохраняСм Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
        self.rect = self.surf.get_rect()

    def update(self, pos: Tuple):
        """ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ пСрсонаТа

        АргумСнты:
            pos {Tuple} -- (X,Y) позиция для двиТСния пСрсонаТа
        """
        self.rect.center = pos

# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ спрайт для ΠΌΠΎΠ½Π΅Ρ‚
class Coin(pygame.sprite.Sprite):
    def __init__(self):
        """Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ спрайт ΠΌΠΎΠ½Π΅Ρ‚Ρ‹"""
        super(Coin, self).__init__()

        # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹
        coin_image = str(Path.cwd() / "pygame" / "images" / "coin_gold.png")

        # Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, настраиваСм Π°Π»ΡŒΡ„Π° ΠΊΠ°Π½Π°Π» для прозрачности
        self.surf = pygame.image.load(coin_image).convert_alpha()

        # Π—Π°Π΄Π°Π΅ΠΌ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ
        self.rect = self.surf.get_rect(
            center=(
                randint(10, WIDTH - 10),
                randint(10, HEIGHT - 10),
            )
        )

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²ΠΈΠΆΠΎΠΊ
pygame.init()

# НастраиваСм ΠΎΠΊΠ½ΠΎ
screen = pygame.display.set_mode(size=[WIDTH, HEIGHT])

# Π‘ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ курсор ΠΌΡ‹ΡˆΠΈ
pygame.mouse.set_visible(False)

# ЗапускаСм часы для фиксации Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ°
clock = pygame.time.Clock()

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ событиС для добавлСния ΠΌΠΎΠ½Π΅Ρ‚Ρ‹
ADDCOIN = pygame.USEREVENT + 1
pygame.time.set_timer(ADDCOIN, coin_countdown)

# НастраиваСм список ΠΌΠΎΠ½Π΅Ρ‚
coin_list = pygame.sprite.Group()

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ счСт
score = 0

# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Π·Π²ΡƒΠΊ для столкновСния с ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΉ 
coin_pickup_sound = pygame.mixer.Sound(
    str(Path.cwd() / "pygame" / "sounds" / "coin_pickup.wav")
)

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ спрайт гСроя ΠΈ устанавливаСм Π½Π° Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ
player = Player()
player.update(pygame.mouse.get_pos())

# Π¦ΠΈΠΊΠ» событий
running = True
while running:

    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π½Π°ΠΆΠ°Π» Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ закрытия ΠΎΠΊΠ½Π°
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ
        elif event.type == ADDCOIN:
            # ДобавляСм Π½ΠΎΠ²ΡƒΡŽ ΠΌΠΎΠ½Π΅Ρ‚Ρƒ
            new_coin = Coin()
            coin_list.add(new_coin)

            # УскоряСм ΠΈΠ³Ρ€Ρƒ, Ссли Π½Π° экранСС ΠΌΠ΅Π½Π΅Π΅ 3 ΠΌΠΎΠ½Π΅Ρ‚
            if len(coin_list) < 3:
                coin_countdown -= coin_interval
            # ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ
            if coin_countdown < 100:
                coin_countdown = 100

            # ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
            pygame.time.set_timer(ADDCOIN, 0)

            # ЗапускаСм Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
            pygame.time.set_timer(ADDCOIN, coin_countdown)

    # ОбновляСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ пСрсонаТа
    player.update(pygame.mouse.get_pos())

    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, столкнулся Π»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ с ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΉ ΠΈ удаляСм, Ссли это Ρ‚Π°ΠΊ
    coins_collected = pygame.sprite.spritecollide(
        sprite=player, group=coin_list, dokill=True
    )
    for coin in coins_collected:
        # КаТдая ΠΌΠΎΠ½Π΅Ρ‚Π° стоит 10 ΠΎΡ‡ΠΊΠΎΠ²
        score += 10
        # Воспроизводим Π·Π²ΡƒΠΊ для ΠΌΠΎΠ½Π΅Ρ‚Ρ‹
        coin_pickup_sound.play()

    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π½Π΅ слишком Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½Π΅Ρ‚
    if len(coin_list) >= COIN_COUNT:
        # Если ΠΌΠΎΠ½Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ, останавливаСм ΠΈΠ³Ρ€Ρƒ
        running = False

    # Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°
    screen.fill((255, 170, 164))

    # РисуСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹
    for coin in coin_list:
        screen.blit(coin.surf, coin.rect)

    # ΠžΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ пСрсонаТа
    screen.blit(player.surf, player.rect)

    # Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ счСт
    score_font = pygame.font.SysFont("any_font", 36)
    score_block = score_font.render(f"Score: {score}", False, (0, 0, 0))
    screen.blit(score_block, (50, HEIGHT - 50))

    # ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ всё Π½Π° экранС
    pygame.display.flip()

    # Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обновлСния - 30 ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду
    clock.tick(30)

# Π“ΠΎΡ‚ΠΎΠ²ΠΎ! ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
print(f"Game over! Final score: {score}")

# Π”Π΅Π»Π°Π΅ΠΌ курсор ΠΌΡ‹ΡˆΠΈ вновь Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ
pygame.mouse.set_visible(True)

# Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΈΠ³Ρ€Ρ‹
pygame.quit()

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ Π² Pygame ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ лишь Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” Π² нашСм ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ, создавая подклассы для пСрсонаТа (Player) ΠΈ ΠΌΠΎΠ½Π΅Ρ‚ (Coin). ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ спрайтов ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² self.surf ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства self.rect.

Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠ½Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π½Π° экран Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ time.set_timer(), ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ врСмя Π΄ΠΎ события Π² миллисСкундах (coin_countdown). Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΌΠΎΠ½Π΅Ρ‚ соотвСтствуСт событиС ADDCOIN. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Coin ΠΈ добавляСт Π΅Π³ΠΎ Π² coin_list. Π”Π°Π»Π΅Π΅ провСряСтся количСство ΠΌΠΎΠ½Π΅Ρ‚ Π½Π° экранС. Если ΠΌΠΎΠ½Π΅Ρ‚ мСньшС Ρ‚Ρ€Π΅Ρ…, Ρ‚ΠΎ coin_countdown ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ останавливаСтся ΠΈ запускаСтся Π½ΠΎΠ²Ρ‹ΠΉ.

Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ пСрсонаТа. ΠŸΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ³Ρ€ΠΎΠΊ сталкиваСтся с ΠΌΠΎΠ½Π΅Ρ‚Π°ΠΌΠΈ ΠΈ собираСт ΠΈΡ…. ΠŸΡ€ΠΈ этом ΠΌΡ‹ удаляСм ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· coin_list, обновляСм счёт ΠΈ воспроизводим Π·Π²ΡƒΠΊ. Автор ΠΈΠ³Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ± очисткС экрана, отрисовкС спрайтов Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ счёта.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Pygame

Pygame β€” мощная ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π²ΡˆΠ°Ρ сСбя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π½ΠΎ Ρƒ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ нСдостатки. Автор ΠΈΠ³Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ спрайтов, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ основныС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий. Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π°Π»Π΅Π΅, Π±ΠΎΠ»Π΅Π΅ соврСмСнныС ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ мСньшСм ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ выполняСмой Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Pygame Zero

Π‘ ΠΎΠ΄Π½ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Pygame справляСтся Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” сказываСтся возраст Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² написании ΠΈΠ³Ρ€ Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅ β€” Pygame Zero. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, поэтому тСкст Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ понятСн Π΄Π°ΠΆΠ΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ пошаговоС руководство.

Установка Pygame Zero

Pygame Zero ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Python:

(venv) $ python -m pip install pgzero

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Pygame Zero

Pygame Zero Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программистам приходится ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈ использовании стандартного Π΄Π²ΠΈΠΆΠΊΠ° Pygame. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Pygame Zero прСдоставляСт ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ³Ρ€Ρ‹:

  • ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ†ΠΈΠΊΠ» β€” Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ;
  • модСль событий для отрисовки, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π²ΠΎΠ΄Π°;
  • Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, тСкста ΠΈ Π·Π²ΡƒΠΊΠ°;
  • класс спрайтов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… спрайтов.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΠ΄ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Pygame Zero оказываСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ, Ρ‡Π΅ΠΌ Π½Π° Pygame.

πŸ’‘ Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Β«Ρ€Π°Π·Π΄ΡƒΠ²Π°Ρ‚ΡŒΒ» тСкст ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΌΡ‹ отсылаСм Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ этот ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π² упомянутому Π²Ρ‹ΡˆΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ.

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°. Pygame Zero автоматичСски распознаСт, Ρ‡Ρ‚ΠΎ константы WIDTH ΠΈ HEIGHT относятся ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΎΠΊΠ½Π°. Pygame Zero Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ для закрытия ΠΎΠΊΠ½Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅.

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ тСкста. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Pygame Zero основан Π½Π° Pygame, ΠΎΠ½ наслСдуСт Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° для отрисовки Ρ„ΠΈΠ³ΡƒΡ€, Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ тСкста выглядит ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² вмСсто Ρ‚Ρ€Π΅Ρ… для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Pygame.

screen.draw.text(
        f"Score: {score}",
        (50, HEIGHT - 50),
        fontsize=48,
        color="black",
    )

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Pygame Zero осущСствляСтся ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

(venv) $ python pygame_zero/pygame_zero_basic.py

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ³Ρ€Ρ‹ Π½Π° Pygame Zero

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ, ΠΌΡ‹ вСрнСмся ΠΊ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ³Ρ€Π΅, Ρ‡Ρ‚ΠΎ описали для Pygame. Π˜Π³Ρ€Π° Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ вСрсии, продСмонстрированной Ρ€Π°Π½Π΅Π΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ³Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ Π² Pygame Zero Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Actors. Π˜Ρ… характСристики Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пояснСний, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эти свСдСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

  1. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Actor Π·Π°Π΄Π°ΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  2. ВсС изобраТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ./images/. Названия Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ лишь строчныС Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈΠ»ΠΈ символы подчСркивания.
  3. ΠŸΡ€ΠΈ ссылкС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. НапримСр, Ссли ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ называСтся alien.png, Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ строкой "alien" .

Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠ½Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° clock.schedule(). ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π² нашСм случаС add_coin) ΠΈ количСство сСкунд ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ЗапускаСмая функция add_coin() создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Actor ΠΈ добавляСт спрайт Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ список Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠΎΠ½Π΅Ρ‚.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрсонаТа задСйствуСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события on_mouse_move(). Π’ исходном ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ спрайт пСрсонаТа находится Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. ПолоТСниС ΠΌΡ‹ΡˆΠΈ хранится Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ Π·Π²ΡƒΠΊΠ° ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ счёта. УдаляСмая ΠΌΠΎΠ½Π΅Ρ‚Π° добавляСтся Π² список coin_remove_list. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ столкновСний ΠΌΡ‹ провСряСм, Π½Π΅ слишком Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½Π΅Ρ‚ сСйчас находится Π½Π° экранС. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ счёт ΠΈΠ³Ρ€Ρ‹.

ОбновлСниС состояний. Ѐункция update() вызываСтся Pygame Zero ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° ΠΊΠ°Π΄Ρ€. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Ρ‘, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Actor ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ состояния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° ΠΊΠ°Π΄Ρ€ для отрисовки вызываСтся функция draw().

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Pygame Zero

РСализация ΠΈΠ³Ρ€Ρ‹ Π½Π° Pygame Zero заняла 152 строки ΠΊΠΎΠ΄Π° вмСсто 182 строк Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Pygame. Π₯отя количСство строк сопоставимо, вСрсия Π½Π° Pygame Zero ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ Π±ΠΎΠ»Π΅Π΅ ясной Π² ΠΏΠ»Π°Π½Π΅ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ для понимания ΠΈ дополнСния.

Arcade

Arcade β€” Π΄Π²ΠΈΠΆΠΎΠΊ Python для создания ΠΈΠ³Ρ€ с соврСмСнными Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈ Π·Π²ΡƒΠΊΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ профСссором Полом ΠšΡ€ΡΠΉΠ²Π΅Π½ΠΎΠΌ ΠΈΠ· Бимпсон-ΠΊΠΎΠ»Π»Π΅Π΄ΠΆΠ° (Айова, БША).

Arcade базируСтся Π½Π° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ pyglet ΠΈ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ отличаСтся, ΠΊΠ°ΠΊ ΠΎΡ‚ Pygame, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ Pygame Zero:

  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ OpenGL-Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Python 3;
  • ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ спрайтами;
  • ΠΈΠΌΠ΅Π΅Ρ‚ согласованныС ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;
  • поощряСт ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅;
  • сокращаСт использованиС шаблонного ΠΊΠΎΠ΄Π°;
  • ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Π² Ρ‚ΠΎΠΌ числС нСсколько ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… пособий ΠΈ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ³Ρ€ Π½Π° Python;
  • ΠΈΠΌΠ΅Π΅Ρ‚ встроСнныС физичСскиС Π΄Π²ΠΈΠΆΠΊΠΈ для ΠΈΠ³Ρ€ с Π²ΠΈΠ΄ΠΎΠΌ свСрху ΠΈ ΠΈΠ³Ρ€-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Ρ€ΠΎΠ².

Arcade ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся сообщСством, Π° Π°Π²Ρ‚ΠΎΡ€ быстро Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Установка Arcade

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Arcade ΠΈ Π΅Π³ΠΎ зависимости, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ pip:

(venv) $ python -m pip install arcade

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ инструкции ΠΏΠΎ установкС для Windows, macOS ΠΈ Linux. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈΠ· исходного ΠΊΠΎΠ΄Π°.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Arcade

НачнСм с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ ΠΈ тСкстом. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

(venv) $ python arcade/arcade_basic.py

Начало ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (0, 0) располоТСно Π² Π»Π΅Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ экрана. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Arcade ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ располоТСно Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ.

Arcade β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Для подклассов ΠΈΠ³Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс arcade.Window, для настройки ΠΈΠ³Ρ€Ρ‹ вызываСтся super().__init().

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° всСго Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° экранС производится ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ событий .on_draw() . ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ стартуСт с Π²Ρ‹Π·ΠΎΠ²Π° .start_render(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт Arcade ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ для рисования. НапоминаСт pygame.flip() для отрисовки Π² Pygame.

Π€ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈ Ρ†Π²Π΅Ρ‚Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² рисования Ρ„ΠΈΠ³ΡƒΡ€ Π² Arcade начинаСтся с draw_*. Arcade ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ мноТСство Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ сотни ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° arcade.color. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ RGB ΠΈΠ»ΠΈ RGBA.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ³Ρ€Ρ‹ Π½Π° Arcade

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ Arcade отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ², Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ³Ρ€Ρƒ с ΠΌΠΎΠ½Π΅Ρ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Arcade позволяСт ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹ ΠΎΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ уровня: ΠΈΠ³Ρ€Π° инициализируСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .__init__(), Π° ΡƒΡ€ΠΎΠ²Π½ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .setup(). Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ шаблон для использования Π΄Π°ΠΆΠ΅ Π² ΠΈΠ³Ρ€Π°Ρ… с ΠΎΠ΄Π½ΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ, ΠΊΠ°ΠΊ Π² нашСм случаС.

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса arcade.Sprite, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π·Π°Π΄Π°Π½ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ β€” Arcade ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ pathlib-ΠΏΡƒΡ‚ΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ½Π΅Ρ‚ планируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ arcade.schedule() ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° self.add_coin() Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ .add_coin() создаСт Π½ΠΎΠ²Ρ‹ΠΉ спрайт ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π² случайном мСстС ΠΈ добавляСт Π΅Π³ΠΎ Π² список.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ пСрсонаТа ΠΌΡ‹ΡˆΡŒΡŽ рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .on_mouse_motion(). ΠœΠ΅Ρ‚ΠΎΠ΄ arcade.clamp() Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° страйпа Π½Π΅ Π²Ρ‹ΠΉΠ΄ΡƒΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ экрана.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ с ΠΌΠΎΠ½Π΅Ρ‚ΠΎΠΉ обрабатываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ .on_update(). ΠœΠ΅Ρ‚ΠΎΠ΄ arcade.check_for_collision_with_list() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх спрайтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ спрайтом. Код ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ этому списку, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСт ΠΈ воспроизводит Π·Π²ΡƒΠΊ. ΠœΠ΅Ρ‚ΠΎΠ΄ .on_update() провСряСт, Π½Π΅ слишком Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½Π΅Ρ‚ сСйчас Π΅ΡΡ‚ΡŒ Π½Π° экранС.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Arcade

РСализация Arcade Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½Π° для чтСния ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ структурирована, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄ для Pygame Zero. Однако ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС мСста β€” 194 строки. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Arcade Π·Π°Π»ΠΎΠΆΠ΅Π½Ρ‹ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΈΠ³Ρ€Π°Ρ…:

  • Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ спрайты;
  • встроСнныС физичСскиС Π΄Π²ΠΈΠΆΠΊΠΈ;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сторонних ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚;
  • систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с частицами ΠΈ ΡˆΠ΅ΠΉΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Авторы ΠΈΠ³Ρ€, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π² Arcade ΠΈΠ· Pygame Zero ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ°Ρ‚ здСсь Π·Π½Π°ΠΊΠΎΠΌΡƒΡŽ структуру, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

adventurelib

ΠœΠΈΡ€ ΠΈΠ³Ρ€ ΠΏΠΎΠ»ΠΎΠ½ самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΆΠ°Π½Ρ€ΠΎΠ². Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Zork, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основой ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ повСствования являСтся тСкст. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΈΠ³Ρ€ Π΅Ρ‰Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Interactive Fiction. Для создания тСкстовых ΠΈΠ³Ρ€ Π½Π° Python сущСствуСт Π΄Π²ΠΈΠΆΠΎΠΊ adventurelib. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ Π±Π΅Π· нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ парсСр языка.

Установка adventurelib

adventurelib доступСн Π½Π° PyPI ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ pip :

(venv) $ python -m pip install adventurelib

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· рСпозитория GitHub, сохранив Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ваша ΠΈΠ³Ρ€Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ adventurelib

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основы adventurelib, ΠΌΡ‹ рассмотрим Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΈΠ³Ρ€Ρƒ с трСмя ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Π΄Π²Π΅Ρ€ΡŒ Π² послСднСй ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

(venv) $ python adventurelib/adventurelib_basic.py

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @when. ВСкстовыС ΠΈΠ³Ρ€Ρ‹ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° опрСдСляСт тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ³Ρ€ΠΎΠΊ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (command) **ΠΈ прСдоставляСт для описания ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @when(). НапримСр, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @when("look") добавляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² список допустимых ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ связываСт с Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ look(). Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ look, adventurelib Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Для удобства ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру.

НСсколько ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Ѐункция go() Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π° Π΄Π΅Π²ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠ³ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π½ΠΈΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΈΠ· Π½ΠΈΡ…: south, east, north.

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹. Π’ тСкстовых ΠΈΠ³Ρ€Π°Ρ… часто Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ области ΠΈΠ³Ρ€Ρ‹ ΠΈΠ»ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠΈ. Или это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрсонаТи, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π”Π²ΠΈΠΆΠΎΠΊ adventurelib прСдоставляСт класс Item для опрСдСлСния ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΈ пСрсонаТСй ΠΏΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ псСвдонимам.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Item()ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько строк. ΠŸΠ΅Ρ€Π²Π°Ρ строка β€” имя ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² качСствС псСвдонимов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΡƒ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ВзаимодСйствиС с ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌΠΈ. Часто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ³Ρ€ΠΎΠΊ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ³Ρ€Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ контСкст ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Для этого Π² описании Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @when() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ слова, написанныС Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ.

πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ контСкста ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ look_at(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строковый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΠΈΠΌΠ΅Π½Π΅ΠΌ item. Π’ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ look at ΠΈ inspect, слово ITEM выступаСт Π² качСствС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-заполнитСля тСкста, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ тСкст ΠΈ пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ look_at() Π² качСствС Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния. НапримСр, Ссли ΠΈΠ³Ρ€ΠΎΠΊ Π²Π²Π΅Π΄Π΅Ρ‚ look at book, Ρ‚ΠΎ item Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "book".

Π Π΅ΠΏΠ»ΠΈΠΊΠΈ. Для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ say(), которая ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ справляСтся с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ многострочного тСкста. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ look() β€” всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ look, функция say() Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² консоль описаниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

ΠšΠΎΠΌΠ½Π°Ρ‚Ρ‹. Для опрСдСлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областСй ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° adventurelib прСдоставляСт класс Room. ΠŸΡ€ΠΈ создании ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ конструктору Room() пСрСдаСтся описаниС ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈ связь с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств .north, .south, .east ΠΈ .west.

ΠŸΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΠ΅. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ создаСм ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π², Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ гостиной ΠΈ Π²Π΅Ρ€Π°Π½Π΄ΠΎΠΉ Π΅ΡΡ‚ΡŒ запСртая Π΄Π²Π΅Ρ€ΡŒ living_room.locked. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ эту Π΄Π²Π΅Ρ€ΡŒ, ΠΈΠ³Ρ€ΠΎΠΊΡƒ потрСбуСтся Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ»ΡŽΡ‡. Π’ исходном состоянии ΠΊΠ»ΡŽΡ‡ находится Π² спальнС.

ΠšΠ»ΡŽΡ‡ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΠΈ псСвдонимы, Π½ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΈΠ³Ρ€Π΅. ΠœΠ΅Ρ‚ΠΎΠ΄ key.use_item вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ пытаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚, Π½Π°Π±Ρ€Π°Π² строку use key.

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π½Π° ΠΏΠΎΠ»Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Bag. Π­Ρ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ содСрТимоС.

Π’ нашСм ΠΊΠΎΠ΄Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Bag-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Ρ‚Ρ€ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈ ΠΎΠ΄ΠΈΠ½ для инвСнтаря, собираСмого ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ. Для добавлСния ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция get(), Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ инвСнтаря β€” функция take(). ΠŸΡ€ΠΈ пСрСносС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ, ΠΎΠ½ удаляСтся ΠΈΠ· Bag-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΠ³Ρ€Ρ‹ с использованиСм adventurelib

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности Π΄Π²ΠΈΠΆΠΊΠ°, ΠΌΡ‹ создадим Π±ΠΎΠ»Π΅Π΅ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСкстовоС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

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

Π’ ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ нСсколько областСй:

  • малСнькая тихая Π΄Π΅Ρ€Π΅Π²ΡƒΡˆΠΊΠ°;
  • Ρ‚Ρ€ΠΎΠΏΠΊΠ°, вСдущая Π² поля;
  • близлСТащая дСрСвня, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ качСствСнноС ΠΎΡ€ΡƒΠΆΠΈΠ΅;
  • Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°, ΠΊ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΠΈΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΊΠΎΠ»Π΄ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ€ΡƒΠΆΠΈΠ΅;
  • ΠΏΠ΅Ρ‰Π΅Ρ€Π° с Π²Π΅Π»ΠΈΠΊΠ°Π½ΠΎΠΌ, ΡƒΠΊΡ€Π°Π²ΡˆΠΈΠΌ скот.

Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² для сбора, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π΄Ρƒ ΠΈ ΠΎΡ€ΡƒΠΆΠΈΠ΅. И Π΅ΡΡ‚ΡŒ пСрсонаТи, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π•Ρ‰Ρ‘ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму боя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠ³ ΡΡ€Π°Π·ΠΈΡ‚ΡŒΡΡ с Π²Π΅Π»ΠΈΠΊΠ°Π½ΠΎΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ³Ρ€Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ²:

  • adventurelib_game_rooms.py описываСт ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈ области;
  • adventurelib_game_items.py опрСдСляСт ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹;
  • adventurelib_game_characters.py описываСт пСрсонаТСй, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊ;
  • adventurelib_game.py собираСт всё вмСстС, добавляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ запускаСт ΠΈΠ³Ρ€Ρƒ.

Π˜Π³Ρ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

(venv) $ python adventurelib/adventurelib_game.py

Π’ прСдыстории ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ области ΠΈ ΠΏΡƒΡ‚ΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ³Ρ€ΠΎΠΊ. Они ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Π±Π»ΠΎΠΊ-схСмС Π½ΠΈΠΆΠ΅.

КаТдая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ свои свойства:

  • Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описания;
  • ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΈ пСрсонаТи;
  • Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹;
  • ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Π±Ρ‹Π» Π»ΠΈ ΡƒΠΆΠ΅ ΠΈΠ³Ρ€ΠΎΠΊ Π² этой области ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ООП. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ каТдая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный экзСмпляр ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих свойств, ΠΌΡ‹ создадим Π² Ρ„Π°ΠΉΠ»Π΅ Ρƒ подкласс Room с ΠΈΠΌΠ΅Π½Π΅ΠΌ GameArea. ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Bag с ΠΈΠΌΠ΅Π½Π΅ΠΌ items, Π° пСрсонаТи β€” Π² characters.

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

ВзаимодСйствиС с пСрсонаТами ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΡΡŽΠΆΠ΅Ρ‚. ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² adventurelib_game_characters.py. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ гСроя, ΠΊΠ°ΠΊ ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°, Π΅ΡΡ‚ΡŒ связанныС с Π½ΠΈΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ свойства, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ описаниС ΠΈ привСтствиС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ встрСчаСт пСрсонаТа Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ взаимодСйствиС с пСрсонаТСм ΠΈΠ»ΠΈ простоС Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ с Π½ΠΈΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ Π·ΠΎΠ½Π΅, Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ понятиС контСкста. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ позволяСт для Ρ€Π°Π·Π½Ρ‹Ρ… ситуаций Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Или вСсти сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ дСйствиях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ контСкста. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ сталкиваСтся со ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠΈΠ½ΠΎΠΉ Бэрроном (Elder Barron). Когда ΠΈΠ³Ρ€ΠΎΠΊ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ talk to elder, контСкст устанавливаСтся ΠΏΠΎ свойству elder.context. ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ ΡΡ‚Π°Ρ€Π΅ΠΉΡˆΠΈΠ½Ρ‹ заканчиваСтся вопросом Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π° Β«Π΄Π°Β» ΠΈΠ»ΠΈ Β«Π½Π΅Ρ‚Β». Если ΠΈΠ³Ρ€ΠΎΠΊ Π²Π²ΠΎΠ΄ΠΈΡ‚ yes, Ρ‚ΠΎ Π² adventurelib_game.py запускаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ @when("yes", context="elder").

ПозТС ΠΏΡ€ΠΈ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° с ΠΊΡƒΠ·Π½Π΅Ρ†ΠΎΠΌ добавляСтся Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ контСкста, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΏΠΎΠΊΡƒΠΏΠΊΡƒ оруТия. Π—Π° счСт этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° "yes" ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ послСдствиям.

Π—Π°ΠΏΡ€Π΅Ρ‚ дСйствий Π² контСкстС. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ контСкст Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄. НапримСр, ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ просто Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· боя с Π²Π΅Π»ΠΈΠΊΠ°Π½ΠΎΠΌ, Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ "goodbye" провСряСт, находится Π»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ Π² контСкстС "giant", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вводится, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΡ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ. Если контСкст Π² силС, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ нСльзя, β€” это ΡΠΌΠ΅Ρ€Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΎΠΉ!

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ совпадСний, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ no_command_matches(). Π•Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π’Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° волшСбник просит ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ€Π°Π·Π³Π°Π΄Π°Ρ‚ΡŒ Π·Π°Π³Π°Π΄ΠΊΡƒ, создаСтся контСкст wizard.riddle. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ adventurelib

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ³Ρ€Ρƒ нСпросто, Π½ΠΎ adventurelib Π±Π΅Ρ€Ρ‘Ρ‚ Π½Π° сСбя ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ€ΡƒΡ‚ΠΈΠ½Ρƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², Π³Π΅Ρ€ΠΎΠ΅Π², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² зависимости ΠΎΡ‚ истории взаимодСйствий.

Ren’Py

НаслСдником тСкстовых ΠΈΠ³Ρ€ ΡΠ²Π»ΡΡŽΡ‚ΡΡ соврСмСнныС ΠΈΠ³Ρ€Ρ‹ Π² стилС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€ΠΎΠΌΠ°Π½ΠΎΠ² (Π½ΠΎΠ²Π΅Π»Π»). Π’ Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ³Ρ€Π°Ρ… наибольшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ³Ρ€Π°ΡŽΡ‚ повСствованиС ΠΈ ΡΡŽΠΆΠ΅Ρ‚, Π½ΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π΅Π΅ Π·Π° счСт ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… эффСктов ΠΈ Π·Π²ΡƒΠΊΠΎΠ². Для создания ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈΠ³Ρ€ Π½Π° Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ren'Py. НазваниС Π΄Π²ΠΈΠΆΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ ΠΎΡ‚ японского слова, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€ΠΎΠΌΠ°Π½Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ любовь.

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Ren'Py Π½Π΅ являСтся классичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Python, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ посрСдством pip install. Π˜Π³Ρ€Ρ‹ Ren'Py ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€Π°, входящСго Π² состав SDK Ren'Py, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ³Ρ€, ΠΈ собствСнный язык сцСнариСв. Однако Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ren'Py основан Π½Π° Pygame, с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python.

Установка Ren'Py

Ren'Py SDK доступСн Π½Π° Windows, Mac ΠΈ Linux, ΠΏΠ°ΠΊΠ΅Ρ‚ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС. ПослС установки ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ SDK, ΠΈ запуститС Ren'Py Launcher.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ren'Py

Π’ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, это создаст Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ структуру Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ. Π₯отя для запуска ΠΈΠ³Ρ€ трСбуСтся Ren'Py Launcher, для рСдактирования ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ ΠΈΠ³Ρ€ Ren'Py хранятся Π² Ρ„Π°ΠΉΠ»Π°Ρ… с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .rpy , написанных Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ языкС Ren'Py. Π€Π°ΠΉΠ»Ρ‹ хранятся Π² ΠΏΠ°ΠΏΠΊΠ΅ game/ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ren'Py создаёт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сцСнарии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

  • gui.rpy опрСдСляСт внСшний Π²ΠΈΠ΄ всСх элСмСнтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса;
  • options.rpy опрСдСляСт измСняСмыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для настройки ΠΈΠ³Ρ€Ρ‹;
  • screens.rpy описываСт стили Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ², мСню ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ;
  • script.rpy β€” мСсто, Π³Π΄Π΅ Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ³Ρ€Ρ‹ ΠΈΠ· ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² этого руководства, слСдуйтС инструкции:

  1. ЗапуститС Ren'Py Launcher.
  2. НаТмитС Preferences, Π·Π°Ρ‚Π΅ΠΌ Projects Directory.
  3. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Projects Directory Π½Π° ΠΏΠ°ΠΏΠΊΡƒ renpy ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ рСпозитория с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.
  4. НаТмитС Return, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ страницу Ren'Py Launcher.

Π’ спискС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² слСва Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ basic_game ΠΈ giant_quest_game. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Launch Project.

НиТС ΠΌΡ‹ рассмотрим script.rpy для basic_game.

ΠœΠ΅Ρ‚ΠΊΠΈ (labels) **ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для запуска Π½ΠΎΠ²Ρ‹Ρ… сцСн ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ прохоТдСния истории. ВсС ΠΈΠ³Ρ€Ρ‹ Ren'Py Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ΅Ρ‚ΠΊΠΈ start:, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² любом сцСнарии.

πŸ’‘ Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ для опрСдСлСния Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, настройки ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ сцСнами ΠΈ управлСния внСшним Π²ΠΈΠ΄ΠΎΠΌ пСрсонаТСй. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вторая сцСна начинаСтся со строки с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ check_room:.

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ просто Π½Π°Π·Π²Π°Π² ΠΈΡ… Π² истории ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Π² Π² Π½Π°Ρ‡Π°Π»Π΅ сцСнария. Π’Π°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ пСрсонаТа, Π΅Π³ΠΎ ΠΌΠ°ΠΌΡƒ ΠΈ Π±Ρ€Π°Ρ‚Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ КСвин. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ define ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Characters.

ΠœΠ΅Π΄ΠΈΠ°Ρ„Π°ΠΉΠ»Ρ‹. Как ΠΈ Pygame Zero, Ren'Py Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС изобраТСния ΠΈ Π·Π²ΡƒΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΈΠ³Ρ€Π΅, Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΏΠΊΠ°Ρ… β€” соотвСтствСнно game/images/ ΠΈ game/audio/. Π’ сцСнарии ΠΈΠ³Ρ€Ρ‹ ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

πŸ’‘ ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Когда ваш пСрсонаТ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π³Π»Π°Π·Π° ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚ спальню, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово scene ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ экран, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ спальни, хранящССся Π² day.png. Ren'Py ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ JPG, WEBP ΠΈ PNG.

ВСтвлСния ΡΡŽΠΆΠ΅Ρ‚Π°. Π˜Π³Ρ€Π° Π½Π΅ Π±Ρ‹Π»Π° Π±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΉ, Ссли Π±Ρ‹ Π² Π½Π΅ΠΉ нСльзя Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ Ren'Py возмоТности для Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ мСню. Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π²Ρ‹Π±ΠΎΡ€ ΠΈΠ³Ρ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅, измСняСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ воспроизводит Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π·Π²ΡƒΠΊΠΈ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π³Π»Π°Π²Π½Ρ‹ΠΉ пСрсонаТ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π±Ρ‹Π» свой Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ³Ρ€Ρ‹ Π½Π° Ren'Py

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΡΡŽΠΆΠ΅Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ использовали для adventurelib.

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆΠΈ ΠΈ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’ ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ нСсколько пСрсонаТСй: ΠΊΡƒΠ·Π½Π΅Ρ†, волшСбник ΠΈ Π²Π΅Π»ΠΈΠΊΠ°Π½. И нСсколько Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ: родная Π΄Π΅Ρ€Π΅Π²ΡƒΡˆΠΊΠ°, дСрСвня ΠΎΡ€ΡƒΠΆΠ΅ΠΉΠ½ΠΈΠΊΠ°, вСдущая ΠΊ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΠΈΠΊΡƒ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ° ΠΈ ΠΏΠ΅Ρ‰Π΅Ρ€Π° с Π³Ρ€Π°Π±ΠΈΡ‚Π΅Π»Π΅ΠΌ-Π²Π΅Π»ΠΈΠΊΠ°Π½ΠΎΠΌ.

Π’ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°Ρ… ΠΊ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Ρƒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ сцСнария:

  • script.rpy, Π³Π΄Π΅ начинаСтся ΠΈΠ³Ρ€Π°;
  • town.rpy с историСй Π±Π»ΠΈΠ·Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ Π΄Π΅Ρ€Π΅Π²Π½ΠΈ;
  • path.rpy , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт Ρ‚Ρ€ΠΎΠΏΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ дСрСвнями;
  • giant.rpy, содСрТащий Π»ΠΎΠ³ΠΈΠΊΡƒ Π±ΠΈΡ‚Π²Ρ‹ с Π²Π΅Π»ΠΈΠΊΠ°Π½ΠΎΠΌ.

ВстрСча с волшСбником оставлСна Π² качСствС упраТнСния.

ОписаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π² Π½Π°Ρ‡Π°Π»Π΅ script.rpy ΠΌΡ‹ опрСдСляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Character(). Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ нСсколько ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСмся ΠΏΠΎΠ·ΠΆΠ΅ для использования Π² качСствС Ρ„ΠΎΠ½Π° ΠΈ отобраТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ИспользованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ синтаксиса позволяСт Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ изобраТСниям ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°.

Активный ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ€ΡƒΠΆΠΈΠ΅ сСйчас Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡƒΠ³Π»Ρƒ экрана. Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ show с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ with moveinleft. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ смСнС сцСны экран очищаСтся, поэтому Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

Π‘ΠΌΠ΅Π½Π° оруТия. ΠŸΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π³ΠΎΡ€ΠΎΠ΄ Π² town.rpy, Π²Ρ‹ встрСчаСтС ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ вас ΠΊΡƒΠ·Π½Π΅Ρ†Π°:

ΠšΡƒΠ·Π½Π΅Ρ† ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ вашС ΠΎΡ€ΡƒΠΆΠΈΠ΅. Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ значСния для current_weapon ΠΈ характСристики оруТия.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Python. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с символа $, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ren'Py ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Python. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² сцСнарии ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Python. ОбновлСниС current_weapon ΠΈ статистики оруТия выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Π½Π°Ρ‡Π°Π»Π΅ script.rpy.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ большой Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ слово python:, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ giant.rpy, начиная со строки 41.

Π‘Ρ†Π΅Π½Π° Π±ΠΈΡ‚Π²Ρ‹ управляСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fight_giant() ΠΈ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ battle_over. Π’Ρ‹Π±ΠΎΡ€ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΡΡ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π±Π΅ΠΆΠ°Ρ‚ΡŒ отобраТаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° renpy.display_menu(). Если ΠΈΠ³Ρ€ΠΎΠΊ сраТаСтся, Ρ‚ΠΎ Π²Π΅Π»ΠΈΠΊΠ°Π½Ρƒ наносится случайноС количСство ΡƒΡ€ΠΎΠ½Π° ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΅Π³ΠΎ ΠΎΡ‡ΠΊΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ. Если Π²Π΅Π»ΠΈΠΊΠ°Π½ остаСтся Π² ΠΆΠΈΠ²Ρ‹Ρ…, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρƒ Π²Π΅Π»ΠΈΠΊΠ°Π½Π° Π΅ΡΡ‚ΡŒ шанс ΠΏΡ€ΠΎΠΌΠ°Ρ…Π½ΡƒΡ‚ΡŒΡΡ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΠ³Ρ€ΠΎΠΊ всСгда ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ†Π΅Π»ΡŒ. Π‘ΠΎΠΉ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ Π²Π΅Π»ΠΈΠΊΠ°Π½Π° Π½Π΅ закончится Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ сбСТит.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ использовали для описания Π±ΠΈΡ‚Π²Ρ‹ Π² adventurelib. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дСмонстирируСт, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Python Π² Ren'Py Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² сцСнарий Ren'Py.

Если Π²Ρ‹ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π»ΠΈΡΡŒ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ren'Py для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ популярныС ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ Π½Π° Python

Описанная Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ пятСрка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ β€” лишь нСбольшая Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· мноТСства доступных ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π½Π° Python. Π‘Ρ€Π΅Π΄ΠΈ дСсятков доступных ΠΌΡ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

  • Wasabi 2D Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Pygame Zero. Π­Ρ‚ΠΎ соврСмСнная срСда, построСнная Π½Π° moderngl , которая Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³, прСдоставляСт Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… эффСктов, ΠΈΠΌΠ΅Π΅Ρ‚ встроСнныС эффСкты ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ модСль ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… событий.
  • Panda 3D β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для создания 3D-ΠΈΠ³Ρ€ ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Panda 3D пСрСносится Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Ρ‚ΠΈΠΏΠΎΠ² рСсурсов, интСгрируСтся с многочислСнными сторонними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ обСспСчиваСт встроСнноС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
  • Ursina построСна Π½Π° основС Panda 3D ΠΈ прСдоставляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ аспСкты Panda 3D. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ Ursina Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся ΠΈ докумСнтируСтся.
  • PursuedPyBear позиционируСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с систСмой управлСния сцСнами, Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ спрайтами ΠΈ Π½ΠΈΠ·ΠΊΠΈΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ.

Если Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ… Π½Π° Python, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π² коммСнтариях!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° для ΠΈΠ³Ρ€

НаполнСниС ΠΈΠ³Ρ€. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ самой Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ являСтся созданиС ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… рСсурсов. ΠšΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΈΠ³Ρ€Π°ΠΌΠΈ, Π½Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ², Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π½Ρ‚ΠΎΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ внСшнСго Π²ΠΈΠ΄Π° ΠΈ саунд-Π΄ΠΈΠ·Π°ΠΉΠ½Π° своих ΠΈΠ³Ρ€.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ этот аспСкт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€ ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ. Но ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… источников ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… рСсурсов:

  • OpenGameArt.org ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр Π°Ρ€Ρ‚ΠΎΠ², ΠΌΡƒΠ·Ρ‹ΠΊΠΈ, Ρ„ΠΎΠ½ΠΎΠ², Π·Π½Π°Ρ‡ΠΊΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсов для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² находятся Π² свободном доступС.
  • Kenney.nl содСрТит Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… бСсплатных ΠΈ ΠΏΠ»Π°Ρ‚Π½Ρ‹Ρ… рСсурсов.
  • Itch.io β€” торговая ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° для создатСлСй Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΠ³Ρ€. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ рСсурсы практичСски для Π»ΡŽΠ±Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ: ΠΈ бСсплатныС, ΠΈ ΠΏΠ»Π°Ρ‚Π½Ρ‹Π΅, ΠΈ Π΄Π°ΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹.

ВсС рСсурсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΈΠ³Ρ€Π°Ρ… ΠΈΠ· этого Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹ΠΌ трСбованиям создатСлСй.

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

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с основами Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈΠ³Ρ€ Π½Π° Python! Благодаря стараниям GameDev-сообщСства ΠΏΠΈΡΠ°Ρ‚ΡŒ качСствСнныС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ Π½Π° Python сСгодня Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Ρ€Π°Π½ΡŒΡˆΠ΅.

НадССмся, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ подходящий ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.

***

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...