ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Π˜Π³Ρ€Π° ВСтрис Π½Π° PyQt5

Π˜Π³Ρ€Π° ВСтрис – ΠΎΠ΄Π½Π° ΠΈΠ· самых популярных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΈΠ³Ρ€. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΈΠ³Ρ€Π° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΈ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Π° русским программистом АлСксССм ΠŸΠ°ΠΆΠΈΡ‚Π½ΠΎΠ²Ρ‹ΠΌ Π² 1985 Π³ΠΎΠ΄Ρƒ. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ВСтрис доступСн Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Π² мноТСствС Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ простой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ Π½Π° PyQt5 – ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π½Π°Π²Ρ‹ΠΊΠΎΠ² программирования.

ВСтрисом называСтся ΠΈΠ³Ρ€Π°-Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠ° с ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ. Π’ этой ΠΈΠ³Ρ€Π΅, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ 7 Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Π°ΠΊ: S-Ρ„ΠΈΠ³ΡƒΡ€Π°, Z-Ρ„ΠΈΠ³ΡƒΡ€Π°, T-Ρ„ΠΈΠ³ΡƒΡ€Π°, L-Ρ„ΠΈΠ³ΡƒΡ€Π°, Ρ„ΠΈΠ³ΡƒΡ€Π°-линия, Ρ„ΠΈΠ³ΡƒΡ€Π° «Π“», ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚. КаТдая ΠΈΠ· этих Ρ„ΠΈΠ³ΡƒΡ€ формируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠΎΠ². Π€ΠΈΠ³ΡƒΡ€Ρ‹ ΠΏΠ°Π΄Π°ΡŽΡ‚ Π²Π½ΠΈΠ· Π½Π° доску. ЦСль ΠΈΠ³Ρ€Ρ‹ ВСтрис – ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈ Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΏΡ€ΠΈΠ·Π΅ΠΌΠ»ΠΈΠ»ΠΎΡΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС. Если ΠΌΡ‹ сумССм ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ряд, ряд Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‡ΠΊΠΈ. ΠœΡ‹ ΠΈΠ³Ρ€Π°Π΅ΠΌ Π² ВСтрис Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСм Π²Π΅Ρ€Ρ…Π°.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π£ нас Π½Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для нашСго ВСтриса, ΠΌΡ‹ рисуСм Ρ‚Π΅Ρ‚Ρ€Π°ΠΌΠΈΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ доступноС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ инструмСнтарии PyQt5 инструмСнты рисования. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ имССтся матСматичСская модСль. Π’Π°ΠΊΠΆΠ΅ ΠΈ Π² ВСтрисС.

НСкоторыС ΠΈΠ΄Π΅ΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΈΠ³Ρ€Π΅:

Код содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ класса: Tetris, Board, Tetrominoe ΠΈ Shape. Класс Tetris ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ³Ρ€Ρƒ. Board – это Ρ‚ΠΎ, Π³Π΄Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ игровая Π»ΠΎΠ³ΠΈΠΊΠ°. Класс Tetrominoe содСрТит ΠΈΠΌΠ΅Π½Π° всСх частСй тСтриса ΠΈ класс Shape содСрТит ΠΊΠΎΠ΄ для частСй тСтриса.

Π˜Π³Ρ€Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π° для Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ понимания. Π˜Π³Ρ€Π° начинаСтся сразу ΠΆΠ΅ послС Π΅Ρ‘ запуска. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ, Π½Π°ΠΆΠ°Π² ΠΊΠ»Π°Π²ΠΈΡˆΡƒ p. Клавиша Space Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊ тСтриса Π²Π½ΠΈΠ·. Π˜Π³Ρ€Π° ΠΈΠ΄Ρ‘Ρ‚ Π½Π° постоянной скорости, ускорСниС Π½Π΅ рСализуСтся. ΠžΡ‡ΠΊΠΈ – это число Π»ΠΈΠ½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ.

ЭкзСмпляр класса Board создаётся ΠΈ устанавливаСтся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ прилоТСния.

