ΠΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ³ΡΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Java
ΠΠ°Π½Π½ΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ «ΡΠΈΡΡΠΎΡΡ» ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ update ΠΈ draw. Update Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ³ΡΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° Java (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
1. ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Java
1.1 Java Runtime Environment
1.2 Java development Kit
1.3 ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Java API
2. Π‘ΡΠ΅Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java
2.1 ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ
2.2 Java IDE
3. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ 2d — ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
3.1 ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
3.2 ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²
3.3 Frame Per Second ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²
3.4Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΠ°, Π²ΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
3.5 ΠΠ΅ΡΠΎΠ΄Ρ update () ΠΈ draw ()
3.6 Game State Manager
3.7 Π‘ΠΎΠ±ΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
4. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ
4.1 ΠΡΡΠΌΠ°Ρ Π»ΠΈΠ½ΠΈΡ
4.2 Π¦Π²Π΅Ρ
4.3 Π¦Π²Π΅Ρ ΡΠΎΠ½Π°
4.4 ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
4.5 ΠΠ²Π°Π»
4.6 ΠΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
4.7 ΠΠ±ΡΠ΅ΠΊΡ ΡΠΎΡΠΊΠΈ
4.8 ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π²Π΅ΡΡΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½ΠΎΠ²ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ. Π ΡΡΠ΅ΡΠ΅ IT ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ°ΡΡΠ΅Ρ. ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ, Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π΄Π΅ΡΠΈΡΠΈΡ Π² Π²ΡΡΠΎΠΊΠΎΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°Ρ .
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ, Π·Π° ΡΡΠ΅Ρ Π±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΎΡΡΠ°ΡΠ»ΠΈ. Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅, ΠΏΠ΅ΡΠ²ΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΡΡΠΈ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ IT-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠΌ — ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°ΡΡΡΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Ρ ΠΈ Π±Π»ΠΈΠ·ΠΊΠΎ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π½ΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° Π²ΡΡΠΎΠΊΠΈΠ΅ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ ΡΠ°Π·Π²ΠΈΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ — Π΄Π²ΡΡ ΡΠ·ΡΠΊΠΎΠ². ΠΡΠ»ΠΈ Π±ΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠΎ ΡΠ·ΡΠΊΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ, Π΄Π΅Π»ΡΡ ΡΠ·ΡΠΊΠΈ Java ΠΈ PHP. ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ·ΡΠΊ Java ΠΈ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΌΠ½ΠΎΠΉ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. ΠΠ°Π»Π΅Π΅ ΠΌΠ½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Java — ΡΡΠΎ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΠΏΡΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Sun Microsystems Π² 1995 Π³ΠΎΠ΄Ρ. ΠΡΠΎ Π±Π°Π·ΠΎΠ²Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΡΠΈΠ»ΠΈΡΡ, ΠΈΠ³ΡΡ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ). Java ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 850 ΠΌΠ»Π½. ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ ΠΈ Π² ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄Π°Ρ ΡΡΡΡΠΎΠΉΡΡΠ² (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°Ρ ΠΈ Π² ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡΠ°Ρ ) ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΡΡ. ΠΠ° ΡΠ·ΡΠΊΠ΅ java ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ desktop-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, web — ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Java — ΡΡΠΎ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ (Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°). Π’. Π΅. «ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Java, Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²Π΅Π·Π΄Π΅». Π Java ΡΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ JVM (Java Virtual Machine), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡ — ΠΊΠΎΠ΄. Π’Π°ΠΊΠΆΠ΅ JVM ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Java Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Android.
Android — ΡΡΠΎ ΠΎΡΠΊΡΡΡΠ°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Π°Ρ Π½Π° ΡΠ΄ΡΠ΅ Linux. Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΎΠ½Π° Π½Π° ΡΡΡΡΡΠ°Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΡΡΠ³Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. Android ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² — ΡΠΈΡΡΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΡ, Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅ΡΡ, GPS, Π΄Π°ΡΡΠΈΠΊΠΈ, ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΎΡΡ, ΠΏΠ»Π°Π½ΡΠ΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ, ΡΠΈΡΡΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΠ΅Π»ΠΈ, Π½Π΅ΡΠ±ΡΠΊΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
Π’Π°ΠΊΠΆΠ΅, ΡΠ·ΡΠΊ Java Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΈΠ³Ρ ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Symbian Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π° Java, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ j2me.
J2ME — ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java Π΄Π»Ρ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π² ΡΠ΅ΡΡΡΡΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠΎΡΠΎΠ²ΡΡ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ², ΠΊΠ°ΡΠΌΠ°Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ², ΡΠ΅ΡΠΈΠ²Π΅ΡΠΎΠ² ΡΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΡ, ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄ΠΈΡΠΊΠΎΠ² Blu-ray. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΈΠ·-Π·Π° ΠΏΡΠΈΡ ΠΎΠ΄Π° Π½Π° ΡΡΠ½ΠΎΠΊ Android ΠΈ IOS.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, Π΄Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π΄Π΅ΡΠΆΠΈΡ Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΡΡΠ΅ΡΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΠ‘ Android, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΊΡΡΠΎΠΊ ΡΡΠ½ΠΊΠ°.
ΠΠ΅ΠΌΠ°Π»ΡΡ ΡΠΎΠ»Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΈ desktop — ΠΈΠ³ΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° Java. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³Ρ ΠΏΠΎΠ΄ pc Π²Π΅Π΄Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ Java Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (LWJGL — lightweight Java game library, Slick 2D, libGDX ΠΈ Ρ. Π΄.).
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° «Ρ Π½ΡΠ»Ρ», ΠΈΠ³ΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π° Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π΄Π΅ΡΡΡ Π½Π° «ΡΠΈΡΡΠΎΠΌ» Java SE.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Java Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° Java, ΠΈΠΌΠ΅Π»ΠΈ ΡΠ΅ΠΏΡΡΠ°ΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java, Π±ΡΠ»Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ»ΡΡΡΠ΅Π½Π° Ρ Π²ΡΠΏΡΡΠΊΠΎΠΌ Π² 1997 — 1998 Π³ΠΎΠ΄Π°Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π²Π΅ΡΡΠΈΠΈ 1.1 Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠ°, Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π»ΡΡΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ»Π°ΡΡ StringBuffer, ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Ρ. Π΄.). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π±ΡΠ»Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Java — Ρ 2000 Π³ΠΎΠ΄Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° HotSpot.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ Π² ΡΡΠΎΡΠΎΠ½Ρ Π²ΡΠ±ΠΎΡΠ° Java Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ³Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Java — ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² Ρ.Π½. jar — ΡΠ°ΠΉΠ»Ρ. JAR ΡΠ°ΠΉΠ» — ΡΡΠΎ Java — Π°ΡΡ ΠΈΠ² (ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π°Π½Π³Π». Java ARchive). ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ZIP-Π°ΡΡ ΠΈΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java. Jar ΡΠ°ΠΉΠ»Ρ Π²Π΅ΡΡΠΌΠ° ΡΠ΄ΠΎΠ±Π½Ρ, Ρ.ΠΊ. ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΠ‘, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° JVM. ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ jar — ΡΠ°ΠΉΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠ΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ jar — ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ.
Π‘Π»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π½Π° Java Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΈΠ³Ρ. ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΈΠ³Ρ Π² ΠΌΠΈΡΠ΅, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΏΡΠ΅Π²ΡΡΠΈΠ»ΠΎ 20 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ², Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Java. Π― Π³ΠΎΠ²ΠΎΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΎΠ± ΠΈΠ½Π΄ΠΈ ΠΈΠ³ΡΠ΅ Minecraft.
ΠΠ½Π΄ΠΈ ΠΈΠ³ΡΡ — ΡΡΠΎ ΠΈΠ³ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ ΠΈ Π½Π΅ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌΡΠΌ Π³Π΅ΠΉΠΌΠΏΠ»Π΅Π΅ΠΌ. ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ, ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΠΈΠ½Π΄ΠΈ ΠΈΠ³Ρ ΡΡΡΠ΅ΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠ΅Ρ. ΠΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΈΠ»Ρ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ½Π΄ΠΈ ΠΈΠ³ΡΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ. ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΠ·ΡΠΊ C++, Π»ΠΈΠ±ΠΎ Java, Ρ.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΠΈΡ ΡΠ·ΡΠΊΠ°Ρ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½Π΄ΠΈ ΠΈΠ³Ρ ΠΈ ΠΎΠ½ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅Π±Ρ Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅ΡΠ΅.
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ½Π΄ΠΈ ΠΈΠ³Ρ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ³ΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΡΠΌΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π°Π»Π΅Π΅.
1. ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Java
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ Java. ΠΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π½ΠΈΠΆΠ΅. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Java Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (Java API), ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅.
1.1 Java Runtime Environment
«Java Runtime Environment» — ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java — ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π‘ΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ — «Java Virtual Machine» ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java — ΠΊΠ»Π°ΡΡΠΎΠ². JRE ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π° Ρ ΡΠ°ΠΉΡΠ° Oracle.
ΠΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ JRE, Ρ Π½Π°Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Java, Π±Π΅Π· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΠ°ΠΌΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ JRE — ΡΡΠΎ JRE 7. Π‘ΠΊΠ°ΡΠ°ΡΡ JRE 7 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ http://www.oracle.com/technetwork/Java/Javase/downloads/
ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ JRE ΠΏΠΎΠ΄ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ (ΡΠΈΡΡΠ½ΠΎΠΊ 1.1).
Π ΠΈΡΡΠ½ΠΎΠΊ 1.1 — ΠΡΠ±ΠΎΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ JRE 7
1.2 Java Development Kit
Java Development Kit — Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Oracle Corporation (ΡΠ°Π½Π΅Π΅ Sun Microsystems) ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Java, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ Π² ΡΠ΅Π±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Java (Javac), ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Java, ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Java (JRE). ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ°ΡΠ°ΡΡ JRE ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ — Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ JDK.
Π‘Π°ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ JDK ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ http://www.oracle.com/technetwork/Java/Javase/downloads/jdk7-downloads-1 880 260.html. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΡ ΠΠ‘ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΡΠΈΡΡΠ½ΠΎΠΊ 1.2)
Π ΠΈΡΡΠ½ΠΎΠΊ 1.2 — ΠΡΠ±ΠΎΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ JDK 7
1.3 ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Java API
Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π°ΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΠ± API, ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΡΠ°ΡΡΡΡ Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² JDK. ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ HTML. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ http://docs.oracle.com/Javase/6/docs/api/ ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Java API.
ΠΠΊΠ½ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΎ Π½Π° ΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ°. Π Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΡΠ΅ΠΉΠΌΠ΅ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠΎΠ΄ Π½ΠΈΠΌ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ΅ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ. (ΡΠΈΡΡΠ½ΠΎΠΊ 1.3). ΠΡΠ»ΠΈ ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΌ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΡΠ΅ΠΉΠΌΠ΅, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠΏΡΠ°Π²Π° (ΡΠΈΡΡΠ½ΠΎΠΊ 1.4).
Π ΠΈΡΡΠ½ΠΎΠΊ 1.3 — ΠΠΊΠ½ΠΎ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ API
Π ΠΈΡΡΠ½ΠΎΠΊ 1.5 — ΠΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°ΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Java API, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ http://www.oracle.com/technetwork/Java/Javase/documentation/Java-se-7-doc-download-435 117.html.
2. Π‘ΡΠ΅Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Ρ Π½ΡΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²ΡΠ΅ΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΠ΄Π΅ΡΡ Π΄Π²Π° ΠΏΡΡΠΈ: Π»ΠΈΠ±ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ JDK Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±Π° ΡΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°.
2.1 ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² — ΡΡΠΎ Π²Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π²Π΅ΡΡΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Java — ΠΊΠΎΠ΄ Π² Π±Π°ΠΉΡ — ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΡ Π±Π°ΠΉΡ — ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
1. Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π½Π°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ *.java (ΡΠΈΡΡΠ½ΠΎΠΊ 2.1).
2. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΠΈ Π²Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ Java — ΠΊΠΎΠ΄ΠΎΠΌ (ΡΠΈΡΡΠ½ΠΎΠΊ 2.2).
3. ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Javac, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Java — ΠΊΠΎΠ΄ Π² Π±Π°ΠΉΡ — ΠΊΠΎΠ΄ (ΡΠΈΡΡΠ½ΠΎΠΊ 2.3).
4. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π±Π°ΠΉΡ ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Java (ΡΠΈΡΡΠ½ΠΎΠΊ 2.4).
Π ΠΈΡΡΠ½ΠΎΠΊ 2.1 — Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π ΠΈΡΡΠ½ΠΎΠΊ 2.2 — ΠΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π ΠΈΡΡΠ½ΠΎΠΊ 2.3 — ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Π±Π°ΠΉΡ — ΠΊΠΎΠ΄ Π ΠΈΡΡΠ½ΠΎΠΊ 2.4 — ΠΠ°ΠΏΡΡΠΊ Π±Π°ΠΉΡ — ΠΊΠΎΠ΄Π° ΠΠ΅ΡΠΎΠ΄ Ρ ΠΎΡΠΎΡΠΈΠΉ, Π½ΠΎ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΌΠ°Π»ΠΎΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ. ΠΠ»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ — ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π²Π΅ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡ — ΠΊΠΎΠ΄. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
2.2 Java IDE
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Java ΠΊΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π·Π°Π½ΡΡΠΈΠ΅ΠΌ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠ΅Π΅ ΡΠΌΠ΅Π½ΠΈΠ΅. ΠΡΠΏΠΎΠ»Π½ΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ°Π³ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ JDK ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅ — Π»ΠΈΠ±ΠΎ IDE (integrated development environment), Π½Π°ΡΡΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Java JDK ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ°Π³ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ΅Π΄Ρ ΡΡΠ°Π»ΠΈ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΡΠ½Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½Ρ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π° ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π±Π΅Π· Π½ΠΈΡ . Π‘Π°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ IDE Π΄Π»Ρ Java Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ — ΡΡΠΎ: Eclipse, NetBeans ΠΈ IDEA. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π΄ Π΄ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠ²ΠΎΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ. ΠΠΈΡΠ½ΠΎ Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° IDE Eclipse ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ Π²Π΅ΡΡΠΌΠ° ΡΠ΄ΠΎΠ±Π½ΡΠ΅ Π³ΠΎΡΡΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΠΎΠ΄ Π½Π΅Π΅ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊΠ°Ρ ΠΊΡΡΠΏΠ½Π°Ρ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ Google Π»ΠΈΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π»Π° Π΄Π»Ρ Eclipse Π½Π΅ΠΌΠ°Π»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ ΠΠ‘ Android, Π»ΡΡΡΡΡ IDE Π½Π°ΠΉΡΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ — Π΄Π»Ρ Eclipse Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΌΠΎΡΠ½ΡΠΉ Android SDK, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Android ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΡ IDE, ΡΡΠΎΠΈΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ http://www.eclipse.org/downloads/ ΠΈ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ (ΡΠΈΡΡΠ½ΠΎΠΊ 2.5).
Π ΠΈΡΡΠ½ΠΎΠΊ 2.5 — ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Eclipse
ΠΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, Π²ΡΠ±ΠΎΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊ. ΠΠ»Ρ ΡΠ²ΠΎΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ, Ρ Π²ΡΠ±ΡΠ°Π» ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Eclipse Standart. ΠΠ°Π»Π΅Π΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ (ΡΠΈΡΡΠ½ΠΎΠΊ 2.6) ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ.
Π ΠΈΡΡΠ½ΠΎΠΊ 2.6 — ΠΡΠ±ΠΎΡ Π½ΡΠΆΠ½ΠΎΠΉ ΠΠ‘ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
3. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ 2d — ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΡΠ°Π΅ΡΠ³ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ. ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ — ΡΡΠΎ ΠΈΠ»Π»ΡΠ·ΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠ΅Π² Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΏΡΡΠ΅ΠΌ Π±ΡΡΡΡΠΎΠΉ ΡΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠΈΠ·ΠΈΠΊΠ° ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ — ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π±ΡΡΡΡΠ°Ρ ΡΠΌΠ΅Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΈΠ»Π»ΡΠ·ΠΈΡ ΠΏΡΡΠΆΠΊΠΎΠ², Ρ ΠΎΠ΄ΡΠ±Ρ, Π°ΡΠ°ΠΊ ΠΈ Ρ. Π΄. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΈ «ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΉ 2d Π³ΡΠ°ΡΠΈΠΊΠΈ, ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Ρ Π·Π°ΡΡΠΎΠ½Ρ Π½ΠΈΠΆΠ΅.
3.1 ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ Π½Π° Java SE, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 2 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠΌΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
Π‘Π°ΠΌΡΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ — ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Swing ΡΠ°ΠΉΠΌΠ΅ΡΠ°. ΠΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ, Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Java ΠΈΠ³Ρ. ΠΠ»Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°Ρ ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΠ·Π°Π½ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Action Listener ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° — Action Performed. ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΡΠ°Π²Π΄Π°, Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ Action Listener. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ.
Π‘Π°ΠΌ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄: Timer (int interval, ActionListener listener).
ΠΠ°Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ listener. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ interval.
ΠΠ΅ΡΠΎΠ΄ start () Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ actionPerformed () Π΅Π³ΠΎ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ΅ΡΠΎΠ΄ stop () ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ. ΠΠΎΡΠ»Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΠΌΠ΅ΡΠΎΠ΄ actionPerformed () ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ.
3.2 ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π‘Π°ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ — ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Java ΠΏΠΎΡΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ»Π°ΡΡΠΎΠΌ Thread (ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ Java.lang.Thread), Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ Thread. ΠΡΡΡ Π΄Π²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°:
ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Thread;
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Runnable (ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ Java.lang.Runnable).
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
Π£ ΠΊΠ»Π°ΡΡΠ° Thread Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡΠΈΡΠΌΠΎΠ², ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π½Π° ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅, ΡΠΎ Π΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ , Π½Π΅ ΠΈΠΌΠ΅Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Thread, ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Runnable Π²ΠΌΠ΅ΡΡΠΎ Thread.
Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠ΄Π°Π» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π² ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ· Π½ΠΈΡ yield (). Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ — sleep (), ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠ΅Π½Ρ Π½ΡΠΆΠ½ΡΠΉ, Π΅ΡΠ»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ ΡΠ°ΡΡΠΎ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈΠ»ΠΈ Π² ΠΌΠΈΠ½ΡΡΡ. ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΡΠ»ΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄.
ΠΠ°ΠΆΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΆΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°:
Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ;
Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π§ΡΠΎΠ±Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΈΠΊΠ»Π°. Π§ΡΠΎΠ±Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ join () ΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠΊΠ° ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΉΠ΄Π΅Π½.
3.3 Frame Per Second ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π‘Π°ΠΌΡΠΉ Π»Π΅Π³ΠΊΠΈΠΉ ΠΏΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Java — ΠΈΠ³ΡΡ — ΡΡΠΎ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ. Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ². Π‘Π°ΠΌΡΠΉ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ — ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ°Π·ΡΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π² ΠΈΠ³ΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ.Π½. ΠΊΠ°Π΄ΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° (FPS) — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΊΠ°Π΄ΡΠΎΠ² Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅. ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΊΠ°Π΄ΡΠΎΠ²Π°Ρ ΡΠ°ΡΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΡΡΠ΅Π½ΠΈΡ ΠΏΠ»Π°Π²Π½ΠΎΡΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 12—18 ΠΊΠ°Π΄ΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. FPS ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. ΠΠ°Π²ΠΎΠ΄ΠΈΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ 2 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: Π±Π°Π·ΠΎΠ²ΡΠΉ FPS ΠΈ FPS Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΡΠΎΡΠΎΠΉ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ 1000 / FPS, ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ°Π·ΡΡΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ — 1 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°
2. ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠΊΠ», ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ Π²Ρ ΠΎΠ΄Π° (startTime).
3. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ΠΌΡ, Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (ΡΠ°Π·Π½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ startTime).
4. ΠΡΠΆΠ½Π°Ρ Π½Π°ΠΌ Π²Π΅Π»ΠΈΡΠΈΠ½Π° — ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ wait, Ρ ΡΠ°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ (Π²Π²Π΅ΡΡΠΈ Π² ΡΠΎΠ½). ΠΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π·Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ FPS ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΡΠΌ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ, Π½Π΅ ΠΎΠΏΠ°ΡΠ°ΡΡΡ, ΠΏΠΎΡΠ΅ΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ «ΠΏΠΎΠ΄Π²ΠΈΡΠ°Π½ΠΈΠΉ» ΠΈΠ³ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
private int FPS = 100;
private long targetTime = 1000 / FPS;
while (running) {
start = System. nanoTime ();
update ();
draw ();
elapsed = System. nanoTime () — start;
wait = targetTime — elapsed / 1 000 000;
if (wait < 0)
wait = 5;
try {
Thread.sleep (wait);
} catch (Exception e) {
e.printStackTrace ();
}
}
3.4 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΠ°, Π²ΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΠΊΠ½ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (Ρ.Π΅. ΠΎΠΊΠ½ΠΎ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ΡΡ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°) Π² ΡΠ·ΡΠΊΠ΅ Java Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠΎΠΌ (frame). Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ AWT Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΊΠ»Π°ΡΡ Frame. Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Swing Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ JFrame. ΠΠ»Π°ΡΡ
JFrame ΡΠ°ΡΡΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ Frame ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Swing, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π½Π° Ρ ΠΎΠ»ΡΡΠ΅ (canvas).
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ΅ΠΉΠΌ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ — 0×0 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΡΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ setSize (int width, int height). Π Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ — ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΊΡΠΎΠ΅Ρ ΡΡΠ΅ΠΉΠΌ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π°:
frame. setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π²ΡΡΡΠ½ΡΡ, Ρ.ΠΊ. ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ.
Π ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ (true), ΠΈΠ½Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ :
setVisible (boolean vis);
ΠΠΊΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ, Π½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΎΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ΄ΠΎΠ±Π½ΡΡ — ΡΡΠΎ JPanel. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ JPanel, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
Π‘Π°ΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² Π½Π°Ρ ΡΡΠ΅ΠΉΠΌ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° setContentPane (contentPane obj)
3.5 ΠΠ΅ΡΠΎΠ΄Ρ update () ΠΈ draw ()
ΠΠ°Π½Π½ΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ³ΡΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ «ΡΠΈΡΡΠΎΡΡ» ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ update ΠΈ draw. Update Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°. Update ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡΠ΅ΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΠ΅. Π£ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, Π·Π° Π΄Π΅Π»ΠΎ Π±Π΅ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ draw, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ draw Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ΠΈ ΡΠΆΠ΅ ΡΠ°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Graphics — drawImage. ΠΠΎΡΠΎΠΊ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ FPS, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΈ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ «ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ» ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ΄Π΅ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΡ. ΠΠ΅Π»ΡΠ·Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ draw ΠΏΠ΅ΡΠ΅Π΄ update, Ρ.ΠΊ. Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΠ°ΡΡΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
3.6 Game State Manager
GameStateManager — Π°Π±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ° Π² ΠΈΠ³ΡΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ update ΠΈ draw Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ΠΈΠ³ΡΡ. Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π΅Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΊΠ»Π°ΡΡ GameStateManager, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄Π²Π° ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΠΎΠ»Ρ — ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ currentState ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² gameStates Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° GameState, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ draw, update, init, keyPressed, keyReleased. Π ΠΌΠ°ΡΡΠΈΠ²Π΅ gameStates ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ³ΡΡ (ΠΠ΅Π½Ρ, Π£ΡΠΎΠ²Π΅Π½Ρ1, ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ Ρ. Π΄.). currentState — ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ³ΡΡ ΡΠ΅ΠΉΡΠ°Ρ Π°ΠΊΡΠΈΠ²Π΅Π½. ΠΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ update ΠΈ draw ΠΎΠ±ΡΠ΅ΠΊΡΠ° GameStateManager, Π² ΠΊΠΎΡΠΎΡΡΡ , Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΡΡΠΈ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠΆΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° gameStates, Π²ΡΠ·ΡΠ²Π°ΡΡΡ ΡΠΆΠ΅ ΠΈΠ· ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’. Π΅. ΠΎΠ±ΡΠ΅ΠΊΡ GameStateManager Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π°ΠΏΡΡΠΌΡΡ Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΈΠ³ΡΡ, Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ gameStates, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ, ΡΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΌ ΡΠ²ΠΎΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π±Ρ, ΠΈΠ»ΠΈ Π½Π΅ ΠΎΡΡΠΈΡΡΠ΅Ρ Π½ΡΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΡΠΈΡΡΠ½ΠΎΠΊ 3.1).
Π ΠΈΡΡΠ½ΠΎΠΊ 3.1 — Π‘Ρ Π΅ΠΌΠ° GSM
3.7 Π‘ΠΎΠ±ΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΠ°ΠΊ ΠΈ Ρ update ΠΈ draw, ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡ GameStateManager. Π‘Π°ΠΌΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ — ΡΡΠΎ keyEvent. ΠΠ½ΠΎ ΠΆΠ΅ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· GameStateManager Π² Π½ΡΠΆΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π», Π³Π΄Π΅ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ :
public void keyPressed (keyEvent key) {
if (key == VK_ENTER)
System.out.printl («The enter was pressed»);
}
ΠΠ»Ρ ΡΠ»ΡΡΠ°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ KeyListener, ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΌΡΡΠΎΠ΄Ρ keyPressed (keyEvent) (ΠΊΠ»Π°Π²ΠΈΡΠ° Π½Π°ΠΆΠ°ΡΠ°) ΠΈ keyReleased (keyEvent) (ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΎΡΠΏΡΡΠ΅Π½Π°). keyEvent — ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (ΡΠΈΡΡΠ½ΠΎΠΊ 3.2).
Π ΠΈΡΡΠ½ΠΎΠΊ 3.2 — Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠ»Π°Π²ΠΈΡΠ°ΠΌΠΈ Π² GSM
4. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΠΡΠ°ΡΠΈΠΊΡ Π² Java ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ Graphics ΠΈ Graphics2D. Π Π°Π±ΠΎΡΠ° Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Component. ΠΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ: Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, JFrame, JPanel, JButton ΠΈ Π΄ΡΡΠ³ΠΈΡ , Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°ΡΡ. Π’Π°ΠΊΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ, Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΌΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌ. ΠΡΡ, ΡΡΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅. ΠΠ»Π°ΡΡΡ Graphics ΠΈ Graphics2D Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ paint:
public void paint (Graphics g);
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Component. ΠΡΠ³ΡΠΌΠ΅Π½Ρ Graphics g ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, Π° ΠΌΡ Π±Π΅ΡΡΠΌ Π΅Π³ΠΎ Π² Π³ΠΎΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ paint Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
4.1 ΠΡΡΠΌΠ°Ρ Π»ΠΈΠ½ΠΈΡ ΠΠ΅ΡΠΎΠ΄ drawLine ΠΊΠ»Π°ΡΡΠ° Graphics Π½Π°ΡΠ΅ΡΡΠΈΡ ΠΏΡΡΠΌΡΡ Π»ΠΈΠ½ΠΈΡ:
g.drawLine (x1, y1, x2, y2);
ΠΠ΄Π΅ΡΡ x1 ΠΈ y2 — ΡΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x ΠΈ y Π½Π°ΡΠ°Π»Π° Π»ΠΈΠ½ΠΈΠΈ, x2 ΠΈ y2 — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΠ½ΡΠ° Π»ΠΈΠ½ΠΈΠΈ.
4.2 Π¦Π²Π΅Ρ ΠΠ΅ΡΠΎΠ΄ setColor ΠΊΠ»Π°ΡΡΠ° Graphics ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ²Π΅Ρ:
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° new Color (0, 0, 255) — ΡΡΠΎ ΠΊΡΠ°ΡΠ½ΡΠΉ, Π·Π΅Π»ΡΠ½ΡΠΉ ΠΈ ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (rgb). ΠΠ°ΠΊ Π·Π°Π΄Π°ΡΡ rgb ΡΠ²Π΅ΡΠ°? Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°Π΄Π°Π½ ΡΠΈΡΡΠΎ ΡΠΈΠ½ΠΈΠΉ ΡΠ²Π΅Ρ, Ρ.ΠΊ. Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ. ΠΠΎΡ ΠΊΡΠ°ΡΠ½ΡΠΉ ΠΈ Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ²Π΅ΡΠ°:
Color newColor = new Color (255, 0, 0);
Color newColor = new Color (0, 255, 0);
4.3 Π¦Π²Π΅Ρ ΡΠΎΠ½Π° ΠΠ°Π΄Π°ΡΡ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ setBackground:
mainFrame.setBackground (Color.white);
4.4 ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ drawRect ΠΊΠ»Π°ΡΡΠ° Graphics, Π³Π΄Π΅ x1, y1 — ΡΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°;
x2, y2 — Π²ΡΡΠΎΡΠ° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°:
g.drawRect (x1, y1, x2, y2);
4.5 ΠΠ²Π°Π» ΠΠ΅ΡΠΎΠ΄ΠΎΠΌ drawOval ΠΊΠ»Π°ΡΡΠ° Graphics ΡΠΈΡΡΠ΅ΡΡΡ ΠΎΠ²Π°Π»:
g.drawOval (20, 110, 150, 60);
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΈΡΠ°Π½ ΠΎΠ²Π°Π».
4.6 ΠΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΠ΅ΡΠΎΠ΄ΠΎΠΌ drawPolygon ΠΊΠ»Π°ΡΡΠ° Graphics:
int[] arrayX = {20, 100, 100, 250, 250, 20, 20, 50};
int[] arrayY = {180, 180, 200, 200, 220, 200, 200, 190};
Polygon poly = new Polygon (arrayX, arrayY, 8);
g.drawPolygon (poly);
ΠΠ΄Π΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Polygon. arrayX — ΡΡΠΎ Ρ -ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²Π΅ΡΡΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, arrayY — ΡΡΠΎ y-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²Π΅ΡΡΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, 8 — ΡΠΈΡΠ»ΠΎ Π²Π΅ΡΡΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°.
4.7 ΠΠ±ΡΠ΅ΠΊΡ ΡΠΎΡΠΊΠΈ ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Point:
Point aPoint = new Point (50, 190);
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ — ΡΡΠΎ x, y ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ.
4.8 ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ Graphics2D. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Graphics2D Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ΄Π΅Π»Π°Π½ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ. Π‘Π°ΠΌΡΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄ — ΡΡΠΎ ΡΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ Graphics:
Graphics2D g2 = (Graphics2D) g;
Π£ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Graphics2D ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ — drawImage (), ΠΊΠΎΡΠΎΡΡΠΉ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈ ΡΠΈΡΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½. Π ΠΏΡΠΈΠΌΠ΅ΡΡ:
g2.drawImage (image, 0, 0, width, height, null);
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π Ρ ΠΎΠ΄Π΅ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Java. Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ³ΡΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π²Π΅ΡΡΠΌΠ° ΡΠ΄ΠΎΠ±Π½Π°Ρ ΠΈΠ³ΡΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° GameStateManager, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΠΈΠ³ΡΠΎΠ²ΡΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»Π°ΠΌΠΈ. Π ΠΈΡΠΎΠ³Π΅, Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½ΡΡ Π½Π°Π²ΡΠΊΠΎΠ², Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π Ρ ΠΎΠ΄Π΅ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ, ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆ ΡΠΎΠ²Π΅ΡΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: Ρ ΠΎΠ΄ΡΠ±Π°, ΠΏΡΡΠΆΠΎΠΊ, ΠΏΠΎΠ»Π΅Ρ, ΡΠ΄Π°Ρ ΡΡΠΊΠΎΠΉ, ΡΡΡΠ΅Π»ΡΠ±Π°. Π£ΡΠΎΠ²Π½ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. ΠΠ΅ΡΡΠΎΠ½Π°ΠΆ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΉΡΠΈ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΡΠΎΠ²Π½Ρ, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΡΡ ΡΠΎ ΡΡΠ΅Π½Π°ΠΌΠΈ, ΠΏΠΎΡΠΎΠ»ΠΊΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΠΎΠΌ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ .gif, .jpg ΠΈ .png ΡΠ°ΠΉΠ»Ρ. Π’Π°ΠΊΠΆΠ΅ ΡΠ°ΠΉΠ» ΡΡΠΎΠ²Π½Π΅ΠΉ .map, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠΈΡΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ «ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈ» ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° titles.
ΠΠ³ΡΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²: GameState, Entity, Main, TileMap. GameState — ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΠΈΠ³ΡΡ. Π Entity Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ ΠΈΠ³ΡΡ ΠΈ ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° Main Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π·Π°ΠΏΡΡΠΊ ΠΈΠ³ΡΡ, ΠΈΠ΄Π΅Ρ ΠΏΠΎΠ»Π½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅ΠΉΠΌΠ° Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡ ΠΏΠ°Π½Π΅Π»ΠΈ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΡΡΡΠ΄Π° Π±Π΅ΡΡΡ ΡΠ²ΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΠΏΠΎΡΠΎΠΊΠΈ. Π ΠΏΠ°ΠΊΠ΅ΡΠ΅ TileMap ΠΈΠ΄Π΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΊΠ°ΡΡΡ, Π΅Π΅ ΠΏΡΠΎΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠΎΠ½ΠΎΠΌ.
ΠΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΡΡ desktop — ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° JVM. ΠΠ°ΠΏΡΡΠΊ ΠΈΠ΄Π΅Ρ ΠΈΠ· jar ΡΠ°ΠΉΠ»Π°. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² Π²Π΅Π± ΠΈ Π½Π° ΠΠ‘ Android.
ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ java ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
Andrew Davison, Killer Game Programming in Java — «O'Reilly Media», ΠΠ°ΠΉ 2005, — 998 c.
Java2. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Π° Π’ΠΎΠΌ 1. ΠΡΠ½ΠΎΠ²Ρ, 8 — Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ — «Sun microsystems», 2010 — 820 c.
ΠΠΊΠΊΠ΅Π»Ρ, Π. Π€ΠΈΠ»ΠΎΡΠΎΡΠΈΡ Java. / Π. ΠΠΊΠΊΠ΅Π»Ρ. — Π‘ΠΠ±.: ΠΠΈΡΠ΅Ρ, 2001. — 880 Ρ.
Π¨ΠΈΠ»Π΄Ρ, Π. ΠΡΠΊΡΡΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° JAVA / Π. Π¨ΠΈΠ»Π΄Ρ, ΠΠΆ. Π₯ΠΎΠ»ΠΌΡ. — Π.: ΠΠΈΠ»ΡΡΠΌΡ, 2005. — 331 Ρ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Game ΠΏΠ°ΠΊΠ΅ΡΠ° Main
package Main;
import javax.swing.JFrame;
public class Game {
public static void main (String[] args) {
JFrame window = new JFrame («Game»);
window.setContentPane (new GamePanel ());
window.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
window.setResizable (false);
window.pack ();
window.setVisible (true);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° GamePanel ΠΏΠ°ΠΊΠ΅ΡΠ° Main
package Main;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import javax.swing.JPanel;
import GameState. GameStateManager;
@SuppressWarnings («serial»)
public class GamePanel extends JPanel implements Runnable, KeyListener {
// ΡΠ°Π·ΠΌΠ΅ΡΡ
public static final int WIDTH = 800;
public static final int HEIGHT = 600;
public static final int SCALE = 2;
// ΠΏΠΎΡΠΎΠΊ
private Thread thread;
private boolean running;
private int FPS = 100;
private long targetTime = 1000 / FPS;
// ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
private BufferedImage image;
private Graphics2D g;
// game state manager
private GameStateManager gsm;
public GamePanel () {
super ();
setPreferredSize (new Dimension (WIDTH * SCALE, HEIGHT * SCALE));
setFocusable (true);
requestFocus ();
}
public void addNotify () {
super.addNotify ();
if (thread == null) {
thread = new Thread (this);
addKeyListener (this);
thread.start ();
}
}
private void init () {
image = new BufferedImage (WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) image. getGraphics ();
running = true;
gsm = new GameStateManager ();
}
public void run () {
init ();
long start;
long elapsed;
long wait;
// game loop
while (running) {
start = System. nanoTime ();
update ();
draw ();
drawToScreen ();
elapsed = System. nanoTime () — start;
wait = targetTime — elapsed / 1 000 000;
if (wait < 0)
wait = 5;
try {
Thread.sleep (wait);
} catch (Exception e) {
e.printStackTrace ();
}
}
}
private void update () {
gsm.update ();
}
private void draw () {
gsm.draw (g);
}
private void drawToScreen () {
Graphics g2 = getGraphics ();
g2.drawImage (image, 0, 0, WIDTH * SCALE, HEIGHT * SCALE, null);
g2.dispose ();
}
public void keyTyped (KeyEvent key) {
}
public void keyPressed (KeyEvent key) {
gsm.keyPressed (key.getKeyCode ());
}
public void keyReleased (KeyEvent key) {
gsm.keyReleased (key.getKeyCode ());
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° GameState ΠΏΠ°ΠΊΠ΅ΡΠ° GameState
package GameState;
public abstract class GameState {
protected GameStateManager gsm;
public abstract void init ();
public abstract void update ();
public abstract void draw (Java.awt.Graphics2D g);
public abstract void keyPressed (int k);
public abstract void keyReleased (int k);
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° GameStateManager ΠΏΠ°ΠΊΠ΅ΡΠ° GameState
package GameState;
import java.util.ArrayList;
public class GameStateManager {
private GameState[] gameStates;
private int currentState;
public static final int NUMGAMESTATES = 2;
public static final int MENUSTATE = 0;
public static final int LEVEL1STATE = 1;
public GameStateManager () {
gameStates = new GameState[NUMGAMESTATES];
currentState = MENUSTATE;
loadState (currentState);
}
private void loadState (int state) {
if (state == MENUSTATE)
gameStates[state] = new MenuState (this);
if (state == LEVEL1STATE)
gameStates[state] = new Level1State (this);
}
private void unloadState (int state) {
gameStates[state] = null;
}
public void setState (int state) {
unloadState (currentState);
currentState = state;
loadState (currentState);
//gameStates[currentState]. init ();
}
public void update () {
try {
gameStates[currentState]. update ();
} catch (Exception e) {}
}
public void draw (Java.awt.Graphics2D g) {
try {
gameStates[currentState]. draw (g);
} catch (Exception e) {}
}
public void keyPressed (int k) {
gameStates[currentState]. keyPressed (k);
}
public void keyReleased (int k) {
gameStates[currentState]. keyReleased (k);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Level1State ΠΏΠ°ΠΊΠ΅ΡΠ° GameState
package GameState;
import Main. GamePanel;
import TileMap.*;
import Entity.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
public class Level1State extends GameState {
private TileMap tileMap;
private Background bg;
private Player player;
private ArrayList explosions;
private HUD hud;
public Level1State (GameStateManager gsm) {
this.gsm = gsm;
init ();
}
public void init () {
tileMap = new TileMap (30);
tileMap.loadTiles («/Tilesets/grasstileset2.gif»);
tileMap.loadMap («/Maps/level1.map»);
tileMap.setPosition (0, 0);
tileMap.setTween (1);
bg = new Background («/Backgrounds/back.gif», 0.1);
player = new Player (tileMap);
player.setPosition (100, 100);
explosions = new ArrayList ();
hud = new HUD (player);
}
public void update () {
// ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°
player.update ();
tileMap.setPosition (
GamePanel.WIDTH / 2 — player. getx (),
GamePanel.HEIGHT / 2 — player. gety ()
);
// ΡΠΎΠ½
bg.setPosition (tileMap.getx (), tileMap. gety ());
// ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π·ΡΡΠ²ΠΎΠ²
for (int i = 0; i < explosions. size (); i++) {
explosions.get (i).update ();
if (explosions.get (i).shouldRemove ()) {
explosions.remove (i);
i—;
}
}
}
public void draw (Graphics2D g) {
// Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ½
bg.draw (g);
// Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΡΡΡ
tileMap.draw (g);
// Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°
player.draw (g);
// Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π·ΡΡΠ²
for (int i = 0; i < explosions. size (); i++) {
explosions.get (i).setMapPosition (
(int)tileMap.getx (), (int)tileMap.gety ());
explosions.get (i).draw (g);
}
//Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°Π½Π΅Π»Ρ Π·Π΄ΠΎΡΠΎΠ²ΡΡ
hud.draw (g);
}
public void keyPressed (int k) {
if (k == KeyEvent. VK_LEFT) player. setLeft (true);
if (k == KeyEvent. VK_RIGHT) player. setRight (true);
if (k == KeyEvent. VK_UP) player. setUp (true);
if (k == KeyEvent. VK_DOWN) player. setDown (true);
if (k == KeyEvent. VK_W) player. setJumping (true);
if (k == KeyEvent. VK_E) player. setGliding (true);
if (k == KeyEvent. VK_R) player. setScratching ();
if (k == KeyEvent. VK_F) player. setFiring ();
}
public void keyReleased (int k) {
if (k == KeyEvent. VK_LEFT) player. setLeft (false);
if (k == KeyEvent. VK_RIGHT) player. setRight (false);
if (k == KeyEvent. VK_UP) player. setUp (false);
if (k == KeyEvent. VK_DOWN) player. setDown (false);
if (k == KeyEvent. VK_W) player. setJumping (false);
if (k == KeyEvent. VK_E) player. setGliding (false);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° MenuState ΠΏΠ°ΠΊΠ΅ΡΠ° GameState
package GameState;
import TileMap. Background;
import java.awt.*;
import java.awt.event.KeyEvent;
public class MenuState extends GameState {
private Background bg;
private int currentChoice = 0;
private String[] options = { «Start», «Help», «Quit» };
private Color titleColor;
private Font titleFont;
private Font font;
public MenuState (GameStateManager gsm) {
this.gsm = gsm;
try {
bg = new Background («/Backgrounds/back.jpg», 1);
bg.setVector (-0.2, 0);
titleColor = new Color (128, 0, 0);
titleFont = new Font («Charlemagne Std», Font. PLAIN, 28);
font = new Font («Charlemagne Std», Font. PLAIN, 12);
} catch (Exception e) {
e.printStackTrace ();
}
}
public void init () {
}
public void update () {
bg.update ();
}
public void draw (Graphics2D g) {
bg.draw (g);
g.setColor (titleColor);
g.setFont (titleFont);
g.drawString («Student dragon», 200, 90);
g.setFont (font);
for (int i = 0; i < options. length; i++) {
if (i == currentChoice) {
g.setColor (Color.BLACK);
} else {
g.setColor (Color.RED);
}
g.drawString (options[i], 324, 140 + (int) (i * 15 * 1.2));
}
}
private void select () {
if (currentChoice == 0) {
gsm.setState (GameStateManager.LEVEL1STATE);
}
if (currentChoice == 1) {
// help
}
if (currentChoice == 2) {
System.exit (0);
}
}
public void keyPressed (int k) {
if (k == KeyEvent. VK_ENTER) {
select ();
}
if (k == KeyEvent. VK_UP) {
currentChoice—;
if (currentChoice == -1) {
currentChoice = options. length — 1;
}
}
if (k == KeyEvent. VK_DOWN) {
currentChoice++;
if (currentChoice == options. length) {
currentChoice = 0;
}
}
}
public void keyReleased (int k) {
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Background ΠΏΠ°ΠΊΠ΅ΡΠ° TileMap
package TileMap;
import Main. GamePanel;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
public class Background {
private BufferedImage image;
private double x;
private double y;
private double dx;
private double dy;
private double moveScale;
public Background (String s, double ms) {
try {
image = ImageIO. read (
getClass ().getResourceAsStream (s)
);
moveScale = ms;
}
catch (Exception e) {
e.printStackTrace ();
}
}
public void setPosition (double x, double y) {
this.x = (x * moveScale) % GamePanel. WIDTH;
this.y = (y * moveScale) % GamePanel. HEIGHT;
}
public void setVector (double dx, double dy) {
this.dx = dx;
this.dy = dy;
}
public void update () {
x += dx;
y += dy;
}
public void draw (Graphics2D g) {
g.drawImage (image, (int)x, (int)y, null);
if (x < 0) {
g.drawImage (
image,
(int)x + GamePanel. WIDTH,
(int)y,
null
);
}
if (x > 0) {
g.drawImage (
image,
(int)x — GamePanel. WIDTH,
(int)y,
null
);
}
if (x <= -GamePanel.WIDTH) {
x += GamePanel. WIDTH;
}}}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Tile ΠΏΠ°ΠΊΠ΅ΡΠ° TileMap
import java.awt.image.BufferedImage;
public class Tile {
private BufferedImage image;
private int type;
// ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ²
public static final int NORMAL = 0;
public static final int BLOCKED = 1;
public Tile (BufferedImage image, int type) {
this.image = image;
this.type = type;
}
public BufferedImage getImage () { return image; }
public int getType () { return type; }
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° TileMap ΠΏΠ°ΠΊΠ΅ΡΠ° TileMap
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import Main. GamePanel;
public class TileMap {
// ΠΏΠΎΠ·ΠΈΡΠΈΡ
private double x;
private double y;
// Π³ΡΠ°Π½ΠΈΡΡ
private int xmin;
private int ymin;
private int xmax;
private int ymax;
private double tween;
// ΠΊΠ°ΡΡΠ°
private int[][] map;
private int tileSize;
private int numRows;
private int numCols;
private int width;
private int height;
// ΡΠ°ΠΉΠ»Ρ
private BufferedImage tileset;
private int numTilesAcross;
private Tile[][] tiles;
// ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
private int rowOffset;
private int colOffset;
private int numRowsToDraw;
private int numColsToDraw;
public TileMap (int tileSize) {
this.tileSize = tileSize;
numRowsToDraw = GamePanel. HEIGHT / tileSize + 2;
numColsToDraw = GamePanel. WIDTH / tileSize + 2;
tween = 0.07;
}
public void loadTiles (String s) {
try {
tileset = ImageIO. read (getClass ().getResourceAsStream (s));
numTilesAcross = tileset. getWidth () / tileSize;
tiles = new Tile[2][numTilesAcross];
BufferedImage subimage;
for (int col = 0; col < numTilesAcross; col++) {
subimage = tileset. getSubimage (col * tileSize, 0, tileSize, tileSize);
tiles[0][col] = new Tile (subimage, Tile. NORMAL);
subimage = tileset. getSubimage (col * tileSize,
tileSize, tileSize, tileSize);
tiles[1][col] = new Tile (subimage, Tile. BLOCKED);
}
} catch (Exception e) {
e.printStackTrace ();
}
}
public void loadMap (String s) {
try {
InputStream in = getClass ().getResourceAsStream (s);
BufferedReader br = new BufferedReader (
new InputStreamReader (in)
);
numCols = Integer. parseInt (br.readLine ());
numRows = Integer. parseInt (br.readLine ());
map = new int[numRows][numCols];
width = numCols * tileSize;
height = numRows * tileSize;
xmin = GamePanel. WIDTH — width — 100;
xmax = 0;
ymin = GamePanel. HEIGHT — height;//here
ymax = 0;
String delims = «\s+» ;
for (int row = 0; row < numRows; row++) {
String line = br. readLine ();
String[] tokens = line. split (delims);
for (int col = 0; col < numCols; col++) {
map[row][col] = Integer. parseInt (tokens[col]);
}
}
} catch (Exception e) {
e.printStackTrace ();
}
}
public int getTileSize () {
return tileSize;
}
public double getx () {
return x;
}
public double gety () {
return y;
}
public int getWidth () {
return width;
}
public int getHeight () {
return height;
}
public int getType (int row, int col) {
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
return tiles[r][c]. getType ();
}
public void setTween (double d) {
tween = d;
}
public void setPosition (double x, double y) {
this.x += (x — this. x) * tween;
this.y += (y — this. y) * tween;
fixBounds ();
colOffset = (int) -this.x / tileSize;
rowOffset = (int) -this.y / tileSize;
}
private void fixBounds () {
if (x < xmin)
x = xmin;
if (y < ymin)
y = ymin;
if (x > xmax)
x = xmax;
if (y > ymax)
y = ymax;
}
public void draw (Graphics2D g) {
for (int row = rowOffset; row < rowOffset + numRowsToDraw; row++) {
if (row >= numRows)
break;
for (int col = colOffset; col < colOffset +
numColsToDraw; col++)
{
if (col >= numCols)
break;
if (map[row][col] == 0)
continue;
int rc = map[row][col];
int r = rc / numTilesAcross;
int c = rc % numTilesAcross;
g.drawImage (tiles[r][c]. getImage (),
(int) x + col * tileSize,
(int) y + row * tileSize, null);
}
}
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Animation ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import java.awt.image.BufferedImage;
public class Animation {
private BufferedImage[] frames;
private int currentFrame;
private long startTime;
private long delay;
private boolean playedOnce;
public Animation () {
playedOnce = false;
}
public void setFrames (BufferedImage[] frames) {
this.frames = frames;
currentFrame = 0;
startTime = System. nanoTime ();
playedOnce = false;
}
public void setDelay (long d) {
delay = d;
}
public void setFrame (int i) {
currentFrame = i;
}
public void update () {
if (delay == -1)
return;
long elapsed = (System.nanoTime () — startTime) / 1 000 000;
if (elapsed > delay) {
currentFrame++;
startTime = System. nanoTime ();
}
if (currentFrame == frames. length) {
currentFrame = 0;
playedOnce = true;
}
}
public int getFrame () {
return currentFrame;
}
public BufferedImage getImage () {
return frames[currentFrame];
}
public boolean hasPlayedOnce () {
return playedOnce;
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Explosion ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Explosion {
private int x;
private int y;
private int xmap;
private int ymap;
private int width;
private int height;
private Animation animation;
private BufferedImage[] sprites;
private boolean remove;
public Explosion (int x, int y) {
this.x = x;
this.y = y;
width = 30;
height = 30;
try {
BufferedImage spritesheet = ImageIO. read (
getClass ().getResourceAsStream (
" /Sprites/Enemies/explosion.gif"
)
);
sprites = new BufferedImage[6];
for (int i = 0; i < sprites. length; i++) {
sprites[i] = spritesheet. getSubimage (
i * width,
0,
width,
height
);
}
}
catch (Exception e) {
e.printStackTrace ();
}
animation = new Animation ();
animation.setFrames (sprites);
animation.setDelay (70);
}
public void update () {
animation.update ();
if (animation.hasPlayedOnce ()) {
remove = true;
}
}
public boolean shouldRemove () { return remove; }
public void setMapPosition (int x, int y) {
xmap = x;
ymap = y;
}
public void draw (Graphics2D g) {
g.drawImage (
animation.getImage (),
x + xmap — width / 2,
y + ymap — height / 2,
null
);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° FireBall ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import Main. GamePanel;
import TileMap. TileMap;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class FireBall extends MapObject {
private boolean hit;
private boolean remove;
private BufferedImage[] sprites;
private BufferedImage[] hitSprites;
public FireBall (TileMap tm, boolean right) {
super™;
facingRight = right;
moveSpeed = 3.8;
if (right) dx = moveSpeed;
else dx = -moveSpeed;
width = 30;
height = 30;
cwidth = 14;
cheight = 14;
// load sprites
try {
BufferedImage spritesheet = ImageIO. read (
getClass ().getResourceAsStream (
" /Sprites/Player/fireball.gif"
)
);
sprites = new BufferedImage[4];
for (int i = 0; i < sprites. length; i++) {
sprites[i] = spritesheet. getSubimage (
i * width,
0,
width,
height
);
}
hitSprites = new BufferedImage[3];
for (int i = 0; i < hitSprites. length; i++) {
hitSprites[i] = spritesheet. getSubimage (
i * width,
height,
width,
height
);
}
animation = new Animation ();
animation.setFrames (sprites);
animation.setDelay (70);
}
catch (Exception e) {
e.printStackTrace ();
}
}
public void setHit () {
if (hit) return;
hit = true;
animation.setFrames (hitSprites);
animation.setDelay (70);
dx = 0;
}
public boolean shouldRemove () {
return remove;
}
public void update () {
checkTileMapCollision ();
setPosition (xtemp, ytemp);
if (dx == 0 && !hit) {
setHit ();
}
animation.update ();
if (hit && animation. hasPlayedOnce ()) {
remove = true;
}
}
public void draw (Graphics2D g) {
setMapPosition ();
super.draw (g);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° HUD ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class HUD {
private Player player;
private BufferedImage image;
private Font font;
public HUD (Player p) {
player = p;
try {
image = ImageIO. read (
getClass ().getResourceAsStream (
" /HUD/hud.gif"
)
);
font = new Font («Arial», Font. PLAIN, 14);
}
catch (Exception e) {
e.printStackTrace ();
}
}
public void draw (Graphics2D g) {
g.drawImage (image, 0, 10, null);
g.setFont (font);
g.setColor (Color.WHITE);
g.drawString (
player.getHealth () + «/» + player. getMaxHealth (),
30,
);
g.drawString (
player.getFire () / 100 + «/» + player. getMaxFire () / 100,
30,
);
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° MapObject ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import Main. GamePanel;
import TileMap. TileMap;
import TileMap. Tile;
import java.awt.Rectangle;
public abstract class MapObject {
protected TileMap tileMap;
protected int tileSize;
protected double xmap;
protected double ymap;
// ΠΏΠΎΠ·ΠΈΡΠΈΡ
protected double x;
protected double y;
protected double dx;
protected double dy;
// ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
protected int width;
protected int height;
// ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ
protected int cwidth;
protected int cheight;
// Π΅ΡΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ
protected int currRow;
protected int currCol;
protected double xdest;
protected double ydest;
protected double xtemp;
protected double ytemp;
protected boolean topLeft;
protected boolean topRight;
protected boolean bottomLeft;
protected boolean bottomRight;
// Π°Π½ΠΈΠΌΠ°ΡΠΈΡ
protected Animation animation;
protected int currentAction;
protected int previousAction;
protected boolean facingRight;
// Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
protected boolean left;
protected boolean right;
protected boolean up;
protected boolean down;
protected boolean jumping;
protected boolean falling;
// ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
protected double moveSpeed;
protected double maxSpeed;
protected double stopSpeed;
protected double fallSpeed;
protected double maxFallSpeed;
protected double jumpStart;
protected double stopJumpSpeed;
public MapObject (TileMap tm) {
tileMap = tm;
tileSize = tm. getTileSize ();
}
public boolean intersects (MapObject o) {
Rectangle r1 = getRectangle ();
Rectangle r2 = o. getRectangle ();
return r1. intersects (r2);
}
public Rectangle getRectangle () {
return new Rectangle (
(int)x — cwidth,
(int)y — cheight,
cwidth,
cheight
);
}
public void calculateCorners (double x, double y) {
int leftTile = (int)(x — cwidth / 2) / tileSize;
int rightTile = (int)(x + cwidth /2 — 1) / tileSize;
int topTile = (int)(y — cheight / 2) / tileSize;
int bottomTile = (int)(y + cheight / 2 — 1) / tileSize;
int tl = tileMap. getType (topTile, leftTile);
int tr = tileMap. getType (topTile, rightTile);
int bl = tileMap. getType (bottomTile, leftTile);
int br = tileMap. getType (bottomTile, rightTile);
topLeft = tl == Tile. BLOCKED;
topRight = tr == Tile. BLOCKED;
bottomLeft = bl == Tile. BLOCKED;
bottomRight = br == Tile. BLOCKED;
}
public void checkTileMapCollision () {
currCol = (int)x / tileSize;
currRow = (int)y / tileSize;
xdest = x + dx;
ydest = y + dy;
xtemp = x;
ytemp = y;
calculateCorners (x, ydest);
if (dy < 0) {
if (topLeft || topRight) {
dy = 0;
ytemp = currRow * tileSize + cheight / 2;
}
else {
ytemp += dy;
}
}
if (dy > 0) {
if (bottomLeft || bottomRight) {
dy = 0;
falling = false;
ytemp = (currRow + 1) * tileSize — cheight / 2;
}
else {
ytemp += dy;
}
}
calculateCorners (xdest, y);
if (dx < 0) {
if (topLeft || bottomLeft) {
dx = 0;
xtemp = currCol * tileSize + cwidth / 2;
}
else {
xtemp += dx;
}
}
if (dx > 0) {
if (topRight || bottomRight) {
dx = 0;
xtemp = (currCol + 1) * tileSize — cwidth / 2;
}
else {
xtemp += dx;
}
}
if (!falling) {
calculateCorners (x, ydest + 1);
if (!bottomLeft && !bottomRight) {
falling = true;
}
}
}
public int getx () { return (int)x; }
public int gety () { return (int)y; }
public int getWidth () { return width; }
public int getHeight () { return height; }
public int getCWidth () { return cwidth; }
public int getCHeight () { return cheight; }
public void setPosition (double x, double y) {
this.x = x;
this.y = y;
}
public void setVector (double dx, double dy) {
this.dx = dx;
this.dy = dy;
}
public void setMapPosition () {
xmap = tileMap. getx ();
ymap = tileMap. gety ();
}
public void setLeft (boolean b) { left = b; }
public void setRight (boolean b) { right = b; }
public void setUp (boolean b) { up = b; }
public void setDown (boolean b) { down = b; }
public void setJumping (boolean b) { jumping = b; }
public boolean notOnScreen ()
public void draw (Java.awt.Graphics2D g) {
if (facingRight) {
g.drawImage (
animation.getImage (),
(int)(x + xmap — width / 2),
(int)(y + ymap — height / 2),
null
);
}
else {
g.drawImage (
animation.getImage (),
(int)(x + xmap — width / 2 + width),
(int)(y + ymap — height / 2),
— width,
height,
null
);
}
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Player ΠΏΠ°ΠΊΠ΅ΡΠ° Entity
package Entity;
import TileMap.*;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
public class Player extends MapObject {
// Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ°
private int health;
private int maxHealth;
private int fire;
private int maxFire;
private boolean dead;
private boolean flinching;
private long flinchTimer;
// ΡΡΡΠ΅Π»ΡΠ±Π°
private boolean firing;
private int fireCost;
private int fireBallDamage;
private ArrayList fireBalls;
// ΡΠ΄Π°Ρ ΡΡΠΊΠΎΠΉ
private boolean scratching;
private int scratchDamage;
private int scratchRange;
// ΠΏΠΎΠ»Π΅Ρ
private boolean gliding;
// Π°Π½ΠΈΠΌΠ°ΡΠΈΡ
private ArrayList sprites;
private final int[] numFrames = {
2, 8, 1, 2, 4, 2, 5
};
// id Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ
private static final int IDLE = 0;
private static final int WALKING = 1;
private static final int JUMPING = 2;
private static final int FALLING = 3;
private static final int GLIDING = 4;
private static final int FIREBALL = 5;
private static final int SCRATCHING = 6;
public Player (TileMap tm) {
super™;
width = 30;
height = 30;
cwidth = 30;
cheight = 30;
moveSpeed = 0.3;
maxSpeed = 1.6;
stopSpeed = 0.4;
fallSpeed = 0.15;
maxFallSpeed = 4.0;
jumpStart = -4.8;
stopJumpSpeed = 0.3;
facingRight = true;
health = maxHealth = 5;
fire = maxFire = 2500;
fireCost = 200;
fireBallDamage = 5;
fireBalls = new ArrayList ();
scratchDamage = 8;
scratchRange = 40;
// Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠΏΡΠ°ΠΉΡΠΎΠ²
try {
BufferedImage spritesheet = ImageIO. read (
getClass ().getResourceAsStream (
" /Sprites/Player/playersprites.gif"
)
);
sprites = new ArrayList ();
for (int i = 0; i < 7; i++) {
BufferedImage[] bi =
new BufferedImage[numFrames[i]];
for (int j = 0; j < numFrames[i]; j++) {
if (i ≠ SCRATCHING) {
bi[j] = spritesheet. getSubimage (
j * width,
i * height,
width,
height
);
}
else {
bi[j] = spritesheet. getSubimage (
j * width * 2,
i * height,
width * 2,
height
);
}
}
sprites.add (bi);
}
}
catch (Exception e) {
e.printStackTrace ();
}
animation = new Animation ();
currentAction = IDLE;
animation.setFrames (sprites.get (IDLE));
animation.setDelay (400);
}
public int getHealth () { return health; }
public int getMaxHealth () { return maxHealth; }
public int getFire () { return fire; }
public int getMaxFire () { return maxFire; }
public void setFiring () {
firing = true;
}
public void setScratching () {
scratching = true;
}
public void setGliding (boolean b) {
gliding = b;
}
public void hit (int damage) {
if (flinching) return;
health -= damage;
if (health < 0) health = 0;
if (health == 0) dead = true;
flinching = true;
flinchTimer = System. nanoTime ();
}
private void getNextPosition () {
// Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
if (left) {
dx -= moveSpeed;
if (dx < -maxSpeed) {
dx = -maxSpeed;
}
}
else if (right) {
dx += moveSpeed;
if (dx > maxSpeed) {
dx = maxSpeed;
}
}
else {
if (dx > 0) {
dx -= stopSpeed;
if (dx < 0) {
dx = 0;
}
}
else if (dx < 0) {
dx += stopSpeed;
if (dx > 0) {
dx = 0;
}
}
}
// Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΄Π°ΡΠ° Π·Π°ΠΏΡΠ΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
if (
(currentAction == SCRATCHING || currentAction == FIREBALL) &&
!(jumping || falling)) {
dx = 0;
}
// ΠΏΡΡΠΆΠΎΠΊ
if (jumping && !falling) {
dy = jumpStart;