ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΡΠΎΠΊΠΈ Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΡΠΎΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Main () ΠΈΠ»ΠΈ main (), Π΅ΡΡ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· 10 (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΏΡΠΈΡΡΠΌ Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ — ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π ΠΎΡΡΠΈΠΉΡΠΊΠΎΠΉ Π€Π΅Π΄Π΅ΡΠ°ΡΠΈΠΈ ΠΠ°Π·Π°Π½ΡΠΊΠΈΠΉ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΈ. Π. Π. Π’ΡΠΏΠΎΠ»Π΅Π²Π° ΠΠ°ΡΠ΅Π΄ΡΠ° ΠΠ‘ ΠΡΡΡΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅»
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ: ΡΡΡΠ΄Π΅Π½Ρ Π³ΡΡΠΏΠΏΡ 4201 Π. Π. ΠΠ°Π²Π»ΠΎΠ² Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ: Π΄ΠΎΡ. ΠΊΠ°ΡΠ΅Π΄ΡΡ ΠΠ‘ΠΠΠ£ Π. Π. ΠΠ΅Π΄Π²Π΅Π΄Π΅Π² ΠΠ°Π·Π°Π½Ρ 2010
1. ΠΠ°Π΄Π°Π½ΠΈΠ΅
2. Π£ΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
4. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
4.1 ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
4.2 Π‘ΠΎΠ±ΡΡΠΈΡ
4.3 ΠΠΎΡΠΎΠΊΠΈ
5. ΠΠΎΡΡΠ°ΠΏΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
5.1 ΠΡΠ°ΠΏ 1. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΡΠ°Π±Π»Ρ
5.2 ΠΡΠ°ΠΏ 2. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
5.3 ΠΡΠ°ΠΏ 3. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ but
5.4 ΠΡΠ°ΠΏ 4. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ
5.5 ΠΡΠ°ΠΏ 5. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½
5.6 ΠΡΠ°ΠΏ 6. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ)
6. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠΈΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
7. Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 4. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C++/CLI
1. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½ΠΎ ΠΡΠ½Π° ΠΎΡΠ²ΠΎΠ΅Π½Π° ΠΈ Π½Π° Π½Π΅ΠΉ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ Π³ΠΎΡΠΎΠ΄Π°, ΠΈΠ΄Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΡΠΊΠΎΠΏΠ°Π΅ΠΌΡΡ . ΠΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°Π½Π΅ΡΠ°ΠΌΠΈ ΠΊΡΡΡΠΈΡΡΡΡ ΠΊΠΎΡΠ°Π±Π»ΠΈ. ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Π½Π΅ΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ½Π°ΡΠ°Π»Π° Π½Π°Π΄ΠΎ Π²ΡΠΉΡΠΈ Π½Π° ΠΎΡΠ±ΠΈΡΡ, Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΊΠΎΡΠ°Π±Π»ΠΈ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ, ΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π² ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΡΠΎΠΏΡΡΠΊΠ°Ρ Π΄ΡΡΠ³ΠΎΠΉ. Π Π½ΠΈΠΌ ΠΏΠΎΠ΄Π»Π΅ΡΠ°Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ-Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ Ρ ΠΠ΅ΠΌΠ»ΠΈ.
2. Π£ΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΈ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΄Π°Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΏΠ»ΠΈΠ²Π°). ΠΠΎΡΠ°Π±Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π‘ΡΠ΅Π΄ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΡΠ΅ΠΊΡΡΠ°, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ·ΡΠΊΠ°Ρ C#, Java ΠΈ C++CLI.
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠΌ ΠΈ Π΄Π²ΡΠΌΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ. Π ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ ΠΠ΅ΠΌΠ»Ρ, ΠΡΠ½Π°, ΠΈΡ ΠΎΡΠ±ΠΈΡΡ ΠΈ Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΡΠ°Π±Π»Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, Π½Π°Π΄ Π½ΠΈΠΌ — ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΏΠ»ΠΈΠ²Π°.
ΠΠ΅ΡΠ²ΠΎΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ», «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ», «ΠΠ°ΡΠ·Π°». ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ» Ρ ΠΠ΅ΠΌΠ»ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠ±ΠΈΡΠ΅, ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»Π΅Ρ ΠΊ ΠΡΠ½Π΅. ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°ΡΠ·Π°» Π²ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»ΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ, Π° Π½Π°Π΄ΠΏΠΈΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° «Π‘ΡΠ°ΡΡ». ΠΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ» ΠΊΠΎΡΠ°Π±Π»Ρ, ΡΠ΅ΠΉ Π½ΠΎΠΌΠ΅Ρ Π·Π°Π΄Π°Π½ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ 20 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠΎΠΏΠ»ΠΈΠ²Π°.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° UML ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
— Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ (start new ship),
— ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ (suspend the ships moving),
— Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ (resume the ships moving),
— Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌΡ ΠΊΠΎΡΠ°Π±Π»Ρ (add fuel to selected ship).
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡ. 3.1.
Π ΠΈΡ. 3.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
4. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
4.1 ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ»Π°Π²Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΊΠ»Π°ΡΡΠ° Program ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½ ΠΊΠ»Π°ΡΡΠ° Form ΠΈΠ»ΠΈ Frame. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΎΠΊΠ½Π°, 1 ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ°Π±Π»Ρ ΠΊΠ»Π°ΡΡΠ° Ship ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠ°Π±Π»Ρ-Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ° ΠΊΠ»Π°ΡΡΠ° Charger. ΠΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ°Π±Π»Ρ ΡΡΠ°Π·Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²Π·Π»Π΅Ρ ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ, Π° Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ — Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠ±ΠΈΡΠ΅ ΠΠ΅ΠΌΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΠ°Π±Π»Ρ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Move () ΠΈΠ»ΠΈ run () Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ°Π±Π»Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ev ΠΈΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ mainEvent () ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ update () Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΡΡΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΈ ΠΏΡΠΈ ΠΈΡ Π²ΡΡΡΠ΅ΡΠ΅ «ΠΏΡΠΈΡΠΎΡΠΌΠ°ΠΆΠΈΠ²Π°Π΅Ρ» ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ.
ΠΠ΅ΡΠ²ΠΎΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ (Controls) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ AddShip, AddFuel ΠΈ Pause ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ numShip ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΡΠΎΡΠΎΠ΅ (Info) — ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Π΄Π΅ΡΡΡΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡΠ°Π±Π»Ρ (Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½, Π² ΠΏΠΎΠ»ΡΡΠ΅, ΡΡΡΡΠΏΠ°Π΅Ρ, ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΈΡΡΠ΅Π·).
4.2 Π‘ΠΎΠ±ΡΡΠΈΡ Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ°Π±Π»Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ev ΠΈΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. ΠΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ Π² ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅. ΠΠ° ΡΡΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π²ΡΠ΅Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ mainEvent ΠΈΠ»ΠΈ update (), ΠΈΠ½ΠΈΡΠΈΠΈΡΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ ΠΎΠΊΠ½Π°.
Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Click, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ. ΠΠ° Π½ΠΈΡ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ButPressed, Π²ΡΠ±ΠΈΡΠ°ΡΡΠΈΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π²ΡΠ΅ΠΉ ΡΠΎΠ±ΡΡΠΈΠ΅.
4.3 ΠΠΎΡΠΎΠΊΠΈ Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΡΠΎΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Main () ΠΈΠ»ΠΈ main (), Π΅ΡΡ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· 10 (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΏΡΠΈΡΡΠΌ Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ — ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΠ°ΡΡ ΠΎΠ΄ ΡΠΎΠΏΠ»ΠΈΠ²Π°, ΡΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π½ΠΈΡ .
5. ΠΠΎΡΡΠ°ΠΏΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ. ΠΠ½Π°ΡΠ°Π»Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΊΠ»Π°ΡΡ Ship ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ. ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈ ΠΎΡΠ»Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ Program ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»ΡΠΌΠΈ.
Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Program ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Form ΠΈΠ»ΠΈ Frame ΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΊΠΎΡΠ°Π±Π»ΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π² ΡΠΎΡΠΌΠ΅) Π² Π²ΠΈΠ΄Π΅ ΠΊΡΡΠ³ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°. ΠΠ°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Ship ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΠΈΡ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΡ (Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ). ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ.
Π£Π±Π΅Π΄ΠΈΠ²ΡΠΈΡΡ Π² ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ ΠΈ ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ — ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ.
ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ° ΠΊΠ»Π°ΡΡΠ° Charger Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, Π° Π² ΠΊΠ»Π°ΡΡ Ship ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΡΠ°Π±Π»Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΏΠ»ΠΈΠ²Π°, ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ·ΡΠΊΠ° UML.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄Π»ΠΈΠ½ΠΎΠΉ num = 10. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
5.1 ΠΡΠ°ΠΏ 1. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΡΠ°Π±Π»Ρ ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡ Ship ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΌΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅:
id — Π½ΠΎΠΌΠ΅Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°,
x — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ,
y — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ,
speedX — Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ,
speedY — Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ,
live — ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠΎΡΠΎΠΊΠ° (live= true — ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, live= false — ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΡΠ½),
th — ΠΏΠΎΡΠΎΠΊ ΠΊΠ»Π°ΡΡΠ° Thread.
ΠΠΊΠ»ΡΡΠΈΠΌ Π² ΠΊΠ»Π°ΡΡ Ship ΡΡΠ½ΠΊΡΠΈΠΈ:
Ship (int ns) — ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ°,
Start () — Π½Π°ΡΠ°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°,
Stop () — ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠ° Ship ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡ. 5.3.1.1.
Π ΠΈΡ. 5.3.1.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.1.1 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
ΠΡΠΈΠΌΠ΅Ρ 5.3.1.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
//C# File Program. cs
using System;
using System. Threading;
class Ship
{
Thread th;
int id; // ΠΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
protected bool live;
protected double x, y; // ΠΏΠΎΠ·ΠΈΡΠΈΡ
protected double speedX, speedY; // ΡΠΊΠΎΡΠΎΡΡΡ
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ.
public Ship (int ns)
{
this.id = ns; // ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
this.live = false; // ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
this.x = 160; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ X
this.y = 300; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Y
this.speedX = 0; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
this.speedY = -3; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ (ΡΡΠ°ΡΡ Ρ ΠΠ΅ΠΌΠ»ΠΈ)
Start (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
// ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°ΡΡΠ° ΠΏΠΎΡΠΎΠΊΠ° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
public void Start ()
{
if (live == false)
{
live = true;
th = new Thread (new ThreadStart (Move)); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΠΎΡΠΎΠΊ «Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ»
th.Start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
// ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
public void Stop ()
{
live = false;
}
// ΠΠΎΡΠΎΠΊ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
void Move ()
{
while (live) // ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ ΠΆΠΈΠ²
{
x += speedX;
y += speedY;
Console.WriteLine («ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ: «+ System.Convert.ToString (x) + «, «+ System.Convert.ToString (y));
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
}
}
}
//——————————————————;
class Program1
{
static void Main (string[] args)
{
Ship Ship1= new Ship (1); // Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Ship Ship2= new Ship (2); // Π‘ΠΎΠ·Π΄Π°ΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Console.WriteLine («ΠΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ»);
Thread.Sleep (20); // ΠΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ 20 ΠΌΡ
Ship1.Stop (); // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Ship2.Stop (); // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Console.WriteLine («ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ»);
Ship1.Start (); // ΠΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
Ship2.Start (); // ΠΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
Thread.Sleep (20); // ΠΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ 20 ΠΌΡ
Ship1.Stop (); // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Ship2.Stop (); // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
}
}
5.2 ΠΡΠ°ΠΏ 2. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Program, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Ship ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠΉ ΠΈΡ ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ship Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠ»Π°ΡΡ Program ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ run (), ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΡΡΠ΅ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ. ΠΠ»Ρ Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠ»Π°ΡΡ Ship Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π±ΡΠ»Π΅Π²ΡΠΊΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ vstrecha, ΡΠ²Π»ΡΡΡΠ°ΡΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π½Π° ΡΠΈΡ. 5.3.2.1.
Π ΠΈΡ 5.3.2.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ°
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C# Π΄Π°Π½Π° Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.2.1.
ΠΡΠΈΠΌΠ΅Ρ 5.3.2.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
// C# File Program2. cs
// Π€Π°ΠΉΠ» Program2. cs ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Program. cs, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ
// Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° Program ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Main
.. .
//——————————————————;
class Program
{
Ship[] ship;
int num;
int s1, s2; // ΠΠΎΠΌΠ΅ΡΠ° Π²ΡΡΡΠ΅ΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Thread th;
bool live;
// ΠΠΎΠ½ΡΡΡΠΊΡΠΎΡ
public Program ()
{
num = 1; // ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
ship = new Ship[10]; // ΠΠ°ΡΡΠΈΠ² ΠΈΠ· 10 ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
for (int i = 0; i < num; i++) // ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
{
ship[i] = new Ship (i); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΊΠΎΡΠ°Π±Π»Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²
}
live = true; // ΡΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
th = new Thread (new ThreadStart (run));
th.Start ();
}
// ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
void run ()
{
while (live)
{
// ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
for (int i = 0; i < num; i++)
{
for (int j = i + 1; j < num; j++)
{
if (i < j) // Π£ΡΡΡΠΏΠ°Π΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
{
s2 = j;
s1 = i;
}
else
{
s2 = i;
s1 = j;
}
if (Math.Abs (ship[s1]. X — ship[s2]. X) < 20 && Math. Abs (ship[s1]. Y — ship[s2]. Y) < 20)
{
ship[s2]. vstrecha = true; // ΠΡΡΡΠ΅ΡΠ° Π½Π°ΡΠ°Π»Π°ΡΡ
if (!ship[s1]. isStopped && !ship[s2]. isStopped) ship[s2]. Stop ();
else if (ship[s2]. vstrecha)
{
ship[s2].Start (); // ΠΡΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π», ΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
ship[s2]. vstrecha = false; // ΠΡΡΡΠ΅ΡΠ°
}
}
Thread.Sleep (31);
}
}
}
// ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
static void Main ()
{
Program prog = new Program ();
Application.Run (prog);
}
}
5.3 ΠΡΠ°ΠΏ 3. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ but
ΠΠΊΠ»ΡΡΠΈΠΌ Π² ΠΊΠ»Π°ΡΡ Ship ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΠ΅ ev ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΠ΅Π΅ ΠΎΠ± ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ MainEvent ΠΈΠ»ΠΈ update () ΠΊΠ»Π°ΡΡΠ° Program, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π½Π° ΡΠ΅ΡΠ²ΡΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅. ΠΠ° ΡΠΈΡ. 5.3.3.1 ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.3.1 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΠΏΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ Π΅Ρ.
Π ΠΈΡ. 5.3.3.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΠΏΠ° ΠΡΠΈΠΌΠ΅Ρ 5.3.3.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
// Π‘# File Program3. cs
// Π€Π°ΠΉΠ» Program3. cs ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Program2. cs, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ²
// Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ ev Π² ΠΊΠ»Π°ΡΡΠ΅ Ship ΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ MainEvent
// ΠΊΠ»Π°ΡΡΠ° Program, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ.
// ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Program2. cs Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ.
.. .
//——————————————————;
delegate void delEv (); // ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° delEv Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΡΠΎΠ±ΡΡΠΈΡ ev
class Ship
{
public event delEv ev; // ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ev
.. .
//———————;
void Move () // ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ
{
while (live)
{
x += speedX;
y += speedY;
Console.WriteLine («ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ: «+ System.Convert.ToString (x) + «, «+ System.Convert.ToString (y));
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
if (ev ≠ null) // ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ, ΡΠΎ
{
Console.WriteLine («Event»);
ev (); // Π²ΡΠ·Π²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅
}
Thread.Sleep (10);
}
}
};
//——————————————————;
class Program // ΠΠ»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
{
Ship [] pShip;
void MainEvent () // ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ ev
{
Console.WriteLine («MainEvent»);
}
public Program () // ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
{
num = 1; // ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
ship = new Ship[10]; // ΠΠ°ΡΡΠΈΠ² ΠΈΠ· 10 ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
for (int i = 0; i < num; i++)
{
ship[i] = new Ship (i);
ship[i]. ev += new delEv (MainEvent); // ΠΠΎΠ±Π°Π²ΠΈΡΡ
}
live = true; // ΡΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
th = new Thread (new ThreadStart (run));
th.Start ();
}
.. .
}
5.4 ΠΡΠ°ΠΏ 4. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΠ°ΡΡΡΠΏΠΈΠ» ΡΡΠ°ΠΏ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΠΈΠΌΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»ΡΠΌΠΈ.
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π² ΠΊΠ»Π°ΡΡ Form ΠΈΠ»ΠΈ Frame, ΠΊΠ»Π°ΡΡ Program ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡ ΡΠ²ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΎΡΠΌΡ) ΠΈ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ (Π΄ΠΎΡΠ΅ΡΠ½ΡΡ ΡΠΎΡΠΌΡ). ΠΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΠΎΡΠΎΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅ Controls, ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠΌ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Form ΠΈΠ»ΠΈ Frame. ΠΠΎΠΊΠ° ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡ Ship Π½ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π΅Π³ΠΎ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ, ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΡ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΡ Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ Move. ΠΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° Program, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ: ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π²ΡΡΡΠ΅ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠΎΡΠΌΠ°ΠΆΠΈΠ²Π°ΡΡ, Π½Π΅ ΠΌΠ΅ΡΠ°Ρ ΡΠΎΡΠ΅Π΄Π½Π΅ΠΌΡ. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΡΠΈΡ. 5.3.4.1 ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.4.1.
Π ΠΈΡ. 5.3.4.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²ΡΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΠΡΠΈΠΌΠ΅Ρ 5.3.4.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ²ΡΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
// C# File Program4. cs
// Π€Π°ΠΉΠ» Program4. cs ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Program3. cs, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ
// Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° Program, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, ΠΈ
// ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° Ship Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ.
// Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Program ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Form ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ
// ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠ°
// Program. ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ OnPaint ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ MainEvent,
// ΡΠ΅Π°Π³ΠΈΡΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ ev ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ², Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ.
// Π€ΡΠ½ΠΊΡΠΈΡ run «ΠΏΡΠΈΡΠΎΡΠΌΠ°ΠΆΠΈΠ²Π°Π΅Ρ» ΠΊΠΎΡΠ°Π±Π»ΠΈ ΠΏΡΠΈ Π²ΡΡΡΠ΅ΡΠ°Ρ .
// ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Program3. cs Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ
using System;
using System. Drawing;
using System.Windows.Forms;
using System. Threading;
class Ship
{
Thread th;
int id; // ΠΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
protected bool live;
protected double x, y; // ΠΏΠΎΠ·ΠΈΡΠΈΡ
protected double speedX, speedY; // ΡΠΊΠΎΡΠΎΡΡΡ
protected bool WasOnMoon; // Π±ΡΠ» Π»ΠΈ Π½Π° ΠΡΠ½Π΅
protected bool start1; // ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠ°ΡΡΠΎΠ²Π°Π»
protected bool comeback1; // ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅
public bool vstrecha; // ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ Π²ΡΡΡΠ΅ΡΠΈ
void Move ()
{
while (live) // ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ ΠΆΠΈΠ²
{
if ((x > 0 && x < 420 && y > 210 && y < 600) && !(x == 160 && y > 232)) // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
{
if (WasOnMoon == false) // ΠΡΠ»ΠΈ Π½Π° ΠΡΠ½Π΅ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ», ΡΠ°Π·Π³ΠΎΠ½
{ // ΠΏΠΎ ΠΎΡΠ±ΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Ρ ΠΊ ΠΡΠ½Π΅
if (start1)
{
fi = -Math.PI / 2 — 0.2;
start1 = false;
}
speedY = 6 * Math. Cos (fi);
speedX = -6 * Math. Sin (fi);
y -= 0.16;
if (fi > Math. PI / 2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
else // ΠΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Ρ ΠΡΠ½Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΠΎΡΠ±ΠΈΡΡ
{ // Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ
if (comeback1 && x < 230)
{
fi = -Math.PI / 2;
comeback1 = false;
}
if (!comeback1)
{
speedY = 6 * Math. Cos (fi);
speedX = 6 * Math. Sin (fi);
y -= 0.05;
fuel -= 0.05;
}
}
}
if (x == 160 && y > 225 && y < 235) // ΠΠ΅ΠΌΠ»Ρ — ΠΡΠ½Π°
{
speedX = -speedY + 3;
};
if (x > 465 && x < 630 && y < 180) // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
{
if (!WasOnMoon)
{
fi = Math. PI+0.4;
WasOnMoon = true;
comeback1 = true;
}
speedY = 4*Math.Cos (fi);
speedX = -4*Math.Sin (fi);
x += 0.04;
if (fi > Math. PI*2−0.3 || fi < Math. PI/2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
/*if (x > 461 && x < 630) // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ (ΡΡΠ°ΡΠΎΠ΅)
{
if (kM)
{
fi = Math. PI+0.36;
kM = false;
}
speedY = 4*Math.Cos (fi);
speedX = -4*Math.Sin (fi);
y -= 0.065;
}*/
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
{
if (x > 425) fi += 0.051;
else fi += 0.032;
}
else fi = 0;
if (ev ≠ null) ev (); // ΡΠΎΠ±ΡΡΠΈΠ΅
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
}
}
public int X
{
get { return (int)x; } // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public int Y
{
get { return (int)y; } // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public double setY
{
set { y = value; } // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public double setX
{
set { x = value; } // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public bool isStopped { get { return! this.th.IsAlive; } }
}
//——————————————————;
class Program: Form
{
Ship[] ship;
int num;
int s1, s2; // ΠΠΎΠΌΠ΅ΡΠ° Π²ΡΡΡΠ΅ΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Thread th;
bool live;
public Program ()
{
num = 1;
Text = «Objects» ;
Size = new Size (675, 675);
FormBorderStyle = FormBorderStyle. FixedSingle;
FormClosed += new FormClosedEventHandler (exit);
this.Show ();
Location = new Point (200, 50);
ship = new Ship[10];
for (int i = 0; i < num; i++)
{
ship[i] = new Ship (i);
ship[i]. ev += new delEv (MainEvent);
}
DoubleBuffered = true;
live = true;
th = new Thread (new ThreadStart (run));
th.Start ();
}
// ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
void run ()
{
while (live)
{
// ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
for (int i = 0; i < num; i++)
{
for (int j = i + 1; j < num; j++)
{
if (i < j) // Π£ΡΡΡΠΏΠ°Π΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
{
s2 = j;
s1 = i;
}
else
{
s2 = i;
s1 = j;
}
if (Math.Abs (ship[s1]. X — ship[s2]. X) < 20 && Math. Abs (ship[s1]. Y — ship[s2]. Y) < 20)
{
ship[s2]. vstrecha = true; // ΠΡΡΡΠ΅ΡΠ° Π½Π°ΡΠ°Π»Π°ΡΡ
if (!ship[s1]. isStopped && !ship[s2]. isStopped) ship[s2]. Stop ();
}
else if (ship[s2]. vstrecha)
{
ship[s2].Start ();
ship[s2]. vstrecha = false;
}
}
Thread.Sleep (31);
}
}
// ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
protected override void OnPaint (PaintEventArgs arg)
{
Pen grayPen = new Pen (Color.LightGray);
Pen blackPen = new Pen (Color.Black);
Brush blackBrush = new SolidBrush (Color.Black);
Brush whiteBrush = new SolidBrush (Color.White);
Brush greenBrush = new SolidBrush (Color.Lime);
Font ArialF = new Font («Arial», 10);
arg.Graphics.FillRectangle (blackBrush, 0,0,1280,960); // Π€ΠΎΠ½
arg.Graphics.DrawEllipse (grayPen, 40, 230, 370, 370); // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
arg.Graphics.DrawEllipse (grayPen, 468, 28, 162, 162); // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
arg.Graphics.FillEllipse (new SolidBrush (Color.DeepSkyBlue), 100, 290, 250, 250); // ΠΠ΅ΠΌΠ»Ρ
arg.Graphics.FillEllipse (new SolidBrush (Color.DarkKhaki), 500, 60, 100, 100); // ΠΡΠ½Π°
for (int i = 0; i < num; i++) // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
{
arg.Graphics.FillEllipse (greenBrush, ship[i]. X, ship[i]. Y, 16, 16); // ΠΊΠΎΡΠ°Π±Π»Ρ
arg.Graphics.DrawEllipse (blackPen, ship[i]. X, ship[i]. Y, 16, 16); // ΠΎΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»Ρ
arg.Graphics.DrawString (ship[i]. id + «», ArialF, blackBrush, ship[i]. X + 4, ship[i]. Y); // Π½ΠΎΠΌΠ΅Ρ
}
}
void MainEvent ()
{
Console.WriteLine («MainEvent»);
Invalidate ();
}
.. .
static void Main ()
{
Program prog = new Program ();ΠΌ
Application.EnableVisualStyles ();
Application.Run (prog);
}
}
5.5 ΠΡΠ°ΠΏ 5. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½ Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠ½Π°: ΠΏΠ΅ΡΠ²ΠΎΠ΅ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π²ΡΡΠ΅, Π²ΡΠΎΡΠΎΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ, Π²Π²Π΅Π΄Π΅ΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅ Ship ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΡΠΈΡ. 5.3.5.1 ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.5.1.
Π ΠΈΡ 5.3.5.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΠΡΠΈΠΌΠ΅Ρ 5.3.5.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Program-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
// C# File Program5. cs
// Π€Π°ΠΉΠ» Program5. cs ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Program4. cs, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ
// Π½ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ Controls, ΠΏΠΎΡΠΎΠΆΠ΄ΡΠ½Π½ΡΠΌ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Form. ΠΠ»Π°ΡΡ Controls
// ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ-ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅.
// ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ProgramCs4. cs Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ
.. .
class Controls: Form // ΠΠ»Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
{
Button AddShip; // ΠΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ
Button AddFuel; // ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Button Pause; // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
TextBox numShip; // ΠΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Point[] Koord;
TextBox[] Sost; // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
public event delBut but; // ΠΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΊ Π΄Π΅Π»Π΅Π³Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
// ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
public Controls ()
{
// ΠΊΠ½ΠΎΠΏΠΊΠΈ
AddShip = new Button ();
AddShip.Location = new Point (10, 50);
AddShip.Text = «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ» ;
AddShip.Size = new Size (120, 25);
AddShip.Click += new EventHandler (onAdd);
AddFuel = new Button ();
AddFuel.Location = new Point (10, 80);
AddFuel.Text = «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ» ;
AddFuel.Size = new Size (120, 25);
AddFuel.Click += new EventHandler (onAddFuel);
Pause = new Button ();
Pause.Location = new Point (20, 110);
Pause.Size = new System.Drawing.Size (100, 25);
Pause.Text = «ΠΠ°ΡΠ·Π°» ;
Pause.Click += new EventHandler (onPause);
// ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅
numShip = new TextBox ();
numShip.Location = new Point (35, 20);
numShip.Text = «0» ;
numShip.Size = new Size (65, 25);
Koord = new Point[10];
for (int i = 0; i < 10; i++)
Koord[i] = new Point (15, i*21 + 5);
Sost = new TextBox[10]; ;
for (int i = 0; i < 10; i++)
{
Sost[i] = new TextBox ();
Sost[i]. Location= Koord[i];
Sost[i].Text = Convert. ToString (i)+". ΠΠ΅ Π·Π°ΠΏΡΡΠ΅Π½" ;
Sost[i]. Size = new Size (90, 20);
}
Sost[0]. Text = «0. Π ΠΏΠΎΠ»ΡΡΠ΅» ;
// ΠΎΠΊΠΎΡΠΊΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
Form ctrl = new Form ();
ctrl.Text = «Controls» ;
ctrl.Size = new Size (150, 200);
ctrl.Controls.Add (AddShip);
ctrl.Controls.Add (AddFuel);
ctrl.Controls.Add (Pause);
ctrl.Controls.Add (numShip);
ctrl.Show (); // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
ctrl.Location = new Point (10, 50); // ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ
// ΠΎΠΊΠΎΡΠΊΠΎ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ
Form Info = new Form ();
Info.Text = «Info» ;
Info.Size = new Size (150, 260);
for (int i = 0; i < 10; i++) Info.Controls.Add (Sost[i]); // ΠΠ°ΡΡΠΈΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π²ΠΎ 2 ΠΎΠΊΠ½Π΅
ctrl.Location = new Point (10, 50); // ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ
ctrl.Show (); // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
Info.Location = new Point (10, 250);
Info.Show ();
}
public void SetStatus (int num, string str)
{
this.Sost[num]. Text = Convert. ToString (num) + «. «+ str;
}
public bool IsntDisappeared (int i) // ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ° Π½Π° «ΠΈΡΡΠ΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠ΅»
{
if (Sost[i]. Text == Convert. ToString (i) + «. ΠΡΡΠ΅Π·»)
return false;
else return true;
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
void onAdd (object obj, EventArgs arg)
{
if (but ≠ null) but («add», 0);
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
void onPause (object obj, EventArgs arg)
{
if (but ≠ null)
{
if (Pause.Text == «ΠΠ°ΡΠ·Π°»)
{
Pause.Text = «Π‘ΡΠ°ΡΡ»; // ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
but («stop», 0); // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
}
else
{
Pause.Text = «ΠΠ°ΡΠ·Π°» ;
but («start», 0); // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°
}
}
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΏΠ»ΠΈΠ²Π°
void onAddFuel (object obj, EventArgs arg)
{
if (but ≠ null) but («fuel», Convert. ToInt32(this.numShip.Text));
}
}
Class Program: Form
{
public Program ()
{
.. .
ContForm = new Controls ();
ContForm.but += new delBut (ButPressed); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
.. .
}
void ButPressed (string btn, int numship)
{
if (btn == «add»)
{
if (num < 10)
{ // Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ < 10
ship[num] = new Ship (num); // ΡΠΎΠ·Π΄Π°ΡΠΌ
ship[num]. ev += new delEv (MainEvent); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ
ContForm.SetStatus (num, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
num++;
}
else
{
MessageBox.Show («ΠΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 10!»);
}
}
else if (btn == «start»)
{
for (int i = 0; i < num; i++)
{
if (ContForm.IsntDisappeared (i))
{
ship[i]. Start (); // ΡΡΠ°ΡΡΡΠ΅ΠΌ Π²ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΡΠ΅Π·Π½ΡΠ²ΡΠΈΡ
ContForm.SetStatus (i, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
}
}
}
else if (btn == «stop»)
{
for (int j = 0; j < num; j++)
{
if (ContForm.IsntDisappeared (j))
{
ship[j]. Stop (); // ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»ΠΈ
ContForm.SetStatus (j, «ΠΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½»);
}
}
}
else if (btn == «fuel») // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ 20 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠΎΠΏΠ»ΠΈΠ²Π°
{
if (ship[numship] ≠ null)
{
ship[numship]. fuel += 20;
if (ship[numship]. fuel > 99) ship[numship]. fuel = 99; }
}
}
}
5.6 ΠΡΠ°ΠΏ 6. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ) Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΊΠ»Π°ΡΡ Charger ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°), Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠ°Π²ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° ΠΎΡΠ±ΠΈΡΠ΅ ΠΠ΅ΠΌΠ»ΠΈ, Π΄Π²ΠΈΠ³Π°ΡΡΡ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ ΠΏΡΠΈ ΡΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠ΅Π»Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ° Program. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠΎΠΌ. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΡΠ°ΠΏΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΡΠΈΡ. 5.3.7.1 ΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 5.3.7.1.
Π ΠΈΡ. 5.3.7.1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ°
ΠΡΠΈΠΌΠ΅Ρ 5.3.7.1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
// C# File Program6. cs
// Π€Π°ΠΉΠ» Program6. cs ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Program5. cs, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ Π½ΠΎΠ²ΡΠΌ
// ΠΊΠ»Π°ΡΡΠΎΠΌ Charger ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π ΠΊΠ»Π°ΡΡΠ΅ Program ΡΠΎΠ·Π΄Π°Π½
// ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° Program Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π°.
// ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ProgramCs6. cs Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ
.. .
class Charger: Ship // ΠΠ»Π°ΡΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°
{
public Charger (): base (10)
{
this.speedY = 0;
this.y = 225; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Π²ΡΡΠΎΡΠ΅ (ΠΎΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ)
this.x = 230;
this.fi = -Math.PI / 2 — 0.05; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΠΎΡΠ±ΠΈΡΠ΅
Stop (); // ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ
StartCh (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
public void StartCh ()
{
if (live == false)
{
th.Abort (); // ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
live = true;
th = new Thread (new ThreadStart (Move)); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ
th.Start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
void Move ()
{
while (live)
{
speedY = 12 * Math. Cos (fi);
speedX = 12 * Math. Sin (fi);
if (y > 415) y -= 0.27; else y -= 0.05;
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) fi += 0.065; // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
else fi = 0;
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
}
}
}
//——————————————————;
class Program: Form // ΠΠ»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
{
Ship[] ship;
Charger charger;
Controls ContForm;
int num;
int s1, s2; // ΠΠΎΠΌΠ΅ΡΠ° Π²ΡΡΡΠ΅ΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Thread th;
bool live;
public Program ()
{
.. .
ship = new Ship[10]; // ΠΠ°ΡΡΠΈΠ² ΠΈΠ· 10 ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
charger = new Charger ();
.. .
}
void run ()
{
while (live)
{
for (int i = 0; i < num; i++)
{
if (Math.Abs (ship[i]. X — charger. X) < 20 && Math. Abs (ship[i]. Y — charger. Y) < 20) // ΠΠ°ΠΏΡΠ°Π²ΠΊΠ°
if (!charger.isStopped)
{
if (ship[i]. fuel <= 89) ship[i]. fuel += 10; else ship[i]. fuel = 99;
}
if (ship[i]. fuel <= 0) // ΠΡΡΠ΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠ΅
{
ship[i]. Stop ();
ship[i].setX = 1000;
ship[i]. setY = 1000 + 50*i;
this.Invoke (new EventHandler (delegate // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠ°
{
ContForm.SetStatus (i, «ΠΡΡΠ΅Π·»);
}));
.. .
}
}
.. .
//———————;
protected override void OnPaint (PaintEventArgs arg) // ΠΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ
{
.. .
arg.Graphics.FillEllipse (new SolidBrush (Color.DarkRed), charger. X, charger. Y, 16, 16); // Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ
arg.Graphics.DrawEllipse (blackPen, charger. X, charger. Y, 16, 16);
arg.Graphics.DrawString («C», ArialF, blackBrush, charger. X + 2, charger. Y);
}
.. .
}
.. .
6. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΡΠΈΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊ Java Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. ΠΠ΅Π΄Π²Π΅Π΄Π΅Π² Π. Π. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° C++/CLI, C# ΠΈ Java — ΠΠ°Π·Π°Π½Ρ: Π ΠΠ¦ «Π¨ΠΊΠΎΠ»Π°», 2010. — 444 c.: ΠΈΠ». — (Π‘Π΅ΡΠΈΡ «Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½Π°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°»).
2. ΠΠ΅Π±-ΡΠ΅ΡΡΡΡ http://msdn.microsoft.com ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C#
using System;
using System. Drawing;
using System.Windows.Forms;
using System. Threading;
namespace Unite
{
delegate void delEv (); // Π΄Π΅Π»Π΅Π³Π°Ρ ΡΠΎΠ±ΡΡΠΈΡ
delegate void delBut (string btn, int numship); // Π΄Π΅Π»Π΅Π³Π°Ρ ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
// ΠΊΠ»Π°ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ
class Controls
{
Button AddShip; // ΠΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ
Button AddFuel; // ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Button Pause; // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
TextBox numShip; // ΠΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Point[] Koord;
TextBox[] Sost; // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
public event delBut but; // ΠΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΊ Π΄Π΅Π»Π΅Π³Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
// ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΡΠΌΡ
public Controls ()
{
// ΠΊΠ½ΠΎΠΏΠΊΠΈ
AddShip = new Button ();
AddShip.Location = new Point (10, 50);
AddShip.Text = «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ» ;
AddShip.Size = new Size (120, 25);
AddShip.Click += new EventHandler (onAdd);
AddFuel = new Button ();
AddFuel.Location = new Point (10, 80);
AddFuel.Text = «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ» ;
AddFuel.Size = new Size (120, 25);
AddFuel.Click += new EventHandler (onAddFuel);
Pause = new Button ();
Pause.Location = new Point (20, 110);
Pause.Size = new System.Drawing.Size (100, 25);
Pause.Text = «ΠΠ°ΡΠ·Π°» ;
Pause.Click += new EventHandler (onPause);
// ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅
numShip = new TextBox ();
numShip.Location = new Point (35, 20);
numShip.Text = «0» ;
numShip.Size = new Size (65, 25);
Koord = new Point[10];
for (int i = 0; i < 10; i++)
Koord[i] = new Point (15, i*21 + 5);
Sost = new TextBox[10]; ;
for (int i = 0; i < 10; i++)
{
Sost[i] = new TextBox ();
Sost[i]. Location= Koord[i];
Sost[i].Text = Convert. ToString (i)+". ΠΠ΅ Π·Π°ΠΏΡΡΠ΅Π½" ;
Sost[i]. Size = new Size (90, 20);
}
Sost[0]. Text = «0. Π ΠΏΠΎΠ»ΡΡΠ΅» ;
// ΠΎΠΊΠΎΡΠΊΠΎ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
Form ctrl = new Form ();
ctrl.Text = «Controls» ;
ctrl.Size = new Size (150, 200);
ctrl.Controls.Add (AddShip);
ctrl.Controls.Add (AddFuel);
ctrl.Controls.Add (Pause);
ctrl.Controls.Add (numShip);
ctrl.Show (); // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
ctrl.Location = new Point (10, 50); // ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ
// ΠΎΠΊΠΎΡΠΊΠΎ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ
Form Info = new Form ();
Info.Text = «Info» ;
Info.Size = new Size (150, 260);
for (int i = 0; i < 10; i++) Info.Controls.Add (Sost[i]); // ΠΠ°ΡΡΠΈΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π²ΠΎ 2 ΠΎΠΊΠ½Π΅
ctrl.Location = new Point (10, 50); // ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ
ctrl.Show (); // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
Info.Location = new Point (10, 250);
Info.Show ();
}
public void SetStatus (int num, string str)
{
this.Sost[num]. Text = Convert. ToString (num) + «. «+ str;
}
public bool IsntDisappeared (int i) // ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ° Π½Π° «ΠΈΡΡΠ΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠ΅»
{
if (Sost[i]. Text == Convert. ToString (i) + «. ΠΡΡΠ΅Π·»)
return false;
else return true;
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
void onAdd (object obj, EventArgs arg)
{
if (but ≠ null) but («add», 0);
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
void onPause (object obj, EventArgs arg)
{
if (but ≠ null)
{
if (Pause.Text == «ΠΠ°ΡΠ·Π°»)
{
Pause.Text = «Π‘ΡΠ°ΡΡ»; // ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
but («stop», 0); // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
}
else
{
Pause.Text = «ΠΠ°ΡΠ·Π°» ;
but («start», 0); // Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°
}
}
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠΏΠ»ΠΈΠ²Π°
void onAddFuel (object obj, EventArgs arg)
{
if (but ≠ null) but («fuel», Convert. ToInt32(this.numShip.Text));
}
}
// ΠΠ»Π°ΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ.
class Ship
{
protected Thread th;
public int id; // ΠΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
protected bool live;
protected double x, y; // ΠΏΠΎΠ·ΠΈΡΠΈΡ
protected double speedX, speedY; // ΡΠΊΠΎΡΠΎΡΡΡ
protected double fi; // ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ±ΠΈΡΡ
public double fuel; // ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
protected bool WasOnMoon; // Π±ΡΠ» Π»ΠΈ Π½Π° ΠΡΠ½Π΅
protected bool start1; // ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠ°ΡΡΠΎΠ²Π°Π»
protected bool comeback1; // ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅
public bool vstrecha; // ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ Π²ΡΡΡΠ΅ΡΠΈ
public event delEv ev; // ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΌΠ΅Π½Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠΎΡΠ°Π±Π»ΠΈ
// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ.
public Ship (int ns)
{
this.id = ns; // ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
this.live = false; // ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
this.x = 160; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ (ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΠ΅ΠΌΠ»ΠΈ)
this.y = 300; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Π²ΡΡΠΎΡΠ΅ (ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΠ΅ΠΌΠ»ΠΈ)
this.speedX = 0; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
this.speedY = -3; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ (ΡΡΠ°ΡΡ Ρ ΠΠ΅ΠΌΠ»ΠΈ)
this.fuel = 50; // Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΠ°Ρ ΡΠΎΠΏΠ»ΠΈΠ²Π°
this.fi = Math. PI;
this.WasOnMoon = false; // Π½Π° ΠΡΠ½Π΅ Π½Π΅ Π±ΡΠ»
this.start1 = true; // ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ°ΡΡ — Π΄Π°
this.comeback1 = false; // ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ — Π½Π΅Ρ
this.vstrecha = false; // Π²ΡΡΡΠ΅ΡΠΈ Π½Π΅Ρ
Start (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
// ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°ΡΡΠ° ΠΏΠΎΡΠΎΠΊΠ° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
public void Start ()
{
if (live == false)
{
live = true;
th = new Thread (new ThreadStart (Move)); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΠΎΡΠΎΠΊ «Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ»
th.Start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
// ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ
public void Stop ()
{
live = false;
}
// ΠΠΎΡΠΎΠΊ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
void Move ()
{
while (live) // ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ ΠΆΠΈΠ²
{
if ((x > 0 && x < 420 && y > 210 && y < 600) && !(x == 160 && y > 232)) // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
{
if (WasOnMoon == false) // ΠΡΠ»ΠΈ Π½Π° ΠΡΠ½Π΅ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ», ΡΠ°Π·Π³ΠΎΠ½
{ // ΠΏΠΎ ΠΎΡΠ±ΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Ρ ΠΊ ΠΡΠ½Π΅
if (start1)
{
fi = -Math.PI / 2 — 0.2;
start1 = false;
}
speedY = 6 * Math. Cos (fi);
speedX = -6 * Math. Sin (fi);
y -= 0.16;
if (fi > Math. PI / 2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
else // ΠΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Ρ ΠΡΠ½Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΠΎΡΠ±ΠΈΡΡ
{ // Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ
if (comeback1 && x < 230)
{
fi = -Math.PI / 2;
comeback1 = false;
}
if (!comeback1)
{
speedY = 6 * Math. Cos (fi);
speedX = 6 * Math. Sin (fi);
y -= 0.05;
fuel -= 0.05;
}
}
}
if (x == 160 && y > 225 && y < 235) // ΠΠ΅ΠΌΠ»Ρ — ΠΡΠ½Π°
{
speedX = -speedY + 3;
};
if (x > 465 && x < 630 && y < 180) // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
{
if (!WasOnMoon)
{
fi = Math. PI+0.4;
WasOnMoon = true;
comeback1 = true;
}
speedY = 4*Math.Cos (fi);
speedX = -4*Math.Sin (fi);
x += 0.04;
if (fi > Math. PI*2−0.3 || fi < Math. PI/2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
/*if (x > 461 && x < 630) // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ (ΡΡΠ°ΡΠΎΠ΅)
{
if (kM)
{
fi = Math. PI+0.36;
kM = false;
}
speedY = 4*Math.Cos (fi);
speedX = -4*Math.Sin (fi);
y -= 0.065;
}*/
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
{
if (x > 425) fi += 0.051;
else fi += 0.032;
}
else fi = 0;
if (ev ≠ null) ev (); // ΡΠΎΠ±ΡΡΠΈΠ΅
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
}
}
// ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΡΠ΅ΡΡ/Π³Π΅ΡΡΠ΅ΡΡ
public int X
{
get { return (int)x; } // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public int Y
{
get { return (int)y; } // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public double setY
{
set { y = value; } // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public double setX
{
set { x = value; } // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public bool isStopped { get { return! this.th.IsAlive; } }
}
class Charger: Ship // ΠΠ»Π°ΡΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°
{
public Charger (): base (10)
{
this.speedY = 0;
this.y = 225; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Π²ΡΡΠΎΡΠ΅ (ΠΎΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ)
this.x = 230;
this.fi = -Math.PI / 2 — 0.05; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ±ΠΈΡΡ
Stop (); // ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
StartCh (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΡΠ±ΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ
}
public void StartCh ()
{
if (live == false)
{
th.Abort (); // ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
live = true;
th = new Thread (new ThreadStart (Move)); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
th.Start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
void Move ()
{
while (live) // ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ ΠΆΠΈΠ²
{
speedY = 12 * Math. Cos (fi);
speedX = 12 * Math. Sin (fi);
if (y > 415) y -= 0.27; else y -= 0.05;
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) fi += 0.065; // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
else fi = 0;
Thread.Sleep (60); // ΡΠΏΠΈΠΌ
}
}
}
// ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΡ
class Program: Form
{
Ship[] ship;
Charger charger;
Controls ContForm;
int num;
int s1, s2; // ΠΠΎΠΌΠ΅ΡΠ° Π²ΡΡΡΠ΅ΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Thread th;
bool live;
// ΠΠΎΠ½ΡΡΡΠΊΡΠΎΡ
public Program ()
{
num = 1; // ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Text = «Objects»; // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°
Size = new Size (675, 675); // ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π°
FormBorderStyle = FormBorderStyle. FixedSingle;
FormClosed += new FormClosedEventHandler (exit);
this.Show (); // ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ
Location = new Point (200, 50); // ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ
ContForm = new Controls (); // ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ»Π°ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
ContForm.but += new delBut (ButPressed); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
ship = new Ship[10]; // ΠΠ°ΡΡΠΈΠ² ΠΈΠ· 10 ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
charger = new Charger ();
for (int i = 0; i < num; i++) // ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
{
ship[i] = new Ship (i); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΊΠΎΡΠ°Π±Π»Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²
ship[i]. ev += new delEv (MainEvent); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ
}
DoubleBuffered = true; // Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ — ΡΡΡΡΠ°Π½ΡΠ΅Ρ ΠΌΠ΅Π»ΡΠΊΠ°Π½ΠΈΠ΅
live = true; // ΡΡΠ°ΡΡΡΠ΅ΠΌ
th = new Thread (new ThreadStart (run));
th.Start ();
}
// ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
void run ()
{
while (live)
{
// ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
for (int i = 0; i < num; i++)
{
if (Math.Abs (ship[i]. X — charger. X) < 20 && Math. Abs (ship[i]. Y — charger. Y) < 20) // ΠΠ°ΠΏΡΠ°Π²ΠΊΠ°
if (!charger.isStopped)
{
if (ship[i]. fuel <= 89) ship[i]. fuel += 10; else ship[i]. fuel = 99;
}
if (ship[i]. fuel <= 0) // ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ°Π΅ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ, ΠΊΠΎΡΠ°Π±Π»Ρ «ΠΈΡΡΠ΅Π·Π°Π΅Ρ» .
{
ship[i]. Stop ();
ship[i].setX = 1000;
ship[i]. setY = 1000 + 50*i;
this.Invoke (new EventHandler (delegate // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠ°
{
ContForm.SetStatus (i, «ΠΡΡΠ΅Π·»);
}));
}
for (int j = i + 1; j < num; j++)
{
if (i < j) // Π£ΡΡΡΠΏΠ°Π΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
{
s2 = j;
s1 = i;
}
else
{
s2 = i;
s1 = j;
}
if (Math.Abs (ship[s1]. X — ship[s2]. X) < 20 && Math. Abs (ship[s1]. Y — ship[s2]. Y) < 20)
{
ship[s2]. vstrecha = true; // ΠΡΡΡΠ΅ΡΠ° Π½Π°ΡΠ°Π»Π°ΡΡ
if (!ship[s1]. isStopped && !ship[s2]. isStopped) ship[s2]. Stop ();
this.Invoke (new EventHandler (delegate
{
if (ContForm.IsntDisappeared (s2)) ContForm. SetStatus (s2, «Π£ΡΡΡΠΏΠ°Π΅Ρ»);
}));
}
else if (ship[s2]. vstrecha)
{
ship[s2].Start (); // ΠΡΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π», ΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
ship[s2]. vstrecha = false; // ΠΡΡΡΠ΅ΡΠ° Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ
this.Invoke (new EventHandler (delegate // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠ°
{
ContForm.SetStatus (s2, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
}));
}
}
//Invalidate ();
Thread.Sleep (31);
}
}
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ
void MainEvent ()
{
Invalidate ();
}
// ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
protected override void OnPaint (PaintEventArgs arg)
{
Pen grayPen = new Pen (Color.LightGray);
Pen blackPen = new Pen (Color.Black);
Brush blackBrush = new SolidBrush (Color.Black);
Brush whiteBrush = new SolidBrush (Color.White);
Brush greenBrush = new SolidBrush (Color.Lime);
Font ArialF = new Font («Arial», 10);
arg.Graphics.FillRectangle (blackBrush, 0,0,1280,960); // Π€ΠΎΠ½
arg.Graphics.FillRectangle (whiteBrush, 100, 150, 2, 2); // ΠΠ²Π΅Π·Π΄Ρ
arg.Graphics.DrawEllipse (grayPen, 40, 230, 370, 370); // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
arg.Graphics.DrawEllipse (grayPen, 468, 28, 162, 162); // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
arg.Graphics.FillEllipse (new SolidBrush (Color.DeepSkyBlue), 100, 290, 250, 250); // ΠΠ΅ΠΌΠ»Ρ
arg.Graphics.FillEllipse (new SolidBrush (Color.DarkKhaki), 500, 60, 100, 100); // ΠΡΠ½Π°
for (int i = 0; i < num; i++) // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
{
arg.Graphics.FillEllipse (greenBrush, ship[i]. X, ship[i]. Y, 16, 16); // ΠΊΠΎΡΠ°Π±Π»Ρ
arg.Graphics.DrawEllipse (blackPen, ship[i]. X, ship[i]. Y, 16, 16); // ΠΎΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»Ρ
arg.Graphics.DrawString (ship[i]. id + «», ArialF, blackBrush, ship[i]. X + 4, ship[i]. Y); // Π½ΠΎΠΌΠ΅Ρ
arg.Graphics.DrawString (Math.Round (ship[i]. fuel) + «», ArialF, whiteBrush, ship[i]. X — 1, ship[i]. Y — 15); // ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
}
arg.Graphics.FillEllipse (new SolidBrush (Color.DarkRed), charger. X, charger. Y, 16, 16); // Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ
arg.Graphics.DrawEllipse (blackPen, charger. X, charger. Y, 16, 16); // ΠΎΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»Ρ
arg.Graphics.DrawString («C», ArialF, blackBrush, charger. X + 2, charger. Y); // Π½ΠΎΠΌΠ΅Ρ
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΡΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
void ButPressed (string btn, int numship)
{
if (btn == «add»)
{
if (num < 10)
{ // Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ < 10
ship[num] = new Ship (num); // ΡΠΎΠ·Π΄Π°ΡΠΌ
ship[num]. ev += new delEv (MainEvent); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ
ContForm.SetStatus (num, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
num++;
}
else
{
MessageBox.Show («ΠΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 10!»);
}
}
else if (btn == «start»)
{
for (int i = 0; i < num; i++)
{
if (ContForm.IsntDisappeared (i))
{
ship[i]. Start (); // ΡΡΠ°ΡΡΡΠ΅ΠΌ Π²ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΡΠ΅Π·Π½ΡΠ²ΡΠΈΡ
ContForm.SetStatus (i, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
}
}
charger.StartCh ();
}
else if (btn == «stop»)
{
for (int j = 0; j < num; j++)
{
if (ContForm.IsntDisappeared (j))
{
ship[j]. Stop (); // ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΊΠΎΡΠ°Π±Π»ΠΈ
ContForm.SetStatus (j, «ΠΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½»);
}
}
charger.Stop ();
}
else if (btn == «fuel») // Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ 20 Π΅Π΄ΠΈΠ½ΠΈΡ ΡΠΎΠΏΠ»ΠΈΠ²Π°
{
//for (int i = 0; i < num; i++) ship[i]. fuel = 99; // Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
if (ship[numship] ≠ null)
{
ship[numship]. fuel += 20;
if (ship[numship]. fuel > 99) ship[numship]. fuel = 99; // Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΏΠ»ΠΈΠ²Π° ΠΏΡΠ΅Π²ΡΡΠΈΡ 99, ΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² 99
}
}
}
// ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π°, Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ ΠΈ Π·aΠΊΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
protected override void OnClosed (EventArgs args)
{
exit (null, null);
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
void exit (object obj, EventArgs arg)
{
for (int i = 0; i < num; i++)
{
ship[i]. Stop ();
}
charger.Stop ();
th.Abort ();
th.Join ();
Application.Exit ();
}
// ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ
static void Main ()
{
Program prog = new Program (); // ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΊΠ»Π°ΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ
Application.EnableVisualStyles ();
Application.Run (prog); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅
}
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java
import java.util.*;
import java.awt.*;
import java.awt.event.*;
class Ship extends Observable implements Runnable// ΠΠ»Π°ΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ
{
protected Thread th;
public int id; // ΠΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
protected boolean live;
protected double x, y; // ΠΏΠΎΠ·ΠΈΡΠΈΡ
protected double speedX, speedY; // ΡΠΊΠΎΡΠΎΡΡΡ
protected double fi; // ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ±ΠΈΡΡ
public double fuel; // ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
protected boolean WasOnMoon; // Π±ΡΠ» Π»ΠΈ Π½Π° ΠΡΠ½Π΅
protected boolean start1; // ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠ°ΡΡΠΎΠ²Π°Π»
protected boolean comeback1; // ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅
public boolean vstrecha; // ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ Π²ΡΡΡΠ΅ΡΠΈ
public Ship (int ns)// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
{
this.id = ns; // ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ
this.live = false; // ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
this.x = 160; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ (ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΠ΅ΠΌΠ»ΠΈ)
this.y = 300; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Π²ΡΡΠΎΡΠ΅ (ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΠ΅ΠΌΠ»ΠΈ)
this.speedX = 0; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
this.speedY = -3; // ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ (ΡΡΠ°ΡΡ Ρ ΠΠ΅ΠΌΠ»ΠΈ)
this.fuel = 50; // Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΠ°Ρ ΡΠΎΠΏΠ»ΠΈΠ²Π°
this.fi = Math. PI;
this.WasOnMoon = false; // Π½Π° ΠΡΠ½Π΅ Π½Π΅ Π±ΡΠ»
this.start1 = true; // ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ°ΡΡ — Π΄Π°
this.comeback1 = false; // ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ — Π½Π΅Ρ
this.vstrecha = false; // Π²ΡΡΡΠ΅ΡΠΈ Π½Π΅Ρ
Start (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
}
public void Start () // Π€ΡΠ½ΠΊΡΠΈΡ ΡΡΠ°ΡΡΠ°
{
if (live == false)
{
live = true;
th = new Thread (this); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΠΎΡΠΎΠΊ «Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ»
th.start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
public void Stop ()// Π€ΡΠ½ΠΊΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
{
live = false;
}
public void run () // ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ
{
while (live) // ΠΠΎΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡ
{
if ((x > 0 && x < 420 && y > 210 && y < 600) && !(x == 160 && y > 232)) // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
{
if (WasOnMoon == false) // ΠΡΠ»ΠΈ Π½Π° ΠΡΠ½Π΅ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ», ΡΠ°Π·Π³ΠΎΠ½
{ // ΠΏΠΎ ΠΎΡΠ±ΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Ρ ΠΊ ΠΡΠ½Π΅
if (start1)
{
fi = -Math.PI / 2 — 0.2;
start1 = false;
}
speedY = 6 * Math. cos (fi);
speedX = -6 * Math. sin (fi);
y -= 0.16;
if (fi > Math. PI / 2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
else // ΠΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Ρ ΠΡΠ½Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΠΎΡΠ±ΠΈΡΡ
{ // Ρ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ
if (comeback1 && x < 230)
{
fi = -Math.PI / 2;
comeback1 = false;
}
if (!comeback1)
{
speedY = 6 * Math. cos (fi);
speedX = 6 * Math. sin (fi);
y -= 0.05;
fuel -= 0.05;
}
}
}
if (x == 160 && y > 225 && y < 235) // ΠΠ΅ΠΌΠ»Ρ — ΠΡΠ½Π°
{
speedX = -speedY + 3;
};
if (x > 465 && x < 630 && y < 180) // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
{
if (!WasOnMoon)
{
fi = Math. PI + 0.4;
WasOnMoon = true;
comeback1 = true;
}
speedY = 4 * Math. cos (fi);
speedX = -4 * Math. sin (fi);
x += 0.04;
if (fi > Math. PI * 2 — 0.3 || fi < Math. PI / 2) fuel -= 0.5; // Π Π°Π·Π³ΠΎΠ½: ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ
else fuel -= 0.05;
}
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
{
if (x > 425) fi += 0.051;
else fi += 0.032;
}
else fi = 0;
try
{
Thread.sleep (60); // ΡΠΏΠΈΠΌ
}
catch (InterruptedException iE) { }
setChanged ();
notifyObservers (new Integer (0));
}
}
// ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΡΠ΅ΡΡ/Π³Π΅ΡΡΠ΅ΡΡ
public double X ()
{
return x; // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public double Y ()
{
return y; // ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public void setY (double value)
{
y = value; // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public void setX (double value)
{
x = value; // Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ
}
public boolean isStopped () { return! this.th.isAlive (); }
}
class Charger extends Ship// ΠΠ»Π°ΡΡ Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊΠ°
{
public Charger ()
{
super (10);
this.speedY = 0;
this.y = 225; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎ Π²ΡΡΠΎΡΠ΅ (ΠΎΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ)
this.x = 230;
this.fi = -Math.PI / 2 — 0.05; // Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ±ΠΈΡΡ
Stop (); // ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
StartCh (); // Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΡΠ±ΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ
}
public void StartCh ()
{
if (live == false)
{
th.interrupt (); // ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
live = true;
th = new Thread (this); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
th.start (); // Π‘ΡΠ°ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
}
}
public void run ()
{
while (live) // ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ ΠΆΠΈΠ²
{
speedY = 9 * Math. cos (fi);
speedX = 9 * Math. sin (fi);
if (y > 415) y -= 0.21;
x += speedX; y += speedY; // Π΄Π²ΠΈΠΆΠ΅ΠΌΡΡ
if (fi < 2 * Math. PI) fi += 0.049; // ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ³ΠΎΠ» ΡΠΈ
else fi = 0;
try
{
th.sleep (60); // ΡΠΏΠΈΠΌ
}
catch (InterruptedException iE) { }
setChanged ();
notifyObservers (new Integer (0));
}
}
}
class Program extends Frame implements Observer// ΠΠ»Π°ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
{
Ship[] ship;
Charger charger;
public int num;
int s1, s2; // ΠΠΎΠΌΠ΅ΡΠ° Π²ΡΡΡΠ΅ΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
private double dx, dy;
Thread th;
private boolean live;
protected int numship;
public Program () // ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
{
num = 1; // ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
this.setTitle («Objects»); // Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°
this.setSize (675, 675); // ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π°
this.setResizable (false);
this.setLocation (200, 50);// ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ
ship = new Ship[10]; // ΠΠ°ΡΡΠΈΠ² ΠΈΠ· 10 ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ (ΠΌΠ°ΠΊΡ)
for (int i = 0; i < num; i++) // ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
{
ship[i] = new Ship (i); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΊΠΎΡΠ°Π±Π»Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²
ship[i]. addObserver (this);// ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ
}
charger = new Charger ();
charger.addObserver (this);
this.addWindowListener (new WindowAdapter ()// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
{
public void windowClosing (WindowEvent wE)
{
Exit (null, null);
}
});
this.show ();
}
public void update (Observable obj, Object arg) // ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ Π²ΡΡΡΠ΅ΡΠΈ
{
for (int i = 0; i < num; i++)
{
if (Math.abs (ship[i]. X () — charger. X ()) < 20 && Math. abs (ship[i]. Y () — charger. Y ()) < 20) // ΠΠ°ΠΏΡΠ°Π²ΠΊΠ°
if (!charger.isStopped ())
{
if (ship[i]. fuel <= 89) ship[i]. fuel += 10; else ship[i]. fuel = 99;
}
if (ship[i]. fuel <= 0) // ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ°Π΅ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ, ΠΊΠΎΡΠ°Π±Π»Ρ «ΠΈΡΡΠ΅Π·Π°Π΅Ρ» .
{
ship[i]. Stop ();
ship[i].setX (1000);
ship[i].setY (1000 + 50*i);
}
for (int j = i + 1; j < num; j++)
{
if (i < j) // Π£ΡΡΡΠΏΠ°Π΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Ρ Π±ΠΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ
{
s2 = j;
s1 = i;
}
else
{
s2 = i;
s1 = j;
}
if (Math.abs (ship[s1]. X () — ship[s2]. X ()) < 20 && Math. abs (ship[s1]. Y () — ship[s2]. Y ()) < 20)
{
ship[s2]. vstrecha = true; // ΠΡΡΡΠ΅ΡΠ° Π½Π°ΡΠ°Π»Π°ΡΡ
if (!ship[s1]. isStopped () && !ship[s2]. isStopped ()) ship[s2]. Stop ();
}
else if (ship[s2]. vstrecha)
{
ship[s2].Start (); // ΠΡΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π», ΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
ship[s2]. vstrecha = false; // ΠΡΡΡΠ΅ΡΠ° Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ
}
}
}
repaint ();
}
public void paint (Graphics arg)
{
super.paint (arg);
Color gray = Color. gray;
Color darkGray = Color. darkGray;
Color black = Color. black;
Color white = Color. white;
setBackground (new Color (0, 0, 0)); // Π€ΠΎΠ½
arg.setColor (gray);
arg.drawOval (40, 230, 370, 370); // ΠΡΠ±ΠΈΡΠ° ΠΠ΅ΠΌΠ»ΠΈ
arg.drawOval (468, 28, 162, 162); // ΠΡΠ±ΠΈΡΠ° ΠΡΠ½Ρ
arg.setColor (new Color (0, 128, 255));
arg.fillOval (100, 290, 250, 250); // ΠΠ΅ΠΌΠ»Ρ
arg.setColor (new Color (128, 128, 64));
arg.fillOval (500, 60, 100, 100); // ΠΡΠ½Π°
for (int i = 0; i < num; i++) // ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΡΠ°Π±Π»ΠΈ
{
arg.setColor (new Color (0, 255, 64));
arg.fillOval (System.Convert.ToInt32(ship[i]. X ()), System.Convert.ToInt32(ship[i]. Y ()), 16, 16); // ΠΊΠΎΡΠ°Π±Π»Ρ
arg.setColor (darkGray);
arg.drawOval (System.Convert.ToInt32(ship[i]. X ()), System.Convert.ToInt32(ship[i]. Y ()), 16, 16); // ΠΎΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»Ρ
arg.setColor (black);
arg.drawString (System.Convert.ToString (ship[i]. id), System.Convert.ToInt32(ship[i]. X () + 4), System.Convert.ToInt32(ship[i]. Y ()+12)); // Π½ΠΎΠΌΠ΅Ρ
arg.setColor (white);
arg.drawString (System.Convert.ToString (Math.round (ship[i]. fuel)), System.Convert.ToInt32(ship[i]. X () — 1), System.Convert.ToInt32(ship[i]. Y () — 3));
}
arg.setColor (new Color (128, 0, 0));
arg.fillOval (System.Convert.ToInt32(charger.X ()), System.Convert.ToInt32(charger.Y ()), 16, 16); // Π·Π°ΠΏΡΠ°Π²ΡΠΈΠΊ
arg.setColor (black);
arg.drawOval (System.Convert.ToInt32(charger.X ()), System.Convert.ToInt32(charger.Y ()), 16, 16); // ΠΎΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»Ρ
arg.drawString («C», System.Convert.ToInt32(charger.X () + 4), System.Convert.ToInt32(charger.Y ()+12)); // Π½ΠΎΠΌΠ΅Ρ
}
// ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
void Exit (Object obj, System. EventArgs arg)
{
for (int i = 0; i < num; i++)
{
ship[i]. Stop ();
ship[i].th.interrupt ();
}
charger.Stop ();
charger.th.interrupt ();
System.exit (0);
}
}
class Controls extends Frame implements ActionListener // ΠΠ»Π°ΡΡ ΠΎΠΊΠΎΠ½ Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ
{
Program prog;// Π€ΠΎΡΠΌΠ° Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
Button AddShip; // ΠΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΡΠ°Π±Π»Ρ
Button AddFuel; // ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Button Pause; // ΠΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
TextField numShip; // ΠΠΎΠΌΠ΅Ρ ΠΊΠΎΡΠ°Π±Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ
Point[] Koord;
TextField[] Sost; // Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Π΅ΠΉ
Frame ctrl, Info;
public Controls ()
{
prog = new Program ();// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
// ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅
numShip = new TextField ();
numShip.setLocation (35, 20);
numShip.setText («0»);
numShip.setSize (65, 25);
// ΠΊΠ½ΠΎΠΏΠΊΠΈ
AddShip = new Button («ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΡΠ°Π±Π»Ρ»);
AddShip.setLocation (10, 50);
AddShip.setSize (120, 25);
AddShip.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent aE)
{
if (prog.num < 10)
{ // Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ < 10
prog.ship[prog.num] = new Ship (prog.num); // ΡΠΎΠ·Π΄Π°ΡΠΌ
prog.ship[prog.num]. addObserver (prog); // ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ
SetStatus (prog.num, «Π ΠΏΠΎΠ»ΡΡΠ΅»);
prog.num++;
}
else
{
System.Windows.Forms.MessageBox.Show («ΠΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 10!»);
}
}
});
AddFuel = new Button («ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΏΠ»ΠΈΠ²ΠΎ»);
AddFuel.setLocation (10, 80);
AddFuel.setSize (120, 25);
AddFuel.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent aE)
{
if (prog.ship[System.Convert.ToInt32(numShip.getText ())] ≠ null)
{
prog.ship[System.Convert.ToInt32(numShip.getText ())]. fuel += 20;
if (prog.ship[System.Convert.ToInt32(numShip.getText ())]. fuel > 99)
prog.ship[System.Convert.ToInt32(numShip.getText ())]. fuel = 99;
}
}
});
Pause = new Button («ΠΠ°ΡΠ·Π°»);