ΠœΡ‹ создаём строку состояния, Π³Π΄Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ сообщСния. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сообщСния: количСство ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ, сообщСниС ΠΏΠ°ΡƒΠ·Ρ‹, ΠΈΠ»ΠΈ сообщСниС Β«Π˜Π³Ρ€Π° ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°Β». msgStatusbar – это ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ сигнал, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСализуСтся Π² классС Board. showMessage() – это встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ сообщСниС Π² строкС состояния.

Π­Ρ‚Π° строка ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ³Ρ€Ρƒ.

Боздаётся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ сигнал. msgStatusbar – это сигнал, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сообщСниС ΠΈΠ»ΠΈ количСство ΠΎΡ‡ΠΊΠΎΠ² Π² строку состояния.

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Board. BoardWidth ΠΈ BoardHeight ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ доски Π² Π±Π»ΠΎΠΊΠ°Ρ…. Speed опрСдСляСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹Π΅ 300 мс Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ» Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ initBoard() ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ self.board – это список чисСл ΠΎΡ‚ 0 Π΄ΠΎ 7. Она прСдставляСт мСстополоТСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ оставляСт Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π½Π° доскС.

ΠœΠ΅Ρ‚ΠΎΠ΄ shapeAt() опрСдСляСт Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π² Π΄Π°Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅.

Доска ΠΌΠΎΠΆΠ΅Ρ‚ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π°). Как слСдствиС, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. squareWidth() вычисляСт ΡˆΠΈΡ€ΠΈΠ½Ρƒ простого ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ° Π² пиксСлях ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘. Board.BoardWidth – это Ρ€Π°Π·ΠΌΠ΅Ρ€ доски Π² Π±Π»ΠΎΠΊΠ°Ρ….

РисованиС ΠΈΠ³Ρ€Ρ‹ раздСляСтся Π½Π° Π΄Π²Π° шага. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом, ΠΌΡ‹ рисуСм всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΈΠ»ΠΈ оставляСм Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ Π²Π½ΠΈΠ· доски. ВсС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² спискС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… self.board. Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ shapeAt().

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг – это рисованиС ΡƒΠΏΠ°Π²ΡˆΠΈΡ… Π²Π½ΠΈΠ· частСй.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ keyPressEvent(), ΠΌΡ‹ провСряСм Π½Π°ΠΆΠ°Ρ‚Ρ‹Π΅ клавиши. Если ΠΌΡ‹ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΏΡ€Π°Π²ΠΎΠΉ стрСлки, ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π²ΠΏΡ€Π°Π²ΠΎ. ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°Π²ΠΎΠΌ ΠΊΡ€Π°Π΅.

Клавиша стрСлки Π²Π²Π΅Ρ€Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Π»Π΅Π²ΠΎ.

Клавиша Β«ΠŸΡ€ΠΎΠ±Π΅Π»Β» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ.

НаТимая ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Β«dΒ», Ρ‡Π°ΡΡ‚ΡŒ спустится Π²Π½ΠΈΠ· Π½Π° ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано, Ρ‡Ρ‚ΠΎΠ±Ρ‹ слСгка ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ части.

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ tryMove(), ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наши Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Если Ρ„ΠΈΠ³ΡƒΡ€Π° находится Π½Π° ΠΊΡ€Π°ΡŽ доски ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΡ‹ΠΊΠ°Π΅Ρ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ части, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π›ΠΎΠΆΡŒ». Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π² Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

Π’ timerEvent (событии Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°), ΠΌΡ‹ Π»ΠΈΠ±ΠΎ создаём Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ послС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, которая ΡƒΠΏΠ°Π»Π°, Π»ΠΈΠ±ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ линию Π²Π½ΠΈΠ·.

ΠœΠ΅Ρ‚ΠΎΠ΄ clearBoard() ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ доску ΠΏΡƒΡ‚Ρ‘ΠΌ установки Tetrominoe.Noshape Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ доски.

