From 6b66607d68f4981419d6d4c5a8e44ed95c86fe40 Mon Sep 17 00:00:00 2001 From: Sem730 Date: Sun, 25 Sep 2022 13:17:29 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectLocomotive/ProjectLocomotive.sln | 25 ++++ .../ProjectLocomotive/Direction.cs | 12 ++ .../ProjectLocomotive/Form1.Designer.cs | 39 ++++++ ProjectLocomotive/ProjectLocomotive/Form1.cs | 10 ++ .../ProjectLocomotive/Form1.resx | 120 ++++++++++++++++++ .../ProjectLocomotive/Program.cs | 17 +++ .../ProjectLocomotive.csproj | 11 ++ 7 files changed, 234 insertions(+) create mode 100644 ProjectLocomotive/ProjectLocomotive.sln create mode 100644 ProjectLocomotive/ProjectLocomotive/Direction.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/Form1.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/Form1.resx create mode 100644 ProjectLocomotive/ProjectLocomotive/Program.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj diff --git a/ProjectLocomotive/ProjectLocomotive.sln b/ProjectLocomotive/ProjectLocomotive.sln new file mode 100644 index 0000000..4a93904 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectLocomotive", "ProjectLocomotive\ProjectLocomotive.csproj", "{7CEDC335-F21C-44F3-BF5F-4D261A892BF9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7CEDC335-F21C-44F3-BF5F-4D261A892BF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CEDC335-F21C-44F3-BF5F-4D261A892BF9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CEDC335-F21C-44F3-BF5F-4D261A892BF9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CEDC335-F21C-44F3-BF5F-4D261A892BF9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2F49F5D5-06B8-4F08-B2D5-36BBCFD91B3D} + EndGlobalSection +EndGlobal diff --git a/ProjectLocomotive/ProjectLocomotive/Direction.cs b/ProjectLocomotive/ProjectLocomotive/Direction.cs new file mode 100644 index 0000000..251edeb --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Direction.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLocomotive +{ + internal class Direction + { + } +} diff --git a/ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs b/ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs new file mode 100644 index 0000000..4cb5164 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs @@ -0,0 +1,39 @@ +namespace ProjectLocomotive +{ + 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/ProjectLocomotive/ProjectLocomotive/Form1.cs b/ProjectLocomotive/ProjectLocomotive/Form1.cs new file mode 100644 index 0000000..1527fc7 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Form1.cs @@ -0,0 +1,10 @@ +namespace ProjectLocomotive +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/Form1.resx b/ProjectLocomotive/ProjectLocomotive/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Form1.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/ProjectLocomotive/ProjectLocomotive/Program.cs b/ProjectLocomotive/ProjectLocomotive/Program.cs new file mode 100644 index 0000000..06ff648 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Program.cs @@ -0,0 +1,17 @@ +namespace ProjectLocomotive +{ + 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 Form1()); + } + } +} \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj b/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj new file mode 100644 index 0000000..b57c89e --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj @@ -0,0 +1,11 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + \ No newline at end of file -- 2.25.1 From 0fbebbe0dc107bcfe22104fb1d857cccdd0c11ba Mon Sep 17 00:00:00 2001 From: Sem730 Date: Sun, 25 Sep 2022 14:20:12 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectLocomotive/Direction.cs | 6 +- .../ProjectLocomotive/DrawningLocomotive.cs | 182 ++++++++++++++++++ .../ProjectLocomotive/EntityLocomotive.cs | 42 ++++ .../ProjectLocomotive/Form1.resx | 120 ------------ ...Designer.cs => FormLocomotive.Designer.cs} | 13 +- .../{Form1.cs => FormLocomotive.cs} | 4 +- .../ProjectLocomotive/FormLocomotive.resx | 60 ++++++ .../ProjectLocomotive/Program.cs | 2 +- 8 files changed, 302 insertions(+), 127 deletions(-) create mode 100644 ProjectLocomotive/ProjectLocomotive/DrawningLocomotive.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/EntityLocomotive.cs delete mode 100644 ProjectLocomotive/ProjectLocomotive/Form1.resx rename ProjectLocomotive/ProjectLocomotive/{Form1.Designer.cs => FormLocomotive.Designer.cs} (76%) rename ProjectLocomotive/ProjectLocomotive/{Form1.cs => FormLocomotive.cs} (54%) create mode 100644 ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx diff --git a/ProjectLocomotive/ProjectLocomotive/Direction.cs b/ProjectLocomotive/ProjectLocomotive/Direction.cs index 251edeb..f284e18 100644 --- a/ProjectLocomotive/ProjectLocomotive/Direction.cs +++ b/ProjectLocomotive/ProjectLocomotive/Direction.cs @@ -6,7 +6,11 @@ using System.Threading.Tasks; namespace ProjectLocomotive { - internal class Direction + internal enum Direction { + Up = 1, + Down = 2, + Left = 3, + Right = 4 } } diff --git a/ProjectLocomotive/ProjectLocomotive/DrawningLocomotive.cs b/ProjectLocomotive/ProjectLocomotive/DrawningLocomotive.cs new file mode 100644 index 0000000..0aa3f7a --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/DrawningLocomotive.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLocomotive +{ + /// + /// Класс, отвечающий за прорисовку и перемещение объекта-сущности + /// + internal class DrawningLocomotive + { + /// + /// Класс-сущность + /// + public EntityLocomotive Locomotivе { private set; get; } + /// + /// Левая координата отрисовки локомотива + /// + private float _startPosX; + /// + /// Верхняя кооридната отрисовки локомотива + /// + private float _startPosY; + /// + /// Ширина окна отрисовки + /// + private int? _pictureWidth = null; + /// + /// Высота окна отрисовки + /// + private int? _pictureHeight = null; + /// + /// Ширина отрисовки локомотива + /// + private readonly int _LocWidth = 80; + /// + /// Высота отрисовки локомотива + /// + private readonly int _LocHeight = 50; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес локомотива + /// Цвет кузова + public void Init(int speed, float weight, Color bodyColor) + { + Locomotivе = new EntityLocomotive(); + Locomotivе.Init(speed, weight, bodyColor); + } + /// + /// Установка позиции автомобиля + /// + /// Координата X + /// Координата Y + /// Ширина картинки + /// Высота картинки + public void SetPosition(int x, int y, int width, int height) + { + // TODO проверки + if (x < 0 || y < 0 || width < x + _LocWidth || height < y + _LocHeight) + { + _pictureHeight = null; + _pictureWidth = null; + return; + } + _startPosX = x; + _startPosY = y; + _pictureWidth = width; + _pictureHeight = height; + } + /// + /// Изменение направления перемещения + /// + /// Направление + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _LocWidth + Locomotivе.Step < _pictureWidth) + { + _startPosX += Locomotivе.Step; + } + break; + //влево + case Direction.Left: + // TODO: Продумать логику + if (_startPosX - Locomotivе.Step > 0) + { + _startPosX -= Locomotivе.Step; + } + break; + //вверх + case Direction.Up: + //TODO: Продумать логику + if (_startPosY - Locomotivе.Step > 0) + { + _startPosY -= Locomotivе.Step; + } + break; + //вниз + case Direction.Down: + if (_startPosY + _LocHeight + Locomotivе.Step < _pictureHeight) + { + _startPosY += Locomotivе.Step; + } + break; + } + } + /// + /// Отрисовка автомобиля + /// + /// + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 + || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + Pen pen = new(Color.Black); + // кузов электролокомотива (верхняя часть) + //g.DrawRectangle(pen, _startPosX - 1, _startPosY - 1, 80, 30); + g.DrawLine(pen, _startPosX + 7, _startPosY, _startPosX + 80, _startPosY); + g.DrawLine(pen, _startPosX + 80, _startPosY, _startPosX + 80, _startPosY + 15); + g.DrawLine(pen, _startPosX + 80, _startPosY + 15, _startPosX + 2, _startPosY + 15); + g.DrawLine(pen, _startPosX + 2, _startPosY + 15, _startPosX + 7, _startPosY); + // кузов электролокомотива (нижняя часть) + g.DrawLine(pen, _startPosX + 2, _startPosY + 15, _startPosX + 2, _startPosY + 30); + g.DrawLine(pen, _startPosX + 2, _startPosY + 30, _startPosX + 80, _startPosY + 30); + g.DrawLine(pen, _startPosX + 80, _startPosY + 30, _startPosX + 80, _startPosY + 15); + // колёса электролокомотива + Brush br = new SolidBrush(Locomotivе?.BodyColor ?? Color.Black); + g.FillEllipse(br, _startPosX + 3, _startPosY + 30, 15, 15); + g.FillEllipse(br, _startPosX + 22, _startPosY + 30, 15, 15); + g.FillEllipse(br, _startPosX + 42, _startPosY + 30, 15, 15); + g.FillEllipse(br, _startPosX + 62, _startPosY + 30, 15, 15); + // окна электролокомотива + Brush brBlue = new SolidBrush(Color.Blue); + g.FillRectangle(brBlue, _startPosX + 10, _startPosY + 3, 5, 10); + g.FillRectangle(brBlue, _startPosX + 50, _startPosY + 3, 5, 10); + g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 3, 5, 10); + // дверь электролокомотива + g.DrawLine(pen, _startPosX + 20, _startPosY + 6, _startPosX + 30, _startPosY + 6); + g.DrawLine(pen, _startPosX + 30, _startPosY + 8, _startPosX + 30, _startPosY + 25); + g.DrawLine(pen, _startPosX + 30, _startPosY + 25, _startPosX + 20, _startPosY + 25); + g.DrawLine(pen, _startPosX + 20, _startPosY + 25, _startPosX + 20, _startPosY + 6); + } + /// + /// Смена границ формы отрисовки + /// + /// Ширина картинки + /// Высота картинки + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _LocWidth || _pictureHeight <= _LocHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _LocWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _LocWidth; + } + if (_startPosY + _LocHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _LocHeight; + } + } + } +} diff --git a/ProjectLocomotive/ProjectLocomotive/EntityLocomotive.cs b/ProjectLocomotive/ProjectLocomotive/EntityLocomotive.cs new file mode 100644 index 0000000..7ff411d --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/EntityLocomotive.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLocomotive +{ + internal class EntityLocomotive + { + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public float Weight { get; private set; } + /// + /// Цвет кузова + /// + public Color BodyColor { get; private set; } + /// + /// Шаг передвижения локомотива + /// + public float Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса локомотива + /// + /// + /// + /// + /// + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new(); + Speed = speed <= 0 ? rnd.Next(50, 150) : speed; + Weight = weight <= 0 ? rnd.Next(40, 70) : weight; + BodyColor = bodyColor; + } + } +} diff --git a/ProjectLocomotive/ProjectLocomotive/Form1.resx b/ProjectLocomotive/ProjectLocomotive/Form1.resx deleted file mode 100644 index 1af7de1..0000000 --- a/ProjectLocomotive/ProjectLocomotive/Form1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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/ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs similarity index 76% rename from ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs rename to ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs index 4cb5164..124dc6c 100644 --- a/ProjectLocomotive/ProjectLocomotive/Form1.Designer.cs +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs @@ -1,6 +1,6 @@ namespace ProjectLocomotive { - partial class Form1 + partial class FormLocomotive { /// /// Required designer variable. @@ -28,10 +28,17 @@ /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + this.SuspendLayout(); + // + // FormLocomotive + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; + this.Name = "FormLocomotive"; + this.Text = "Локомотив"; + this.ResumeLayout(false); + } #endregion diff --git a/ProjectLocomotive/ProjectLocomotive/Form1.cs b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs similarity index 54% rename from ProjectLocomotive/ProjectLocomotive/Form1.cs rename to ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs index 1527fc7..e76f9ea 100644 --- a/ProjectLocomotive/ProjectLocomotive/Form1.cs +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs @@ -1,8 +1,8 @@ namespace ProjectLocomotive { - public partial class Form1 : Form + public partial class FormLocomotive : Form { - public Form1() + public FormLocomotive() { InitializeComponent(); } diff --git a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/ProjectLocomotive/ProjectLocomotive/Program.cs b/ProjectLocomotive/ProjectLocomotive/Program.cs index 06ff648..8f40489 100644 --- a/ProjectLocomotive/ProjectLocomotive/Program.cs +++ b/ProjectLocomotive/ProjectLocomotive/Program.cs @@ -11,7 +11,7 @@ namespace ProjectLocomotive // 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 FormLocomotive()); } } } \ No newline at end of file -- 2.25.1 From d9ad3e29c21a9e011bda841aada467877373efef Mon Sep 17 00:00:00 2001 From: Sem730 Date: Mon, 26 Sep 2022 20:21:36 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=BE=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormLocomotive.Designer.cs | 136 ++++++++++++++++++ .../ProjectLocomotive/FormLocomotive.cs | 66 +++++++++ .../ProjectLocomotive/FormLocomotive.resx | 3 + .../ProjectLocomotive.csproj | 15 ++ .../Properties/Resources.Designer.cs | 103 +++++++++++++ .../Properties/Resources.resx | 133 +++++++++++++++++ .../ProjectLocomotive/Resources/down.png | Bin 0 -> 5702 bytes .../ProjectLocomotive/Resources/left.png | Bin 0 -> 5555 bytes .../ProjectLocomotive/Resources/right.png | Bin 0 -> 6379 bytes .../ProjectLocomotive/Resources/up.png | Bin 0 -> 5662 bytes 10 files changed, 456 insertions(+) create mode 100644 ProjectLocomotive/ProjectLocomotive/Properties/Resources.Designer.cs create mode 100644 ProjectLocomotive/ProjectLocomotive/Properties/Resources.resx create mode 100644 ProjectLocomotive/ProjectLocomotive/Resources/down.png create mode 100644 ProjectLocomotive/ProjectLocomotive/Resources/left.png create mode 100644 ProjectLocomotive/ProjectLocomotive/Resources/right.png create mode 100644 ProjectLocomotive/ProjectLocomotive/Resources/up.png diff --git a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs index 124dc6c..30a2ee7 100644 --- a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.Designer.cs @@ -28,19 +28,155 @@ /// private void InitializeComponent() { + this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelBodyColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); + this.statusStrip.SuspendLayout(); this.SuspendLayout(); // + // pictureBoxLocomotive + // + this.pictureBoxLocomotive.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxLocomotive.Location = new System.Drawing.Point(0, 0); + this.pictureBoxLocomotive.Name = "pictureBoxLocomotive"; + this.pictureBoxLocomotive.Size = new System.Drawing.Size(800, 418); + this.pictureBoxLocomotive.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxLocomotive.TabIndex = 0; + this.pictureBoxLocomotive.TabStop = false; + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(12, 375); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(93, 30); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.ButtonCreate_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::ProjectLocomotive.Properties.Resources.up; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(675, 339); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(30, 30); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + this.buttonUp.Resize += new System.EventHandler(this.PictureBoxLocomotive_Resize); + // + // buttonLeft + // + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = global::ProjectLocomotive.Properties.Resources.left; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(639, 374); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(30, 30); + this.buttonLeft.TabIndex = 4; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + this.buttonLeft.Resize += new System.EventHandler(this.PictureBoxLocomotive_Resize); + // + // buttonRight + // + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = global::ProjectLocomotive.Properties.Resources.right; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(711, 375); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(30, 30); + this.buttonRight.TabIndex = 5; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + this.buttonRight.Resize += new System.EventHandler(this.PictureBoxLocomotive_Resize); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::ProjectLocomotive.Properties.Resources.down; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(675, 373); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(30, 30); + this.buttonDown.TabIndex = 6; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + this.buttonDown.Resize += new System.EventHandler(this.PictureBoxLocomotive_Resize); + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(93, 25); + this.toolStripStatusLabelSpeed.Text = "Скорость:"; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(43, 25); + this.toolStripStatusLabelWeight.Text = "Вес:"; + // + // toolStripStatusLabelBodyColor + // + this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(55, 25); + this.toolStripStatusLabelBodyColor.Text = "Цвет:"; + // + // statusStrip + // + this.statusStrip.ImageScalingSize = new System.Drawing.Size(24, 24); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelBodyColor}); + this.statusStrip.Location = new System.Drawing.Point(0, 418); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(800, 32); + this.statusStrip.TabIndex = 1; + // // FormLocomotive // this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.pictureBoxLocomotive); + this.Controls.Add(this.statusStrip); this.Name = "FormLocomotive"; this.Text = "Локомотив"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } #endregion + + private PictureBox pictureBoxLocomotive; + private Button buttonCreate; + private Button buttonUp; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelBodyColor; + private StatusStrip statusStrip; } } \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs index e76f9ea..5827c25 100644 --- a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.cs @@ -2,9 +2,75 @@ namespace ProjectLocomotive { public partial class FormLocomotive : Form { + private DrawningLocomotive _elloc; + public FormLocomotive() { InitializeComponent(); } + + /// + /// + /// + private void Draw() + { + Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + Graphics gr = Graphics.FromImage(bmp); + _elloc?.DrawTransport(gr); + pictureBoxLocomotive.Image = bmp; + } + /// + /// "" + /// + /// + /// + + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + _elloc = new DrawningLocomotive(); + _elloc.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _elloc.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + toolStripStatusLabelSpeed.Text = $": {_elloc.Locomotiv.Speed}"; + toolStripStatusLabelWeight.Text = $": {_elloc.Locomotiv.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_elloc.Locomotiv.BodyColor.Name}"; + Draw(); + } + /// + /// + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "buttonUp": + _elloc?.MoveTransport(Direction.Up); + break; + case "buttonDown": + _elloc?.MoveTransport(Direction.Down); + break; + case "buttonLeft": + _elloc?.MoveTransport(Direction.Left); + break; + case "buttonRight": + _elloc?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + /// + /// + /// + /// + /// + private void PictureBoxLocomotive_Resize(object sender, EventArgs e) + { + _elloc?.ChangeBorders(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + Draw(); + } } } \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx index f298a7b..2c0949d 100644 --- a/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx +++ b/ProjectLocomotive/ProjectLocomotive/FormLocomotive.resx @@ -57,4 +57,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj b/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj index b57c89e..13ee123 100644 --- a/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj +++ b/ProjectLocomotive/ProjectLocomotive/ProjectLocomotive.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectLocomotive/ProjectLocomotive/Properties/Resources.Designer.cs b/ProjectLocomotive/ProjectLocomotive/Properties/Resources.Designer.cs new file mode 100644 index 0000000..d150b92 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectLocomotive.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("ProjectLocomotive.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/ProjectLocomotive/ProjectLocomotive/Properties/Resources.resx b/ProjectLocomotive/ProjectLocomotive/Properties/Resources.resx new file mode 100644 index 0000000..53ec0b4 --- /dev/null +++ b/ProjectLocomotive/ProjectLocomotive/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/ProjectLocomotive/ProjectLocomotive/Resources/down.png b/ProjectLocomotive/ProjectLocomotive/Resources/down.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2fc13f98aa658a1af0c3b9732ce61e44756323 GIT binary patch literal 5702 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 KpUXRA6Z~Iz`cw}9 literal 0 HcmV?d00001 diff --git a/ProjectLocomotive/ProjectLocomotive/Resources/left.png b/ProjectLocomotive/ProjectLocomotive/Resources/left.png new file mode 100644 index 0000000000000000000000000000000000000000..2b22b2314d5f125a6047f71750dd9c9e97dd7202 GIT binary patch literal 5555 zcmeHK`8U;H_uub(T|v{fx?+?%VuJ1W(owHy2%=_$p&fek1hNt%K;oAcMd-Zg+OaL%c z5(D&DYV|Q!q>)--eNO6`(bLlpj2VqmA%mB$g%1E5wTZ0}**qZify(5)u6^OUsi)I* zKRa(n@bmMNcJXlYaj^4pl=k#?PMcNbqt4oGY+$BMp-`y(|3Ce|1pY5cAVbC-M?KHN zbrVBVKrmPu94#F^!yZPaz054E``FkyIJvlac=`AR_8$<$3mp^|5fu}cICNO@h?KMp zK~_%w=rILFrQ^yfs%jd<6DKvbv~^DD>gk_0IAdsJeAdL&?40>|3rj0&n~Rrh?d%;c zJ32XEadCCK>h9s`byYk*5fDHIZyNQpTB(drr>R1QE^FWS$V~~%BuI(HRRe4A3xRAH#B~3YHs<`+SdN{ zTSsSCcTaEsz~Iox=-A)m-zO%geoX)TH8VRmzp%Kpyt2Bs{%2!zYkOz&4}&h#Bjw1y+rB>FpqLUIWIoCZ2Ri2%Q?e{+oef>-L;7ZirpJ%AlL+hUwImza?)2&6b9-!G1srnMEq z#w6Yyf~(H>Z-r{_C_?+0v@Dgww2*w;1B)j6a9Ls38c(0$K)HGDRaKGI3w~?O(U!?E z2e@n(P%ybdvN#(MlVb``>BZS9e~eC^wt-1mD(u18GEkwY4VY7*MHenB)lS#ImmAIF z3HzkFYe>5ZZGhCZo-S4GSc5Y|JCj%Gyym~wO>~HTw-TxQZj@|Zz5exfAH!(Z)1+@% zDiznKUs%xMt7cjmr@wr$_Ma;C>V_+p*18U}d0y8{&EZO5K3Z6%SF7pH%aT=;+7>KB zVKeh{Qb51NNqinK=ufW&W}|HUocxSeE~fXamP&BWl~Ya_|0eHfl%~SZntz`uB?Zj`-$RF2gtgOAH35-5 zGNxZD6f?_(6uWOdAC(nmqk(6a zRwprVPYQi8oGr7qG|MUNNt?rx74-6kwqi*~BDYKB361p- zRV6WZMr@bj;SSvZw_JE|Rn+8KnWhRB=2Lb4Hu<@re)`yLPkJD8eNq1TtYNd$jh12! zaI_MHT^gbyij8)r0gjZ(WIyoU(oG0j)L;SBiPy*^QZT?|$!!c^@baa4^QHx1tC_e= zc0eU(ntM+j55Al^$(ariQ7DrgP8}E*w3xk3$2#psVvqOO3g6ytuin8bxjQR8aNP=@ z{J2&;2Zj~P$F*YHu5A7`LjFfjbDi1jhZn)=moCdBzr1gQ4Lsry;RK{k^+p=~22=nx#d^8CYcMDe7_k%xKJupl6G*qp z`jgVKvIkCrz$1G-)ocL4oErtNDU7XHA`KcD=u@1RJCqH0g#5PcCrfL~ajKsOHzK{1 zbFC2~pqG|!C~Lf@g-NWE+Q0(s-48xMI6!`Mt<^98h#3&}6MbI>HVp$h2L08%zxZCg z;D8oduY8foGdH_{z)u!rv|pvf6aj&k*btlEd){UEG1wB&`nFG%r<8z(XFnSNDtb z0E1S5`Eq1n+Ugs`_6TZvDUy_S^P)T$;O6`57B77d4+|>n=ngL9J#5v zW7c~_cbWO0ivZ6}3`}rDh|;KVk`=Hrjs7{w2%(68L;>J=$<~bU1Yx2>ufjOs`N?Iw zMfgL&Z`Oot${^_Pzp@f5fOW@){4t2iY|ctLg(0r?)QYRKz*jJvV)3C)f|`&HV5qRu zDhW$G3b!vZAw+#>2{^_ChcJYR31i6FLoB()NnI)VtrR_a6!MdFFw~ydQXCS^1ziCo zW)Q&|yPg&TEo|fBrH4$k#CK2_XjQ-gE>wQdst4l^4M>Br=jC6ewk|3#2+_l(qo`f& z<@MrAcR0ZsiS8~P?b5e2powlR9j!rZKa^Z+FdgRFQiq6gCAkUrTA?Yht?zpK%!APb zP@$w#dF4{;7Le>6bZc|}GiW?c51NouE>%tg_0)B49SH#LbUIWPO!~RDu+V};HS}t(8kQ^pdY+72e((>`jUf|2&x5g*26chh0j}RG%wT|x9xNU8 zhGaT?ihJ$X466R4u7z0oyB7-4chJ`Ym zB-kpT{sW;{Lxg-47D{n~SnBg&HudeoKxifnIt_ncW$eb1{Xv$x1sp6PpZd83dNEW& zq9hoNLmLo0f-aSgasn$t4zTiK0WI(vc7% z1jav&?k=`Q;)vHH4LJR79D#QegEQZD8Btp|(3eFHNV~jR8BT)^Ea0XGBVRDJ%hBoT zUEzO&eD3TroXiiZX~0k!ZUl=e!B8n~ga%cGvjd^;qcFsS=xg^{I)D0j24aSlQhVV^ z#V`cVftt9ty_VfzUN2@;L(k8~MNEFuS`zU4i&dW}@@zufBiQY}`nv&zaQk z2Qk&9+RJ%-q;De%8`VvIpd5DQ`uM3->y2M&V*mNpgBH)@U{q{Vu9WHm^tonkQGa=} zzN7__iS-!qnYbEBfaaOz{3ik$PyXbsEdi+7U8>im`Uk=@aU^8`tKZE9KVAOqXI$)f z>2PSpKl5p7ts)KJReP%=^*YCc#QLVxi{$}+a{cvb|MIx+jVtxRX?rkaoiFP+c;*ktQ=I4(Ieg2cGFda2+s{` zBqXEu3Y96Mivl_}d7(5}O#+FIK`|@{_tFM;#-w#_D6T;9dvRfVl`zMYVPuQXqs3tq z$^Vn+uyM}ABl~@E=C+&U=J7WF>OFi!hqs)m5BorV*tMg7d)6PzH^5}2zRqUX@X26wmMz~yy!+xx zU5#1A!tAR`h_@U{v)|I2>w3*GsQ@LfqCK{B#}pD$ptIJbe?k2z-ML(hvFkX^o<#-r z!N9J1MmSvM#3LGzWannRHIX0=@ybP4@!A1#AGQ0aA9A6NAmVh68x>{J zv`@T_BsWmuMQ(JO3UmFCv%VJ{; z^b6NED!gQbK4*!Lil(wGbDgMx{ZlXVKN0VlS|fgE#PqwYJbsYPB(v#Ld@z3TF0R6F ziI6wZr<#cC~4eThj_v-ISjaT910U?PTXZJ=IkT YH_2ABD`U>ba`)=>v<j?1W< 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 literal 0 HcmV?d00001 diff --git a/ProjectLocomotive/ProjectLocomotive/Resources/up.png b/ProjectLocomotive/ProjectLocomotive/Resources/up.png new file mode 100644 index 0000000000000000000000000000000000000000..7019eb5a84bde450f17e52c872c93fa42c7505d7 GIT binary patch literal 5662 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 e5qIimdAMB+b9K-N?Z7#7ljL$o~MBOa0aW literal 0 HcmV?d00001 -- 2.25.1