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

Π˜Π³Ρ€ΠΎΠ²Π°Ρ систСма «ВСтрис»

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

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… тСкстовыС ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния элСмСнтов Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²: List, Vector, LinkedList, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π’Π°ΠΊΠΆΠ΅ для отобраТСния элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ToolBox’ΠΎΠ² отобраТСния: Label, TextBox, ListBox, ComboBox, GroupBox, Panel… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ систСма тСтрис Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

C# — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 1998—2001 Π³ΠΎΠ΄Π°Ρ… Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄ руководством АндСрса Π₯СйлсбСрга Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft ΠΊΠ°ΠΊ язык Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Microsoft .NET Framework ΠΈ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΠΈ Π±Ρ‹Π» стандартизирован ΠΊΠ°ΠΊ ECMA-334 ΠΈ ISO/IEC 23 270.

C# относится ΠΊ ΡΠ΅ΠΌΡŒΠ΅ языков с C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ синтаксисом, ΠΈΠ· Π½ΠΈΡ… Π΅Π³ΠΎ синтаксис Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ C++ ΠΈ Java. Π―Π·Ρ‹ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π² Ρ‚ΠΎΠΌ числС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² явного ΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ привСдСния Ρ‚ΠΈΠΏΠ°), Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, события, свойства, ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ, LINQ, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML.

ΠŸΠ΅Ρ€Π΅Π½ΡΠ² ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎΡ‚ ΡΠ²ΠΎΠΈΡ… ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠ² — языков C++, Java, Delphi, ΠœΠΎΠ΄ΡƒΠ»Π° ΠΈ Smalltalk — Π‘#, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ сСбя ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… систСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C# Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСствСнноС наслСдованиС классов (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C++).

C# разрабатывался ΠΊΠ°ΠΊ язык программирования ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня для CLR ΠΈ, ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ, зависит, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Π΅ΠΉ самой CLR. Π­Ρ‚ΠΎ касаСтся, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, систСмы Ρ‚ΠΈΠΏΠΎΠ² C#, которая ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ BCL. ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΈΠ»ΠΈ отсутствиС Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… особСнностСй языка диктуСтся Ρ‚Π΅ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ конкрСтная языковая ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π±Ρ‹Ρ‚ΡŒ транслирована Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ конструкции CLR. Π’Π°ΠΊ, с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ CLR ΠΎΡ‚ Π²Π΅Ρ€ΡΠΈΠΈ 1.1 ΠΊ 2.0 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обогатился ΠΈ ΡΠ°ΠΌ C#; ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ взаимодСйствия слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ. (Однако эта Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π° с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ C# 3.0, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ собой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка, Π½Π΅ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET.) CLR прСдоставляСт C#, ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ .NET-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΡˆΠ΅Π½Ρ‹ «ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠ΅» языки программирования. НапримСр, сборка мусора Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΡΠ°ΠΌΠΎΠΌ C#, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся CLR для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C# Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ это дСлаСтся для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° VB.NET, J# ΠΈ Π΄Ρ€.

НазваниС «Π‘ΠΈ ΡˆΠ°Ρ€ΠΏ» (Π”ΠΎ Π΄ΠΈΠ΅Π·) происходит ΠΎΡ‚ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ Π·Π½Π°ΠΊ Π΄ΠΈΠ΅Π·, прибавляСмый ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡƒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½ΠΎΡ‚Ρ‹, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ этой Π½ΠΎΡ‚Π΅ Π·Π²ΡƒΠΊΠ° Π½Π° ΠΏΠΎΠ»ΡƒΡ‚ΠΎΠ½. 4] Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ названию языка C++, Π³Π΄Π΅ «++» ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° Π½Π° 1.

ВслСдствиС тСхничСских ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (стандартныС ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈ Ρ‚. Π΄.) ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Ρ‡Ρ‚ΠΎ Π·Π½Π°ΠΊ Π΄ΠΈΠ΅Π· ΠƒΡ‚? Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π½Π° ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅, Π·Π½Π°ΠΊ Π½ΠΎΠΌΠ΅Ρ€Π° # Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ для прСдставлСния Π·Π½Π°ΠΊΠ° Π΄ΠΈΠ΅Π· ΠΏΡ€ΠΈ записи ΠΈΠΌΠ΅Π½ΠΈ языка программирования. 5] Π­Ρ‚ΠΎ соглашСниС ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π―Π·Ρ‹ΠΊΠ° C# ECMA-334. 6] Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ ΠΈ ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡Π½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅[7]), ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ.

Названия языков программирования Π½Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ, поэтому Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ язык Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎ-английски «Π‘ΠΈ ΡˆΠ°Ρ€ΠΏ».

1. ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

1.1 УсловиС Π·Π°Π΄Π°Ρ‡ΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ систСму «Ρ‚Стрис». РСализация Π΄Π²ΡƒΡ… ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ³Ρ€: стройка, Π³ΠΎΠ½ΠΊΠΈ. Π Π΅ΠΆΠΈΠΌΡ‹ слоТности: слоТный, срСдний, Π»Π΅Π³ΠΊΠΈΠΉ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, игровая статистика. ИспользованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

1.2 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… тСкстовыС ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния элСмСнтов Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²: List, Vector, LinkedList, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π’Π°ΠΊΠΆΠ΅ для отобраТСния элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ToolBox’ΠΎΠ² отобраТСния: Label, TextBox, ListBox, ComboBox, GroupBox, Panel, PictureBox, ListView.

1.3 Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ размСщСния Ρ„ΠΈΠ³ΡƒΡ€ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ постоянно Π½ΡƒΠΆΠ΅Π½ индСксированный доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ, поэтому Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт прямой ΠΈ Π±Ρ‹ΡΡ‚Ρ€Ρ‹ΠΉ доступ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ элСмСнту, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Для хранСния статистики ΠΈΠ³Ρ€Ρ‹ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ тСкстовый Ρ„Π°ΠΉΠ», Ρ‚.ΠΊ. ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅Ρ‚, Ρ‚Π°ΠΊΠΆΠ΅, Ссли Π±Ρ‹ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» — Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ возмоТности ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ статистику Π±Π΅Π· запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для отобраТСния Π½Π° ΡΠΊΡ€Π°Π½Π΅ Ρ„ΠΈΠ³ΡƒΡ€ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ toolboxPictureBox, Ρ‚.ΠΊ. Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΡΡ‚оянной Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅, Π½ΡƒΠΆΠ½Π° высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отобраТСния, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ToolBox’Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚. Для отобраТСния статистики Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ ListView, Ρ‚.ΠΊ. ΠΎΠ½ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ для отобраТСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ статистики Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Label’Π°Ρ…. Навигация Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· Button’Ρ‹ΠΈ CheckBox’Ρ‹. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π€Π°ΠΉΠ»Ρ‹ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…:

Π’Π°Π±Π»ΠΈΡ†Π°. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π°records. dat для хранСния статистики ΠΈΠ³Ρ€Ρ‹ «Ρ‚Стрис»:

Имя ΠΈΠ³Ρ€ΠΎΠΊΠ°

ΠžΡ‡ΠΊΠΈ

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ

Кол-во линий

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Nick

Name

ToolBox’Ρ‹ для графичСского отобраТСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ:

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° MainWindow, слуТит для отобраТСния всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅.

listView1 — экзСмпляр класса ListView, прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

groupBox* - ToolBox ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для отобраТСния ToolBox’ΠΎΠ² Π² Π½Π΅ΠΌ.

MessageBox — класс ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€ΠΈΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ событии ΠΈ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Π½Π΅Π³ΠΎ.

