From abbb22b052854f309131e734d8fb629d67f26f0d Mon Sep 17 00:00:00 2001 From: vettaql Date: Thu, 29 Feb 2024 04:55:39 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectTank/ProjectTank/DirectionType.cs | 23 +++ ProjectTank/ProjectTank/DrawningTank.cs | 161 ++++++++++++++++++ ProjectTank/ProjectTank/EntityTank.cs | 57 +++++++ ProjectTank/ProjectTank/Form1.Designer.cs | 39 ----- ProjectTank/ProjectTank/Form1.cs | 10 -- ProjectTank/ProjectTank/FormTank.Designer.cs | 134 +++++++++++++++ ProjectTank/ProjectTank/FormTank.cs | 80 +++++++++ .../ProjectTank/{Form1.resx => FormTank.resx} | 50 +++--- ProjectTank/ProjectTank/Program.cs | 2 +- ProjectTank/ProjectTank/ProjectTank.csproj | 15 ++ .../Properties/Resources.Designer.cs | 103 +++++++++++ .../ProjectTank/Properties/Resources.resx | 133 +++++++++++++++ ProjectTank/ProjectTank/Resources/Down.png | Bin 0 -> 6300 bytes ProjectTank/ProjectTank/Resources/Left.png | Bin 0 -> 6070 bytes ProjectTank/ProjectTank/Resources/Right.png | Bin 0 -> 5859 bytes ProjectTank/ProjectTank/Resources/Up.png | Bin 0 -> 6562 bytes 16 files changed, 732 insertions(+), 75 deletions(-) create mode 100644 ProjectTank/ProjectTank/DirectionType.cs create mode 100644 ProjectTank/ProjectTank/DrawningTank.cs create mode 100644 ProjectTank/ProjectTank/EntityTank.cs delete mode 100644 ProjectTank/ProjectTank/Form1.Designer.cs delete mode 100644 ProjectTank/ProjectTank/Form1.cs create mode 100644 ProjectTank/ProjectTank/FormTank.Designer.cs create mode 100644 ProjectTank/ProjectTank/FormTank.cs rename ProjectTank/ProjectTank/{Form1.resx => FormTank.resx} (93%) create mode 100644 ProjectTank/ProjectTank/Properties/Resources.Designer.cs create mode 100644 ProjectTank/ProjectTank/Properties/Resources.resx create mode 100644 ProjectTank/ProjectTank/Resources/Down.png create mode 100644 ProjectTank/ProjectTank/Resources/Left.png create mode 100644 ProjectTank/ProjectTank/Resources/Right.png create mode 100644 ProjectTank/ProjectTank/Resources/Up.png diff --git a/ProjectTank/ProjectTank/DirectionType.cs b/ProjectTank/ProjectTank/DirectionType.cs new file mode 100644 index 0000000..31f8f61 --- /dev/null +++ b/ProjectTank/ProjectTank/DirectionType.cs @@ -0,0 +1,23 @@ +namespace ProjectTank; +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down = 2, + /// + /// Влево + /// + Left = 3, + /// + /// Вправо + /// + Right = 4 +} diff --git a/ProjectTank/ProjectTank/DrawningTank.cs b/ProjectTank/ProjectTank/DrawningTank.cs new file mode 100644 index 0000000..e041212 --- /dev/null +++ b/ProjectTank/ProjectTank/DrawningTank.cs @@ -0,0 +1,161 @@ +namespace ProjectTank; +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningTank +{ + /// + /// Класс-сущность + /// + public EntityTank? EntityTank { get; private set; } + /// + /// Ширина окна + /// + private int? _pictureWidth; + /// + /// Высота окна + /// + private int? _pictureHeight; + /// + /// Левая координата прорисовки танка + /// + private int? _startPosX; + /// + /// Верхняя кооридната прорисовки танка + /// + private int? _startPosY; + /// + /// Ширина прорисовки танка + /// + private readonly int _drawningCarWidth = 110; + /// + /// Высота прорисовки танка + /// + private readonly int _drawningCarHeight = 60; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия башни с орудием + /// Признак наличия пулемёта + public void Init(int speed, double weight, Color bodyColor, Color + additionalColor, bool gunTurret, bool machineGun, bool v) + { + EntityTank = new EntityTank(); + EntityTank.Init(speed, weight, bodyColor, additionalColor, + gunTurret, machineGun); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + _pictureWidth = width; + _pictureHeight = height; + return true; + } + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + + _startPosX = x; + _startPosY = y; + } + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + + public bool MoveTransport(DirectionType direction) + { + if (EntityTank == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return false; + } + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityTank.Step > 0) + { + _startPosX -= (int)EntityTank.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityTank.Step > 0) + { + _startPosY -= (int)EntityTank.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + EntityTank.Step + _drawningCarWidth <= _pictureWidth) + { + _startPosX += (int)EntityTank.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityTank.Step + _drawningCarHeight <= _pictureHeight) + { + _startPosY += (int)EntityTank.Step; + } + return true; + default: + return false; + } + } + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityTank == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return; + } + Pen pen = new(Color.Black); + Brush additionalBrush = new + SolidBrush(EntityTank.AdditionalColor); + + //границы танка + гусеницы + g.DrawEllipse(pen, _startPosX.Value + 35, _startPosY.Value + 35, 40, 10); + g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 35, 5, 5); + g.DrawEllipse(pen, _startPosX.Value + 23, _startPosY.Value + 37, 2, 2); + g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 37, 2, 2); + g.DrawEllipse(pen, _startPosX.Value + 37, _startPosY.Value + 37, 2, 2); + g.DrawEllipse(pen, _startPosX.Value + 44, _startPosY.Value + 37, 2, 2); + g.DrawEllipse(pen, _startPosX.Value + 52, _startPosY.Value + 35, 5, 5); + + g.DrawRectangle(pen, _startPosX.Value + 34, _startPosY.Value + 29, 46, 3); + g.DrawRectangle(pen, _startPosX.Value + 32, _startPosY.Value + 25, 17, 6); + } +} \ No newline at end of file diff --git a/ProjectTank/ProjectTank/EntityTank.cs b/ProjectTank/ProjectTank/EntityTank.cs new file mode 100644 index 0000000..11a4b01 --- /dev/null +++ b/ProjectTank/ProjectTank/EntityTank.cs @@ -0,0 +1,57 @@ +using System.Net.NetworkInformation; + +namespace ProjectTank; + +/// +/// Класс-сущность "Танк" +/// +public class EntityTank +{ + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public double Weight { get; private set; } + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + /// + /// Дополнительный цвет (для опциональных элементов) + /// + public Color AdditionalColor { get; private set; } + /// + /// Признак (опция) наличия башни с орудием + /// + public bool GunTurret { get; private set; } + /// + /// Признак (опция) наличия пулемёта + /// + public bool MachineGun { get; private set; } + /// + /// Шаг перемещения танка + /// + public double Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия башни с орудием + /// Признак наличия пулемёта + public void Init(int speed, double weight, Color bodyColor, Color + additionalColor, bool gunTurret, bool machineGun) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + GunTurret = gunTurret; + MachineGun = machineGun; + } +} diff --git a/ProjectTank/ProjectTank/Form1.Designer.cs b/ProjectTank/ProjectTank/Form1.Designer.cs deleted file mode 100644 index 6b0ceb0..0000000 --- a/ProjectTank/ProjectTank/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectTank -{ - partial class Form1 - { - /// - /// 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() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/ProjectTank/ProjectTank/Form1.cs b/ProjectTank/ProjectTank/Form1.cs deleted file mode 100644 index 5ad885c..0000000 --- a/ProjectTank/ProjectTank/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectTank -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/ProjectTank/ProjectTank/FormTank.Designer.cs b/ProjectTank/ProjectTank/FormTank.Designer.cs new file mode 100644 index 0000000..8cea8af --- /dev/null +++ b/ProjectTank/ProjectTank/FormTank.Designer.cs @@ -0,0 +1,134 @@ +namespace ProjectTank +{ + 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(); + buttonLeft = new Button(); + buttonDown = new Button(); + buttonRight = new Button(); + buttonUp = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxTank).BeginInit(); + SuspendLayout(); + // + // pictureBoxTank + // + pictureBoxTank.Dock = DockStyle.Fill; + pictureBoxTank.Location = new Point(0, 0); + pictureBoxTank.Name = "pictureBoxTank"; + pictureBoxTank.Size = new Size(800, 450); + pictureBoxTank.TabIndex = 0; + pictureBoxTank.TabStop = false; + // + // buttonCreate + // + buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreate.Location = new Point(12, 415); + buttonCreate.Name = "buttonCreate"; + buttonCreate.Size = new Size(94, 29); + buttonCreate.TabIndex = 1; + buttonCreate.Text = "Создать"; + buttonCreate.UseVisualStyleBackColor = true; + buttonCreate.Click += ButtonCreateTank_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.Left; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(671, 409); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.Down; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(712, 409); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 3; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.Right; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(753, 409); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 4; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.Up; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(712, 368); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 5; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // FormTank + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonUp); + Controls.Add(buttonRight); + Controls.Add(buttonDown); + Controls.Add(buttonLeft); + Controls.Add(buttonCreate); + Controls.Add(pictureBoxTank); + Name = "FormTank"; + Text = "Танк"; + ((System.ComponentModel.ISupportInitialize)pictureBoxTank).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxTank; + private Button buttonCreate; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + private Button buttonUp; + } +} \ No newline at end of file diff --git a/ProjectTank/ProjectTank/FormTank.cs b/ProjectTank/ProjectTank/FormTank.cs new file mode 100644 index 0000000..a80a840 --- /dev/null +++ b/ProjectTank/ProjectTank/FormTank.cs @@ -0,0 +1,80 @@ +namespace ProjectTank; +public partial class FormTank : Form +{ + private DrawningTank? _drawningTank; + public FormTank() + { + InitializeComponent(); + } + + /// + /// Метод прорисовки машины + /// + private void Draw() + { + if (_drawningTank == null) + { + return; + } + Bitmap bmp = new(pictureBoxTank.Width, pictureBoxTank.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningTank.DrawTransport(gr); + pictureBoxTank.Image = bmp; + } + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreateTank_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningTank = new DrawningTank(); + _drawningTank.Init(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawningTank.SetPictureSize(pictureBoxTank.Width, pictureBoxTank.Height); + _drawningTank.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningTank == null) + { + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = + _drawningTank.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = + _drawningTank.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = + _drawningTank.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = + _drawningTank.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } +} + + diff --git a/ProjectTank/ProjectTank/Form1.resx b/ProjectTank/ProjectTank/FormTank.resx similarity index 93% rename from ProjectTank/ProjectTank/Form1.resx rename to ProjectTank/ProjectTank/FormTank.resx index 1af7de1..af32865 100644 --- a/ProjectTank/ProjectTank/Form1.resx +++ b/ProjectTank/ProjectTank/FormTank.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectTank/ProjectTank/Program.cs b/ProjectTank/ProjectTank/Program.cs index e967a59..61d6fe8 100644 --- a/ProjectTank/ProjectTank/Program.cs +++ b/ProjectTank/ProjectTank/Program.cs @@ -11,7 +11,7 @@ namespace ProjectTank // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormTank()); } } } \ No newline at end of file diff --git a/ProjectTank/ProjectTank/ProjectTank.csproj b/ProjectTank/ProjectTank/ProjectTank.csproj index b57c89e..13ee123 100644 --- a/ProjectTank/ProjectTank/ProjectTank.csproj +++ b/ProjectTank/ProjectTank/ProjectTank.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectTank/ProjectTank/Properties/Resources.Designer.cs b/ProjectTank/ProjectTank/Properties/Resources.Designer.cs new file mode 100644 index 0000000..92170e6 --- /dev/null +++ b/ProjectTank/ProjectTank/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectTank.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("ProjectTank.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 Down { + get { + object obj = ResourceManager.GetObject("Down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Left { + get { + object obj = ResourceManager.GetObject("Left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Right { + get { + object obj = ResourceManager.GetObject("Right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Up { + get { + object obj = ResourceManager.GetObject("Up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectTank/ProjectTank/Properties/Resources.resx b/ProjectTank/ProjectTank/Properties/Resources.resx new file mode 100644 index 0000000..38bb323 --- /dev/null +++ b/ProjectTank/ProjectTank/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\Down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectTank/ProjectTank/Resources/Down.png b/ProjectTank/ProjectTank/Resources/Down.png new file mode 100644 index 0000000000000000000000000000000000000000..08436f421d014af3452c83267e9839d4aab3429d GIT binary patch literal 6300 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 literal 0 HcmV?d00001 diff --git a/ProjectTank/ProjectTank/Resources/Left.png b/ProjectTank/ProjectTank/Resources/Left.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a7f4c7dec8cb216bfa2d3010869248feb52704 GIT binary patch literal 6070 zcmcgQXH-*5w^6KzcEtn%1+E`@iJ>D13JDUVSTI2nno=TiK~Vu|N>$+ym8OEi{m{hF zLXoBc5d`!gsNkiFBGrI2AtVYnMCzOPzW3I8|M>ORnsa9M%-I~A?)>Etn)UvHAkV!k|h^u>j5lBK1Q(| z9UWb>X3fgV3YhTq^?m;Q`KZN(765Gaw{Z?cp=9dC-~Z)Y20DxSwqs42$(o_=8Rn4`GdX0GOvFal7BpBm>V)>H|8zKS@zG(F z5VYK-vM8BqF?8E{b?war6|R#h_*cMNwN))jq?n>V1>qIE&ZMi-7EX%+ZkaEbN`X3@-3S2zF0Ck z$cfnfeTuN@A!0_x-so?yEYYX1a1QD#Ua2@r!#RQbnLMJiRCrhcS-!e(1<;_jPfu7E zkQEAR^`xnJ2^ReZaX7S9FWV?W9`Xz>^4pM4q)quXNl~#0(=oSkl*V4hKsw(Q=8hTh zwhhe97Nh-iTxwm$Rh=wY+EoNRbT7c?{f9>fS-V2KtJ&5p?Vb|-4KULEaFL+`KN%-% zvdc^81jB-HGcb&2zxy4s44D7@5DV9{@go_VD7<3US*PF6Zu5y17;0C`o27cr{>)hnnt>=yvIqIbuD;bFt+kx?Azq)Qads{ zsjfwKB2q)#@@1ciYP*o zjlw=)z9`vgg`E&Q7!xg2fvfneA8&xL3o1R${Ao_!{?FOpvm5>)pc-HNlFV}G1v}b( zr|W_~gEO8c;gLstW%(@F-j8a7xqtOpiN2>TCZr0g_QfYrxNE!QdBRx=SFS5OnA9>NrGml7vXM*b} zw3h<=9E(xm?5oE44K&;4XAji1qKr@*U|hTqh^1}k+g_)NiXkRil74~b+G(0PkSh6X z`^**b^4a#ZZ4w^jywY(`yb@X^79;%gJXy5POa4M@XO=**Npn7ajV@L*s(soN4>4J9 zGy5C#u@SfA3LmtH*N>NEo;+>Oj0%itYb$R}7%SQMQlUz?yX1!tA+qB-?tOgZUfx7L zvdu|=<2C5V;Y>GaaKghZFe*V9w@=bnSx~%djv0xBiAu~VzVr`Dp`f(QtGsaIOET=G z?W@GKz!bmySDIIA=O+rQ6j|7$THwE4zVh+8be;Pw$kF3k^AmTkJj75T>i#FWr{VK8 zO0kAogHmGutXvx(*^#-=5OSokn$PJ}6V6^kzIHP*l;9?4tn3B$)V1B(leKJXE~M%2 z+|@S4lY-9%oFhFVQ@IslfxVsYnONOG{&DJgf{O;8K3T@`l3oTn_~d!ExoRp6g53sIZAAN#iu1%_~?D8INbZ%q)9sP9i(q^JhZm+I__9v{Tng-ezG#Xkqmeb zRX|x_{&b};jZ}c>z*LEyg{KfT>Kpcx5V^_tL`-S!$o4H3Oc16J?@Cw<(F=~0^TsC7 zFN&iY^UKw7FZdI7dHDj)AW8xKr!&33GmGp@^G)88Np|KwSG2f_E<;xVx5_U&*AZ_J?iaf>u8AhO!;r%+)yvJ>k_udtj zE?AXFK}$7r&Y0!amFO(TFqlSS+H>c^avY4AY}x2275JY}0CZa^p=M(A%8;K=oD6Q@ z62$I%7VWSUQ6{Bifa&p!{aS03OX+@?;(GKtf*tSO3gADcF8#zu-rvA|))+)`i6!8l z^Aq2pkB5g{8r*KbCjk#glwo?p`R{7v9ensT>T@>fRxCV;G<`?+CNeD-i8_{uq(e(r z!Y(DpZbmz(U;pS}{E#i)_6X8hX4!%1@0jDQ11aIV5{mt!gp58l+Icwg;fTv!X6(*s zrzK>;$?e|}WxB=0g(gX@2Ge^DM1f2j~Bx?pu$uM4=G3u3lcS$--2P-%UspN z_PKL8Z1wTC3brgJiPTmFoit-I9tC6Eq|DV38?nu1F7I1j^|WXBZ2lQ=TG#V z9jLjhuxt1nz>yW=CsR^JvyB5c|me^Vw!yDiSg+g_0O7>$;iG1ltK*B ziUyLu`}376I__7mjBc45NI5URc#3O!KkdxSmocdK>CUDHqB3zL-~Bs=iQ~9?-O$&F z$}2sMN~l758MQl`UWoo8Zg{B>0N(?7A=UZ28q77t+x^)g&hBiWD1n~?H z;zx#MzQ2`$(Qf=9=jG5>(AL8CMjhKyNoDnRZuQz+X-AuD)~^#;#XM7U?VzLa`)$p?d2JEZBJn$`Gj%JS z`*nicy?j30i}k~CW+vVhYetZ0BMY-<9OY`+{sJJT>tPWCk(BUAs300K8B-vS#!W%5 zjnFbPPHs;$HV=~DqSEyPYKY;R62W{I)Gy(C#_{)J>NwE2>$S=gv`JM*wd%D24-xGL zY;`cWCl0&Mm>Y%j@C<{nXlwB82x16r1bim=qQQ|Z#s)+cg5eMn$!Yy?8q{Ai7faQR z+K*}kj{NxgcMTZiD;g%D1ao|BVsoKKM5NZcAO@opYSaM=Mhfm>^ifu8-KDSYZ~a7( zb9f~ha*+#9xLw-xW)Szd?@AbgQ;m79F5&T@POy@>*HL%bfyM9K>hM#v9kypOz_u}H z43DSXOD2g4ZDxwo%I3m|h}<>?TU}W(BD1vWqtw+cNHi{JY~rx>#uZlSrT-ZOC-1nM zB(v;FGbWJ^91w-V>eC$E9*8|No1GPtEEXkOE!Y3E&I{S#91J@~R>EW2^9rDmMsk^z zmhe~?@I4zgv9dXE>9V8GSZ7Mo?*kiOo>D}q6$=cKUbBh>?#mTU9e3&*c4>{>4*Ke^ z*V?jlJp&BNbf#JiNna#~emvVNaWdR8LbSfuL!_LqLSSsh+pd^QjDHz^m;0P*4w#xN zUTRn&afX5fe289^f7sfE*3C@;To3Pj-7CWk;$T$zJpSltf2Hn?i<2Y;YH*)=>MbqS z+$&ut_{`<}Owgh2`LY)dp_2~iizr-H&Fv&9f}@jkwpvUpW}vnsAzQ7u)I{I=s4J^( z?=`X7HO})~@5fRJwUzJhs>$Ed8l-D@Z8M2La0>3OQxSvQt-we>;ueL+oWRXy=SB&j z`x5KKZsppggS&vi3$K|yQ?8|5a%mTheC0?&U6=|ZdMs5x3V*$0;J0JINp6{!;$uAG z8x4okOO~aKX!mXwj`lFw?nQTj4<6x~b~Au;QlaXoL$opl3Vvc6;Y(RSw6`cj?D`s* z5O0gE?x(mH=*ftFKoRj-y?V7=KsnOusHBp!NA8oxRPoF(SsW9rHaD#gw;ys4e;MXf z6B3FJsj1VtGj$7jhMo@;opF?}Ww$*9*iQs_n9e1J3_(kV^J2vOHhc~##FASL$yU%w zA-lO%QCx`@e8hZ+<(CbxMYpn?mtv(k_eH&W)4%-V5pcgg!!By;2RQJTKi~_^bvB8W z#JXRr8UN|Ch@oi&JNauTF;#&g+Bg6C|*C03*`*bJ-rce7U z@?CC%jPyv*wnU^A6$!qyaJPE>DW(5$PBP7hJz_Y^(;v2m>SdS!!5dNy5$(#@XhykQ zca(_@p-X}YqQ@Xq9RAm}*A(a3Sljq^1j{)l3f9GBM@lkHd zV-8}meaBsptnIj*diBqo$}GeJxF?vPvY7X+pPUVFhcD7ep!bHg-W6!P-~q~d(?xBz z&1%kBkK0=6)t%LfN^5R|lfs>As&eB|r^h-N_)mt(k+!qC*O7|qj~{oMvtQj_9$P{- z2F(cSnFk$p^c(GrZ$GX=7Hq@UDJ!e(nMz7Azn+v>h7PIARVILQ&j%X&KmBE>I%UOi z)e}BaFq@*okLjYt?+~c@h8s}J0LcW0f`4>_iB->T~S4qy!IU5B>mI>W&Qw;HU6SD%5WqKJp@ZjyZ@* z!JV2FJk^+8QJR-Yci;wfy6HiG8@=Q}e3Qk;kl#wAL2|$*&(rXXjM+29Z?^o8a^x(X z`A_7hIlr&m!O5odQ>={p-cK~LAv5#vw5Wl({zblfG(571aYNG0ffAUGT-AP~uo1FP zD|d`4;&b>$n{$_9c$^n6s5cN&J0XW3noD8j0dJ{YaX5x4z)2bL?BH+@(O;SFm9O_r z37#7CUL3TsuN%CPJ}Ju>d^R6#``915o>clP=U`mKwcRC`4gf9HzRq;~Op+15t%SH_L+a%=v3cxaoiYKnDnpou41PhM z5KY3FK&5p8#RAQ$5<6@$uz)pp?+54E^>C}5ce_|rRkBa}jEpKQo5vYfql%<*TH z0z1)Fm-t#Tyzv6u$ua%)j_i6TU35tNX62R06S;C-^8E}y8N13u<(9qd+3jG<#r7`o z(Xjit4ol{<-rGm+qN^w386lz|p7zY&)LXN3-R!W-Dpk`7#9&wpoSh)0V&dvz(iC!Sfg1SPYx~I?2TfM}wGJ6=gZ19u_wnTp>tfyiVE9ip?$M;PP zU7+)$TdkTMgs)?ZC0b%Xo_N%P?S`Yo!C`cK|&|F>h zQCy@vt`p|>&1T1s)ip#Rsv|tba&>iR!1S95OTMl0D$B|@Eil#7bxg`+?5j+ZR!~hx O9kx7vsF>(+{l5T^PnrDy literal 0 HcmV?d00001 diff --git a/ProjectTank/ProjectTank/Resources/Right.png b/ProjectTank/ProjectTank/Resources/Right.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0fe69bc1bb7c82dd500bc6e85dc0e22b42ef8f GIT binary patch literal 5859 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 cPw2-id^O%!wR&k2K(zPVln{z}w80q~RBmjD0& literal 0 HcmV?d00001