ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΡ€ΠΎΠΌΠ΅ основного ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ 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 («ΠŸΠ°ΡƒΠ·Π°»);

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