coords[4, 2] - Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‚ΠΈΠΏΠ° intдля хранСния, доступа ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹.

table[10, 19] - Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массивтипа boolдля хранСния, доступа ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ„ΠΈΠ³ΡƒΡ€ располоТСнных Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ доскС.

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

Рис.

Рис.

4. ОписаниС классов

Π’Π°Π±Π»ΠΈΡ†Π°

ЭкзСмпляр класса являСтся Ρ„ΠΈΠ³ΡƒΡ€ΠΎΠΉ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ доскС

Shape

ЭкзСмпляр класса являСтся основным ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² тСтриса

Build

ЭкзСмпляр класса являСтся Ρ‚Π°Π½ΠΊΠΎΠΌ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ доскС

Tank

ЭкзСмпляр класса являСтся ΠΏΡƒΠ»Π΅ΠΉ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ доскС

Shot

ЭкзСмпляр класса являСтся основным ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ³Ρ€Ρ‹ «Π“ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)»

Tanks

ЭкзСмпляр класса являСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ GUIΠΎΠΊΠ½ΠΎΠΌ прилоТСния

MainWindow

5. Π‘Π»ΠΎΠΊ-схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°

Π‘Π»ΠΎΠΊ-схСма Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ voidLineRem() — функция удаляСт Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ Π² ΠΈΠ³Ρ€Π΅ «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°» ΠΈ ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ «ΠΏΠΎΡΡ‚Ρ€ΠΎΠΉΠΊΡƒ» Π² Π½ΠΈΠ·.

Рис.

Π‘Π»ΠΎΠΊ-схСма Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ voidcheckCoord(int[,] m) — функция провСряСт Π½Π΅ Π²Ρ‹ΡˆΠ»ΠΈ Π»ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ доски.

Рис.

6. Алгоритмы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Алгоритм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ voidMainWindow_FormClosing (objectsender, FormClosingEventArgse)-функция Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

1. Начало.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

senderсистСмный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° objectΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» событиС.

e — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° EventArgsсистСмныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ события.

gameΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindow Ρ‚ΠΈΠΏΠ° stringхранящий Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹.

Buld_ -ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindowΡ‚ΠΈΠΏΠ° Buildдля запуска ΠΈΠ³Ρ€Ρ‹ «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°».

Tanks_- ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindowΡ‚ΠΈΠΏΠ° Tanks_ для запуска ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

2. if (game == «Build») Ссли тСкущая ΠΈΠ³Ρ€Π° «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°» Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ 3 ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ8.

3. if (Build_.thr ≠ null) Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ³Ρ€Ρ‹ «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ 4 ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 8.

4. if (Build_.thr.ThreadState == System.Threading.ThreadState.Suspended)Сслипотокнаходитсявсостоянии «ΠΏΠ°ΡƒΠ·Ρ‹» Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ 5−6 ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 7.

5. Build_.thr.Resume (); восстанавливаСм ΠΏΠΎΡ‚ΠΎΠΊ.

6. Build_.thr.Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

7. Build_.thr.Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

8. if (game == «Tanks» &&Tanks_ ≠ null) Ссли тСкущая ΠΈΠ³Ρ€Π° «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)» ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindowTanks_ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ 9 ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 19.

9. if (Tanks_.thr ≠ null) Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ 10 ΠΏΡƒΠ½ΠΊΡ‚ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 19.

10. if (Tanks_.thr.ThreadState == System.Threading.ThreadState.Suspended) Ссли ΠΏΠΎΡ‚ΠΎΠΊ находится Π² ΡΠΎΡΡ‚оянии «ΠΏΠ°ΡƒΠ·Ρ‹» Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ 11 — ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 16.

11. Tanks_.thr.Resume (); восстанавливаСм ΠΏΠΎΡ‚ΠΎΠΊ.

12. Tanks_.thr.Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

13. thrTime. Resume (); восстанавливаСм ΠΏΠΎΡ‚ΠΎΠΊ.

14. thrTime. Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

15. label11. Text = «0»; обнуляСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

16. Tanks_.thr.Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

17. thrTime. Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

18. label11. Text = «0»; обнуляСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

19. ΠšΠΎΠ½Π΅Ρ†.

АлгоритмфункцииvoidStartTanks (objectsender, EventArgse) — функциязапускаСт ΠΈΠ»ΠΈ останавливаСт ΠΈΠ³Ρ€Ρƒ Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ).

1. Начало.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

senderсистСмный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° objectΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» событиС.

e — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° EventArgsсистСмныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ события.

Tanks_ -ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindowΡ‚ΠΈΠΏΠ° Tanks для запуска ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

thrTime — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MainWindowΡ‚ΠΈΠΏΠ° Threadдля запуска Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

richTextBox1, richTextBox2 — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса MainWindowΡ‚ΠΈΠΏΠ° RichTextBox содСрТащиС ΠΈΠΌΠ΅Π½Π° ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ².

2. if (Tanks_ == null) Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)» Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ 3−9 ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ 10 ΠΏΡƒΠ½ΠΊΡ‚Ρƒ.

3. checkBox2. Text = «Stop»; ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ запуска Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΡƒ остановки.

4. Tanks_ = newTanks (); ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Tanks_.

5. Tanks_.Start (); запускаСм ΠΈΠ³Ρ€Ρƒ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

6. richTextBox1. Enabled = false; Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ доступ для измСнСния ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ° 1.

7. richTextBox2. Enabled = false; Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ доступ для измСнСния ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ° 2.

8. Tanks_.Tank1.name = richTextBox2. Text; приваиваСмимятанку 2.

9. Tanks_.Tank_.name = richTextBox1. Text; приваиваСмимятанку 1.

10. checkBox2. Text = «Start»; ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ остановки Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΡƒ запуска.

11. Tanks_.thr.Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся ΠΈΠ³Ρ€Π° «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

12. Tanks_.ClearTable (); чистим ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ доску.

13. Tanks_ = null; обнуляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

14. thrTime. Abort (); останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполнялся Ρ‚Π°ΠΉΠΌΠ΅Ρ€.

15. label11. Text = «0»; обнуляСм Ρ‚Π°ΠΉΠΌΠ΅Ρ€

16. richTextBox1. Enabled = true; ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ доступ для измСнСния ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ° 1.

17. richTextBox2. Enabled = true; ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ доступ для измСнСния ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ° 2.

18. ΠšΠΎΠ½Π΅Ρ†

7. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Рисунок 7.2 — Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ³Ρ€Ρ‹ Π² Π³ΠΎΠ½ΠΊΠΈ Рисунок 7.3 — ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ процСсс Рисунок 7.4 — ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹ Рисунок 7.5 — Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ³Ρ€Ρ‹ Π² ΡΡ‚Ρ€ΠΎΠΉΠΊΡƒ Рисунок 7.6 — ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ процСсс Рисунок 7.7 — ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

КлассShape — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ°Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ Π² ΠΈΠ³Ρ€Π΅ «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°».

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System. Drawing;

using System.Drawing.Drawing2D;

namespace TetrixSystem

{

publicclassShape

{

staticpublicint lastShape = 0;

staticpublicint count = 0;

staticpublicint nextShape = 0;

staticpublicint state = 1;

staticpublicbool d = true;

staticpublicint[,] coord = {

{0,0}, //x, y

{0,0},

{0,0},

{0,0},

};

staticpublicint[,] tcoord = {

{0,0}, //x, y

{0,0},

{0,0},

{0,0},

};

publicvoid left ()

{

if (coord[0, 0] == 0 || coord[1, 0] == 0 || coord[2, 0] == 0 || coord[3, 0] == 0)

return;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x — 1, y] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x — 1 == x1 && y == y1)

{

f = true;

break;

}

}