Когда Ρ„ΠΈΠ³ΡƒΡ€Π° ΠΏΠ°Π΄Π°Π΅Ρ‚, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ removeFullLines(). ΠœΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ всС ΠΏΠΎΠ»Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΈ удаляСм ΠΈΡ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ порядок удаляСмых Π»ΠΈΠ½ΠΈΠΉ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ нашСм случаС, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ «Π½ΠΈΠΊΠ°ΠΊΡƒΡŽ» Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ части ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ°Ρ€ΠΈΡ‚ΡŒ Π½Π°Π΄ пустыми ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ°ΠΌΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄ newPiece() случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ создаёт Π½ΠΎΠ²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ тСтриса. Если Ρ‡Π°ΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ Π² свою Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΈΠ³Ρ€Π° заканчиваСтся.

Класс Tetrominoe содСрТит Π² сСбС ΠΈΠΌΠ΅Π½Π° всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΠΌ NoShape для пустого пространства.

Класс Shape Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ частях тСтриса.

Набор coordsTable содСрТит Π² сСбС всСвозмоТныС значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π°ΡˆΠΈΡ… частСй тСтриса. Π­Ρ‚ΠΎ шаблон, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС части Π±Π΅Ρ€ΡƒΡ‚ свои значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

self.coords = [[0,0] for i in range(4)]

ПослС создания, ΠΌΡ‹ создаём пустой список ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Бписок Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ частСй тСтриса.

ΠœΠ΅Ρ‚ΠΎΠ΄ rotateLeft() ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ Π²Π»Π΅Π²ΠΎ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Новая Ρ‡Π°ΡΡ‚ΡŒ создаётся ΠΈ Π΅Ρ‘ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… частСй.

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° ΠΈΠ³Ρ€Π° ВСтрис Π² PyQt5 (Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ послСднСй части Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΎΡ‚ zetcode).

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

How to write Tetris in Python

ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Step by step guide to writing Tetris in Python with PyGame

In this tutorial, we will write a simple Tetris using the PyGame library in Python. The algorithms inside are pretty simple but can be a little challenging for the beginners. We will not concentrate on PyGame mechanics too much, but rather focus on the game logic. If you are too lazy to read all the stuff, you may simply copy and paste the code in the end.

ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Prerequisites

You may experience issues with installing PyGame or Python itself, but this is out of scope here. Please refer to StackOverflow for that πŸ™‚

The Figure Class

We start with the Figures class. Our goal is to store the figure types together with the rotations. We could, of course, rotate them using matrix rotation, but that can make it too complex.

ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

So, we simply have a list of lists of figures like that:

Where the main list contains figure types, and the inner lists contain their rotations. The numbers in each figure represent the positions in a 4×4 matrix where the figure is solid. For instance, the figure [1,5,9,13] represents a line. To better understand that, please refer to the picture above.

As an exercise try to add some missing figures here, namely the β€œz” figures.

The __init__ function would be as follows:

where we randomly pick a type and a color.

And we need to quickly be able to rotate and get the current rotation of a figure, for this we have these two simple methods:

The Tetris Class

We first initialize the Game with some variables:

where the state tells us if we are still playing a game or not. The field is the field of the game that contains zeros where it is empty, and the colors where there are figures (except the one that is still flying down).

We initialize the game with the following simple method:

Creating a new figure and position it at coordinates (3,0) is simple:

The more interesting function is to check if the currently flying figure intersecting with something fixed on the field. This may happen when the figure is moving left, right, down, or rotating.

Having this function, we can now check if we are allowed to move or rotate the Figure. If it moves down and intersects, then this means we have reached the bottom, so we need to β€œfreeze” the figure on our field:

After freezing, we have to check if there are some full horizontal lines that should be destroyed. Then we create a new Figure, and if it already intersects, then game over πŸ™‚

Checking the full lines is relatively simple and straightforward, but pay attention to the fact that destroying a line goes from the bottom to the top:

Now, we are missing the moving methods:

As you can see, the go_space method practically duplicates the go_down method, but it goes down until it reaches the bottom or some fixed figure.

And in every method, we remember the last position, change the coordinates, and check if there is an intersection. If there is, we return to the previous state.

PyGame and the Complete Code

We are almost done!

