From ce4b2141be9a648796a742acbe5d65d4534d1ef1 Mon Sep 17 00:00:00 2001 From: "nikbel2004@outlook.com" Date: Wed, 13 Sep 2023 16:48:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tank/Tank.sln | 25 ++++ Tank/Tank/Direction.cs | 16 +++ Tank/Tank/DrawingTank.cs | 137 ++++++++++++++++++++ Tank/Tank/EntityTank.cs | 34 +++++ Tank/Tank/FormTank.Designer.cs | 139 +++++++++++++++++++++ Tank/Tank/FormTank.cs | 55 ++++++++ Tank/Tank/FormTank.resx | 120 ++++++++++++++++++ Tank/Tank/Program.cs | 17 +++ Tank/Tank/Properties/Resources.Designer.cs | 103 +++++++++++++++ Tank/Tank/Properties/Resources.resx | 133 ++++++++++++++++++++ Tank/Tank/Resources/KeyDown.png | Bin 0 -> 1433 bytes Tank/Tank/Resources/KeyLeft.png | Bin 0 -> 1265 bytes Tank/Tank/Resources/KeyRight.png | Bin 0 -> 1310 bytes Tank/Tank/Resources/KeyUp.png | Bin 0 -> 1278 bytes Tank/Tank/Tank.csproj | 26 ++++ 15 files changed, 805 insertions(+) create mode 100644 Tank/Tank.sln create mode 100644 Tank/Tank/Direction.cs create mode 100644 Tank/Tank/DrawingTank.cs create mode 100644 Tank/Tank/EntityTank.cs create mode 100644 Tank/Tank/FormTank.Designer.cs create mode 100644 Tank/Tank/FormTank.cs create mode 100644 Tank/Tank/FormTank.resx create mode 100644 Tank/Tank/Program.cs create mode 100644 Tank/Tank/Properties/Resources.Designer.cs create mode 100644 Tank/Tank/Properties/Resources.resx create mode 100644 Tank/Tank/Resources/KeyDown.png create mode 100644 Tank/Tank/Resources/KeyLeft.png create mode 100644 Tank/Tank/Resources/KeyRight.png create mode 100644 Tank/Tank/Resources/KeyUp.png create mode 100644 Tank/Tank/Tank.csproj diff --git a/Tank/Tank.sln b/Tank/Tank.sln new file mode 100644 index 0000000..f5e6e36 --- /dev/null +++ b/Tank/Tank.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33801.468 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tank", "Tank\Tank.csproj", "{394C34D3-98AF-48A5-B765-763149963292}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {394C34D3-98AF-48A5-B765-763149963292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {394C34D3-98AF-48A5-B765-763149963292}.Debug|Any CPU.Build.0 = Debug|Any CPU + {394C34D3-98AF-48A5-B765-763149963292}.Release|Any CPU.ActiveCfg = Release|Any CPU + {394C34D3-98AF-48A5-B765-763149963292}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {29179072-02D8-4625-BA39-9548F5C3A015} + EndGlobalSection +EndGlobal diff --git a/Tank/Tank/Direction.cs b/Tank/Tank/Direction.cs new file mode 100644 index 0000000..d4c104f --- /dev/null +++ b/Tank/Tank/Direction.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tank +{ + public enum Direction + { + Up = 1, + Down = 2, + Left = 3, + Right = 4 + } +} diff --git a/Tank/Tank/DrawingTank.cs b/Tank/Tank/DrawingTank.cs new file mode 100644 index 0000000..668d781 --- /dev/null +++ b/Tank/Tank/DrawingTank.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; + +namespace Tank +{ + internal class DrawingTank + { + public EntityTank Tank { get; set; } + private int _startPosX; + private int _startPosY; + private int? _pictureWidth = null; + private int? _pictureHeight = null; + private readonly int _TankWidth = 160; + public readonly int _TankHeight = 90; + + public void Init(int speed, float weight, Color bodyColor, Color additionalColor, int Step, int width, int height, bool bodykit, bool wing, bool roadline) + { + _pictureWidth = width; + _pictureHeight = height; + Tank = new EntityTank(); + Tank.Init(speed, weight, bodyColor, additionalColor, Step, width, height, bodykit, wing, roadline); + } + + public void SetPosition(int x, int y, int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (x >= 0 && x + _TankWidth <= width && y >= 0 && y + _TankHeight <= height) + { + _startPosX = x; + _startPosY = y; + } + } + + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _TankWidth + Tank.Step < _pictureWidth) + { + _startPosX += Tank.Step; + } + break; + // влево + case Direction.Left: + if (_startPosX - Tank.Step > 0) + { + _startPosX -= Tank.Step; + } + break; + // вверх + case Direction.Up: + if (_startPosY - Tank.Step > 0) + { + _startPosY -= Tank.Step; + } + break; + // вниз + case Direction.Down: + if (_startPosY + _TankHeight + Tank.Step < _pictureHeight) + { + _startPosY += Tank.Step; + } + break; + } + } + + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + Pen pen = new(Color.Black); + + Brush BrushBlack = new SolidBrush(Color.Black); + g.FillEllipse(BrushBlack, _startPosX + 113, _startPosY + 41, 11, 11); + g.FillEllipse(BrushBlack, _startPosX + 13, _startPosY + 40, 11, 11); + + Brush BrushGray = new SolidBrush(Color.DarkGray); + g.DrawEllipse(pen, _startPosX + 10, _startPosY + 30, 120, 30); + + // Корпус танка + Point[] pointsbody = { new Point(_startPosX + 5, _startPosY + 30), new Point(_startPosX + 140, _startPosY + 30), + new Point(_startPosX + 130, _startPosY + 42), new Point(_startPosX + 12, _startPosY + 42) }; + g.FillPolygon(BrushGray, pointsbody); + + Point[] pointtower = { new Point(_startPosX + 52, _startPosY + 30), new Point(_startPosX + 52, _startPosY + 27), new Point(_startPosX + 40, _startPosY + 23), + new Point(_startPosX + 15, _startPosY + 18), new Point(_startPosX + 15,_startPosY + 15), new Point(_startPosX + 60, _startPosY + 11), new Point(_startPosX + 90, _startPosY + 11), + new Point(_startPosX + 120, _startPosY + 20), new Point(_startPosX + 100,_startPosY + 25), new Point(_startPosX + 95, _startPosY + 27), new Point(_startPosX + 90, _startPosY + 30)}; + + g.FillPolygon(BrushGray, pointtower); + + // Орудие + g.FillRectangle(BrushGray, _startPosX + 111, _startPosY + 17, 55, 5); + + // Зенитное орудие + Brush BrushRandom = new SolidBrush(Tank?.AdditionalColor ?? Color.Black); + Point[] pointgun = { new Point(_startPosX + 44, _startPosY + 13), new Point(_startPosX + 45, _startPosY + 12), new Point(_startPosX + 41, _startPosY + 8), new Point(_startPosX + 41, _startPosY + 7), + new Point(_startPosX + 42, _startPosY + 5), new Point(_startPosX + 41, _startPosY + 4), new Point(_startPosX + 44, _startPosY + 3), new Point(_startPosX + 50, _startPosY + 3), + new Point(_startPosX + 52, _startPosY + 5), new Point(_startPosX + 53, _startPosY + 7), new Point(_startPosX + 58, _startPosY + 11)}; + g.FillPolygon(BrushRandom, pointgun); + + g.FillRectangle(BrushRandom, _startPosX + 50, _startPosY + 5, 20, 2); + } + + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _TankWidth || _pictureHeight <= _TankHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _TankWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _TankWidth; + } + if (_startPosY + _TankHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _TankHeight; + } + } + } +} diff --git a/Tank/Tank/EntityTank.cs b/Tank/Tank/EntityTank.cs new file mode 100644 index 0000000..0462d23 --- /dev/null +++ b/Tank/Tank/EntityTank.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; + +namespace Tank +{ + internal class EntityTank + { + public int Speed { get; private set; } + public float Weight { get; private set; } + public Color BodyColor { get; private set; } + public Color AdditionalColor { get; private set; } + public int Step => Speed * 100 / (int)Weight; + + public bool BodyKit { get; private set; } + public bool Wing { get; private set; } + public bool RoadLine { get; private set; } + + public void Init(int speed, float weight, Color bodyColor, Color additionalcolor, int step, int width, int height, bool bodyKit, bool wing, bool roadline) + { + Random random = new Random(); + Speed = speed <= 0 ? random.Next(50, 100) : speed; + Weight = weight <= 0 ? random.Next(30,60) : weight; + BodyColor = bodyColor; + AdditionalColor = additionalcolor; + BodyKit = bodyKit; + Wing = wing; + RoadLine = roadline; + } + } +} diff --git a/Tank/Tank/FormTank.Designer.cs b/Tank/Tank/FormTank.Designer.cs new file mode 100644 index 0000000..dda0b88 --- /dev/null +++ b/Tank/Tank/FormTank.Designer.cs @@ -0,0 +1,139 @@ +namespace Tank +{ + partial class FormTank + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + pictureBoxTank = new PictureBox(); + ButtonCreate = new Button(); + keyDown = new Button(); + keyUp = new Button(); + keyLeft = new Button(); + keyRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxTank).BeginInit(); + SuspendLayout(); + // + // pictureBoxTank + // + pictureBoxTank.Location = new Point(1, 0); + pictureBoxTank.Margin = new Padding(3, 4, 3, 4); + pictureBoxTank.Name = "pictureBoxTank"; + pictureBoxTank.Size = new Size(913, 599); + pictureBoxTank.TabIndex = 0; + pictureBoxTank.TabStop = false; + // + // ButtonCreate + // + ButtonCreate.Location = new Point(14, 523); + ButtonCreate.Margin = new Padding(3, 4, 3, 4); + ButtonCreate.Name = "ButtonCreate"; + ButtonCreate.Size = new Size(90, 31); + ButtonCreate.TabIndex = 1; + ButtonCreate.Text = "button"; + ButtonCreate.UseVisualStyleBackColor = true; + ButtonCreate.Click += ButtonCreate_Click; + // + // keyDown + // + keyDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + keyDown.BackgroundImage = Properties.Resources.KeyDown; + keyDown.BackgroundImageLayout = ImageLayout.Stretch; + keyDown.Location = new Point(820, 514); + keyDown.Margin = new Padding(3, 4, 3, 4); + keyDown.Name = "keyDown"; + keyDown.Size = new Size(34, 40); + keyDown.TabIndex = 11; + keyDown.UseVisualStyleBackColor = true; + keyDown.Click += ButtonMove_Click; + // + // keyUp + // + keyUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + keyUp.BackgroundImage = Properties.Resources.KeyUp; + keyUp.BackgroundImageLayout = ImageLayout.Stretch; + keyUp.Location = new Point(820, 466); + keyUp.Margin = new Padding(3, 4, 3, 4); + keyUp.Name = "keyUp"; + keyUp.Size = new Size(34, 40); + keyUp.TabIndex = 12; + keyUp.UseVisualStyleBackColor = true; + keyUp.Click += ButtonMove_Click; + // + // keyLeft + // + keyLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + keyLeft.BackgroundImage = Properties.Resources.KeyLeft; + keyLeft.BackgroundImageLayout = ImageLayout.Stretch; + keyLeft.Location = new Point(779, 514); + keyLeft.Margin = new Padding(3, 4, 3, 4); + keyLeft.Name = "keyLeft"; + keyLeft.Size = new Size(34, 40); + keyLeft.TabIndex = 13; + keyLeft.UseVisualStyleBackColor = true; + keyLeft.Click += ButtonMove_Click; + // + // keyRight + // + keyRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + keyRight.BackgroundImage = Properties.Resources.KeyRight; + keyRight.BackgroundImageLayout = ImageLayout.Stretch; + keyRight.Location = new Point(861, 514); + keyRight.Margin = new Padding(3, 4, 3, 4); + keyRight.Name = "keyRight"; + keyRight.Size = new Size(34, 40); + keyRight.TabIndex = 14; + keyRight.UseVisualStyleBackColor = true; + keyRight.Click += ButtonMove_Click; + // + // FormTank + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(914, 568); + Controls.Add(keyRight); + Controls.Add(keyLeft); + Controls.Add(keyUp); + Controls.Add(keyDown); + Controls.Add(ButtonCreate); + Controls.Add(pictureBoxTank); + Margin = new Padding(3, 4, 3, 4); + Name = "FormTank"; + Text = "FormTank"; + ((System.ComponentModel.ISupportInitialize)pictureBoxTank).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxTank; + private Button ButtonCreate; + private Button keyRight; + private Button keyLeft; + private Button keyUp; + private Button keyDown; + } +} \ No newline at end of file diff --git a/Tank/Tank/FormTank.cs b/Tank/Tank/FormTank.cs new file mode 100644 index 0000000..d6546c5 --- /dev/null +++ b/Tank/Tank/FormTank.cs @@ -0,0 +1,55 @@ +namespace Tank +{ + public partial class FormTank : Form + { + private DrawingTank _Tank; + public FormTank() + { + InitializeComponent(); + } + + private void Draw() + { + Bitmap bmp = new(pictureBoxTank.Width, pictureBoxTank.Height); + Graphics gr = Graphics.FromImage(bmp); + _Tank?.DrawTransport(gr); + pictureBoxTank.Image = bmp; + } + private void PictureBoxTank_Resize(object sender, EventArgs e) + { + _Tank?.ChangeBorders(pictureBoxTank.Width, pictureBoxTank.Height); + Draw(); + } + + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + _Tank = new DrawingTank(); + _Tank.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), 0, pictureBoxTank.Width, pictureBoxTank.Height, true, true, true); + _Tank.SetPosition(rnd.Next(10, 50), rnd.Next(30, 70), pictureBoxTank.Width, pictureBoxTank.Height); + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "keyUp": + _Tank?.MoveTransport(Direction.Up); + break; + case "keyDown": + _Tank?.MoveTransport(Direction.Down); + break; + case "keyLeft": + _Tank?.MoveTransport(Direction.Left); + break; + case "keyRight": + _Tank?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + } +} \ No newline at end of file diff --git a/Tank/Tank/FormTank.resx b/Tank/Tank/FormTank.resx new file mode 100644 index 0000000..a395bff --- /dev/null +++ b/Tank/Tank/FormTank.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Tank/Tank/Program.cs b/Tank/Tank/Program.cs new file mode 100644 index 0000000..3fbc0e1 --- /dev/null +++ b/Tank/Tank/Program.cs @@ -0,0 +1,17 @@ +namespace Tank +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new FormTank()); + } + } +} \ No newline at end of file diff --git a/Tank/Tank/Properties/Resources.Designer.cs b/Tank/Tank/Properties/Resources.Designer.cs new file mode 100644 index 0000000..160a61c --- /dev/null +++ b/Tank/Tank/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace Tank.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tank.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap KeyDown { + get { + object obj = ResourceManager.GetObject("KeyDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap KeyLeft { + get { + object obj = ResourceManager.GetObject("KeyLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap KeyRight { + get { + object obj = ResourceManager.GetObject("KeyRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap KeyUp { + get { + object obj = ResourceManager.GetObject("KeyUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Tank/Tank/Properties/Resources.resx b/Tank/Tank/Properties/Resources.resx new file mode 100644 index 0000000..3cca124 --- /dev/null +++ b/Tank/Tank/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\KeyDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\KeyLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\KeyRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\KeyUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Tank/Tank/Resources/KeyDown.png b/Tank/Tank/Resources/KeyDown.png new file mode 100644 index 0000000000000000000000000000000000000000..ff09b70c28c9988dac153284fd98a56020d7069e GIT binary patch literal 1433 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 UC`*H+82|tP07*qoM6N<$g5dIoJpcdz literal 0 HcmV?d00001 diff --git a/Tank/Tank/Resources/KeyUp.png b/Tank/Tank/Resources/KeyUp.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4bf6ffa0263f78b54fa34ba68c98c19ef64090 GIT binary patch literal 1278 zcmVu0sj2jo~ zRd69$DB?mv1Ys_yAR;J1xPw^=BIrVV#=N^8vk2))+H~x`={O|#K`km>b*fH%b?VeP z74q`(qB-ZN1xjgEoe)y9o!9SSeg6#Z{+Ub$)T3?7<6E&-180mm6~8v+7w-Oz$_s+_ zW$Y_gvDu)c#1kQ;jTv*>70`UY6BJ(Kl^JqFYu(0-5kjD~{=erD3JCp=+4f}&2yRnB zZ7l5eZriG4%4rj5#1_K0Vy%Xnfmj$e#VCVR(y3=M8JMPtj*bo#i^V|lz5G?(K7o7q zfKm#KGe{|+ltM0-!`$2)E-o&hwf+(ZUpsVe5R5U{whhiX48y?w{yuhgb`Xt5F+M(y zuC6ZFw%v@O9W;$Gr4$%rxVgE(^71lfXJ>JIe2kxe|AY{t>8w$pw8!feH$H368Hd&y zT50U=?&9I$0a8l*^~az1vGN1Ax3@411B|i{vVoFKRhAFqQ&Lqt6$=}-uwhviu98<+ zTU*2E=qQ8`0Dx>Zi@m))NFgDWY#MV-QOq<=q|<3^ZEc~iug^IJZ7DD`G=!Cv75w_= z7b1}eq?DnJTe-uU=Eu&@&#|$wf&Tt}Xsw}?axU8g0|VIH+(a&yLuG0rOw_copioMc zY>RVn&hh;GjMdduOiWBTTd*v93#!Sg~EsSwrwMu&0=I^1dEG{xVyUx zowb^Z1@&uMYgm?rL?VHBJdWPpUI-z;7=vk=wFjmYQc5t!u)VzvLWom$`zbHKrM0fw z5#@SlSt=S;o(mgrficDZeVb55DN`Kg6^r#Q)Gv%1mLcA-$f%*+g~ zuCCDC-TmRa`v4(?fKuw%Wlv8J5{U#(PEIgAJq@LluW`NRnM$R?QA`Md`}=#OQYl0t zkq_U!CQ2y_Kox~$Sq@8-Qr|XK55Dq>ZUk-b zj=S73ROL4GlREG-e%ofLz7=aV_&Piq&HH)fCH&%dV#Ky(>|3!`gRk6u(A@cFHuV)L z?zUy@Td`IHH%${#%DQ$G)DO9BsL_8V`01~;b}r*mO7QphcXUQOOB3=?pwUb6R~#0V zv0SlO1kdO5uq>NBO~#ODRKNK{wpSANF6I%1Twr o<>gd#GZFSF=_S7`R|tWB0pFkf#1au;M1& literal 0 HcmV?d00001 diff --git a/Tank/Tank/Tank.csproj b/Tank/Tank/Tank.csproj new file mode 100644 index 0000000..13ee123 --- /dev/null +++ b/Tank/Tank/Tank.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file