if (!f) return;

f = false;

}

}

remove ();

coord[0, 0]—;

coord[1, 0]—;

coord[2, 0]—;

coord[3, 0]—;

toTable ();

MainWindow.Inv ();

}

publicvoid right ()

{

if (coord[0, 0] == 9 || coord[1, 0] == 9 || coord[2, 0] == 9 || coord[3, 0] == 9)

return;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x + 1, y] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x + 1 == x1 && y == y1)

{

f = true;

break;

}

}

if (!f) return;

f = false;

}

}

remove ();

coord[0, 0]++;

coord[1, 0]++;

coord[2, 0]++;

coord[3, 0]++;

toTable ();

MainWindow.Inv ();

}

publicbool down ()

{

if (coord[0, 1] == 18 || coord[1, 1] == 18 || coord[2, 1] == 18 || coord[3, 1] == 18)

returnfalse;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x, y + 1] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x == x1 && y + 1 == y1)

{

f = true;

break;

}

}

if (!f)

returnfalse;

f = false;

}

}

remove ();

coord[0, 1]++;

coord[1, 1]++;

coord[2, 1]++;

coord[3, 1]++;

toTable ();

MainWindow.Inv ();

returntrue;

}

staticpublicint x (int index) { return coord[index, 0]; }

staticpublicint y (int index) { return coord[index, 1]; }

staticpublicvoid setX (int index, int x) { coord[index, 0] = x; }

staticpublicvoid setY (int index, int y) { coord[index, 1] = y; }

staticpublicvoid tmoveCoord (int id, string d, int c = 1)

{

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

{

switch (d)

{

case" Left" :

tcoord[id, 0] = tcoord[id, 0] - 1;break;

case" Right" :

tcoord[id, 0] = tcoord[id, 0] + 1;break;

case" Up" :

tcoord[id, 1] = tcoord[id, 1] - 1;break;

case" Down" :

tcoord[id, 1] = tcoord[id, 1] + 1;break;

}

}

}

staticpublicvoid setCoord (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)

{

coord[0, 0] = x1;

coord[0, 1] = y1;

coord[1, 0] = x2;

coord[1, 1] = y2;

coord[2, 0] = x3;

coord[2, 1] = y3;

coord[3, 0] = x4;

coord[3, 1] = y4;

}

staticpublicvoid copy (int[,] m1, int[,] m2)

{

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

{

for (int j = 0; j < 2; j++)

{

m1[i, j] = m2[i, j];

}

}

}

staticpublicbool checkCoord (int[,] m)