There is some simple logic left, which is the game loop and the PyGame stuff. So, let’s see at the complete code now:

Try to copy and paste it into a py file. Run and enjoy the game! πŸ™‚

And don’t forget to share it with your friends!

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

Π˜Π³Ρ€Π° ВСтрис

Π₯ΠΎΡ‚Π΅Π» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ ВСтрис.

Когда Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ, Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Traceback (most recent call last):
File «C:/Python27/PyPong/Play», line 5, in
from PyQt5.QtWidgets import QMainWindow, QFrame, QDesktopWidget, QApplication
ImportError: No module named PyQt5.QtWidgets

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Π˜Π³Ρ€Π° тСтрис
ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅, рСбята. МнС Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π°Ρ‚ΡŒ ΠΊΡƒΡ€ΡΠΎΠ²ΡƒΡŽ ΠΏΠΎ ΠΈΠ³Ρ€Π΅ тСтрис, ΠΌΠΎΠΆΠ΅Ρ‚ Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠΎΠ³ΠΎ самый простой тСтрис.

2Π΄ ΠΈΠ³Ρ€Π° тСтрис
ΠŸΠΈΡˆΡƒ тСтрис, ΠΏΠΎΠΊΠ° дошСл Π²ΠΎΡ‚ Π΄ΠΎ Ρ‡Π΅Π³ΠΎ using System; using System.Collections.Generic; using.

Π˜Π³Ρ€Π° ВСтрис
ЗдравствуйтС. Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C/C++ Π² срСдС Visual Studio ΠΏΡ€ΠΎ тСтрис? ΠžΡ‡Π΅Π½ΡŒ.

Π’Π°ΠΊ ΠΎΠ½ ΠΈ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ сам написал этот ΠΊΠΎΠ΄ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис
Написано (Π² Ρ‚Π΅ΠΌΠ΅) Π±Ρ‹Π»ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
1. Π₯ΠΎΡ‚Π΅Π» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ.
2. Π’ΠΎΡ‚ ΠΊΠΎΠ΄:
Ѐсё ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

А ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ PyQt5 Π½Π΅ установлСн.

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Π˜Π³Ρ€Π° ВСтрис
ЗдравствуйтС. Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° C/C++ Π² срСдС Visual Studio ΠΏΡ€ΠΎ тСтрис? ΠžΡ‡Π΅Π½ΡŒ.

Консольная ΠΈΠ³Ρ€Π° ВСтрис Π‘++
ЗдравствуйтС! ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ поТалуйста Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡƒ программисту Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ тСтрис Π½Π°.

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

РусскиС Π‘Π»ΠΎΠ³ΠΈ

Π¨Π΅ΡΡ‚ΡŒ, pygame для создания простой ΠΈΠ³Ρ€Ρ‹ Π² тСтрис (Basic 1)

1. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простыми, поэтому ΠΊΠΎΠ΄ Π±Ρ‹Π» написан процСссно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом. На этот Ρ€Π°Π· ΠΈΠ³Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТной (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΡ‚Π²Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-машина, ΠΎΠ½Π»Π°ΠΉΠ½-Π±ΠΈΡ‚Π²Π°, использованиС Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π° ΠΈ Ρ‚. Π”.). На этот Ρ€Π°Π· я ΠΏΠΈΡˆΡƒ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.
Окно ΠΈΠ³Ρ€Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ с использованиСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса Panel для облСгчСния управлСния ΠΈ контроля ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
Π Π°Π·ΠΌΠ΅Ρ€ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠ³Ρ€Ρ‹ составляСт 30 пиксСлСй Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, поэтому ΡˆΠΈΡ€ΠΈΠ½Π° составляСт 3010 = 300, высота 3020=600

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ эффСкта
ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

2. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡƒΠ±ΠΎΠΌ

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±Π»ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, поэтому сначала ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Block, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±Π»ΠΎΠΊΠΎΠ² Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ этого класса Block.БущСствуСт сСмь Ρ‚ΠΈΠΏΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ².
ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, создайтС Π±Π»ΠΎΠΊΠΈ ΠΈ ΡΠ±Ρ€ΠΎΡΡŒΡ‚Π΅ Π±Π»ΠΎΠΊ

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для создания Π±Π»ΠΎΠΊΠ°

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ двиТущСгося Π±Π»ΠΎΠΊΠ° Π² класс Panel ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ рисования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ двиТущийся Π±Π»ΠΎΠΊ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π±Π»ΠΎΠΊ Π² основном Ρ†ΠΈΠΊΠ»Π΅ ΠΈ ΠΎΡ‚Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π±Π»ΠΎΠΊ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΏΠ»ΠΈ.

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ врСмя обновлСния мСстополоТСния

ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ двиТущСгося Π±Π»ΠΎΠΊΠ° Π² основном Ρ†ΠΈΠΊΠ»Π΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт падСния ΠΊΡƒΠ±Π°
ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, суТдСниС ΠΎ ΠΏΡ€ΠΈΠ·Π΅ΠΌΠ»Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ°

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ†Π΅Π½ΠΊΠΈ пСрСмСщСния Π² класс Block, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция can_move ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΡƒΠΏΠ°Π» Π»ΠΈ Π±Π»ΠΎΠΊ Π½Π° Π΄Π½ΠΎ

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСмСщСния Panel Π½Π°

Π—Π΄Π΅ΡΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​функция add_block для сохранСния ΠΏΡ€ΠΈΠ·Π΅ΠΌΠ»ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π±Π»ΠΎΠΊΠΎΠ², поэтому Panel внСсла Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… измСнСния.
1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ массива для хранСния ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ add_block.

3. НарисуйтС self.rect_arr краской.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ ΡƒΠΏΠ°Π΄Π΅Ρ‚ Π½Π° Π΄Π½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΏΠ°Π΄Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ.
ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис
Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ сначала эту Π³Π»Π°Π²Ρƒ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅

Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ рСкомСндация

ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π°Π½Π°Π»ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… php-wordpress

Π²Π΅Π±-сайт python ΠΈΠ»ΠΈ php? Если чСстно, php ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ, Ссли Π²Ρ‹ Π΅Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-сайта Π½Π° Python Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с нуля. Π’ΠΊΠ»ΡŽΡ‡Π°Ρ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, cms ΠΈ wordpress ΠΏΠΎΠ΄ php. Wordp.

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

ПишСм ΠΈΠ³Ρ€Ρƒ Π½Π° Python

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π½Π° Python, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсноС. НапримСр, свою ΠΈΠ³Ρ€Ρƒ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Π΄Π°Ρ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊΡƒ ΡƒΠΏΠ°ΡΡ‚ΡŒ, Ρ‚ΠΈΠΏΠ° Арканоида. Π’Ρ‹, скорСС всСго, ΠΈΠ³Ρ€Π°Π»ΠΈ Π² дСтствС Π²ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, поэтому ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒΡΡ Π±ΡƒΠ΄Π΅Ρ‚ просто.

Π›ΠΎΠ³ΠΈΠΊΠ° ΠΈΠ³Ρ€Ρ‹

Π•ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ β€” простой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Ρ‚Π²Ρ‘Ρ€Π΄Ρ‹ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ. Когда ΡˆΠ°Ρ€ΠΈΠΊ касаСтся стСнки ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ°, ΠΎΠ½ отскакиваСт Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ сторону. Если ΠΎΠ½ ΡƒΠΏΠ°Π΄Ρ‘Ρ‚ Π½Π° ΠΏΠΎΠ» β€” Π²Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Π²Π½ΠΈΠ·Ρƒ вдоль ΠΏΠΎΠ»Π° Π»Π΅Ρ‚Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, Π° Π²Ρ‹ Π΅ΠΉ управляСтС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стрСлок. Π’Π°ΡˆΠ° Π·Π°Π΄Π°Ρ‡Π° β€” ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠΎΠ΄ ΡˆΠ°Ρ€ΠΈΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ дольшС. Π—Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ спасСниС ΡˆΠ°Ρ€ΠΈΠΊΠ° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‡ΠΊΠΎ.

Алгоритм

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ сцСнарии повСдСния:

