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

Π˜Π³Ρ€ΠΎΠ²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«Wall on WallΒ»

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

NET — это ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… слуТб, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π²ΠΎ Π²Ρ€Π΅ΠΌΡ создания ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘#. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π‘# ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ .NET. ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ происхоТдСниС ΠΌΠ½ΠΎΠ³ΠΈΡ… особСнностСй ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π‘# ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ своими корнями Π² .NET. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ слуТбы, прСдоставляСмыС инфраструктурой .NET-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Анализ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Основной… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π˜Π³Ρ€ΠΎΠ²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«Wall on WallΒ» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Московский ГосударствСнный Π“ΠΎΡ€Π½Ρ‹ΠΉ УнивСрситСт ΠšΠ°Ρ„Π΅Π΄Ρ€Π° БАПР ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ программирования»

Π˜Π³Ρ€ΠΎΠ²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «Wall on Wall»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»:

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Π³Ρ€ΡƒΠΏΠΏΡ‹ АБП-Π‘-11

Иванов А.А.

Москва, 2013 Π³.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. Анализ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ спСцификаций

1.1 Анализ задания, Π²Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, языка ΠΈ ΡΡ€Π΅Π΄Ρ‹ программирования

1.2 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

1.3 Анализ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ… для Π΅Π΅ Ρ…ранСния

1.4 Анализ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

2.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

2.1.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° мСню

2.1.2 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…

  • 3. Π’Ρ‹Π±ΠΎΡ€ стратСгии тСстирования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов
    • 3.1 Анализ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈ Π²Ρ‹Π±ΠΎΡ€ стратСгии тСстирования
    • 3.2 НСпосрСдствСнноС тСстированиС
    • 4. Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    • 5. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ЦСлью Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° популярной Ρ€Π°Π·Π²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ Wall on Wall. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ³Ρ€Π°Π΅Ρ‚ согласно созданному Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ усвоСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ возмоТности Visual Studio. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π»Π΅Π³ΠΊΠΎ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся «Π²ΠΈΠ·ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ» прилоТСния.

1. Анализ тСхничСских Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ спСцификаций

1.1 Анализ задания, Π²Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, языка ΠΈ ΡΡ€Π΅Π΄Ρ‹

Π‘# — это Π½ΠΎΠ²Ρ‹ΠΉ язык программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ, ΠΏΠΎ Π·Π°ΠΌΡ‹ΡΠ»Ρƒ создатСлСй, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚Π°. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ — ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ программисту ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

C# создавался ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΊΠ°Ρ€ΠΊΠ°ΡΠΎΠΌ Framework .Net ΠΈ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ всС Π΅Π³ΠΎ возмоТности — ΠΊΠ°ΠΊ FCL, Ρ‚Π°ΠΊ ΠΈ CLR;

C# являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком, Π³Π΄Π΅ Π΄Π°ΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹, встроСнныС Π² ΡΠ·Ρ‹ΠΊ, прСдставлСны классами;

C# являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ языком с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ями наслСдования ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ;

C# являСтся наслСдником языков C/C++, сохраняя Π»ΡƒΡ‡ΡˆΠΈΠ΅ Ρ‡Π΅Ρ€Ρ‚Ρ‹ этих популярных языков программирования. ΠžΠ±Ρ‰ΠΈΠΉ с ΡΡ‚ΠΈΠΌΠΈ языками синтаксис, Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ языка ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ программистов ΠΎΡ‚ Π‘++ ΠΊ C#; сохранив основныС Ρ‡Π΅Ρ€Ρ‚Ρ‹ своСго Π²Π΅Π»ΠΈΠΊΠΎΠ³ΠΎ родитСля, язык стал ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅.

Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания языка программирования Π‘# ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ срСды, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, которая нСпосрСдствСнно связана с Π‘# ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся .NET.

.NET — это ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… слуТб, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся Π²ΠΎ Π²Ρ€Π΅ΠΌΡ создания ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘#. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π‘# ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ .NET. ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ происхоТдСниС ΠΌΠ½ΠΎΠ³ΠΈΡ… особСнностСй ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Π‘# ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ своими корнями Π² .NET. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ слуТбы, прСдоставляСмыС инфраструктурой .NET-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