{

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

{

if (m[i, 0] < 0 || m[i, 0] > 9)

returnfalse;

if (m[i, 1] < 0 || m[i, 1] > 18)

returnfalse;

if (MainWindow.table[m[i, 0], m[i, 1]] == true)

{

bool f = false;

for (int i_ = 0; i_ < 4; i_++)

{

if (m[i, 0] == coord[i_, 0] && m[i, 1] == coord[i_, 1])

f = true;

}

if (!f)

returnfalse;

}

}

returntrue;

staticpublicvoid rotate_left ()

{

if (lastShape == 1)

return;

copy (tcoord, coord);

switch (lastShape)

{

case 2: // ΠΏΠ°Π»ΠΊΠ°

if (state == 1)

{

tmoveCoord (2, «Down»);

tmoveCoord (2, «Left»);

tmoveCoord (1, «Down», 2);

tmoveCoord (1, «Right»);

tmoveCoord (0, «Down», 3);

tmoveCoord (0, «Right», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (2, «Up»);

tmoveCoord (2, «Right»);

tmoveCoord (1, «Up», 2);

tmoveCoord (1, «Left»);

tmoveCoord (0, «Up», 3);

tmoveCoord (0, «Left», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

case 6: //лСвая

if (state == 1)

{

tmoveCoord (2, «Up»);

tmoveCoord (3, «Right», 2);

tmoveCoord (3, «Up»);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (2, «Down»);

tmoveCoord (3, «Left», 2);

tmoveCoord (3, «Down»);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

case 7: //правая

if (state == 1)

{

tmoveCoord (0, «Right»);

tmoveCoord (3, «Right»);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (0, «Left»);

tmoveCoord (3, «Left»);

tmoveCoord (3, «Down», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

case 3: //_|_

if (state == 1)

{

tmoveCoord (1, «Right»);

tmoveCoord (1, «Up»);

tmoveCoord (2, «Right», 2);

tmoveCoord (2, «Up», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (1, «Up»);

tmoveCoord (1, «Left»);

tmoveCoord (3, «Left», 2);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 3;

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (1, «Left»);

tmoveCoord (1, «Down»);

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Left», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 4;

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (1, «Down»);

tmoveCoord (1, «Right»);

tmoveCoord (3, «Down», 2);

tmoveCoord (3, «Right», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

case 4:

if (state == 1)

{

tmoveCoord (2, «Right»);

tmoveCoord (3, «Left»);

tmoveCoord (0, «Right», 2);

tmoveCoord (0, «Down»);

tmoveCoord (1, «Right», 2);

tmoveCoord (1, «Down»);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (3, «Up», 2);

tmoveCoord (3, «Right»);

tmoveCoord (2, «Up», 2);

tmoveCoord (2, «Right»);

if (!checkCoord (tcoord))

return;

remove ();

state = 3;

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (0, «Left», 2);

tmoveCoord (0, «Up», 1);

tmoveCoord (1, «Left», 2);

tmoveCoord (1, «Up»);

if (!checkCoord (tcoord))

return;

remove ();

state = 4;

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (3, «Down», 2);

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Left», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

case 5:

if (state == 1)

{

tmoveCoord (2, «Left»);

tmoveCoord (2, «Up», 2);

tmoveCoord (3, «Left»);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 2;

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (0, «Down»);

tmoveCoord (0, «Left», 2);

tmoveCoord (1, «Down»);

tmoveCoord (1, «Left», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 3;

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (2, «Down», 2);

tmoveCoord (3, «Right», 2);

tmoveCoord (3, «Down», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 4;

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (2, «Right»);

tmoveCoord (3, «Left»);

tmoveCoord (1, «Up»);

tmoveCoord (1, «Right», 2);

tmoveCoord (0, «Up»);

tmoveCoord (0, «Right», 2);

if (!checkCoord (tcoord))

return;

remove ();

state = 1;

copy (coord, tcoord);

}

break;

}

toTable ();

MainWindow.Inv ();

}

staticpublicvoid rotate_right ()

{

if (lastShape == 1)

return;

copy (tcoord, coord);

switch (lastShape)

{

case 2:

rotate_left ();

return;

case 6:

rotate_left ();

return;

case 7:

rotate_left ();

return;

case 3: //_|_

if (state == 1)

{

tmoveCoord (1, «Left»);

tmoveCoord (1, «Up»);

tmoveCoord (3, «Left», 2);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

return;

state = 4;

remove ();

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (1, «Up»);

tmoveCoord (1, «Right»);

tmoveCoord (2, «Right», 2);

tmoveCoord (2, «Up», 2);

if (!checkCoord (tcoord))

return;

state = 3;

remove ();

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (1, «Right»);

tmoveCoord (1, «Down»);

tmoveCoord (3, «Down», 2);

tmoveCoord (3, «Right», 2);

if (!checkCoord (tcoord))

return;

state = 2;

remove ();

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (1, «Down»);

tmoveCoord (1, «Left»);

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Left», 2);

if (!checkCoord (tcoord))

return;

state = 1;

remove ();

copy (coord, tcoord);

}

break;

case 4:

if (state == 1)

{

tmoveCoord (3, «Up», 2);

tmoveCoord (2, «Right», 2);

tmoveCoord (2, «Up», 2);

if (!checkCoord (tcoord))

return;

state = 4;

remove ();

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (0, «Down»);

tmoveCoord (1, «Down»);

tmoveCoord (0, «Right», 2);

tmoveCoord (1, «Right», 2);

if (!checkCoord (tcoord))

return;

state = 3;

remove ();

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (3, «Left»);

tmoveCoord (3, «Down», 2);

tmoveCoord (2, «Left»);

tmoveCoord (2, «Down», 2);

if (!checkCoord (tcoord))

return;

state = 2;

remove ();

copy (coord, tcoord);

}

elseif (state == 2)

{

tmoveCoord (0, «Up»);

tmoveCoord (1, «Up»);

tmoveCoord (0, «Left», 2);

tmoveCoord (1, «Left», 2);

tmoveCoord (2, «Left»);

tmoveCoord (3, «Right»);

if (!checkCoord (tcoord))

return;

state = 1;

remove ();

copy (coord, tcoord);

}

break;

case 5:

if (state == 1)

{

tmoveCoord (2, «Left»);

tmoveCoord (3, «Right»);

tmoveCoord (1, «Left», 2);

tmoveCoord (1, «Down»);

tmoveCoord (0, «Left», 2);

tmoveCoord (0, «Down»);

if (!checkCoord (tcoord))

return;

state = 4;

remove ();

copy (coord, tcoord);

}

elseif (state == 4)

{

tmoveCoord (2, «Up», 2);

tmoveCoord (3, «Up», 2);

tmoveCoord (3, «Left», 2);

if (!checkCoord (tcoord))

return;

state = 3;

remove ();

copy (coord, tcoord);

}

elseif (state == 3)

{

tmoveCoord (0, «Right», 2);

tmoveCoord (0, «Up»);

tmoveCoord (1, «Right», 2);

tmoveCoord (1, «Up»);

if (!checkCoord (tcoord))

return;

state = 2;

remove ();

copy (coord, tcoord);

}

elseif (state == 2)

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Right»);

tmoveCoord (3, «Down», 2);

tmoveCoord (3, «Right»);

if (!checkCoord (tcoord))

return;

state = 1;

remove ();

copy (coord, tcoord);

break;

}

toTable ();

MainWindow.Inv ();

}

staticprivatevoid remove ()

{

int x = 0;

int y = 0;

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

{

x = coord[i, 0];

y = coord[i, 1];

MainWindow.table[x, y] = false;

}

}

staticpublicvoid clear ()

{

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

{

coord[i, 0] = coord[i, 1] = 0;

}

lastShape = count = nextShape = 0;

}

staticpublicvoid toTable ()

{

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

MainWindow.table[coord[i, 0], coord[i, 1]] = true;

}

staticpublicint RandomShape ()

{

Random rand = newRandom ();

int type = 0;

do

{

type = rand. Next (1, 7);

if (type == lastShape)

{

count++;

if (count < 4)

break;

}

else

break;

} while (true);

return type;

}

staticpublicvoid createShape (int type)

{

switch (type)

case 1: //ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚

setCoord (4, 0, 4, 1, 5, 0, 5, 1); break;

case 2: //ΠΏΠ°Π»ΠΊΠ°

setCoord (5, 0, 5, 1, 5, 2, 5, 3); break;

case 3: //_

state = 1;

lastShape = type;

MainWindow.Inv ();

}

}

}

КлассBuild — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ процСсс ΠΈΠ³Ρ€Ρ‹ «ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°».

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System. Threading;

namespace TetrixSystem

{

publicclassBuild

{

publicstaticint Level = 0;

publicstaticint Score = 0;

publicstaticint mode = 1;

publicstaticint Shapes = 0;

publicstaticint LinesRemoved = 0;

publicint speed = 600;

publicstaticbool space = false;

publicstaticbool isPaused = false;

publicThread thr = null;

publicvoid Start (int m)

{

ClearTable ();

Level = 1;

Score = 0;

Shapes = 0;

mode = m;

thr = newThread (newThreadStart (tableProc));

thr.Start ();

}

publicvoid tableProc ()

{

Shape.nextShape = Shape. RandomShape ();

for (; ;)

{

Shape.createShape (Shape.nextShape);

Shape.nextShape = Shape. RandomShape ();

MainWindow.MF.nextPaint = true;

Shapes++;

switch (mode)

{

case 1:

if (Shapes % 60 == 0)

{

Level++;

speed -= 50;

MainWindow.MF.setLevel (Level);

}

break;

case 2:

if (Shapes % 30 == 0)

{

Level++;

speed -= 50;

MainWindow.MF.setLevel (Level);

}

break;

case 3:

if (Shapes % 20 == 0)

{

Level++;

speed -= 50;

MainWindow.MF.setLevel (Level);

}

break;

}

do

{

Thread.Sleep (speed);

} while (MainWindow.Shape_.down ());

space = false;

switch (mode)

{

case 1:

Score += 12;

break;

case 2:

Score += 15;

break;

case 3:

Score += 18;

break;

}

MainWindow.MF.setScoreShape (Score, Shapes);

LineRem ();

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

{

if (Shape.y (i) == 0)

{

MainWindow.MF.EndGame ();

return;

}

}

}

}

staticpublicvoid LineRem ()

{

bool f = true;

int y = 0;

for (y = 18; y ≠ 0; y—)

{

f = true;

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

{

if (MainWindow.table[x, y] ≠ true)

f = false;

}

if (f == true)

{

for (int y_ = y; y_ ≠ 0; y_—)

{

for (int x_ = 0; x_ < 10; x_++)

{

MainWindow.table[x_, y_] = MainWindow. table[x_, (y_ - 1)];

}

}

y++;

LinesRemoved++;

Score += 100;

MainWindow.MF.setRemovLines (LinesRemoved);

MainWindow.MF.setScoreShape (Score, Shapes);

}

}

}

staticpublicvoid ClearTable ()

{

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

for (int j = 0; j < 19; j++)

MainWindow.table[i, j] = false;

MainWindow.Inv ();

}

}

}

КлассShot — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΡƒΠ»ΡŽ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°Π½ΠΊΠ° Π² ΠΈΠ³Ρ€Π΅ «Π³ΠΎΠ½ΠΈΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System. Threading;

namespace TetrixSystem

{

publicclassShot

{

publicint time;

publicint x = 0,

y = 0;

Tank tank;

public Shot (Tank t, int t_ = 250)

{

tank = t;

time = t_;

x = tank. coord[0, 0];

y = tank. coord[0, 1];

}

publicvoid go ()

{

switch (tank.state)

{

case 1: y—; break;

case 2: x—; break;

case 3: y++; break;

case 4: x++; break;

}

if (!checkCoords ())

return;

int temp = tank. state;

while (true)

{

remove ();

switch (temp)

{

case 1:

y—;

if (!checkCoords ())

return;

break;

case 2:

x—;

if (!checkCoords ())

return;

break;

case 3:

y++;

if (!checkCoords ())

return;

break;

case 4:

x++;

break;

}

if (!checkCoords ())

return;

toTable ();

MainWindow.Inv ();

Thread.Sleep (time);

}

}

publicvoid toTable ()

{

MainWindow.table[x, y] = true;

}

publicvoid remove ()

{

MainWindow.table[x, y] = false;

}

publicbool checkCoords ()

{

if (y < 0)

{

y++;

remove ();

MainWindow.Inv ();

returnfalse;

}

elseif (y > 18)

{

y—;

remove ();

MainWindow.Inv ();

returnfalse;

}

elseif (x < 0)

{

x++;

remove ();

MainWindow.Inv ();

returnfalse;

}

elseif (x > 9)

{

x—;

remove ();

MainWindow.Inv ();

returnfalse;

}

if (MainWindow.table[x, y] == true)

{

remove ();

MainWindow.Inv ();

DestroyObj ();

returnfalse;

}

returntrue;

}

publicvoid DestroyObj ()

{

if (MainWindow.Tanks_.Tank_.inMe (x, y))

{

MainWindow.Tanks_.Tank_.wounded ();

return;

}

elseif (MainWindow.Tanks_.Tank1.inMe (x, y))

{

MainWindow.Tanks_.Tank1.wounded ();

return;

}

}

}

}

КлассTank — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚Π°Π½ΠΊ Π² ΠΈΠ³Ρ€Π΅ «Π³ΠΎΠ½ΠΈΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System. Threading;

namespace TetrixSystem

{

publicclassTank

{

public Tank (string p = null, bool ToTable = false, string n = «player»)

{

if (p ≠ null)

createTank (p);

if (ToTable)

toTable ();

name = n;

}

publicint health = 3;

publicint score = 0;

publicint cheat = 5;

publicstring name = «» ;

publicint[,] coord = {

{0,0}, //x, y

{0,0},

{0,0},

{0,0}

};

publicint[,] tcoord = {

{0,0}, //x, y

{0,0},

{0,0},

{0,0}

};

publicint state = 1;

publicint speedShots = 0;

publicvoid setCoord (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)

{

coord[0, 0] = x1;

coord[0, 1] = y1;

coord[1, 0] = x2;

coord[1, 1] = y2;

coord[2, 0] = x3;

coord[2, 1] = y3;

coord[3, 0] = x4;

coord[3, 1] = y4;

}

publicvoid tmoveCoord (int id, string d, int c = 1)

{

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

{

switch (d)

{

case" Left" :

tcoord[id, 0] = tcoord[id, 0] - 1; break;

case" Right" :

tcoord[id, 0] = tcoord[id, 0] + 1; break;

case" Up" :

tcoord[id, 1] = tcoord[id, 1] - 1; break;

case" Down" :

tcoord[id, 1] = tcoord[id, 1] + 1; break;

}

}

}

publicbool checkCoord (int[,] m)

{

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

{

if (m[i, 0] < 0 || m[i, 0] > 9)

returnfalse;

if (m[i, 1] < 0 || m[i, 1] > 18)

returnfalse;

if (MainWindow.table[m[i, 0], m[i, 1]] == true)

{

bool f = false;

for (int i_ = 0; i_ < 4; i_++)

{

if (m[i, 0] == coord[i_, 0] && m[i, 1] == coord[i_, 1])

f = true;

}

if (!f)

returnfalse;

}

}

returntrue;

}

privatevoid remove ()

{

int x = 0;

int y = 0;

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

{

x = coord[i, 0];

y = coord[i, 1];

MainWindow.table[x, y] = false;

}

}

publicvoid createTank (string pose)

{

switch (pose)

{

case" center" :

setCoord (5, 8, 5, 9, 4, 9, 6, 9);

break;

case" down" :

setCoord (4, 17, 4, 18, 3, 18, 5, 18);

break;

case" up" :

setCoord (6, 1, 6, 0, 7, 0, 5, 0);

state = 3;

break;

case" left" :

setCoord (1, 7, 0, 7, 0, 6, 0, 8);

state = 2;

break;

case" right" :

setCoord (8, 9, 9, 9, 9, 10, 9, 8);

state = 4;

break;

}

}

publicvoid toTable ()

{

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

MainWindow.table[coord[i, 0], coord[i, 1]] = true;

MainWindow.Inv ();

}

publicvoid copy (int[,] m1, int[,] m2)

{

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

{

for (int j = 0; j < 2; j++)

{

m1[i, j] = m2[i, j];

}

}

}

publicvoid left ()

{

if (coord[0, 0] == 0 || coord[1, 0] == 0 || coord[2, 0] == 0 || coord[3, 0] == 0)

return;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x — 1, y] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x — 1 == x1 && y == y1)

{

f = true;

break;

}

}

if (!f) return;

f = false;

}

}

remove ();

coord[0, 0]—;

coord[1, 0]—;

coord[2, 0]—;

coord[3, 0]—;

toTable ();

MainWindow.Inv ();

}

publicvoid right ()

{

if (coord[0, 0] == 9 || coord[1, 0] == 9 || coord[2, 0] == 9 || coord[3, 0] == 9)

return;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x + 1, y] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x + 1 == x1 && y == y1)

{

f = true;

break;

}

}

if (!f) return;

f = false;

}

}

remove ();

coord[0, 0]++;

coord[1, 0]++;

coord[2, 0]++;

coord[3, 0]++;

toTable ();

MainWindow.Inv ();

}

publicbool down ()

{

if (coord[0, 1] == 18 || coord[1, 1] == 18 || coord[2, 1] == 18 || coord[3, 1] == 18)

returnfalse;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x, y + 1] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x == x1 && y + 1 == y1)