Π₯ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всё это происходит ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° ΡˆΠ°Ρ€ΠΈΠΊ Π»Π΅Ρ‚Π°Π΅Ρ‚, ΠΌΡ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° мСстС. И ΠΊΠΎΠ³Π΄Π° ΡˆΠ°Ρ€ΠΈΠΊ отскакиваСт ΠΎΡ‚ стСн, это Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ класса β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, сам ΡˆΠ°Ρ€ΠΈΠΊ ΠΈ счёт, ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ Π½Π° дСйствия Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. ПолС Π½Π°ΠΌ самим ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ β€” для этого Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ готовая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. А ΠΏΠΎΡ‚ΠΎΠΌ Π² этих классах ΠΌΡ‹ ΠΏΡ€ΠΎΠΏΠΈΡˆΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” ΠΎΠ½ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

По коням, пишСм на Python

Для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ срСду Python. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² нашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Начало ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π§Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас появилась Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π² ΠΈΠ³Ρ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Tkinter. Она Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π½Π°Π±ΠΎΡ€ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Python ΠΈ позволяСт Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β€” Π»ΠΈΠ½ΠΈΠΈ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΊΡ€ΡƒΠ³ΠΈ ΠΈ ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π°. Π’Π°ΠΊΠΎΠΉ простой Paint, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Python.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ класс Tk(). Он просто Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ, Π½ΠΎ Π±Π΅Π· содСрТимого. Π§Ρ‚ΠΎΠ±Ρ‹ появилось содСрТимоС, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ холст β€” Π²ΠΈΠ΄ΠΈΠΌΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°. ИмСнно Π½Π° Π½Ρ‘ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΈΠ³Ρ€Ρƒ. Π—Π° холст ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ класс Canvas(), поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· этого класса ΠΈ дальшС ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Если ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, вСдь ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ считаСт ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½Π΅Ρ‚ Π΅Ρ‘ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ искусствСнно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ врСмя двиТСния, Π° для этого Π½Π°ΠΌ понадобится ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Time β€” ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ стандартный.

ПослСднСС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ глобально Π½ΡƒΠΆΠ½ΠΎ, β€” Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡˆΠ°Ρ€ΠΈΠΊΠ° ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ интСрСснСС ΠΈΠ³Ρ€Π°Ρ‚ΡŒ. Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Random β€” ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ случайныС числа ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ всё это Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π° Π½Π° Python:

ΠœΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, сдСлали ΠΈ настроили ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ займёмся классами.

Π¨Π°Ρ€ΠΈΠΊ

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ словами, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ ΡˆΠ°Ρ€ΠΈΠΊΠ°. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ:

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°

Π‘Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ β€” сначала опишСм Π΅Ρ‘ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ словами, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘ΠΌ Π² ΠΊΠΎΠ΄. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°:

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π°:

МоТно Π±Ρ‹Π»ΠΎ Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ счёт Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Но здСсь Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс, Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ сами ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠžΡ‚ счёта Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ (ΠΊΡ€ΠΎΠΌΠ΅ конструктора) β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π» Π½Π° касаниС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π» число ΠΎΡ‡ΠΊΠΎΠ² ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ» ΠΈΡ… Π½Π° экран:

Π£ нас всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ саму ΠΈΠ³Ρ€Ρƒ. ΠœΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ всСх элСмСнтов, ΠΈ Π½Π°ΠΌ остаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡˆΠ°Ρ€ΠΈΠΊΠ°, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ счёта ΠΈ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Бмысл ΠΈΠ³Ρ€Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊ. Пока этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ β€” всё двиТСтся, Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡˆΠ°Ρ€ΠΈΠΊ ΡƒΠΏΠ°Π» β€” Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС ΠΎ ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ выглядит ΠΊΠΎΠ΄ нСпосрСдствСнно самой ΠΈΠ³Ρ€Ρ‹:

ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис. Π€ΠΎΡ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΠΉΡ‚ΠΎΠ½ тСтрис

Π§Ρ‚ΠΎ дальшС

На основС этого ΠΊΠΎΠ΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свою ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹:

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

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

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