1. .NET прСдоставляСт срСдства для исполнСния инструкций, содСрТащихся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, написанной Π½Π° Π‘#. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ .NET называСтся срСдой исполнСния (execution engine).

2. .NET ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ срСду, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΊ Π½Π΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (type safe environment). ΠžΠ±Ρ€Π°Π·Π½ΠΎ говоря, .NET обСспСчиваСт «Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Ρ‹Ρ€ΠΊΠΈ для Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ — для ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ²» .

3. .NET освобоТдаСт программиста ΠΎΡ‚ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ приводящСго ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΌ процСсса управлСния ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

4. .NET прСдоставляСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ срСду исполнСния, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Тизнь Ρ…Π°ΠΊΠ΅Ρ€Π°ΠΌ ΠΈ ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

5. Π’ ΡΠΎΡΡ‚Π°Π² .NET-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, содСрТащая массу Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Она экономит Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ программист ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°. ЀактичСски, ΠΎΠ½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, созданный ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ программистами Microsoft.

6. Π’ .NET ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ (Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€ΠΈ создании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»Π° прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, называСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ).

ВсС сказанноС Π²Ρ‹ΡˆΠ΅ ΠΎ .NET — Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ простоС пСрСчислСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойств ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ соврСмСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

РСализация, ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰Π°Ρ построСниС Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, являСтся Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ успСху C#.

Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio 2010 Π±Ρ‹Π»Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ создана для Π½ΡƒΠΆΠ΄ .NET, ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ всСми Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ инструмСнтами.

Π’ Ρ‡Π°ΡΡ‚ности, Π² Visual Studio 2010 ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ графичСского интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсными ΡΠ²Π»ΡΡŽΡ‚ΡΡ Windows Forms. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows Forms прСдставляСт собой событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Microsoft .NET Framework.

Π”Π°Π½Π½Ρ‹ΠΉ интСрфСйс ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ интСрфСйса Microsoft Windows Π·Π° ΡΡ‡Π΅Ρ‚ создания ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Win32 API Π² ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅.

ИмСнно поэтому, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык Π‘# ΠΈ ΡΡ€Π΅Π΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio 2010 для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

1.2 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ интСрфСйс прилоТСния Windows Forms. Π’ Ρ‡Π°ΡΡ‚ности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°Ρ†ΠΈΠΈ Visual Studio 2010:

System — основноС пространство ΠΈΠΌΠ΅Π½, содСрТит Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ winAPI. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ повсСмСстно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

System.Collections.Generic — пространство ΠΈΠΌΠ΅Π½, содСрТащСС ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля.

System.Drawing — пространство ΠΈΠΌΠ΅Π½, содСрТащСС Π² ΡΠ΅Π±Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отрисовки Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, крСстики, Π½ΠΎΠ»ΠΈΠΊΠΈ

System.Text — пространство ΠΈΠΌΠ΅Π½, содСрТащСС Π² ΡΠ΅Π±Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Скстом. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ повсСмСстно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

System.Windows.Forms — основноС пространство ΠΈΠΌΠ΅Π½ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ прилоТСния, содСрТит классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows Forms. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания основного ΠΎΠΊΠ½Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ взаимодСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

1.3 Анализ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€ структур Π΄Π°Π½Π½Ρ‹Ρ… для Π΅Π΅ Ρ…ранСния Основной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ являСтся состояниС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3×3, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡ‡Π΅Π΅ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (крСстик, Π½ΠΎΠ»ΠΈΠΊ ΠΈΠ»ΠΈ пустота).

Для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ задания этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ достаточно Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ цСлочислСнного массива, Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ 3×3, ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт этого массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 2 (0 — пустота, 1 — крСстик, 2 — Π½ΠΎΠ»ΠΈΠΊ).