{

f = true;

break;

}

}

if (!f)

returnfalse;

f = false;

}

}

remove ();

coord[0, 1]++;

coord[1, 1]++;

coord[2, 1]++;

coord[3, 1]++;

toTable ();

MainWindow.Inv ();

returntrue;

}

publicbool up ()

{

if (coord[0, 1] == 0 || coord[1, 1] == 0 || coord[2, 1] == 0 || coord[3, 1] == 0)

returnfalse;

int x = 0;

int y = 0;

int x1 = 0;

int y1 = 0;

bool f = false;

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

{

x = coord[i, 0];

y = coord[i, 1];

if (MainWindow.table[x, y — 1] == true)

{

for (int j = 0; j < 4; j++)

{

x1 = coord[j, 0];

y1 = coord[j, 1];

if (x == x1 && y — 1 == y1)

{

f = true;

break;

}

}

if (!f)

returnfalse;

f = false;

}

}

remove ();

coord[0, 1]—;

coord[1, 1]—;

coord[2, 1]—;

coord[3, 1]—;

toTable ();

MainWindow.Inv ();

returntrue;

}

publicbool rightRot (string test = «no test»)

{

copy (tcoord, coord);

int stateBackup = state;

if (state == 1)

{

tmoveCoord (1, «Left»);

tmoveCoord (1, «Up»);

tmoveCoord (3, «Left», 2);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 4;

}

elseif (state == 4)

{

tmoveCoord (1, «Up»);

tmoveCoord (1, «Right»);

tmoveCoord (2, «Right», 2);

tmoveCoord (2, «Up», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 3;

}

elseif (state == 3)

{

tmoveCoord (1, «Right»);

tmoveCoord (1, «Down»);

tmoveCoord (3, «Down», 2);

tmoveCoord (3, «Right», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 2;

}

elseif (state == 2)

{

tmoveCoord (1, «Down»);

tmoveCoord (1, «Left»);

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Left», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 1;

}

if (test == «no test»)

{

remove ();

copy (coord, tcoord);

toTable ();

MainWindow.Inv ();

}

else

state = stateBackup;

returntrue;

}

publicbool leftRot (string test = «no test»)

{

copy (tcoord, coord);

int stateBackup = state;

if (state == 1)

{

tmoveCoord (1, «Right»);

tmoveCoord (1, «Up»);

tmoveCoord (2, «Right», 2);

tmoveCoord (2, «Up», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 2;

}

elseif (state == 2)

{

tmoveCoord (1, «Up»);

tmoveCoord (1, «Left»);

tmoveCoord (3, «Left», 2);

tmoveCoord (3, «Up», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 3;

}

elseif (state == 3)

{

tmoveCoord (1, «Left»);

tmoveCoord (1, «Down»);

tmoveCoord (2, «Down», 2);

tmoveCoord (2, «Left», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 4;

}

elseif (state == 4)

{

tmoveCoord (1, «Down»);

tmoveCoord (1, «Right»);

tmoveCoord (3, «Down», 2);

tmoveCoord (3, «Right», 2);

if (!checkCoord (tcoord))

returnfalse;

state = 1;

}

if (test == «no test»)

{

remove ();

copy (coord, tcoord);

toTable ();

MainWindow.Inv ();

}

else

state = stateBackup;

returntrue;

}

publicvoid go ()

{

switch (state)

{

case 1:

up (); break;

case 2:

left (); break;

case 3:

down (); break;

case 4:

right (); break;

}

}

publicvoid goBack ()

{

if (!rightRot («test»))

if (!leftRot («test»))

switch (state)

{

case 1: down (); break;

case 2: right (); break;

case 3: up (); break;

case 4: left (); break;

}

}

publicvoid push ()

{

Shot sh = newShot (this);

score -= 40;

Thread thr = newThread (sh.go);

thr.Start ();

}

publicbool inMe (int x, int y, bool fl = false)

{

if (y == 0 && fl)

{

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

{

if (coord[i, 0] == x)

returntrue;

}

}

elseif (x == 0 && fl)

{

for (int i = y + 1; i < 4; i++)

{

if (coord[i, 1] == y)

returntrue;

}

}

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

{

if (coord[i, 0] == x && coord[i, 1] == y)

returntrue;

}

returnfalse;

}

publicvoid destroy ()

{

remove ();

MainWindow.Inv ();

}

publicvoid wounded ()

{

health—;

score -= 50;

toTable ();

if (health == 0)

{

MainWindow.Tanks_.GameOver (name);

}

MainWindow.MF.updateT ();

}

publicvoid cheatUse (string dir)

{

if (cheat == 0)

return;

cheat—;

if (cheat >= 0)

{

if (dir == «l»)

{

left ();

}

elseif (dir == «r»)

{

right ();

}

}

else

return;

score -= 200;

MainWindow.MF.updateT ();

}

}

}

КлассTanks — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ процСсс ΠΈΠ³Ρ€Ρ‹ «Π³ΠΎΠ½ΠΈΠΊΠΈ (Ρ‚Π°Π½ΠΊΠΈ)».

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System. Threading;

namespace TetrixSystem

{

publicclassTanks

{

publicThread thr;

publicTank Tank_;

publicTank Tank1;

publicbool gOver = false;

publicvoid Start ()

{

ClearTable ();

thr = newThread (newThreadStart (tableProc));

thr.Start ();

}

publicvoid tableProc ()

{

Tank_ = newTank («down», true);

Tank1 = newTank («up», true);

MainWindow.Inv ();

}

publicbool isTable (Tank t)

{

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

{

if (MainWindow.table[t.coord[i, 0], t. coord[i, 1]] == true)

returntrue;

}

returnfalse;

}

publicvoid ClearTable ()

{

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

for (int j = 0; j < 19; j++)

MainWindow.table[i, j] = false;

MainWindow.Inv ();

}

publicvoid GameOver (string name)

{

gOver = true;

MainWindow.MF.gOver (name);

}

}

}

КлассMainWindow — ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ всСх событий устройств Π²Π²ΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° ΡΠΊΡ€Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

using System;

using System.Collections.Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System.Drawing.Drawing2D;

using System. Linq;

using System. Text;

using System.Threading.Tasks;

using System. Collections;

using System.Windows.Forms;

using System. IO;

using System. Threading;

namespace TetrixSystem

{

publicpartialclassMainWindow: Form

{

staticpublicstring game = «» ;

publicbool fullPaint = true;

publicbool nextPaint = false;

staticpublicMainWindow MF;

publicThread thrTime;

staticpublicBuild Build_ = newBuild ();

staticpublicShape Shape_ = newShape ();

staticpublicTanks Tanks_ = null;

staticpublicbool[,] table = newbool[10, 19];

publicstaticvoid Inv ()

{

MF.PanelPad.Invalidate ();

}

publicvoid EndGame ()

{

End_build End = newEnd_build ();

End.ShowDialog ();

}

publicvoid toRecords (string name)

{

listView1.Items.Add (name);

listView1.Items[listView1.Items.Count — 1]. SubItems. Add (Build.Score.ToString ());

listView1.Items[listView1.Items.Count — 1]. SubItems. Add (Build.Level.ToString ());

listView1.Items[listView1.Items.Count — 1]. SubItems. Add (Build.LinesRemoved.ToString ());

listView1.Items[listView1.Items.Count — 1]. SubItems. Add (Build.mode.ToString ());

Sort ();

saveRecords ();

}

publicvoid saveRecords ()

{

TextWriter tw = newStreamWriter («records.dat», false);

foreach (ListViewItem item inthis. listView1.Items)

{

foreach (ListViewItem.ListViewSubItem subItem in item. SubItems)

{

tw.WriteLine (subItem.Text);

}

}

tw.Close ();

}

publicvoid Sort (int e = 2)

{

// Create an instance of the ColHeader class.

ColHeader clickedCol = (ColHeader)this.listView1.Columns[e];

// Set the ascending property to sort in the opposite order.

clickedCol.ascending = !clickedCol.ascending;

// Get the number of items in the list.

int numItems = this. listView1.Items.Count;

// Turn off display while data is repoplulated.

this.listView1.BeginUpdate ();

// Populate an ArrayList with a SortWrapper of each list item.

ArrayList SortArray = newArrayList ();

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

{

SortArray.Add (newSortWrapper (this.listView1.Items[i], e));

}

// Sort the elements in the ArrayList using a new instance of the SortComparer

// class. The parameters are the starting index, the length of the range to sort,

// and the IComparer implementation to use for comparing elements. Note that

// the IComparer implementation (SortComparer) requires the sort

// direction for its constructor; true if ascending, othwise false.

SortArray.Sort (0, SortArray. Count, newSortWrapper. SortComparer (clickedCol.ascending));

// Clear the list, and repopulate with the sorted items.

this.listView1.Items.Clear ();

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

this.listView1.Items.Add (((SortWrapper)SortArray[i]).sortItem);

// Turn display back on.

this.listView1.EndUpdate ();

}

publicvoid setScoreShape (int s, int s_)

{

label1.Text = s. ToString ();

label4.Text = s_.ToString ();

}

publicvoid setRemovLines (int l)

{

label2.Text = l. ToString ();

}

publicvoid setLevel (int l)

{

label3.Text = l. ToString ();

}

public MainWindow ()

{

InitializeComponent ();

this.listView1.Columns.Add (newColHeader («Name», 50, HorizontalAlignment. Left, true));

this.listView1.Columns.Add (newColHeader («Score», 46, HorizontalAlignment. Left, true));

this.listView1.Columns.Add (newColHeader («Level», 38, HorizontalAlignment. Left, true));

this.listView1.Columns.Add (newColHeader («Lines», 49, HorizontalAlignment. Left, true));

this.listView1.Columns.Add (newColHeader («Diff», 40, HorizontalAlignment. Left, true));

int i = 0;

TextReader tr = newStreamReader («records.dat»);

while (tr.Peek () ≠ -1)

{

listView1.Items.Add (tr.ReadLine ());

listView1.Items[i]. SubItems. Add (tr.ReadLine ());

listView1.Items[i]. SubItems. Add (tr.ReadLine ());

listView1.Items[i]. SubItems. Add (tr.ReadLine ());

listView1.Items[i]. SubItems. Add (tr.ReadLine ());

i++;

}

tr.Close ();

}

protectedoverridevoid OnPaint (PaintEventArgs e)

{

fullPaint = true;

Graphics gObj = Graphics. FromImage (PanelPad.Image);

gObj.SmoothingMode = SmoothingMode. HighSpeed;

if (debug.Enabled)

{

debug.Text = «» ;

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

{

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

{

if (table[y, x] == true)

debug.Text += «1 «;

else

debug.Text += «0 «;

}

debug.Text += «n» ;

}

}

if (nextPaint)

{

nextPaint = false;

int x1 = 0;

int x2 = 0;

int x3 = 0;

int x4 = 0;

int y1 = 0;

int y2 = 0;

int y3 = 0;

int y4 = 0;

Graphics gObj_ = panelNextShape. CreateGraphics ();

gObj_.Clear (SystemColors.Control);

switch (Shape.nextShape)

{

case 1:

x1 = 3;

y1 = 1; //.

x2 = 4;

y2 = 1;

x3 = 3;

y3 = 2;

x4 = 4;

y4 = 2;

break;

case 2:

x1 = 2;

y1 = 1; //.

x2 = 3;

y2 = 1;

x3 = 4;

y3 = 1;

x4 = 5;

y4 = 1;

break;

case 3:

x1 = 3;

y1 = 1; //.

x2 = 3;

y2 = 2;

x3 = 2;

y3 = 2;

x4 = 4;

y4 = 2;

break;

case 4:

x1 = 3;

y1 = 0; //.

x2 = 3;

y2 = 1;

x3 = 3;

y3 = 2;

x4 = 4;

y4 = 2;

break;

case 5:

x1 = 3;

y1 = 0; //.

x2 = 3;

y2 = 1;

x3 = 3;

y3 = 2;

x4 = 2;

y4 = 2;

break;

case 6:

x1 = 4;

y1 = 0; //.

x2 = 4;

y2 = 1;

x3 = 3;

y3 = 1;

x4 = 3;

y4 = 2;

break;

case 7:

x1 = 2;

y1 = 0; //.

x2 = 2;

y2 = 1;

x3 = 3;

y3 = 1;

x4 = 3;

y4 = 2;

break;

}

if (Shape.nextShape ≠ 0)

{

gObj_.FillRectangle (newLinearGradientBrush (newRectangle (x1 * 30, y1 * 30, 30, 30), Color. DarkRed, SystemColors. Control, LinearGradientMode. BackwardDiagonal), x1 * 30, y1 * 30, 30, 30);

gObj_.FillRectangle (newLinearGradientBrush (newRectangle (x2 * 30, y2 * 30, 30, 30), Color. DarkRed, SystemColors. Control, LinearGradientMode. BackwardDiagonal), x2 * 30, y2 * 30, 30, 30);

gObj_.FillRectangle (newLinearGradientBrush (newRectangle (x3 * 30, y3 * 30, 30, 30), Color. DarkRed, SystemColors. Control, LinearGradientMode. BackwardDiagonal), x3 * 30, y3 * 30, 30, 30);

gObj_.FillRectangle (newLinearGradientBrush (newRectangle (x4 * 30, y4 * 30, 30, 30), Color. DarkRed, SystemColors. Control, LinearGradientMode. BackwardDiagonal), x4 * 30, y4 * 30, 30, 30);

}

}

if (fullPaint)

{

gObj.Clear (Color.LightGray);

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

{

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

{

if (table[x, y] == true)

{

int px1 = x * 30;

int px2 = y * 30;

gObj.FillRectangle (newLinearGradientBrush (newRectangle (px1, px2, 30, 30), Color. DarkRed, Color. Gainsboro, LinearGradientMode. BackwardDiagonal), px1, px2, 30, 30);

}

}

}

//fullPaint = false;

}

else

{

int x = 0;

int y = 0;

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

{

x = Shape. coord[i, 0];

y = Shape. coord[i, 1];

if (x == 0 && y == 0)

continue;

gObj.FillRectangle (newLinearGradientBrush (newRectangle (x * 30, y * 30, 30, 30), Color. DarkRed, Color. Gainsboro, LinearGradientMode. BackwardDiagonal), x * 30, y * 30, 30, 30);

}

}

}

privatevoid button1_Click (object sender, EventArgs e)

{

}

privatevoid Form1_KeyDown (object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys. Left)

{

if (game == «Build»)

Shape_.left ();

else

Tanks_.Tank_.leftRot ();

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. Right)

{

if (game == «Build»)

Shape_.right ();

else

Tanks_.Tank_.rightRot ();

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. Space)

{

if (game == «Build»)

{

Build.space = true;

Shape_.down ();

}

else

{

Tanks_.Tank_.push ();

}

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. Down)

{

if (game == «Build»)

Shape.rotate_left ();

else

Tanks_.Tank_.goBack ();

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. Up)

{

if (game == «Build»)

Shape.rotate_right ();

else

Tanks_.Tank_.go ();

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. W)

{

Tanks_.Tank1.go ();

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. A)

{

Tanks_.Tank1.leftRot ();

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. D)

{

Tanks_.Tank1.rightRot ();

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. S)

{

Tanks_.Tank1.goBack ();

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. ControlKey)

{

Tanks_.Tank1.push ();

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. Q)

{

Tanks_.Tank1.cheatUse («l»);

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. E)

{

Tanks_.Tank1.cheatUse («r»);

e.SuppressKeyPress = true;

}

if (e.KeyCode == Keys. End)

{

Tanks_.Tank_.cheatUse («r»);

e.SuppressKeyPress = true;

}

elseif (e.KeyCode == Keys. ShiftKey)

{

Tanks_.Tank_.cheatUse («l»);

e.SuppressKeyPress = true;

}

}

privatevoid Form1_KeyPress (object sender, KeyPressEventArgs e)

{

}

privatevoid Form1_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid checkBox1_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid checkBox1_CheckedChanged (object sender, EventArgs e)

{

if (Pause.Checked)

{

Build_.thr.Suspend ();

Build.isPaused = true;

label5.Visible = true;

PanelPad.Visible = false;

checkBox1.Enabled = false;

}

else

{

Build_.thr.Resume ();

fullPaint = true;

Build.isPaused = false;

PanelPad.Visible = true;

label5.Visible = false;

checkBox1.Enabled = true;

}

}

privatevoid radioButton2_CheckedChanged (object sender, EventArgs e)

{

}

privatevoid checkBox1_CheckedChanged1(object sender, EventArgs e)

{

startButton ();

}

privatevoid startButton ()

{

Graphics gObj = PanelPad. CreateGraphics ();

if (checkBox1.Checked)

{

MF = (MainWindow)Form.ActiveForm;

int mode = 0;

if (radioButton1.Checked)

mode = 1;

if (radioButton2.Checked)

mode = 2;

if (radioButton3.Checked)

mode = 3;

Build_.Start (mode);

checkBox1.Text = «Stop» ;

groupBox7.Enabled = false;

label1.Text = Build.Score.ToString ();

label2.Text = Build.LinesRemoved.ToString ();

label3.Text = Build.Level.ToString ();

label4.Text = Build.Shapes.ToString ();

}

else

{

Build_.thr.Abort ();

gObj.Clear (Color.LightGray);

checkBox1.Text = «Start» ;

groupBox7.Enabled = true;

}

}

privatevoid MainWindow_FormClosing (object sender, FormClosingEventArgs e)

{

if (game == «Build»)

if (Build_.thr ≠ null)

if (Build_.thr.ThreadState == System.Threading.ThreadState.Suspended)

{

Build_.thr.Resume ();

Build_.thr.Abort ();

}

else

Build_.thr.Abort ();

if (game == «Tanks» && Tanks_ ≠ null)

if (Tanks_.thr ≠ null)

if (Tanks_.thr.ThreadState == System.Threading.ThreadState.Suspended)

{

Tanks_.thr.Resume ();

Tanks_.thr.Abort ();

thrTime.Resume ();

thrTime.Abort ();

label11.Text = «0» ;

}

else

{

Tanks_.thr.Abort ();

thrTime.Abort ();

label11.Text = «0» ;

}

}

privatevoid button1_Click1(object sender, EventArgs e)

{

if (Build_.thr ≠ null)

if (Build_.thr.ThreadState == System.Threading.ThreadState.Suspended)

{

Build_.thr.Resume ();

Build_.thr.Abort ();

}

else

Build_.thr.Abort ();

game = «Build» ;

checkBox1.Enabled = true;

checkBox1.Checked = false;

Pause.Checked = false;

LeftPanel.Visible = false;

RightPanel.Visible = false;

PanelPad.Visible = false;

PanelMenu.Visible = true;

}

privatevoid button2_Click (object sender, EventArgs e)

{

game = «Build» ;

PanelMenu.Visible = false;

PanelPad.Visible = true;

LeftPanel.Visible = true;

LeftPanel.Enabled = true;

RightPanel.Visible = true;

RightPanel.Enabled = true;

label1.Text = «0» ;

label2.Text = «0» ;

label3.Text = «0» ;

label4.Text = «0» ;

}

privatevoid button4_Click (object sender, EventArgs e)

{

if (debug.Enabled)

debug.Enabled = false;

else

debug.Enabled = true;

}

privatevoid listView1_ColumnClick (object sender, ColumnClickEventArgs e)

{

// Create an instance of the ColHeader class.

ColHeader clickedCol = (ColHeader)this.listView1.Columns[e.Column];

// Set the ascending property to sort in the opposite order.

clickedCol.ascending = !clickedCol.ascending;

// Get the number of items in the list.

int numItems = this. listView1.Items.Count;

// Turn off display while data is repoplulated.

this.listView1.BeginUpdate ();

// Populate an ArrayList with a SortWrapper of each list item.

ArrayList SortArray = newArrayList ();

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

{

SortArray.Add (newSortWrapper (this.listView1.Items[i], e. Column));

}

// Sort the elements in the ArrayList using a new instance of the SortComparer

// class. The parameters are the starting index, the length of the range to sort,

// and the IComparer implementation to use for comparing elements. Note that

// the IComparer implementation (SortComparer) requires the sort

// direction for its constructor; true if ascending, othwise false.

SortArray.Sort (0, SortArray. Count, newSortWrapper. SortComparer (clickedCol.ascending));

// Clear the list, and repopulate with the sorted items.

this.listView1.Items.Clear ();

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

this.listView1.Items.Add (((SortWrapper)SortArray[i]).sortItem);

// Turn display back on.

this.listView1.EndUpdate ();

}

privatevoid MainWindow_Load (object sender, EventArgs e)

{

}

privatevoid MainWindow_Load1(object sender, EventArgs e)

{

}

privatevoid RightPanel_Paint (object sender, PaintEventArgs e)

{

}

privatevoid button3_Click (object sender, EventArgs e)

{

MF = (MainWindow)Form.ActiveForm;

PanelPad.Visible = true;

PanelMenu.Visible = false;

panel2.Enabled = true;

panel2.Visible = true;

panel3.Visible = true;

panel3.Enabled = true;

game = «Tanks» ;

}

privatevoid checkBox3_CheckedChanged (object sender, EventArgs e)

{

if (checkBox1.Checked)

{

Tanks_.thr.Resume ();

thrTime.Resume ();

label5.Visible = false;

checkBox2.Enabled = true;

}

else

{

Tanks_.thr.Suspend ();

thrTime.Suspend ();

label5.Visible = true;

checkBox2.Enabled = false;

}

}

privatevoid groupBox1_Enter (object sender, EventArgs e)

{

}

privatevoid richTextBox1_TextChanged (object sender, EventArgs e)

{

}

privatevoid time ()

{

int time = 0;

while (true)

{

updateT ();

Thread.Sleep (1000);

time++;

Tanks_.Tank_.score += 40;

Tanks_.Tank1.score += 40;

if (time % 60 == 0)

{

label11.Text = (time / 60).ToString () + «:» + «0» ;

}

else

{

label11.Text = (time / 60).ToString () + «:» + (time % 60).ToString ();

}

}

}

publicvoid gOver (string name)

{

Tanks_.ClearTable ();

checkBox2.Checked = false;

MessageBox.Show («Π’Π°Π½ΠΊ «+ name + «Π±Ρ‹Π» ΡƒΠ±ΠΈΡ‚!», «GameOver», MessageBoxButtons. OK, MessageBoxIcon. Information);

}

publicvoid updateT ()

{

if (Tanks_ == null)

return;

label6.Text = Tanks_.Tank_.health.ToString ();

label12.Text = Tanks_.Tank1.health.ToString ();

label7.Text = Tanks_.Tank_.cheat.ToString ();

label8.Text = Tanks_.Tank1.cheat.ToString ();

label9.Text = Tanks_.Tank_.score.ToString ();

label10.Text = Tanks_.Tank1.score.ToString ();

Inv ();

}

privatevoid button5_Click (object sender, EventArgs e)

{

if (Tanks_.thr ≠ null)

if (Tanks_.thr.ThreadState == System.Threading.ThreadState.Suspended)

{

Tanks_.thr.Resume ();

Tanks_.thr.Abort ();

thrTime.Resume ();

thrTime.Abort ();

}

else

{

Tanks_.thr.Abort ();

thrTime.Abort ();

}

game = «Tanks» ;

checkBox2.Enabled = true;

checkBox2.Checked = false;

checkBox3.Checked = false;

panel2.Visible = false;

panel2.Enabled = false;

panel3.Visible = false;

panel3.Enabled = false;

PanelPad.Visible = false;

PanelMenu.Visible = true;

}

privatevoid Pause_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid button1_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid checkBox2_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid checkBox3_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid button5_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)

{

switch (e.KeyCode)

{

caseKeys.Left:

caseKeys.Right:

caseKeys.Down:

caseKeys.Space:

caseKeys.Up:

caseKeys.LShiftKey:

caseKeys.Shift:

caseKeys.ShiftKey:

caseKeys.RShiftKey:

caseKeys.Alt:

caseKeys.ControlKey:

e.IsInputKey = true;

break;

}

}

privatevoid startTanks (object sender, EventArgs e)

{

if (Tanks_ == null)

{

checkBox2.Text = «Stop» ;

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