ΠΠ³ΡΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Β«Π’Π΅ΡΡΠΈΡΒ»
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄ΠΎΠ»Π³ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²: 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» ;