ΠšΡ€ΠΎΠΌΠ΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ хранятся Π΅Ρ‰Π΅ нСсколько Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ΠΈΠΏ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°: ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния ΠΎΡ‚ 0 Π΄ΠΎ 2 (0- ΠΈΠ³Ρ€Π° с Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, 1 — «ΡΠ»ΠΎΠΆΠ½Ρ‹ΠΉ» ИИ, 2 — «ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ» ИИ), для хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ цСлочислСнная пСрСмСнная.

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ…ΠΎΠ΄: крСстик, Π½ΠΎΠ»ΠΈΠΊ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹, для хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ цСлочислСнная пСрСмСнная.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ситуации: 0 — ΠΈΠ³Ρ€Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, 1 — ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»ΠΈ крСстики, 2 — ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΈ, 3 — Π½ΠΈΡ‡ΡŒΡ, для хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ цСлочислСнная пСрСмСнная.

1.4 Анализ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΎ вывСсти Π² ΠΊΠ»Π°ΡΡ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‚.ΠΊ. это позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ излишнСй связности ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ класс позволяСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΡΠΊΡ€Π°Π½.

ΠŸΡ€ΠΈ этом, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ΠΌ являСтся пСрСнос Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ дСйствий ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π² Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… класса: класса ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²ΡƒΡ… ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ дСйствий Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ‚ΠΎΠΆΠ΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ вынСсти Π² ΠΊΠ»Π°ΡΡ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ слоТности основного класса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ вынСсти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ситуации Π² ΠΊΠ»Π°ΡΡ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‚.ΠΎ. оставив Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ классС лишь ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для взаимодСйствия с ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ схСма взаимодСйствия классов Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

2. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

2.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

РазрабатываСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ всСх возрастных ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… слабый Π½Π°Π²Ρ‹ΠΊ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ, ΠΈ ΠΊ ΠΈΠ½Ρ‚СрфСйсу ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ особСнныС трСбования. Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° являСтся ΠΈΠ³Ρ€ΠΎΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½. ИмСнно поэтому, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ цСлСсообразно Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

2.1.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° мСню Для обСспСчСния быстрой ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ цСлСсообразно ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ИсслСдовав интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ-Π°Π½Π°Π»ΠΎΠ³ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° 1 ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π² ΡΡ‚ΠΎΠΉ ΠΈΠ³Ρ€Π΅:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹

2.1.2 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌ Π²Π²ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π° Для вСдСния ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΠΎΡΡ‚ояний интСрфСйса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° табличная Ρ„ΠΎΡ€ΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π°.

