ΠΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΊΠ» β ΡΡΠΎ ΡΠΈΠΊΠ» while, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ sleeping Π»ΠΎΠΆΠ½ΠΎ. ΠΠ½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ update(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ draw(), ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΠΈΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ sleep() ΠΊΠ»Π°ΡΡΠ° Thread ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΡΠΎΠΊΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ frameDelay. ΠΡΠ° ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΌΠΈΠ΄Π»Π΅ΡΠ°. ΠΠ΅ΡΠΎΠ΄ update() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ. ΠΠ½Π°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΠ΅ΡΠΎΠ΄ update() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ 30 ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΡΡΠΎΡΠ° ΡΠΌΠ΅Π½Ρ ΠΊΠ°Π΄ΡΠΎΠ² Π² ΠΌΠΈΠ΄Π»Π΅ΡΠ΅ UFO ΡΠ°Π²Π½Π° 30 ΠΊΠ°Π΄ΡΠΎΠ²/Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠΎΠ΄ update() ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ Π»Π΅ΡΠ°ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
if (rand.nextInt() % 5 == 0) {
ufoXSpeed = Math.min(Math.max(ufoXSpeed + rand.nextInt() % 2, -8), 8);
ufoYSpeed = Math.min(Math.max(ufoYSpeed + rand.nextInt() % 2, -8), 8);
}...Π‘ΠΎΠ²Π΅Ρ Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ
ΠΠ΅ΡΠΎΠ΄ update() β ΡΡΠΎ ΡΠ°ΠΌΡΠΉ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΈΠ³ΡΡ Π² ΡΡΠ΅Π΄Π΅ J2ME. ΠΠ΄Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° update() ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΈΠΊΠ», ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΡΠΊ ΡΠ΅ΡΠ΄ΡΠ° Π²Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π° ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ. Π‘ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ³Ρ Π²Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΠ΅ΡΡ Π² Π³Π»Π°Π²Π΅ 17.
ΠΠ΅ΡΠΎΠ΄ nextInt() ΠΊΠ»Π°ΡΡΠ° Random() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. ΠΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° 5, ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ Π»Π΅ΡΠ°ΡΡΠ΅ΠΉ ΡΠ°ΡΠ΅Π»ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, Π½ΠΎ ΠΈΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΠΠΠ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎΠ²Π΅ΡΡΡ Π΄Π΅Π»ΠΈΠΌΠΎΡΡΡ ΡΠΈΡΠ»Π° Π½Π° 5 (%), Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π·Π° ΠΏΡΡΡ ΡΡΠ΅ΠΉΠΌΠΎΠ². Π§ΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠΈΡΠ»ΠΎ, ΡΡΠΎΡΡΠ΅Π΅ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π΄Π΅Π»ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΊΠ°Π΄ΡΠ΅, ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°ΠΊ: rand.nextInt() % 3.
Π‘ΠΊΠΎΡΠΎΡΡΡ Π»Π΅ΡΠ°ΡΡΠ΅ΠΉ ΡΠ°ΡΠ΅Π»ΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΎΡ -2 Π΄ΠΎ 2. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΡΠΎΠ΄Ρ Math.min() ΠΈ Math.max() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ, ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡΡ 8. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΏΡΠ°ΠΉΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π²Π²Π΅ΡΡ ΠΈΠ»ΠΈ Π²ΠΏΡΠ°Π²ΠΎ.
...Π‘ΠΎΠ²Π΅Ρ Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠ³ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ, ΡΠΈΡΠ»ΠΎ 8 β ΡΡΠΎ Π½Π΅ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ update() ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΠΠΠ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
ufoSprite.move(ufoXSpeed, ufoYSpeed);
ΠΠ΅ΡΠΎΠ΄ move() ΠΊΠ»Π°ΡΡΠ° Sprite() ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΏΡΠ°ΠΉΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠΏΡΠ°ΠΉΡΠ° β ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°ΠΌΠ΅Π½Ρ. Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΠΠ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΊΡΠ°Ρ ΡΠΊΡΠ°Π½Π°? Π₯ΠΎΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ ΠΎΡ ΡΡΠ΅Π½ΠΎΠΊ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΠΊΡΠ°Π½Π°, ΠΊΠ°ΠΊ Π² ΠΈΠ³ΡΠ΅ Asteroids. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ:
if (ufoSprite.getX() < -ufoSprite.getWidth()) //ΠΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΠΠ ΠΊΡΠ°Ρ ΡΠΊΡΠ°Π½Π° ΠΏΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΊ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡ
ufoSprite.setPosition(getWidth(), ufoSprite.getY());
else if (ufoSprite.getX() > getWidth())
ufoSprite.setPosition(-ufoSprite.getWidth(), ufoSprite.getY());
if (ufoSprite.getY() < -ufoSprite.getHeight()) //ΠΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΠΠ ΠΊΡΠ°Ρ ΡΠΊΡΠ°Π½Π° ΠΏΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΊ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡ
ufoSprite.setPosition(ufoSprite.getX(), getHeight());
else if (ufoSprite.getY() > getHeight())
ufoSprite.setPosition(ufoSprite.getX(), -ufoSprite.getHeight());Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠ³ΠΎ, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ Π²ΡΡΠ΅Π» Π»ΠΈ ΠΠΠ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΊΡΠ°Π½Π°. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ Π»Π΅ΡΠ°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠ²ΠΈΡΡΡ Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΊΡΠ°Ρ.
...Π‘ΠΎΠ²Π΅Ρ Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ΄ΡΠΈ ΠΏΠΎ ΡΡΠΎΠΏΠ°ΠΌ ΠΈΠ³ΡΡ Asteroids, ΡΠΎ ΠΏΠΎΡΡΡΠΏΠΈΡΠ΅ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΈΠ³ΡΠ΅ Pong. ΠΡΡΡΡ ΠΠΠ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΎΡ ΠΊΡΠ°Π΅Π² ΡΠΊΡΠ°Π½Π°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°ΠΉΡΠ° Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π·Π½Π°ΠΊ Π΅Π³ΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ufoXSpeed ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ ΠΠΠ ΠΎΡ Π»Π΅Π²ΠΎΠΉ ΠΈ ΠΏΡΠ°Π²ΠΎΠΉ Π³ΡΠ°Π½ΠΈΡ, Π° ufoYSped β ΠΎΡ Π²Π΅ΡΡ Π½Π΅ΠΉ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠΈ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ UFOCanvas β ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ draw(), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ:
private void draw(Graphics g) {
// ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΊΡΠ°Π½
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
// Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΡΠ°ΠΉΡ UFO
ufoSprite.paint(g);
// ΡΠΌΠ΅Π½ΠΈΡΡ Π±ΡΡΠ΅Ρ
flushGraphics();
}Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠΊΡΠ°Π½ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΠΈΡΠ°Π΅ΡΡΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ paint(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ ΡΠΈΡΡΠ΅Ρ ΡΠΏΡΠ°ΠΉΡ. Π Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π³ΡΠ°ΡΠΈΠΊΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ flushGraphics(). Π ΡΡΠΎΠΌ ΠΈ ΡΠΎΡΡΠΎΠΈΡ Π²ΡΡ ΠΏΡΠ΅Π»Π΅ΡΡΡ Π΄Π²ΡΡ Π±ΡΡΠ΅ΡΠ½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ: Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡΠ΅ Π΅Π΅ Π½Π° ΡΠΊΡΠ°Π½. ΠΠ΅Π· ΡΡΠΎΠ³ΠΎ ΠΈΠ³ΡΡ Π±ΡΠ»ΠΈ Π±Ρ Π½Π΅ ΡΡΠΎΠ»Ρ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ, ΠΏΠΎΠ²Π΅ΡΡΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³ 5.1.
ΠΠΈΡΡΠΈΠ½Π³ 5.1. ΠΠ»Π°ΡΡ UFOCanvas β ΡΡΠΎ ΠΊΠ»Π°ΡΡ Ρ ΠΎΠ»ΡΡΠ° ΠΌΠΈΠ΄Π»Π΅ΡΠ° UFOimport javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;
import java.io.*;
public class UFOCanvas extends GameCanvas implements Runnable {
private Display display;
private boolean sleeping;
private long frameDelay;
private Random rand;
private Sprite ufoSprite;
private int ufoXSpeed, ufoYSpeed;
public UFOCanvas(Display d) {
super(true);
display = d;
// ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΡΡΠΎΡΡ ΠΊΠ°Π΄ΡΠΎΠ² 30 ΠΊΠ°Π΄ΡΠΎΠ²/Ρ
frameDelay = 33;
}
public void start() {
// ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Ρ ΠΎΠ»ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΊΡΠ°Π½
display.setCurrent(this);
// ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π»
rand = new Random();
// ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΡΠ°ΠΉΡΠ° ΠΠΠ
ufoXSpeed = ufoYSpeed = 3;
try {
ufoSprite = new Sprite(Image.createImage("/Saucer.png"));
ufoSprite.setPosition(0, 0); //ΠΠΠ ΡΡΠ°ΡΡΡΠ΅Ρ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ ΡΠΊΡΠ°Π½Π°
}
catch (IOException e) {
System.err.println("Failed loading image!");
}
// Π·Π°ΠΏΡΡΠΊ ΠΏΠΎΡΠΎΠΊΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
sleeping = false;
Thread t = new Thread(this);
t.start();
}
public void stop() {
// Stop the animation
sleeping = true;
}
public void run() {
Graphics g = getGraphics();
// The main game loop
while (!sleeping) {
update();
draw(g);
try {
Thread.sleep(frameDelay);
}
catch (InterruptedException ie) {}
}
}
private void update() {
// Randomly alter the UFO\'s speed
if (rand.nextInt() % 5 == 0) { //ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΠΎ ΠΎΡΡΠΌ Π₯ ΠΈ Y Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ ΠΎΡ -8 Π΄ΠΎ 8
ufoXSpeed = Math.min(Math.max(ufoXSpeed + rand.nextInt() % 2, -8), 8);
ufoYSpeed = Math.min(Math.max(ufoYSpeed + rand.nextInt() % 2, -8), 8);
}
// Move the sprite
ufoSprite.move(ufoXSpeed, ufoYSpeed);
// Wrap the UFO around the screen if necessary
if (ufoSprite.getX() < -ufoSprite.getWidth())
ufoSprite.setPosition(getWidth(), ufoSprite.getY());
else if (ufoSprite.getX() > getWidth())
ufoSprite.setPosition(-ufoSprite.getWidth(), ufoSprite.getY());
if (ufoSprite.getY() < -ufoSprite.getHeight())
ufoSprite.setPosition(ufoSprite.getX(), getHeight());
else if (ufoSprite.getY() > getHeight())
ufoSprite.setPosition(ufoSprite.getX(), -ufoSprite.getHeight());
}
private void draw(Graphics g) {
// Clear the display
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
// Draw the UFO sprite //Π‘ΠΏΡΠ°ΠΉΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ paint()
ufoSprite.paint(g);
// Flush the offscreen graphics buffer
flushGraphics();
}
}ΠΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ UFOCanvas ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΠΌΠΈΠ΄Π»Π΅Ρ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° UFOMIDlet. ΠΠΈΡΡΠΈΠ½Π³ 5.2. ΠΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° UFOMIDlet, Ρ ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π² ΡΠ°ΠΉΠ»Π΅ UFOMIDlet.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class UFOMIDlet extends MIDlet implements CommandListener {
private UFOCanvas canvas;
public void startApp() {
if (canvas == null) {
canvas = new UFOCanvas(Display.getDisplay(this)); //ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ Ρ ΠΎΠ»ΡΡ β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡ ΠΌΠΈΠ΄Π»Π΅ΡΠ° ΠΎΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
Command exitCommand = new Command("Exit", Command.EXIT, 0);
canvas.addCommand(exitCommand);
canvas.setCommandListener(this);
}
// Start up the canvas
canvas.start();
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {
canvas.stop();
}
public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT) {
destroyApp(true);
notifyDestroyed();
}
}
}ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠ»Π°ΡΡ UFOMIDlet ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΈΠ΄Π»Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°Π½Π΅Π΅. ΠΠ»Π°ΡΡ ΠΌΠΈΠ΄Π»Π΅ΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ ΠΎΠ»ΡΡΠ°, Π·Π°ΠΏΡΡΠΊ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠ²ΡΠΊΠ½ΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π°ΡΠΈΡ ΠΈΠ³Ρ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Ρ ΠΎΠ»ΡΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ .
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ΄Π»Π΅Ρ UFO ΡΠΎΠ±ΡΠ°Π½, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ J2ME. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π»Π΅ΡΠ°ΡΡΠ°Ρ ΡΠ°ΡΠ΅Π»ΠΊΠ° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ (ΡΠΈΡ. 5.7).
Π ΠΈΡ. 5.7. ΠΠΎΠ³Π΄Π° ΠΌΠΈΠ΄Π»Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π»Π΅ΡΠ°ΡΡ ΠΠΠ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, ΡΠΎ Π½Π° ΡΠΈΡ. 5.8 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π»Π΅ΡΠ°ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΠΊΡΠ°Π½Π°.
Π ΠΈΡ. 5.8. ΠΠ°ΠΊ ΠΊΡΠΎΠ»ΠΈΠΊ ΠΈΠ· ΡΠ΅ΠΊΠ»Π°ΠΌΡ Energizer, ΠΠΠ Π±Π΅ΡΠΏΡΠ΅ΡΡΠ°Π½Π½ΠΎ Π»Π΅ΡΠ°Π΅Ρ ΠΏΠΎ ΡΠΊΡΠ°Π½ΡΠΡΠ΅, ΡΠ΅Π³ΠΎ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π² ΠΌΠΈΠ΄Π»Π΅ΡΠ΅ UFO, β ΡΡΠΎ ΠΏΠ°ΡΠ° Π°ΡΡΠ΅ΡΠΎΠΈΠ΄ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠΠ. ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΠΎΡ ΠΏΡΠΎΠ±Π΅Π» Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅.
Π Π΅Π·ΡΠΌΠ΅
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π²Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ³ΡΠ°Ρ . ΠΡ ΡΠ·Π½Π°Π»ΠΈ, ΡΡΠΎ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΈΠ»ΡΠΌΠΎΠ², ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Ρ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΈΠ³Ρ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΈΠ³Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, ΠΈ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΎΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π°Ρ ΡΠΏΡΠ°ΠΉΡΠΎΠ²ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ MIDP API. ΠΠ»Π°Π²Π° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΌΠΈΠ΄Π»Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΏΡΠ°ΠΉΡΠΎΠ²ΠΎΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ Π²Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.