ΠΈΠ³Ρ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСрфСйс Π΄Π°Π½Π½Ρ‹Π΅ Рисунок 2 — Π˜Π³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Рисунок 3 — Π˜Π³Ρ€ΠΎΠ²ΠΎΠΉ процСсс Рисунок 4 — ΠœΠΎΠ½ΡΡ‚Ρ€ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΊΡ€Π°Ρ поля Рисунок 5 — ΠŸΠΎΡ‚Π΅Ρ€Ρ 1 Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Health`ΠΎΠ² послС ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° монстра Π·Π° ΠΏΠΎΠ»Π΅

3. Π’Ρ‹Π±ΠΎΡ€ стратСгии тСстирования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСстов ВСстированиС — процСсс выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ†Π΅Π»ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся выявлСниС ошибок. НикакоС тСстированиС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ отсутсвиС ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ шагом Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ качСствСнного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

3.1 Анализ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈ Π²Ρ‹Π±ΠΎΡ€ стратСгии тСстирования Богласно ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ тСстирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ²: структурный ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄-тСстированиС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ извСстна структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния («Π±Π΅Π»Ρ‹ΠΉ ящик»).

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄-тСстированиС, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½Π° структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния («Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ящик»). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ цСлСсообразно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для тСстирования Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ…ΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ситуации.

ΠžΡ†Π΅Π½ΠΎΡ‡Π½ΠΎΠ΅ тСстированиС-тСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠΎΠΎΡ‚вСтсвии ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям. НСобходимо для Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ тСстирования, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΡ‚Π°ΠΏΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π±Ρ‹Π»ΠΈ исправлСны Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ ошибки ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ процСсса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ классов.

ΠžΡ†Π΅Π½ΠΎΡ‡Π½ΠΎΠ΅ тСстированиС.

Π‘Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ тСстированиС всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ нСдостатки интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ устранСны.

Π‘Ρ‹Π»ΠΎ сдСлано Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ практичСски Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ситуаций. ОбъСм Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Ρ‚Π°ΠΊΠΆΠ΅ остаСтся практичСски Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ — ΠΎΠΊΠΎΠ»ΠΎ 14, 5 ΠœΠ‘.

7 dows: ΠΎ ΠΌΠ΅Π½ΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡŽ стандартного ΠΎΠΊΠ½Π° Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅) ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΈΠ½Π°Ρ‡Π΅ Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ Π˜Π˜ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΡΡ‚ΡŒ ΠΊ

4. Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Класс ΠΈΠ³Ρ€ΠΎΠΊΠ°

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Graphics;

namespace WoW2

{

public class Player

{

//БостояниС ΠΈΠ³Ρ€ΠΎΠΊΠ°

private int money = 100;

private int lives = 10;

private Texture2D[] creepTextures;//ВСкстура «ΠœΠΎΠ½ΡΡ‚Ρ€Π°» ΠΈΠ³Ρ€ΠΎΠΊΠ°

private Texture2D bulletTexture;//ВСкстура снаряда

private List creeps = new List (); //Бписок «ΠœΠΎΠ½ΡΡ‚Ρ€ΠΎΠ²» ΠΈΠ³Ρ€ΠΎΠΊΠ°

private MouseState mouseState;//состояниС ΠΌΡ‹ΡˆΠΈ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ°

private MouseState oldState;//состояниС ΠΌΡ‹ΡˆΠΈ для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ°

//РасполоТСниС «ΠœΠΎΠ½ΡΡ‚Ρ€ΠΎΠ²» ΠΈΠ³Ρ€ΠΎΠΊΠ°

private int cellX;

private int cellY;

private int tileX;

private int tileY;

private string newCreepType;//Ρ‚ΠΈΠΏ «ΠΌΠΎΠ½ΡΡ‚Ρ€Π°» длядобавлСния

private int newCreepIndex;//ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½ΠΎΠ²ΠΎΠΉ тСкстуры" монстра"

private Level level;//справка ΠΎΠ± ΡƒΡ€ΠΎΠ²Π½Π΅

public int Money

{

get { return money; }

set { money = value; }

}

public int Lives

{

get { return lives; }

set { lives = value; }

}

public string NewCreepType

{

set { newCreepType = value; }

}

public int NewCreepIndex

{

set { newCreepIndex = value; }

}

/// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°

public Player (Level level, Texture2D[] creepTextures, Texture2D bulletTexture)

{

this.level = level;

this.creepTextures = creepTextures;

this.bulletTexture = bulletTexture;

}

/// Returns wether the current cell is clear

private bool IsCellClear ()

{

bool inBounds = cellX >= 0 && cellY >= 0 &&

cellX < level. Width && cellY < level. Height;

bool spaceClear = true;

// Check that there is no creep in this spot

foreach (Creep creep in creeps)

{

spaceClear = (creep.Position ≠ new Vector2(tileX, tileY));

if (!spaceClear)

{

break;

}

}

bool onPath = (level.GetIndex (cellX, cellY) ≠ 1);

return inBounds && spaceClear && onPath; // If both checks are true return true

}

/// Adds a creep to the player’s collection.

public void AddCreep ()

{

Creep creepToAdd = null;

switch (newCreepType)

{

case «Car Creep» :

{

creepToAdd = new CarCreep (creepTextures[0],

bulletTexture, new Vector2(tileX, tileY));

break;

}

case «Tank Creep» :

{

creepToAdd = new TankCreep (creepTextures[1],

bulletTexture, new Vector2(tileX, tileY));

break;

}

}

// Only add the tower if there is a space and if the player can afford it.

if (IsCellClear () == true && creepToAdd. Cost <= money)

{

creeps.Add (creepToAdd);

money -= creepToAdd. Cost;

// Reset the newTowerType field.

newCreepType = string. Empty;

}

else

{

newCreepType = string. Empty;

}

}

/// Updates the player.

public void Update (GameTime gameTime, List enemies)

{

mouseState = Mouse. GetState ();

cellX = (int)(mouseState.X / 32); // Convert the position of the mouse

cellY = (int)(mouseState.Y / 32); // from array space to level space

tileX = cellX * 32; // Convert from array space to level space

tileY = cellY * 32; // Convert from array space to level space

if (mouseState.LeftButton == ButtonState. Released

&& oldState. LeftButton == ButtonState. Pressed)

{

if (string.IsNullOrEmpty (newCreepType) == false)

{

AddCreep ();

}

}

foreach (Creep creep in creeps)

{

// Make sure the creep has no targets.

if (creep.HasTarget == false)

{

creep.GetClosestEnemy (enemies);

}

creep.Update (gameTime);

}

oldState = mouseState; // Set the oldState so it becomes the state of the previous frame.

}

public void Draw (SpriteBatch spriteBatch)

{

foreach (Creep creep in creeps)

{

creep.Draw (spriteBatch);

}

}

public void DrawPreview (SpriteBatch spriteBatch)

{

// Draw the creep preview.

if (string.IsNullOrEmpty (newCreepType) == false)

{

int cellX = (int)(mouseState.X / 32); // Convert the position of the mouse

int cellY = (int)(mouseState.Y / 32); // from array space to level space

int tileX = cellX * 32; // Convert from array space to level space

int tileY = cellY * 32; // Convert from array space to level space

Texture2D previewTexture = creepTextures[newCreepIndex];

spriteBatch.Draw (previewTexture, new Rectangle (tileX, tileY,

previewTexture.Width, previewTexture. Height), Color. White);

}

}

Класс мСню

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace WoW2

{

public enum ButtonStatus//ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ

{

Normal,

MouseOver,

Pressed,

}

public class Button: Sprite //Π₯Ρ€Π°Π½ΠΈΡ‚ внСшний Π²ΠΈΠ΄ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

{

private MouseState previousState;//БохраняСт состояниС ΠΌΡ‹ΡˆΠΈ послСднСго Ρ„Ρ€Π΅ΠΉΠΌΠ°

private Texture2D hoverTexture;

private Texture2D pressedTexture;//Бостояния тСкстур

private Rectangle bounds;//ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΊΡƒ

private ButtonStatus state = ButtonStatus. Normal;//БохраняСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ

public event EventHandler Clicked;//Π‘Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ

public event EventHandler OnPress;//Π‘Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Π·Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅

///Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ

/// ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ тСкстура ΠΊΠ½ΠΎΠΏΠΊΠΈ

/// ВСкстура рисуСмая, ΠΊΠΎΠ³Π΄Π° Π½Π°Π²Π΅Π΄Π΅Π½Π½Π° ΠΌΡ‹ΡˆΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ

/// ВСкстура рисуСмая, ΠΊΠΎΠ³Π΄Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠ°Ρ‚Π°

/// РасполоТСниС, Π³Π΄Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ нарисованна

public Button (Texture2D texture, Texture2D hoverTexture, Texture2D pressedTexture, Vector2 position)

: base (texture, position)

{

this.hoverTexture = hoverTexture;

this.pressedTexture = pressedTexture;

this.bounds = new Rectangle ((int)position.X, (int)position.Y,

texture.Width, texture. Height);

}

///ОбновляСм состояник ΠΊΠ½ΠΎΠΏΠΊΠΈ

///Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ врСмя

public override void Update (GameTime gameTime)

{

MouseState mouseState = Mouse. GetState ();//ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, находится Π»ΠΈ ΠΌΡ‹ΡˆΡŒ Π½Π°Π΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ

int mouseX = mouseState. X;

int mouseY = mouseState. Y;

bool isMouseOver = bounds. Contains (mouseX, mouseY);

if (isMouseOver && state ≠ ButtonStatus. Pressed)//ОбновлСниС состояния ΠΊΠ½ΠΎΠΏΠΊΠΈ

{

state = ButtonStatus. MouseOver;

}

else if (isMouseOver == false && state ≠ ButtonStatus. Pressed)

{

state = ButtonStatus. Normal;

}

if (mouseState.LeftButton == ButtonState. Pressed &&

previousState.LeftButton == ButtonState. Released)//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ

{

if (isMouseOver == true)

{

state = ButtonStatus. Pressed;//обновляСм состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ

if (OnPress ≠ null)

{

OnPress (this, EventArgs. Empty);//ЗапускаСм событиС НаТата (OnPress)

}

}

}

if (mouseState.LeftButton == ButtonState. Released &&

previousState.LeftButton == ButtonState. Pressed)//ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ отпустил Π»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΡƒ

{

if (isMouseOver == true)

{

state = ButtonStatus. MouseOver;//ОбновляСм состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ

if (Clicked ≠ null)

{

Clicked (this, EventArgs. Empty);//ЗапускаСм событиС Клика (Clicked)

}

}

else if (state == ButtonStatus. Pressed)

{

state = ButtonStatus. Normal;

}

}

previousState = mouseState;

}

/// РисуСм ΠΊΠ½ΠΎΠΏΠΊΡƒ

/// SpriteBatch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡Π°Ρ‚

public override void Draw (SpriteBatch spriteBatch)

{

switch (state)

{

case ButtonStatus. Normal:

spriteBatch.Draw (texture, bounds, Color. White);

break;

case ButtonStatus. MouseOver:

spriteBatch.Draw (hoverTexture, bounds, Color. White);

break;

case ButtonStatus. Pressed:

spriteBatch.Draw (pressedTexture, bounds, Color. White);

break;

default:

spriteBatch.Draw (texture, bounds, Color. White);

break;

}

}

}

}

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace WoW2

{

public class Toolbar

{

private Texture2D texture;

private SpriteFont font;//класс для доступа ΠΊ ΡˆΡ€ΠΈΡ„Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСм

private Vector2 position;//мСсто располоТСния Ρ‚ΡƒΠ»Π±Π°Ρ€Π°

private Vector2 textPosition;//мСсто располоТСния тСкста

public Toolbar (Texture2D texture, SpriteFont font, Vector2 position)

{

this.texture = texture;

this.font = font;

this.position = position;//располоТСниС тСкста Π² ΠΏΡ€Π°Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΠ³Π»Ρƒ

textPosition = new Vector2(130, position. Y + 10);

}

public void Draw (SpriteBatch spriteBatch, Player player)

{

spriteBatch.Draw (texture, position, Color. White);

string text = string. Format («Gold :{0} Lives: {1}», player. Money, player. Lives);

spriteBatch.DrawString (font, text, textPosition, Color. White);

}

}

}

Класс пСрСдвиТСния ΠΈ ΠΎΡ‚рисовки ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace WoW2

{

public class Enemy: Sprite

{

private Queue waypoints = new Queue ();

private float speedModifier;

private float modifierDuration;

private float modiferCurrentTime;

protected float startHealth;

protected float currentHealth;

protected bool alive = true;

protected float speed = 0.5f;

protected int bountyGiven;

/// Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Π³Π°

public float SpeedModifier

{

get { return speedModifier; }

set { speedModifier = value; }

}

/// ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ модификация скорости продлится

public float ModifierDuration

{

get { return modifierDuration; }

set

{

modifierDuration = value;

modiferCurrentTime = 0;

}

}

public float CurrentHealth

{

get { return currentHealth; }

set { currentHealth = value; }

}

/// % ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎΡΡ Ρƒ Π²Ρ€Π°Π³Π° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ

public float HealthPercentage

{

get { return currentHealth / startHealth; }

}

public bool IsDead

{

get { return! alive; }

}

public int BountyGiven

{

get { return bountyGiven; }

}

public float DistanceToDestination

{

get { return Vector2. Distance (position, waypoints. Peek ()); }

}

public Enemy (Texture2D texture, Vector2 position, float health, int bountyGiven, float speed)

: base (texture, position)

{

this.startHealth = health;

this.currentHealth = startHealth;

this.bountyGiven = bountyGiven;

this.speed = speed;

}

public void SetWaypoints (Queue waypoints)

{

foreach (Vector2 waypoint in waypoints)

this.waypoints.Enqueue (waypoint);

this.position = this.waypoints.Dequeue ();

}

public override void Update (GameTime gameTime)

{

base.Update (gameTime);

if (waypoints.Count > 0)

{

if (DistanceToDestination < 1f)

{

position = waypoints. Peek ();

waypoints.Dequeue ();

}

else

{

Vector2 direction = waypoints. Peek () — position;

direction.Normalize ();

float temporarySpeed = speed;//Π‘ΠžΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСдвиТСния

if (modiferCurrentTime > modifierDuration)// Ссли Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ модификация

{

//БбрасываСт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ

speedModifier = 0;

modiferCurrentTime = 0;

}

if (speedModifier ≠ 0 && modiferCurrentTime <= modifierDuration)

{

temporarySpeed *= speedModifier;// Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Ρ€Π°Π³Π°

modiferCurrentTime += (float)gameTime.ElapsedGameTime.TotalSeconds;// ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ

}

velocity = Vector2. Multiply (direction, temporarySpeed);

position += velocity;

}

}

else

alive = false;

if (currentHealth <= 0)

alive = false;

}

public override void Draw (SpriteBatch spriteBatch)

{

if (alive)

{

base.Draw (spriteBatch, Color. Black);

}

}

}

}

Класс ΠΈΠ³Ρ€Ρ‹

using System;

using System.Collections.Generic;

using System. Linq;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Audio;

using Microsoft.Xna.Framework.Content;

using Microsoft.Xna.Framework.GamerServices;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;

using Microsoft.Xna.Framework.Media;

namespace WoW2

{

public class Game1: Microsoft.Xna.Framework.Game

{

GraphicsDeviceManager graphics;

SpriteBatch spriteBatch;

Level level = new Level ();

WaveManager waveManager;

Player player;

Button carButton;

Button tankButton;

Toolbar toolBar;

public Game1()

{

graphics = new GraphicsDeviceManager (this);

Content.RootDirectory = «Content» ;

graphics.PreferredBackBufferWidth = level. Width * 32;

graphics.PreferredBackBufferHeight = 32 + level. Height * 32;

graphics.ApplyChanges ();

IsMouseVisible = true;

}

protected override void Initialize ()

{

base.Initialize ();

}

protected override void LoadContent ()

{

spriteBatch = new SpriteBatch (GraphicsDevice);

Texture2D topBar = Content. Load («tool bar»);

SpriteFont font = Content. Load («Arial»);

toolBar = new Toolbar (topBar, font, new Vector2(0, level. Height * 32));

Texture2D grass = Content. Load («grass»);

Texture2D path = Content. Load («path»);

level.AddTexture (grass);

level.AddTexture (path);

Texture2D bulletTexture = Content. Load («bullet»);

Texture2D[] creepTexture = new Texture2D[]

{

Content.Load («Car»),

Content.Load («Tank»),

};

player = new Player (level, creepTexture, bulletTexture);

Texture2D enemyTexture = Content. Load («enemy»);

Texture2D healthTexture = Content. Load («health bar»);

waveManager = new WaveManager (player, level, 24, enemyTexture,

healthTexture);

Texture2D carNormal = Content. Load («GUI\Car creep\car button»);

Texture2D carHover = Content. Load («GUI\Car creep\car hover»);

Texture2D carPressed = Content. Load («GUI\Car creep\car pressed»);

Texture2D tankNormal = Content. Load («GUI\Tank creep\tank button»);

Texture2D tankHover = Content. Load («GUI\Tank creep\tank hover»);

Texture2D tankPressed = Content. Load («GUI\Tank creep\tank pressed»);

carButton = new Button (carNormal, carHover,

carPressed, new Vector2(0, level. Height * 32));

tankButton = new Button (tankNormal, tankHover,

tankPressed, new Vector2(32, level. Height * 32));

carButton.OnPress += new EventHandler (carButton_OnPress);

tankButton.OnPress += new EventHandler (tankButton_OnPress);

}

protected override void UnloadContent ()

{

}

private void carButton_OnPress (object sender, EventArgs e)

{

player.NewCreepType = «Car creep» ;

player.NewCreepIndex = 0;

}

private void tankButton_OnPress (object sender, EventArgs e)

{

player.NewCreepType = «Tank creep» ;

player.NewCreepIndex = 1;

}

protected override void Update (GameTime gameTime)

{

waveManager.Update (gameTime);

player.Update (gameTime, waveManager. Enemies);

carButton.Update (gameTime);

tankButton.Update (gameTime);

base.Update (gameTime);

}

protected override void Draw (GameTime gameTime)

{

GraphicsDevice.Clear (Color.CornflowerBlue);

spriteBatch.Begin ();

level.Draw (spriteBatch);

player.Draw (spriteBatch);

waveManager.Draw (spriteBatch);

toolBar.Draw (spriteBatch, player);

carButton.Draw (spriteBatch);

tankButton.Draw (spriteBatch);

player.DrawPreview (spriteBatch);

spriteBatch.End ();

base.Draw (gameTime);

}

}

}

Класс

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace WoW2

{

public class WaveManager

{

private int numberOfWaves;

private float timeSinceLastWave;

private Queue waves = new Queue ();

private Texture2D enemyTexture;

private bool waveFinished = false;

private Level level;

public Wave CurrentWave

{

get { return waves. Peek (); }

}

public List Enemies

{

get { return CurrentWave. Enemies; }

}

public int Round

{

get { return CurrentWave. RoundNumber + 1; }

}

public WaveManager (Player player, Level level, int numberOfWaves,

Texture2D enemyTexture, Texture2D healthTexture)

{

this.numberOfWaves = numberOfWaves;

this.enemyTexture = enemyTexture;

this.level = level;

for (int i = 0; i < numberOfWaves; i++)

{

int initialNumberOfEnemies = 10;

int numberModifier = (i / 10) + 1;

Wave wave = new Wave (i, initialNumberOfEnemies * numberModifier,

player, level, enemyTexture, healthTexture);

waves.Enqueue (wave);

}

StartNextWave ();

}

private void StartNextWave ()

{

if (waves.Count > 0)

{

waves.Peek ().Start ();

timeSinceLastWave = 0;

waveFinished = false;

}

}

public void Update (GameTime gameTime)

{

CurrentWave.Update (gameTime);

if (CurrentWave.RoundOver)

{

waveFinished = true;

}

if (waveFinished)

{

timeSinceLastWave += (float)gameTime.ElapsedGameTime.TotalSeconds;

}

if (timeSinceLastWave > 30.0f)

{

waves.Dequeue ();

StartNextWave ();

}

}

public void Draw (SpriteBatch spriteBatch)

{

CurrentWave.Draw (spriteBatch);

}

}

}

Класс отрисовки ΠΊΠ°Ρ€Ρ‚Ρ‹

using System;

using System.Collections.Generic;

using System. Text;

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

namespace WoW

{

public class Level

{

private List tileTextures = new List ();

private Queue waypoints = new Queue ();

int[,] map = new int[,]

{

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

{1,0,0,0,0,0,0,0,},

};

public Queue Waypoints

{

get { return waypoints; }

}

public int Width

{

get { return map. GetLength (1); }

}

public int Height

{

get { return map. GetLength (0); }

}

public Level ()

{

waypoints.Enqueue (new Vector2(7, 0) * 32);

waypoints.Enqueue (new Vector2(0, 0) * 32);

}

public int GetIndex (int cellX, int cellY)

// It needed to be Width — 1 and Height — 1.

if (cellX < 0

public void AddTexture (Texture2D texture)

{

tileTextures.Add (texture);

}

public void Draw (SpriteBatch batch)

{

for (int x = 0; x < Width; x++)

{

for (int y = 0; y < Height; y++)

{

int textureIndex = map[y, x];

if (textureIndex == -1)

continue;

Texture2D texture = tileTextures[textureIndex];

batch.Draw (texture, new Rectangle (x * 32, y * 32, 32, 32), Color. White);

}

}

5. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° классов

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° игровая ΠΈΠ³Ρ€Π° «Wall on Wall», Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ.

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