From f898ad65b40b756c539ea455db6864ad6f35b7cb Mon Sep 17 00:00:00 2001 From: DarkScarletDoom <93650805+DarkScarletDoom@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:26:01 +0400 Subject: [PATCH 1/8] create --- .../LocomativeProject/DirectionType.cs | 24 + .../LocomativeProject/DrawningLocomotive.cs | 241 +++++++ .../LocomativeProject/EntityLocomotive.cs | 60 ++ .../LocomativeProject/Form1.Designer.cs | 39 -- LocomativeProject/LocomativeProject/Form1.cs | 10 - .../LocomativeProject.csproj | 15 + .../LocomotiveProject.Designer.cs | 144 +++++ .../LocomativeProject/LocomotiveProject.cs | 89 +++ .../LocomativeProject/LocomotiveProject.resx | 589 ++++++++++++++++++ .../LocomativeProject/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 73 +++ .../{Form1.resx => Properties/Resources.resx} | 4 + .../LocomativeProject/Resources/up-arrow.png | Bin 0 -> 5618 bytes source/img/arrow_down.png | Bin 0 -> 9784 bytes source/img/arrow_left.png | Bin 0 -> 8709 bytes source/img/arrow_right.png | Bin 0 -> 6397 bytes source/img/arrow_up.png | Bin 0 -> 5618 bytes 17 files changed, 1240 insertions(+), 50 deletions(-) create mode 100644 LocomativeProject/LocomativeProject/DirectionType.cs create mode 100644 LocomativeProject/LocomativeProject/DrawningLocomotive.cs create mode 100644 LocomativeProject/LocomativeProject/EntityLocomotive.cs delete mode 100644 LocomativeProject/LocomativeProject/Form1.Designer.cs delete mode 100644 LocomativeProject/LocomativeProject/Form1.cs create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProject.cs create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProject.resx create mode 100644 LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs rename LocomativeProject/LocomativeProject/{Form1.resx => Properties/Resources.resx} (93%) create mode 100644 LocomativeProject/LocomativeProject/Resources/up-arrow.png create mode 100644 source/img/arrow_down.png create mode 100644 source/img/arrow_left.png create mode 100644 source/img/arrow_right.png create mode 100644 source/img/arrow_up.png diff --git a/LocomativeProject/LocomativeProject/DirectionType.cs b/LocomativeProject/LocomativeProject/DirectionType.cs new file mode 100644 index 0000000..6d6cebd --- /dev/null +++ b/LocomativeProject/LocomativeProject/DirectionType.cs @@ -0,0 +1,24 @@ +namespace LocomotiveProject; +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down = 2, + /// + /// Влево + /// + Left = 3, + /// + /// Вправо + /// + Right = 4 +} + diff --git a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs new file mode 100644 index 0000000..506995a --- /dev/null +++ b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs @@ -0,0 +1,241 @@ +namespace LocomotiveProject +{ + public class DrawningLocomotive + { + /// + /// Класс-сущность + /// + public EntityLocomotive? EntityLocomotive { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки тепловоза + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки тепловоза + /// + private int? _startPosY; + + /// + /// Ширина прорисовки тепловоза + /// + private readonly int _drawningLocomotiveWidth = 110; + + /// + /// Высота прорисовки тепловоза + /// + private readonly int _drawningLocomotiveHeight = 60; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия трубы + /// Признак наличия отсека для топлива + /// Признак количества колес + public void Init(int speed, double weight, Color bodyColor, Color + additionalColor, bool exehaustPipe, bool fuelCompartment, int wheelCount) + { + EntityLocomotive = new EntityLocomotive(); + EntityLocomotive.Init(speed, weight, bodyColor, additionalColor, + exehaustPipe, fuelCompartment, wheelCount); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя + ///разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + return true; + } + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth || y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) + { + _startPosX = 20; + _startPosY = 20; + } + else + { + _startPosX = x; + _startPosY = y; + } + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение + /// невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntityLocomotive == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return false; + } + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityLocomotive.Step > 0) + { + _startPosX -= (int)EntityLocomotive.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityLocomotive.Step > 0) + { + _startPosY -= (int)EntityLocomotive.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + _drawningLocomotiveWidth + EntityLocomotive.Step < _pictureWidth) + { + _startPosX += (int)EntityLocomotive.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + _drawningLocomotiveHeight + EntityLocomotive.Step < _pictureHeight) + { + _startPosY += (int)EntityLocomotive.Step; + } + return true; + default: + return false; + } + } + + /// + /// ОТрисовка полигона + /// + /// Graphics + private void DrawPolygon(Graphics g, Pen pen, Brush brush, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) + { + Point point1 = new Point(x1, y1); + Point point2 = new Point(x2, y2); + Point point3 = new Point(x3, y3); + Point point4 = new Point(x4, y4); + Point[] PolygponPoints = + { + point1, + point2, + point3, + point4 + }; + g.FillPolygon(brush, PolygponPoints); + g.DrawPolygon(pen, PolygponPoints); + + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(EntityLocomotive.AdditionalColor); + Brush bodyBrush = new SolidBrush(EntityLocomotive.BodyColor); + Brush blackBrush = new SolidBrush(Color.Black); + Brush whiteBrush = new SolidBrush(Color.White); + + //границы тепловоза + DrawPolygon(g, pen, bodyBrush, + _startPosX.Value, _startPosY.Value, + _startPosX.Value + 100, _startPosY.Value, + _startPosX.Value + 110, _startPosY.Value + 20, + _startPosX.Value, _startPosY.Value + 20 + ); + g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 20, 110, 20); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 20, 110, 20); + g.FillRectangle(blackBrush, _startPosX.Value - 5, _startPosY.Value + 5, 5, 30); + + //шасси + DrawPolygon(g, pen, blackBrush, + _startPosX.Value - 5, _startPosY.Value + 45, + _startPosX.Value + 5, _startPosY.Value + 40, + _startPosX.Value + 45, _startPosY.Value + 40, + _startPosX.Value + 45, _startPosY.Value + 45 + ); + DrawPolygon(g, pen, blackBrush, + _startPosX.Value + 65, _startPosY.Value + 40, + _startPosX.Value + 105, _startPosY.Value + 40, + _startPosX.Value + 115, _startPosY.Value + 45, + _startPosX.Value + 65, _startPosY.Value + 45 + ); + //колеса + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); + //дверь + g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); + //окна + pen = new(Color.Blue); + g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 5, 10, 10); + + //труба + if (EntityLocomotive.ExehaustPipe) + { + Brush greyBrush = new SolidBrush(Color.Gray); + g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); + g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); + } + + if (EntityLocomotive.FuelCompartment) + { + g.FillRectangle(bodyBrush, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); + } + } + + } +} diff --git a/LocomativeProject/LocomativeProject/EntityLocomotive.cs b/LocomativeProject/LocomativeProject/EntityLocomotive.cs new file mode 100644 index 0000000..723e60c --- /dev/null +++ b/LocomativeProject/LocomativeProject/EntityLocomotive.cs @@ -0,0 +1,60 @@ +namespace LocomotiveProject +{ + public class EntityLocomotive + { + /// + /// Скорость + /// + 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 ExehaustPipe { get; private set; } + /// + /// Признак (опция) наличие топливного отсека + /// + public bool FuelCompartment { get; private set; } + /// + /// Признак количество колес + /// + public int WheelCount { get; private set; } + /// + /// Шаг перемещения тепловоза + /// + public double Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса тепловоз + /// + /// Скорость + /// Вес тепловоза + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия трубы + /// Признак наличия топливного отсека + /// Признак количества колес + public void Init(int speed, double weight, Color bodyColor, Color + additionalColor, bool exehaustPipe, bool fuelCompartment, int wheelCount) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + ExehaustPipe = exehaustPipe; + FuelCompartment = fuelCompartment; + WheelCount = wheelCount; + } + + } +} diff --git a/LocomativeProject/LocomativeProject/Form1.Designer.cs b/LocomativeProject/LocomativeProject/Form1.Designer.cs deleted file mode 100644 index 30fbefd..0000000 --- a/LocomativeProject/LocomativeProject/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace LocomativeProject -{ - 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/LocomativeProject/LocomativeProject/Form1.cs b/LocomativeProject/LocomativeProject/Form1.cs deleted file mode 100644 index a1a4021..0000000 --- a/LocomativeProject/LocomativeProject/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace LocomativeProject -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomativeProject.csproj b/LocomativeProject/LocomativeProject/LocomativeProject.csproj index b57c89e..13ee123 100644 --- a/LocomativeProject/LocomativeProject/LocomativeProject.csproj +++ b/LocomativeProject/LocomativeProject/LocomativeProject.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs new file mode 100644 index 0000000..73b18b9 --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -0,0 +1,144 @@ +namespace LocomativeProject +{ + partial class LocomotiveProject + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); + this.create = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); + this.SuspendLayout(); + // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(100, 50); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // 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, 450); + this.pictureBoxLocomotive.TabIndex = 1; + this.pictureBoxLocomotive.TabStop = false; + // + // create + // + this.create.Location = new System.Drawing.Point(12, 415); + this.create.Name = "create"; + this.create.Size = new System.Drawing.Size(75, 23); + this.create.TabIndex = 2; + this.create.Text = "создать"; + this.create.UseVisualStyleBackColor = true; + this.create.Click += new System.EventHandler(this.create_Click); + // + // buttonUp + // + this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage"))); + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(691, 362); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(35, 35); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonDown + // + this.buttonDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonDown.BackgroundImage"))); + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(691, 403); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(35, 35); + this.buttonDown.TabIndex = 4; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonLeft + // + this.buttonLeft.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonLeft.BackgroundImage"))); + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(650, 403); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(35, 35); + this.buttonLeft.TabIndex = 5; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonRight + // + this.buttonRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRight.BackgroundImage"))); + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(732, 403); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(35, 35); + this.buttonRight.TabIndex = 6; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // LocomotiveProject + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.create); + this.Controls.Add(this.pictureBoxLocomotive); + this.Controls.Add(this.pictureBox1); + this.Name = "LocomotiveProject"; + this.Text = "Тепловоз"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private PictureBox pictureBox1; + private PictureBox pictureBoxLocomotive; + private Button create; + private Button buttonUp; + private Button buttonDown; + private Button buttonLeft; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs new file mode 100644 index 0000000..a17fea0 --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -0,0 +1,89 @@ +using LocomotiveProject; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LocomativeProject +{ + public partial class LocomotiveProject : Form + { + private DrawningLocomotive? _drawningLocomotive; + + public LocomotiveProject() + { + InitializeComponent(); + } + + private void Draw() + { + if (_drawningLocomotive == null) + { + return; + } + Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningLocomotive.DrawTransport(gr); + pictureBoxLocomotive.Image = bmp; + } + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void create_Click(object sender, EventArgs e) + { + Random random = new (); + _drawningLocomotive = new DrawningLocomotive(); + _drawningLocomotive.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) ), + random.Next(2, 6) + ); + _drawningLocomotive.SetPictureSize( pictureBoxLocomotive.Width, pictureBoxLocomotive.Height ); + _drawningLocomotive.SetPosition( random.Next(10, 100), random.Next(10, 100) ); + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningLocomotive == null) + { + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningLocomotive.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningLocomotive.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningLocomotive.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningLocomotive.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } + + } +} diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx new file mode 100644 index 0000000..e45e5ca --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.resx @@ -0,0 +1,589 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + AABJRU5ErkJggg== + + + + + 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 + AAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/Program.cs b/LocomativeProject/LocomativeProject/Program.cs index 8c3f9ee..a383f1c 100644 --- a/LocomativeProject/LocomativeProject/Program.cs +++ b/LocomativeProject/LocomativeProject/Program.cs @@ -11,7 +11,7 @@ namespace LocomativeProject // 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 LocomotiveProject()); } } } \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs b/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3a133ad --- /dev/null +++ b/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace LocomativeProject.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("LocomativeProject.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 up_arrow { + get { + object obj = ResourceManager.GetObject("up-arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/Form1.resx b/LocomativeProject/LocomativeProject/Properties/Resources.resx similarity index 93% rename from LocomativeProject/LocomativeProject/Form1.resx rename to LocomativeProject/LocomativeProject/Properties/Resources.resx index 1af7de1..91421ee 100644 --- a/LocomativeProject/LocomativeProject/Form1.resx +++ b/LocomativeProject/LocomativeProject/Properties/Resources.resx @@ -117,4 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\up-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/Resources/up-arrow.png b/LocomativeProject/LocomativeProject/Resources/up-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..5146782bb0fa661dc7fd96d0e8b5cb787a86eeab GIT binary patch literal 5618 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 HbngEE33<_) literal 0 HcmV?d00001 diff --git a/source/img/arrow_left.png b/source/img/arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..17501558deed4870bdf2bd349184da7ee3274b67 GIT binary patch literal 8709 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 T_HFoIH-OF04qNj!Got?od(u;w literal 0 HcmV?d00001 diff --git a/source/img/arrow_right.png b/source/img/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3d16e3a00b47bf081d14d0cc04c2d255d14d50 GIT binary patch literal 6397 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 a${99GUsu?7H Date: Fri, 16 Feb 2024 11:38:12 +0400 Subject: [PATCH 2/8] First lab brench --- LocomativeProject/LocomativeProject/DrawningLocomotive.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs index 506995a..c4be050 100644 --- a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs +++ b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs @@ -179,7 +179,6 @@ Brush bodyBrush = new SolidBrush(EntityLocomotive.BodyColor); Brush blackBrush = new SolidBrush(Color.Black); Brush whiteBrush = new SolidBrush(Color.White); - //границы тепловоза DrawPolygon(g, pen, bodyBrush, _startPosX.Value, _startPosY.Value, @@ -190,7 +189,6 @@ g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 20, 110, 20); g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 20, 110, 20); g.FillRectangle(blackBrush, _startPosX.Value - 5, _startPosY.Value + 5, 5, 30); - //шасси DrawPolygon(g, pen, blackBrush, _startPosX.Value - 5, _startPosY.Value + 45, @@ -221,7 +219,6 @@ g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5, 10, 10); g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5, 10, 10); g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 5, 10, 10); - //труба if (EntityLocomotive.ExehaustPipe) { @@ -229,7 +226,7 @@ g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); } - + // отсек для топлива if (EntityLocomotive.FuelCompartment) { g.FillRectangle(bodyBrush, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); -- 2.25.1 From ff7a87438e3994194089c7d49750cd3de82ea01f Mon Sep 17 00:00:00 2001 From: devil_1nc Date: Mon, 26 Feb 2024 15:53:41 +0400 Subject: [PATCH 3/8] commit 2 --- .../LocomativeProject/DrawningLocomotive.cs | 109 +++++++----- .../LocomotiveProject.Designer.cs | 156 +++++++++--------- .../LocomativeProject/LocomotiveProject.cs | 12 +- .../LocomativeProject/LocomotiveProject.resx | 68 +++++++- 4 files changed, 215 insertions(+), 130 deletions(-) diff --git a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs index c4be050..4ed712e 100644 --- a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs +++ b/LocomativeProject/LocomativeProject/DrawningLocomotive.cs @@ -30,7 +30,7 @@ /// /// Ширина прорисовки тепловоза /// - private readonly int _drawningLocomotiveWidth = 110; + private readonly int _drawningLocomotiveWidth = 120; /// /// Высота прорисовки тепловоза @@ -67,9 +67,21 @@ ///разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - _pictureWidth = width; - _pictureHeight = height; - return true; + if (width > _drawningLocomotiveWidth || height > _drawningLocomotiveHeight) // если ширина и высота окна больше чем объект + { + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX + _drawningLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем + { + _startPosX = 0; + } + if (_startPosY + _drawningLocomotiveHeight > height || _startPosY < 0) + { + _startPosY = 0; + } + return true; + } + return false; } /// /// Установка позиции @@ -82,18 +94,27 @@ { return; } - if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth || y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) - { - _startPosX = 20; - _startPosY = 20; - } - else + + // если все нормально + if (x > 0 || x + _drawningLocomotiveWidth < _pictureWidth) { _startPosX = x; + } + if (y > 0 || y + _drawningLocomotiveHeight < _pictureHeight) + { _startPosY = y; } + // если не лезет, но мог бы влезть + if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth) + { + _startPosX = 0; + } + if (y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) + { + _startPosY = 0; + } } - + /// /// Изменение направления перемещения /// @@ -118,7 +139,7 @@ return true; //вверх case DirectionType.Up: - if (_startPosY.Value - EntityLocomotive.Step > 0) + if (_startPosY.Value - EntityLocomotive.Step > 0) // 10 – высота трубы { _startPosY -= (int)EntityLocomotive.Step; } @@ -181,56 +202,56 @@ Brush whiteBrush = new SolidBrush(Color.White); //границы тепловоза DrawPolygon(g, pen, bodyBrush, - _startPosX.Value, _startPosY.Value, - _startPosX.Value + 100, _startPosY.Value, - _startPosX.Value + 110, _startPosY.Value + 20, - _startPosX.Value, _startPosY.Value + 20 + _startPosX.Value + 5, _startPosY.Value + 10, + _startPosX.Value + 105, _startPosY.Value + 10, + _startPosX.Value + 115, _startPosY.Value + 20 + 10, + _startPosX.Value + 5, _startPosY.Value + 20 + 10 ); - g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 20, 110, 20); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 20, 110, 20); - g.FillRectangle(blackBrush, _startPosX.Value - 5, _startPosY.Value + 5, 5, 30); + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20); + g.FillRectangle(blackBrush, _startPosX.Value, _startPosY.Value + 5 + 10, 5, 30); //шасси DrawPolygon(g, pen, blackBrush, - _startPosX.Value - 5, _startPosY.Value + 45, - _startPosX.Value + 5, _startPosY.Value + 40, - _startPosX.Value + 45, _startPosY.Value + 40, - _startPosX.Value + 45, _startPosY.Value + 45 + _startPosX.Value, _startPosY.Value + 45 + 10, + _startPosX.Value + 10, _startPosY.Value + 40 + 10, + _startPosX.Value + 50, _startPosY.Value + 40 + 10, + _startPosX.Value + 50, _startPosY.Value + 45 + 10 ); DrawPolygon(g, pen, blackBrush, - _startPosX.Value + 65, _startPosY.Value + 40, - _startPosX.Value + 105, _startPosY.Value + 40, - _startPosX.Value + 115, _startPosY.Value + 45, - _startPosX.Value + 65, _startPosY.Value + 45 + _startPosX.Value + 70, _startPosY.Value + 40 + 10, + _startPosX.Value + 110, _startPosY.Value + 40 + 10, + _startPosX.Value + 120, _startPosY.Value + 45 + 10, + _startPosX.Value + 70, _startPosY.Value + 45 + 10 ); //колеса - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 10, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 25, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 75, _startPosY.Value + 40, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); - g.FillEllipse(whiteBrush, _startPosX.Value + 90, _startPosY.Value + 40, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10); + g.DrawEllipse(pen, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10); + g.FillEllipse(whiteBrush, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10); //дверь - g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); - g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10, 10, 20); + g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20); //окна pen = new(Color.Blue); - g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5, 10, 10); - g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5, 10, 10); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 5, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5 + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5 + 10, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 5 + 10, 10, 10); //труба if (EntityLocomotive.ExehaustPipe) { Brush greyBrush = new SolidBrush(Color.Gray); - g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); - g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value - 10, 5, 10); + g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); + g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10); } // отсек для топлива if (EntityLocomotive.FuelCompartment) { - g.FillRectangle(bodyBrush, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 10, 10, 20); + g.FillRectangle(bodyBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); } } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 73b18b9..3898d85 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -29,106 +29,110 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); - this.create = new System.Windows.Forms.Button(); - this.buttonUp = new System.Windows.Forms.Button(); - this.buttonDown = new System.Windows.Forms.Button(); - this.buttonLeft = new System.Windows.Forms.Button(); - this.buttonRight = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); - this.SuspendLayout(); + pictureBox1 = new PictureBox(); + pictureBoxLocomotive = new PictureBox(); + create = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit(); + SuspendLayout(); // // pictureBox1 // - this.pictureBox1.Location = new System.Drawing.Point(0, 0); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(100, 50); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; + pictureBox1.Location = new Point(0, 0); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(100, 50); + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; // // 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, 450); - this.pictureBoxLocomotive.TabIndex = 1; - this.pictureBoxLocomotive.TabStop = false; + pictureBoxLocomotive.Dock = DockStyle.Fill; + pictureBoxLocomotive.Location = new Point(0, 0); + pictureBoxLocomotive.Name = "pictureBoxLocomotive"; + pictureBoxLocomotive.Size = new Size(800, 450); + pictureBoxLocomotive.TabIndex = 1; + pictureBoxLocomotive.TabStop = false; // // create // - this.create.Location = new System.Drawing.Point(12, 415); - this.create.Name = "create"; - this.create.Size = new System.Drawing.Size(75, 23); - this.create.TabIndex = 2; - this.create.Text = "создать"; - this.create.UseVisualStyleBackColor = true; - this.create.Click += new System.EventHandler(this.create_Click); + create.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + create.Location = new Point(12, 415); + create.Name = "create"; + create.Size = new Size(75, 23); + create.TabIndex = 2; + create.Text = "создать"; + create.UseVisualStyleBackColor = true; + create.Click += create_Click; // // buttonUp // - this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage"))); - this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonUp.Location = new System.Drawing.Point(691, 362); - this.buttonUp.Name = "buttonUp"; - this.buttonUp.Size = new System.Drawing.Size(35, 35); - this.buttonUp.TabIndex = 3; - this.buttonUp.UseVisualStyleBackColor = true; - this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(691, 362); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; // // buttonDown // - this.buttonDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonDown.BackgroundImage"))); - this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonDown.Location = new System.Drawing.Point(691, 403); - this.buttonDown.Name = "buttonDown"; - this.buttonDown.Size = new System.Drawing.Size(35, 35); - this.buttonDown.TabIndex = 4; - this.buttonDown.UseVisualStyleBackColor = true; - this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(691, 403); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 4; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; // // buttonLeft // - this.buttonLeft.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonLeft.BackgroundImage"))); - this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonLeft.Location = new System.Drawing.Point(650, 403); - this.buttonLeft.Name = "buttonLeft"; - this.buttonLeft.Size = new System.Drawing.Size(35, 35); - this.buttonLeft.TabIndex = 5; - this.buttonLeft.UseVisualStyleBackColor = true; - this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(650, 403); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 5; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; // // buttonRight // - this.buttonRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRight.BackgroundImage"))); - this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonRight.Location = new System.Drawing.Point(732, 403); - this.buttonRight.Name = "buttonRight"; - this.buttonRight.Size = new System.Drawing.Size(35, 35); - this.buttonRight.TabIndex = 6; - this.buttonRight.UseVisualStyleBackColor = true; - this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(732, 403); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 6; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; // // LocomotiveProject // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.buttonRight); - this.Controls.Add(this.buttonLeft); - this.Controls.Add(this.buttonDown); - this.Controls.Add(this.buttonUp); - this.Controls.Add(this.create); - this.Controls.Add(this.pictureBoxLocomotive); - this.Controls.Add(this.pictureBox1); - this.Name = "LocomotiveProject"; - this.Text = "Тепловоз"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); - this.ResumeLayout(false); - + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(create); + Controls.Add(pictureBoxLocomotive); + Controls.Add(pictureBox1); + Name = "LocomotiveProject"; + Text = "Тепловоз"; + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit(); + ResumeLayout(false); } #endregion diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs index a17fea0..12b9e36 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -39,20 +39,20 @@ namespace LocomativeProject /// private void create_Click(object sender, EventArgs e) { - Random random = new (); + Random random = new(); _drawningLocomotive = new DrawningLocomotive(); _drawningLocomotive.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) ), + 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) ), random.Next(2, 6) ); - _drawningLocomotive.SetPictureSize( pictureBoxLocomotive.Width, pictureBoxLocomotive.Height ); - _drawningLocomotive.SetPosition( random.Next(10, 100), random.Next(10, 100) ); + _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + _drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx index e45e5ca..e4ae198 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.resx +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.resx @@ -1,4 +1,64 @@ - + + + @@ -177,7 +237,7 @@ iVBORw0KGgoAAAANSUhEUgAAAf0AAAIBCAYAAABDdGZ3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAIv9JREFUeF7t3YuS29axheH4KjmpvP97plyS7zrp2V4+bYQaSjNigyC+v+ovguRE + vAAADrwBlbxySQAAIv9JREFUeF7t3YuS29axheH4KjmpvP97plyS7zrp2V4+bYQaSjNigyC+v+ovguRE sTnNvXYDaPkfH4Cdef/+/Z9HHz788ssvT4/ffPPNh3/84x/kof3qq6+eHn///fenuk59F3kNmEToY1d+ +umnP4/Wgvjtt9/+tWAKfj6Cb968eQr/8PPPP3/4448/hD52Qehjdyr4f/vtt6eFsYK+Bz95ZL///vun x3T8PfyBPRD62JV0O2/fvv3bYvndd9/97Tl5VH/44Yenx17TRT/VD0wh9LEr1eF//fXXTwthdUE5rlOi @@ -332,7 +392,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgEAAAIHCAYAAAAGv498AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAHmBJREFUeF7t3YuyG0XWrVH65gsd/f7vSRDGBgPNSpibtLy9JVtLUlXlGBGfJMzt + vAAADrwBlbxySQAAHmBJREFUeF7t3YuyG0XWrVH65gsd/f7vSRDGBgPNSpibtLy9JVtLUlXlGBGfJMzt Pw3HNaWSk+9+BwCWZAQAwKKMAABYlBEAAIsyAgBgUUYAACzKCACARRkBALAoIwAAFmUEAMCijAAAWJQR AACLMgIAYFFGAAAsyggAgEUZAQCwKCMAABZlBADAoowAAFiUEQAAizICAGBRRgAALMoIAIBFGQEAsCgj AAAWZQQAwKKMAABYlBEAAIsyAgBgUUYAACzKCACARRkBALAoIwCu9PHjx79e/f77r7/++vtvv/322XN8 @@ -468,7 +528,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X + vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X 0F1lvcfxAOMMioCAQbBhL9jBgqKCXcCC0WgsGFSMElIgBEgU4+g4OuOV114w44W3inKBBSxYsEdFRQWj YAkaFYMFQcjyeZKlIcmTt+z3v/deaz2fz8z3cI5Jdlkvx/9vHI9nUQMAVMcAAIAKGQAAUCEDAAAqZAAA QIUMAACokAEAABUyAACgQgYAAFTIAACAChkAAFAhAwAAKmQAAECFDAAAqJABAAAVMgAAoEIGAABUyAAA -- 2.25.1 From 5d72860a96c5b6f8569d80b547a891291eb6a6ef Mon Sep 17 00:00:00 2001 From: DarkScarletDoom <93650805+DarkScarletDoom@users.noreply.github.com> Date: Mon, 4 Mar 2024 09:11:18 +0400 Subject: [PATCH 4/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D0=B8=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=BE=D0=B2-=D1=80=D0=BE=D0=B4=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LocomativeProject/DirectionType.cs | 24 --- .../Drawnings/DirectionType.cs | 25 +++ .../DrawningBaseLocomotive.cs} | 111 ++++++----- .../Drawnings/DrawningLocomotive.cs | 51 +++++ .../Entities/EntityBaseLocomotive.cs | 37 ++++ .../Entities/EntityLocomotive.cs | 32 ++++ .../LocomativeProject/EntityLocomotive.cs | 60 ------ .../LocomotiveProject.Designer.cs | 180 ++++++++++-------- .../LocomativeProject/LocomotiveProject.cs | 56 ++++-- .../LocomativeProject/LocomotiveProject.resx | 64 +------ 10 files changed, 337 insertions(+), 303 deletions(-) delete mode 100644 LocomativeProject/LocomativeProject/DirectionType.cs create mode 100644 LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs rename LocomativeProject/LocomativeProject/{DrawningLocomotive.cs => Drawnings/DrawningBaseLocomotive.cs} (67%) create mode 100644 LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs create mode 100644 LocomativeProject/LocomativeProject/Entities/EntityBaseLocomotive.cs create mode 100644 LocomativeProject/LocomativeProject/Entities/EntityLocomotive.cs delete mode 100644 LocomativeProject/LocomativeProject/EntityLocomotive.cs diff --git a/LocomativeProject/LocomativeProject/DirectionType.cs b/LocomativeProject/LocomativeProject/DirectionType.cs deleted file mode 100644 index 6d6cebd..0000000 --- a/LocomativeProject/LocomativeProject/DirectionType.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace LocomotiveProject; -/// -/// Направление перемещения -/// -public enum DirectionType -{ - /// - /// Вверх - /// - Up = 1, - /// - /// Вниз - /// - Down = 2, - /// - /// Влево - /// - Left = 3, - /// - /// Вправо - /// - Right = 4 -} - diff --git a/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs b/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs new file mode 100644 index 0000000..ad0a4e6 --- /dev/null +++ b/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs @@ -0,0 +1,25 @@ +namespace LocomativeProject.Drawnings +{ + /// + /// Направление перемещения + /// + public enum DirectionType + { + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down, + /// + /// Влево + /// + Left, + /// + /// Вправо + /// + Right + } +} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs similarity index 67% rename from LocomativeProject/LocomativeProject/DrawningLocomotive.cs rename to LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs index 4ed712e..d8d3d39 100644 --- a/LocomativeProject/LocomativeProject/DrawningLocomotive.cs +++ b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs @@ -1,64 +1,75 @@ -namespace LocomotiveProject +using LocomativeProject.Entities; + +namespace LocomativeProject.Drawnings { - public class DrawningLocomotive + public class DrawningBaseLocomotive { /// /// Класс-сущность /// - public EntityLocomotive? EntityLocomotive { get; private set; } + public EntityBaseLocomotive? _EntityLocomotive { get; protected set; } /// /// Ширина окна /// - private int? _pictureWidth; + protected int? _pictureWidth; /// /// Высота окна /// - private int? _pictureHeight; + protected int? _pictureHeight; /// /// Левая координата прорисовки тепловоза /// - private int? _startPosX; + protected int? _startPosX; /// /// Верхняя кооридната прорисовки тепловоза /// - private int? _startPosY; + protected int? _startPosY; /// /// Ширина прорисовки тепловоза /// - private readonly int _drawningLocomotiveWidth = 120; + private readonly int _drawningBaseLocomotiveWidth = 120; /// /// Высота прорисовки тепловоза /// - private readonly int _drawningLocomotiveHeight = 60; + private readonly int _drawningBaseLocomotiveHeight = 60; /// - /// Инициализация свойств + /// Пустой конструктор /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия трубы - /// Признак наличия отсека для топлива - /// Признак количества колес - public void Init(int speed, double weight, Color bodyColor, Color - additionalColor, bool exehaustPipe, bool fuelCompartment, int wheelCount) + private DrawningBaseLocomotive() { - EntityLocomotive = new EntityLocomotive(); - EntityLocomotive.Init(speed, weight, bodyColor, additionalColor, - exehaustPipe, fuelCompartment, wheelCount); _pictureWidth = null; _pictureHeight = null; _startPosX = null; _startPosY = null; } /// + /// Конструктор базового поезда + /// + /// Скорость + /// Вес + /// Основной цвет + public DrawningBaseLocomotive(int speed, double weight, Color bodyColor) : this() + { + _EntityLocomotive = new EntityBaseLocomotive(speed, weight, bodyColor); + } + /// + /// Конструктор для наследников + /// + /// ширина + /// высота + protected DrawningBaseLocomotive(int Width, int Height) : this() + { + _drawningBaseLocomotiveWidth = Width; + _drawningBaseLocomotiveHeight = Height; + } + /// /// Установка границ поля /// /// Ширина поля @@ -67,15 +78,15 @@ ///разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - if (width > _drawningLocomotiveWidth || height > _drawningLocomotiveHeight) // если ширина и высота окна больше чем объект + if (width > _drawningBaseLocomotiveWidth || height > _drawningBaseLocomotiveHeight) // если ширина и высота окна больше чем объект { _pictureWidth = width; _pictureHeight = height; - if (_startPosX + _drawningLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем + if (_startPosX + _drawningBaseLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем { _startPosX = 0; } - if (_startPosY + _drawningLocomotiveHeight > height || _startPosY < 0) + if (_startPosY + _drawningBaseLocomotiveHeight > height || _startPosY < 0) { _startPosY = 0; } @@ -96,20 +107,20 @@ } // если все нормально - if (x > 0 || x + _drawningLocomotiveWidth < _pictureWidth) + if (x > 0 || x + _drawningBaseLocomotiveWidth < _pictureWidth) { _startPosX = x; } - if (y > 0 || y + _drawningLocomotiveHeight < _pictureHeight) + if (y > 0 || y + _drawningBaseLocomotiveHeight < _pictureHeight) { _startPosY = y; } // если не лезет, но мог бы влезть - if (x < 0 || x + _drawningLocomotiveWidth > _pictureWidth) + if (x < 0 || x + _drawningBaseLocomotiveWidth > _pictureWidth) { _startPosX = 0; } - if (y < 0 || y + _drawningLocomotiveHeight > _pictureHeight) + if (y < 0 || y + _drawningBaseLocomotiveHeight > _pictureHeight) { _startPosY = 0; } @@ -123,7 +134,7 @@ /// невозможно public bool MoveTransport(DirectionType direction) { - if (EntityLocomotive == null || !_startPosX.HasValue || + if (_EntityLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) { return false; @@ -132,30 +143,30 @@ { //влево case DirectionType.Left: - if (_startPosX.Value - EntityLocomotive.Step > 0) + if (_startPosX.Value - _EntityLocomotive.Step > 0) { - _startPosX -= (int)EntityLocomotive.Step; + _startPosX -= (int)_EntityLocomotive.Step; } return true; //вверх case DirectionType.Up: - if (_startPosY.Value - EntityLocomotive.Step > 0) // 10 – высота трубы + if (_startPosY.Value - _EntityLocomotive.Step > 0) { - _startPosY -= (int)EntityLocomotive.Step; + _startPosY -= (int)_EntityLocomotive.Step; } return true; // вправо case DirectionType.Right: - if (_startPosX.Value + _drawningLocomotiveWidth + EntityLocomotive.Step < _pictureWidth) + if (_startPosX.Value + _drawningBaseLocomotiveWidth + _EntityLocomotive.Step < _pictureWidth) { - _startPosX += (int)EntityLocomotive.Step; + _startPosX += (int)_EntityLocomotive.Step; } return true; //вниз case DirectionType.Down: - if (_startPosY.Value + _drawningLocomotiveHeight + EntityLocomotive.Step < _pictureHeight) + if (_startPosY.Value + _drawningBaseLocomotiveHeight + _EntityLocomotive.Step < _pictureHeight) { - _startPosY += (int)EntityLocomotive.Step; + _startPosY += (int)_EntityLocomotive.Step; } return true; default: @@ -189,15 +200,14 @@ /// Прорисовка объекта /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { - if (EntityLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) + if (_EntityLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) { return; } Pen pen = new(Color.Black); - Brush additionalBrush = new SolidBrush(EntityLocomotive.AdditionalColor); - Brush bodyBrush = new SolidBrush(EntityLocomotive.BodyColor); + Brush bodyBrush = new SolidBrush(_EntityLocomotive.BodyColor); Brush blackBrush = new SolidBrush(Color.Black); Brush whiteBrush = new SolidBrush(Color.White); //границы тепловоза @@ -207,7 +217,6 @@ _startPosX.Value + 115, _startPosY.Value + 20 + 10, _startPosX.Value + 5, _startPosY.Value + 20 + 10 ); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20); g.FillRectangle(blackBrush, _startPosX.Value, _startPosY.Value + 5 + 10, 5, 30); //шасси @@ -240,20 +249,6 @@ g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5 + 10, 10, 10); g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5 + 10, 10, 10); g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 5 + 10, 10, 10); - //труба - if (EntityLocomotive.ExehaustPipe) - { - Brush greyBrush = new SolidBrush(Color.Gray); - g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); - g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10); - } - // отсек для топлива - if (EntityLocomotive.FuelCompartment) - { - g.FillRectangle(bodyBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); - g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); - } - } - + } } } diff --git a/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs new file mode 100644 index 0000000..fda6f3b --- /dev/null +++ b/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs @@ -0,0 +1,51 @@ +using LocomativeProject.Drawnings; +using LocomotiveProject.Entities; + +namespace LocomotiveProject.Drawnings +{ + public class DrawningLocomotive : DrawningBaseLocomotive + { + /// + /// Конструктор + /// + /// Скорость + /// Вес тепловоза + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия трубы + /// Признак наличия топливного отсека + public DrawningLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(120, 60) + { + _EntityLocomotive = new EntityLocomotive(speed, weight, bodyColor, additionalColor, exehaustPipe, fuelCompartment); + } + + public override void DrawTransport(Graphics g) + { + if (_EntityLocomotive == null || _EntityLocomotive is not EntityLocomotive entityLocomotive || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(entityLocomotive.AdditionalColor); + Brush bodyBrush = new SolidBrush(entityLocomotive.BodyColor); + //Brush blackBrush = new SolidBrush(Color.Black); + //Brush whiteBrush = new SolidBrush(Color.White); + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20); + base.DrawTransport(g); + if (entityLocomotive.ExehaustPipe) + { + Brush greyBrush = new SolidBrush(Color.Gray); + g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); + g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10); + } + // отсек для топлива + if (entityLocomotive.FuelCompartment) + { + g.FillRectangle(bodyBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); + g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/Entities/EntityBaseLocomotive.cs b/LocomativeProject/LocomativeProject/Entities/EntityBaseLocomotive.cs new file mode 100644 index 0000000..d47fd0c --- /dev/null +++ b/LocomativeProject/LocomativeProject/Entities/EntityBaseLocomotive.cs @@ -0,0 +1,37 @@ +namespace LocomativeProject.Entities +{ + /// + /// Класс-сущность базовый тепловоз + /// + public class EntityBaseLocomotive + { + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public double Weight { get; private set; } + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + /// + /// Шаг перемещения тепловоза + /// + public double Step => Speed * 100 / Weight; + /// + /// Конструктор + /// + /// Скорость + /// Вес тепловоза + /// Основной цвет + public EntityBaseLocomotive(int speed, double weight, Color bodyColor) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + } + } +} diff --git a/LocomativeProject/LocomativeProject/Entities/EntityLocomotive.cs b/LocomativeProject/LocomativeProject/Entities/EntityLocomotive.cs new file mode 100644 index 0000000..9f79e8e --- /dev/null +++ b/LocomativeProject/LocomativeProject/Entities/EntityLocomotive.cs @@ -0,0 +1,32 @@ +using LocomativeProject.Entities; + +namespace LocomotiveProject.Entities +{ + public class EntityLocomotive : EntityBaseLocomotive + { + public Color AdditionalColor { get; private set; } + /// + /// Признак (опция) наличие трубы + /// + public bool ExehaustPipe { get; private set; } + /// + /// Признак (опция) наличие топливного отсека + /// + public bool FuelCompartment { get; private set; } + /// + /// Конструктор сущности + /// + /// Скорость + /// Вес тепловоза + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия трубы + /// Признак наличия топливного отсека + public EntityLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(speed, weight, bodyColor) + { + AdditionalColor = additionalColor; + ExehaustPipe = exehaustPipe; + FuelCompartment = fuelCompartment; + } + } +} diff --git a/LocomativeProject/LocomativeProject/EntityLocomotive.cs b/LocomativeProject/LocomativeProject/EntityLocomotive.cs deleted file mode 100644 index 723e60c..0000000 --- a/LocomativeProject/LocomativeProject/EntityLocomotive.cs +++ /dev/null @@ -1,60 +0,0 @@ -namespace LocomotiveProject -{ - public class EntityLocomotive - { - /// - /// Скорость - /// - 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 ExehaustPipe { get; private set; } - /// - /// Признак (опция) наличие топливного отсека - /// - public bool FuelCompartment { get; private set; } - /// - /// Признак количество колес - /// - public int WheelCount { get; private set; } - /// - /// Шаг перемещения тепловоза - /// - public double Step => Speed * 100 / Weight; - /// - /// Инициализация полей объекта-класса тепловоз - /// - /// Скорость - /// Вес тепловоза - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия трубы - /// Признак наличия топливного отсека - /// Признак количества колес - public void Init(int speed, double weight, Color bodyColor, Color - additionalColor, bool exehaustPipe, bool fuelCompartment, int wheelCount) - { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; - AdditionalColor = additionalColor; - ExehaustPipe = exehaustPipe; - FuelCompartment = fuelCompartment; - WheelCount = wheelCount; - } - - } -} diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 3898d85..4233a4a 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -29,120 +29,136 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); - pictureBox1 = new PictureBox(); - pictureBoxLocomotive = new PictureBox(); - create = new Button(); - buttonUp = new Button(); - buttonDown = new Button(); - buttonLeft = new Button(); - buttonRight = new Button(); - ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); - ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit(); - SuspendLayout(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); + this.buttonCreateBaseLocomotive = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + this.buttonCreateLocomotive = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); + this.SuspendLayout(); // // pictureBox1 // - pictureBox1.Location = new Point(0, 0); - pictureBox1.Name = "pictureBox1"; - pictureBox1.Size = new Size(100, 50); - pictureBox1.TabIndex = 0; - pictureBox1.TabStop = false; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(100, 50); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; // // pictureBoxLocomotive // - pictureBoxLocomotive.Dock = DockStyle.Fill; - pictureBoxLocomotive.Location = new Point(0, 0); - pictureBoxLocomotive.Name = "pictureBoxLocomotive"; - pictureBoxLocomotive.Size = new Size(800, 450); - pictureBoxLocomotive.TabIndex = 1; - pictureBoxLocomotive.TabStop = false; + 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, 450); + this.pictureBoxLocomotive.TabIndex = 1; + this.pictureBoxLocomotive.TabStop = false; // - // create + // buttonCreateBaseLocomotive // - create.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - create.Location = new Point(12, 415); - create.Name = "create"; - create.Size = new Size(75, 23); - create.TabIndex = 2; - create.Text = "создать"; - create.UseVisualStyleBackColor = true; - create.Click += create_Click; + this.buttonCreateBaseLocomotive.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreateBaseLocomotive.Location = new System.Drawing.Point(12, 415); + this.buttonCreateBaseLocomotive.Name = "buttonCreateBaseLocomotive"; + this.buttonCreateBaseLocomotive.Size = new System.Drawing.Size(171, 23); + this.buttonCreateBaseLocomotive.TabIndex = 2; + this.buttonCreateBaseLocomotive.Text = "создать обычный поезд"; + this.buttonCreateBaseLocomotive.UseVisualStyleBackColor = true; + this.buttonCreateBaseLocomotive.Click += new System.EventHandler(this.ButtonCreateBaseLocomotive_Click); // // buttonUp // - buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); - buttonUp.BackgroundImageLayout = ImageLayout.Stretch; - buttonUp.Location = new Point(691, 362); - buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(35, 35); - buttonUp.TabIndex = 3; - buttonUp.UseVisualStyleBackColor = true; - buttonUp.Click += ButtonMove_Click; + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage"))); + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(691, 362); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(35, 35); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); // // buttonDown // - buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); - buttonDown.BackgroundImageLayout = ImageLayout.Stretch; - buttonDown.Location = new Point(691, 403); - buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(35, 35); - buttonDown.TabIndex = 4; - buttonDown.UseVisualStyleBackColor = true; - buttonDown.Click += ButtonMove_Click; + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonDown.BackgroundImage"))); + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(691, 403); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(35, 35); + this.buttonDown.TabIndex = 4; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); // // buttonLeft // - buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); - buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; - buttonLeft.Location = new Point(650, 403); - buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(35, 35); - buttonLeft.TabIndex = 5; - buttonLeft.UseVisualStyleBackColor = true; - buttonLeft.Click += ButtonMove_Click; + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonLeft.BackgroundImage"))); + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(650, 403); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(35, 35); + this.buttonLeft.TabIndex = 5; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); // // buttonRight // - buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); - buttonRight.BackgroundImageLayout = ImageLayout.Stretch; - buttonRight.Location = new Point(732, 403); - buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(35, 35); - buttonRight.TabIndex = 6; - buttonRight.UseVisualStyleBackColor = true; - buttonRight.Click += ButtonMove_Click; + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRight.BackgroundImage"))); + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(732, 403); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(35, 35); + this.buttonRight.TabIndex = 6; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonCreateLocomotive + // + this.buttonCreateLocomotive.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreateLocomotive.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.buttonCreateLocomotive.Location = new System.Drawing.Point(189, 415); + this.buttonCreateLocomotive.Name = "buttonCreateLocomotive"; + this.buttonCreateLocomotive.Size = new System.Drawing.Size(173, 23); + this.buttonCreateLocomotive.TabIndex = 7; + this.buttonCreateLocomotive.Text = "создать продвинутый поезд"; + this.buttonCreateLocomotive.UseVisualStyleBackColor = true; + this.buttonCreateLocomotive.Click += new System.EventHandler(this.ButtonCreateLocomotive_Click); // // LocomotiveProject // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); - Controls.Add(buttonRight); - Controls.Add(buttonLeft); - Controls.Add(buttonDown); - Controls.Add(buttonUp); - Controls.Add(create); - Controls.Add(pictureBoxLocomotive); - Controls.Add(pictureBox1); - Name = "LocomotiveProject"; - Text = "Тепловоз"; - ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); - ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit(); - ResumeLayout(false); + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonCreateLocomotive); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonCreateBaseLocomotive); + this.Controls.Add(this.pictureBoxLocomotive); + this.Controls.Add(this.pictureBox1); + this.Name = "LocomotiveProject"; + this.Text = "Тепловоз"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); + this.ResumeLayout(false); + } #endregion private PictureBox pictureBox1; private PictureBox pictureBoxLocomotive; - private Button create; + private Button buttonCreateBaseLocomotive; private Button buttonUp; private Button buttonDown; private Button buttonLeft; private Button buttonRight; + private Button buttonCreateLocomotive; } } \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs index 12b9e36..f72177a 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -8,12 +8,15 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using LocomotiveProject.Entities; +using LocomativeProject.Drawnings; +using LocomotiveProject.Drawnings; namespace LocomativeProject { public partial class LocomotiveProject : Form { - private DrawningLocomotive? _drawningLocomotive; + private DrawningBaseLocomotive? _drawningLocomotive; public LocomotiveProject() { @@ -32,30 +35,50 @@ namespace LocomativeProject pictureBoxLocomotive.Image = bmp; } + /// - /// Обработка нажатия кнопки "Создать" + /// Создание объекта класса-перемещения /// - /// - /// - private void create_Click(object sender, EventArgs e) + /// Тип создаваемого объекта + private void CreateObject(string type) { Random random = new(); - _drawningLocomotive = new DrawningLocomotive(); - _drawningLocomotive.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)), - random.Next(2, 6) - ); + switch (type) + { + case nameof(DrawningBaseLocomotive): + _drawningLocomotive = new DrawningBaseLocomotive(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256))); + break; + case nameof(DrawningLocomotive): + _drawningLocomotive = new DrawningLocomotive(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))); + break; + default: + return; + } + _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); _drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } + /// + /// Обработка нажатия кнопки "Создать базовый поезд" + /// + /// + /// + private void ButtonCreateBaseLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive)); + + /// + /// Обработка нажатия кнопки "Создать продвинутый поезд" + /// + /// + /// + private void ButtonCreateLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive)); + + private void ButtonMove_Click(object sender, EventArgs e) { if (_drawningLocomotive == null) @@ -84,6 +107,5 @@ namespace LocomativeProject Draw(); } } - } } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx index e4ae198..c4a61e0 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.resx +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.resx @@ -1,64 +1,4 @@ - - - + @@ -528,7 +468,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X 0F1lvcfxAOMMioCAQbBhL9jBgqKCXcCC0WgsGFSMElIgBEgU4+g4OuOV114w44W3inKBBSxYsEdFRQWj YAkaFYMFQcjyeZKlIcmTt+z3v/deaz2fz8z3cI5Jdlkvx/9vHI9nUQMAVMcAAIAKGQAAUCEDAAAqZAAA QIUMAACokAEAABUyAACgQgYAAFTIAACAChkAAFAhAwAAKmQAAECFDAAAqJABAAAVMgAAoEIGAABUyAAA -- 2.25.1 From 6bc2e6f5829091da09e4b8488cc02e5a4adb35be Mon Sep 17 00:00:00 2001 From: DarkScarletDoom <93650805+DarkScarletDoom@users.noreply.github.com> Date: Tue, 12 Mar 2024 19:45:27 +0400 Subject: [PATCH 5/8] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drawnings/DirectionType.cs | 4 + .../Drawnings/DrawningBaseLocomotive.cs | 22 +++ .../LocomotiveProject.Designer.cs | 28 ++++ .../LocomativeProject/LocomotiveProject.cs | 49 ++++++ .../MovementStrategy/AbstractStrategy.cs | 140 ++++++++++++++++++ .../MovementStrategy/IMoveableObject.cs | 23 +++ .../MovementStrategy/MoveToBorder.cs | 41 +++++ .../MovementStrategy/MoveToCenter.cs | 54 +++++++ .../MovementStrategy/MoveableLocomotive.cs | 64 ++++++++ .../MovementStrategy/MovementDirection.cs | 26 ++++ .../MovementStrategy/ObjectParameters.cs | 71 +++++++++ .../MovementStrategy/StrategyStatus.cs | 21 +++ 12 files changed, 543 insertions(+) create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/AbstractStrategy.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/IMoveableObject.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/MoveToBorder.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/MoveToCenter.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/MoveableLocomotive.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/MovementDirection.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/ObjectParameters.cs create mode 100644 LocomativeProject/LocomativeProject/MovementStrategy/StrategyStatus.cs diff --git a/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs b/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs index ad0a4e6..736992f 100644 --- a/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs +++ b/LocomativeProject/LocomativeProject/Drawnings/DirectionType.cs @@ -5,6 +5,10 @@ /// public enum DirectionType { + /// + /// Неизвестное направление + /// + Unknow = -1, /// /// Вверх /// diff --git a/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs index d8d3d39..3e6adac 100644 --- a/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs +++ b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs @@ -39,6 +39,28 @@ namespace LocomativeProject.Drawnings /// private readonly int _drawningBaseLocomotiveHeight = 60; + + /// + /// Координата X объекта + /// + public int? GetPosX => _startPosX; + + /// + /// Координата Y объекта + /// + public int? GetPosY => _startPosY; + + /// + /// Ширина объекта + /// + public int GetWidth => _drawningBaseLocomotiveWidth; + + /// + /// Высота объекта + /// + public int GetHeight => _drawningBaseLocomotiveHeight; + + /// /// Пустой конструктор /// diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 4233a4a..74ab7d7 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -37,6 +37,8 @@ this.buttonLeft = new System.Windows.Forms.Button(); this.buttonRight = new System.Windows.Forms.Button(); this.buttonCreateLocomotive = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.buttonStrategyStep = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); this.SuspendLayout(); @@ -129,11 +131,35 @@ this.buttonCreateLocomotive.UseVisualStyleBackColor = true; this.buttonCreateLocomotive.Click += new System.EventHandler(this.ButtonCreateLocomotive_Click); // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "К центру", + "К краю"}); + this.comboBox1.Location = new System.Drawing.Point(667, 12); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 23); + this.comboBox1.TabIndex = 8; + // + // buttonStrategyStep + // + this.buttonStrategyStep.Location = new System.Drawing.Point(713, 41); + this.buttonStrategyStep.Name = "buttonStrategyStep"; + this.buttonStrategyStep.Size = new System.Drawing.Size(75, 23); + this.buttonStrategyStep.TabIndex = 9; + this.buttonStrategyStep.Text = "Шаг"; + this.buttonStrategyStep.UseVisualStyleBackColor = true; + this.buttonStrategyStep.Click += new System.EventHandler(this.buttonStrategyStep_Click); + // // LocomotiveProject // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonStrategyStep); + this.Controls.Add(this.comboBox1); this.Controls.Add(this.buttonCreateLocomotive); this.Controls.Add(this.buttonRight); this.Controls.Add(this.buttonLeft); @@ -160,5 +186,7 @@ private Button buttonLeft; private Button buttonRight; private Button buttonCreateLocomotive; + private ComboBox comboBox1; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs index f72177a..168ef74 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -11,6 +11,7 @@ using System.Windows.Forms; using LocomotiveProject.Entities; using LocomativeProject.Drawnings; using LocomotiveProject.Drawnings; +using LocomativeProject.MovementStrategy; namespace LocomativeProject { @@ -18,9 +19,12 @@ namespace LocomativeProject { private DrawningBaseLocomotive? _drawningLocomotive; + private AbstractStrategy? _strategy; + public LocomotiveProject() { InitializeComponent(); + _strategy = null; } private void Draw() @@ -61,6 +65,8 @@ namespace LocomativeProject _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); _drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _strategy = null; + comboBox1.Enabled = true; Draw(); } @@ -107,5 +113,48 @@ namespace LocomativeProject Draw(); } } + + /// + /// + /// + /// + /// + private void buttonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawningLocomotive == null) + { + return; + } + + if (comboBox1.Enabled) + { + _strategy = comboBox1.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableLocomotive(_drawningLocomotive), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + } + + if (_strategy == null) + { + return; + } + + comboBox1.Enabled = false; + _strategy.MakeStep(); + Draw(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBox1.Enabled = true; + _strategy = null; + } + } } } diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/AbstractStrategy.cs b/LocomativeProject/LocomativeProject/MovementStrategy/AbstractStrategy.cs new file mode 100644 index 0000000..a6642a0 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/AbstractStrategy.cs @@ -0,0 +1,140 @@ +namespace LocomativeProject.MovementStrategy +{ + /// + /// Класс-стратегия перемещения объекта + /// + public abstract class AbstractStrategy + { + /// + /// Перемещаемый объект + /// + private IMoveableObject? _moveableObject; + + /// + /// Статус перемещения + /// + private StrategyStatus _state = StrategyStatus.NotInit; + + /// + /// Ширина поля + /// + protected int FieldWidth { get; private set; } + + /// + /// Высота поля + /// + protected int FieldHeight { get; private set; } + + /// + /// Получение статуса перемещения + /// + /// Установка данных + /// + /// Перемещаемый объект + /// Ширина поля + /// Высота поля + public void SetData(IMoveableObject moveableObject, int width, int height) + { + if (moveableObject == null) + { + _state = StrategyStatus.NotInit; + return; + } + + _state = StrategyStatus.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + + /// + /// Шаг перемещения + /// + public void MakeStep() + { + if (_state != StrategyStatus.InProgress) + { + return; + } + + if (IsTargetDestinaion()) + { + _state = StrategyStatus.Finish; + return; + } + + MoveToTarget(); + } + + /// + /// Перемещение влево + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveLeft() => MoveTo(MovementDirection.Left); + + /// + /// Перемещение вправо + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveRight() => MoveTo(MovementDirection.Right); + + /// + /// Перемещение вверх + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveUp() => MoveTo(MovementDirection.Up); + + /// + /// Перемещение вниз + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveDown() => MoveTo(MovementDirection.Down); + + /// + /// Параметры объекта + /// + protected ObjectParameters? GetObjectParameters => _moveableObject?.GetObjectPosition; + + /// + /// Шаг объекта + /// + /// + protected int? GetStep() + { + if (_state != StrategyStatus.InProgress) + { + return null; + } + return _moveableObject?.GetStep; + } + + /// + /// Перемещение к цели + /// + protected abstract void MoveToTarget(); + + /// + /// Достигнута ли цель + /// + /// + protected abstract bool IsTargetDestinaion(); + + /// + /// Попытка перемещения в требуемом направлении + /// + /// Направление + /// Результат попытки (true - удалось переместиться, false - неудача) + private bool MoveTo(MovementDirection movementDirection) + { + if (_state != StrategyStatus.InProgress) + { + return false; + } + + return _moveableObject?.TryMoveObject(movementDirection) ?? false; + } + } +} diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/IMoveableObject.cs b/LocomativeProject/LocomativeProject/MovementStrategy/IMoveableObject.cs new file mode 100644 index 0000000..80cc7d0 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/IMoveableObject.cs @@ -0,0 +1,23 @@ +namespace LocomativeProject.MovementStrategy; +/// +/// Интерфейс для работы с перемещаемым объектом +/// +public interface IMoveableObject +{ + /// + /// Получение координаты объекта + /// + ObjectParameters? GetObjectPosition { get; } + + /// + /// Шаг объекта + /// + int GetStep { get; } + + /// + /// Попытка переместить объект в указанном направлении + /// + /// Направление + /// true - объект перемещен, false - перемещение невозможно + bool TryMoveObject(MovementDirection direction); +} diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/MoveToBorder.cs b/LocomativeProject/LocomativeProject/MovementStrategy/MoveToBorder.cs new file mode 100644 index 0000000..1a5d348 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/MoveToBorder.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomativeProject.MovementStrategy; + +public class MoveToBorder : AbstractStrategy +{ + protected override bool IsTargetDestinaion() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + + return objParams.RightBorder - GetStep() <= FieldWidth && objParams.DownBorder - GetStep() < FieldHeight && + objParams.RightBorder + GetStep() >= FieldWidth && objParams.DownBorder + GetStep() >= FieldHeight; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + + if (objParams.RightBorder + GetStep() <= FieldWidth) + { + MoveRight(); + } + if (objParams.DownBorder + GetStep() <= FieldHeight) + { + MoveDown(); + } + } +} + diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/MoveToCenter.cs b/LocomativeProject/LocomativeProject/MovementStrategy/MoveToCenter.cs new file mode 100644 index 0000000..06fc248 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/MoveToCenter.cs @@ -0,0 +1,54 @@ +namespace LocomativeProject.MovementStrategy; + +/// +/// Стратегия перемещения объекта в центр экрана +/// +public class MoveToCenter : AbstractStrategy +{ + protected override bool IsTargetDestinaion() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + + return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2; + if (Math.Abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + + int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2; + if (Math.Abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/MoveableLocomotive.cs b/LocomativeProject/LocomativeProject/MovementStrategy/MoveableLocomotive.cs new file mode 100644 index 0000000..4138772 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/MoveableLocomotive.cs @@ -0,0 +1,64 @@ +using LocomativeProject.Drawnings; +namespace LocomativeProject.MovementStrategy; + +/// +/// Класс-реализация IMoveableObject с использованием DrawningLocomotive +/// +public class MoveableLocomotive : IMoveableObject +{ + /// + /// Поле-объект класса DrawningBaseLocomotive или его наследника + /// + private readonly DrawningBaseLocomotive? _locomotive = null; + + /// + /// Конструктор + /// + /// Объект класса DrawningBaseLocomotive + public MoveableLocomotive(DrawningBaseLocomotive locomotive) + { + _locomotive = locomotive; + } + + public ObjectParameters? GetObjectPosition + { + get + { + if (_locomotive == null || _locomotive._EntityLocomotive == null || !_locomotive.GetPosX.HasValue || !_locomotive.GetPosY.HasValue) + { + return null; + } + return new ObjectParameters(_locomotive.GetPosX.Value, _locomotive.GetPosY.Value, _locomotive.GetWidth, _locomotive.GetHeight); + } + } + + public int GetStep => (int)(_locomotive?._EntityLocomotive?.Step ?? 0); + + public bool TryMoveObject(MovementDirection direction) + { + if (_locomotive == null || _locomotive._EntityLocomotive == null) + { + return false; + } + + return _locomotive.MoveTransport(GetDirectionType(direction)); + } + + /// + /// Конвертация из MovementDirection в DirectionType + /// + /// MovementDirection + /// DirectionType + private static DirectionType GetDirectionType(MovementDirection direction) + { + return direction switch + { + MovementDirection.Left => DirectionType.Left, + MovementDirection.Right => DirectionType.Right, + MovementDirection.Up => DirectionType.Up, + MovementDirection.Down => DirectionType.Down, + _ => DirectionType.Unknow, + }; + } +} + diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/MovementDirection.cs b/LocomativeProject/LocomativeProject/MovementStrategy/MovementDirection.cs new file mode 100644 index 0000000..5733c61 --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/MovementDirection.cs @@ -0,0 +1,26 @@ +namespace LocomativeProject.MovementStrategy; +/// +/// Направление перемещения +/// +public enum MovementDirection : byte +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down, + + /// + /// Влево + /// + Left, + + /// + /// Вправо + /// + Right +} diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/ObjectParameters.cs b/LocomativeProject/LocomativeProject/MovementStrategy/ObjectParameters.cs new file mode 100644 index 0000000..e1be92f --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/ObjectParameters.cs @@ -0,0 +1,71 @@ +namespace LocomativeProject.MovementStrategy; +/// +/// Параметры-координаты объекта +/// +public class ObjectParameters +{ + /// + /// Координата X + /// + private readonly int _x; + + /// + /// Координата Y + /// + private readonly int _y; + + /// + /// Ширина объекта + /// + private readonly int _width; + + /// + /// Высота объекта + /// + private readonly int _height; + + /// + /// Левая граница + /// + public int LeftBorder => _x; + + /// + /// Верхняя граница + /// + public int TopBorder => _y; + + /// + /// Правая граница + /// + public int RightBorder => _x + _width; + + /// + /// Нижняя граница + /// + public int DownBorder => _y + _height; + + /// + /// Середина объекта + /// + public int ObjectMiddleHorizontal => _x + _width / 2; + + /// + /// Середина объекта + /// + public int ObjectMiddleVertical => _y + _height / 2; + + /// + /// Конструктор + /// + /// Координата X + /// Координата Y + /// Ширина объекта + /// Высота объекта + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + } +} diff --git a/LocomativeProject/LocomativeProject/MovementStrategy/StrategyStatus.cs b/LocomativeProject/LocomativeProject/MovementStrategy/StrategyStatus.cs new file mode 100644 index 0000000..64ae08f --- /dev/null +++ b/LocomativeProject/LocomativeProject/MovementStrategy/StrategyStatus.cs @@ -0,0 +1,21 @@ +namespace LocomativeProject.MovementStrategy; +/// +/// Статус выполнения операции перемещения +/// +public enum StrategyStatus +{ + /// + /// Все готово к началу + /// + NotInit, + + /// + /// Выполняется + /// + InProgress, + + /// + /// Завершено + /// + Finish +} -- 2.25.1 From 4311f2f59b5563ead86f26171fd27794d2816ae1 Mon Sep 17 00:00:00 2001 From: Yourdax Date: Mon, 8 Apr 2024 15:41:50 +0400 Subject: [PATCH 6/8] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B9=20=D0=BB=D0=B0=D0=B1?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 108 +++++++++++ .../ICollectionGenericObjects.cs | 39 ++++ .../LocomotiveDock.cs | 57 ++++++ .../LocomotiveSharingService.cs | 57 ++++++ .../MassiveGenericObjects.cs | 84 ++++++++ .../FormLocomotiveCollection.Designer.cs | 169 ++++++++++++++++ .../FormLocomotiveCollection.cs | 183 ++++++++++++++++++ .../FormLocomotiveCollection.resx | 120 ++++++++++++ .../LocomativeProject.csproj | 2 +- ...r.cs => LocomotiveProjectForm.Designer.cs} | 4 +- ...iveProject.cs => LocomotiveProjectForm.cs} | 16 +- ...roject.resx => LocomotiveProjectForm.resx} | 0 .../LocomativeProject/Program.cs | 2 +- 13 files changed, 835 insertions(+), 6 deletions(-) create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs create mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs create mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs create mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx rename LocomativeProject/LocomativeProject/{LocomotiveProject.Designer.cs => LocomotiveProjectForm.Designer.cs} (99%) rename LocomativeProject/LocomativeProject/{LocomotiveProject.cs => LocomotiveProjectForm.cs} (92%) rename LocomativeProject/LocomativeProject/{LocomotiveProject.resx => LocomotiveProjectForm.resx} (100%) diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs new file mode 100644 index 0000000..1eb7c91 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs @@ -0,0 +1,108 @@ +using LocomativeProject.CollectionGenericObjects; +using LocomativeProject.Drawnings; + +namespace LocomotiveProject.CollectionGenericObjects; +/// +/// Абстракция компании,хранящий коллекцию круизеров +/// +public abstract class AbstractCompany +{ + /// + /// Размер места(ширина) + /// + protected readonly int _placeSizeWidth = 210; + /// + /// Размер места(высота) + /// + protected readonly int _placeSizeHeight = 120; + /// + /// Ширина окна + /// + protected readonly int _pictureWidth; + /// + /// Высота окна + /// + protected readonly int _pictureHeight; + /// + /// Коллекцияя круизеров + /// + protected ICollectionGenericObjects _collection = null; + /// + /// Вычисление макс кол-ва элементов,который можно разместить в окне + /// + private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight); + /// + /// конструктор + /// + /// Ширина окна + /// Высота окна + /// коллекция + public AbstractCompany(int picWidth, int pictureHeight,ICollectionGenericObjects collection) + { + _pictureWidth = picWidth; + _pictureHeight = pictureHeight; + _collection = collection; + _collection.SetMaxCount = GetMaxCount; + } + /// + /// перегрузка оператора + для класса + /// + /// Компания + /// добавляемый объект + /// + public static int operator +(AbstractCompany company, DrawningBaseLocomotive cruiser) + { + if (company._collection == null) + return -1; + return company._collection.Insert(cruiser); + } + /// + /// перегрузка оператора - для класса + /// + /// Компания + /// позиция удаления + /// + public static DrawningBaseLocomotive operator -(AbstractCompany company, int position) + { + if (company._collection == null) + return null; + + return company._collection.Remove(position); + } + /// + /// получение случайног обьекта из коллекции + /// + /// + public DrawningBaseLocomotive? GetRandomObject() + { + Random rnd = new Random(); + return _collection?.Get(rnd.Next(GetMaxCount)); + } + /// + /// вывод всей коллекции + /// + /// + public Bitmap? Show() + { + Bitmap? bitmap = new(_pictureWidth,_pictureHeight); + Graphics graphics = Graphics.FromImage(bitmap); + DrawBackground(graphics); + + SetObjectPosition(); + for (int i = 0; i < (_collection?.Count ?? 0); ++i) + { + DrawningBaseLocomotive? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + return bitmap; + } + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackground(Graphics graphics); + /// + /// Расстановка объектов + /// + protected abstract void SetObjectPosition(); +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs new file mode 100644 index 0000000..eadbcb6 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -0,0 +1,39 @@ +namespace LocomativeProject.CollectionGenericObjects; + +public interface ICollectionGenericObjects + where T : class +{ + /// + /// Кол-во объектов в коллекции + /// + int Count { get; } + /// + /// Установка макс. кол-ва элементов + /// + int SetMaxCount { set; } + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true-вставка прошла удачно,false- вставка не удалась + int Insert(T obj); + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// позиция + /// true-вставка прошла удачно,false- вставка не удалась + int Insert(T obj,int position); + /// + /// Удаление обьекта из коллекции с конкретной позиции + /// + /// позиция + /// true-удаление прошло удачно,false- удаление не удалось + T? Remove(int positon); + /// + /// получение объекта по позиции + /// + /// позиция + /// Обьект + T? Get(int positon); +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs new file mode 100644 index 0000000..d08259d --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs @@ -0,0 +1,57 @@ +using LocomativeProject.CollectionGenericObjects; +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using System; +namespace Cruiser.CollectionGenericObjects; + +public class LocomotiveDock : AbstractCompany +{ + public LocomotiveDock(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new Pen(Color.Black,2); + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); + } + } + } + + protected override void SetObjectPosition() + { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + + int curWidth = 0; + int curHeight = 0; + + for (int i = 0; i < (_collection?.Count ?? 0); i++) + { + if (_collection?.Get(i) != null) + { + _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); + } + if (curHeight < height - 1) + curHeight++; + else + { + curHeight = 0; + curWidth++; + } + if (curWidth > width - 1) + { + return; + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs new file mode 100644 index 0000000..24d514a --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs @@ -0,0 +1,57 @@ +using LocomativeProject.CollectionGenericObjects; +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; + +namespace Cruiser.CollectionGenericObjects; + +public class LocomotiveSharingService : AbstractCompany +{ + public LocomotiveSharingService(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new Pen(Color.Black,2); + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); + } + } + } + + protected override void SetObjectPosition() + { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + + int curWidth = 0; + int curHeight = 0; + + for (int i = 0; i < (_collection?.Count ?? 0); i++) + { + if (_collection?.Get(i) != null) + { + _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); + } + if (curHeight < height - 1) + curHeight++; + else + { + curHeight = 0; + curWidth++; + } + if (curWidth > width - 1) + { + return; + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs new file mode 100644 index 0000000..d10a026 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs @@ -0,0 +1,84 @@ +namespace LocomativeProject.CollectionGenericObjects; + +public class MassiveGenericObjects : ICollectionGenericObjects + where T : class +{ + /// + /// + /// + private T[] _collection; + + public int Count => _collection.Length; + + public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } + /// + /// конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + + public T? Get(int positon) + { + if (positon <= Count || positon > 0) + { + return _collection[positon]; + } + return null; + } + + public int Insert(T obj) + { + for (int i = 0; i < Count; i++) + { + if (_collection[i] == null ) + { + _collection[i] = obj; + return i; + } + } + return -1; + } + + public int Insert(T obj, int position) + { + if (_collection[position]== null) + { + _collection[position] = obj; + return position; + } + else + { + for (int i = position; i < Count; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + for (int i = Count -1; i > 0; i--) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + } + return -1; + } + + public T? Remove(int position) + { + if (position >= Count || position < 0) return null; + if (_collection[position] != null) + { + T obj = _collection[position]; + _collection[position] = null; + return obj; + } + return null; + } +} diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs new file mode 100644 index 0000000..b76f085 --- /dev/null +++ b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs @@ -0,0 +1,169 @@ +namespace LocomativeProject +{ + partial class FormLocomotiveCollection + { + /// + /// 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() + { + groupBox1 = new GroupBox(); + buttonRefresh = new Button(); + buttonGoToCheck = new Button(); + buttonRemoveLocomotive = new Button(); + maskedTextBox = new MaskedTextBox(); + buttonModifLocomotive = new Button(); + buttonAddLocomotive = new Button(); + comboBoxSelectorCompany = new ComboBox(); + pictureBox = new PictureBox(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + SuspendLayout(); + // + // groupBox1 + // + groupBox1.Controls.Add(buttonRefresh); + groupBox1.Controls.Add(buttonGoToCheck); + groupBox1.Controls.Add(buttonRemoveLocomotive); + groupBox1.Controls.Add(maskedTextBox); + groupBox1.Controls.Add(buttonModifLocomotive); + groupBox1.Controls.Add(buttonAddLocomotive); + groupBox1.Controls.Add(comboBoxSelectorCompany); + groupBox1.Dock = DockStyle.Right; + groupBox1.Location = new Point(912, 0); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(180, 581); + groupBox1.TabIndex = 0; + groupBox1.TabStop = false; + groupBox1.Text = "Инструменты"; + // + // buttonRefresh + // + buttonRefresh.Location = new Point(32, 530); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(124, 39); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonGoToCheck + // + buttonGoToCheck.Location = new Point(32, 349); + buttonGoToCheck.Name = "buttonGoToCheck"; + buttonGoToCheck.Size = new Size(124, 39); + buttonGoToCheck.TabIndex = 5; + buttonGoToCheck.Text = "Передать на тесты"; + buttonGoToCheck.UseVisualStyleBackColor = true; + buttonGoToCheck.Click += ButtonGoToCheck_Click; + // + // buttonRemoveLocomotive + // + buttonRemoveLocomotive.Location = new Point(18, 207); + buttonRemoveLocomotive.Name = "buttonRemoveLocomotive"; + buttonRemoveLocomotive.Size = new Size(150, 23); + buttonRemoveLocomotive.TabIndex = 4; + buttonRemoveLocomotive.Text = "Удалить поезд"; + buttonRemoveLocomotive.UseVisualStyleBackColor = true; + buttonRemoveLocomotive.Click += ButtonRemoveLocomotive_Click; + // + // maskedTextBox + // + maskedTextBox.Location = new Point(18, 178); + maskedTextBox.Mask = "00"; + maskedTextBox.Name = "maskedTextBox"; + maskedTextBox.Size = new Size(150, 23); + maskedTextBox.TabIndex = 3; + maskedTextBox.ValidatingType = typeof(int); + // + // buttonModifLocomotive + // + buttonModifLocomotive.Location = new Point(18, 102); + buttonModifLocomotive.Name = "buttonModifLocomotive"; + buttonModifLocomotive.Size = new Size(150, 43); + buttonModifLocomotive.TabIndex = 2; + buttonModifLocomotive.Text = "Добавление модиф поезда"; + buttonModifLocomotive.UseVisualStyleBackColor = true; + buttonModifLocomotive.Click += ButtonModifLocomotive_Click; + // + // buttonAddLocomotive + // + buttonAddLocomotive.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddLocomotive.Location = new Point(18, 62); + buttonAddLocomotive.Name = "buttonAddLocomotive"; + buttonAddLocomotive.Size = new Size(150, 23); + buttonAddLocomotive.TabIndex = 1; + buttonAddLocomotive.Text = "Добавление поезда"; + buttonAddLocomotive.UseVisualStyleBackColor = true; + buttonAddLocomotive.Click += ButtonAddLocomotive_Click; + // + // comboBoxSelectorCompany + // + comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxSelectorCompany.FormattingEnabled = true; + comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); + comboBoxSelectorCompany.Location = new Point(18, 22); + comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; + comboBoxSelectorCompany.Size = new Size(150, 23); + comboBoxSelectorCompany.TabIndex = 0; + comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged; + // + // pictureBox + // + pictureBox.Dock = DockStyle.Fill; + pictureBox.Location = new Point(0, 0); + pictureBox.Name = "pictureBox"; + pictureBox.Size = new Size(912, 581); + pictureBox.TabIndex = 1; + pictureBox.TabStop = false; + // + // FormLocomotiveCollection + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1092, 581); + Controls.Add(pictureBox); + Controls.Add(groupBox1); + Name = "FormLocomotiveCollection"; + Text = "Коллекция Крейсеров"; + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBox1; + private ComboBox comboBoxSelectorCompany; + private Button buttonAddLocomotive; + private Button buttonModifLocomotive; + private Button buttonRemoveLocomotive; + private MaskedTextBox maskedTextBox; + private PictureBox pictureBox; + private Button buttonRefresh; + private Button buttonGoToCheck; + } +} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs new file mode 100644 index 0000000..578409b --- /dev/null +++ b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs @@ -0,0 +1,183 @@ +using Cruiser.CollectionGenericObjects; +using LocomativeProject.CollectionGenericObjects; +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using LocomotiveProject.Drawnings; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LocomativeProject +{ + public partial class FormLocomotiveCollection : Form + { + /// + /// Компания + /// + private AbstractCompany? _company = null; + /// + /// Консруктор + /// + public FormLocomotiveCollection() + { + InitializeComponent(); + } + /// + /// Выбор компании + /// + /// + /// + private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new LocomotiveDock(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + break; + } + } + /// + /// Создание объекта класса-перемещения + /// + /// тип создаваемого объекта + private void CreateObject(string type) + { + if (_company == null) + { + return; + } + Random rnd = new(); + DrawningBaseLocomotive drawningBaseLocomotive; + switch (type) + { + case nameof(DrawningBaseLocomotive): + drawningBaseLocomotive = new DrawningBaseLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd)); + break; + case nameof(DrawningLocomotive): + drawningBaseLocomotive = new DrawningLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd), GetColor(rnd), + Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); + break; + default: + return; + } + if (_company + drawningBaseLocomotive != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + /// + /// Получение рандом цвета + /// + /// + /// + private static Color GetColor(Random rnd) + { + Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(255, 256)); + ColorDialog dialog = new ColorDialog(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + return color; + } + /// + /// Кнопка создания обычного крейсера + /// + /// + /// + private void ButtonAddLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive)); + /// + /// Кнопка создания модиф крейсера + /// + /// + /// + private void ButtonModifLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive)); + /// + /// Кнопка удаления Крейсера + /// + /// + /// + private void ButtonRemoveLocomotive_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + if (string.IsNullOrEmpty(maskedTextBox.Text)) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + int pos = Convert.ToInt32(maskedTextBox.Text); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + /// + /// Кнопка отправить на полигон для испытаний + /// + /// + /// + private void ButtonGoToCheck_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + DrawningBaseLocomotive baseLocomotive = null; + int counter = 100; + while (baseLocomotive == null) + { + baseLocomotive = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } + } + + if (baseLocomotive == null) + { + return; + } + + LocomotiveProjectForm form = new() { SetLocomotive = baseLocomotive }; + form.ShowDialog(); + + } + /// + /// Кнопка обновления компании + /// + /// + /// + private void ButtonRefresh_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + pictureBox.Image = _company.Show(); + } + } +} diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.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/LocomativeProject/LocomativeProject/LocomativeProject.csproj b/LocomativeProject/LocomativeProject/LocomativeProject.csproj index 13ee123..8bf3ed6 100644 --- a/LocomativeProject/LocomativeProject/LocomativeProject.csproj +++ b/LocomativeProject/LocomativeProject/LocomativeProject.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net7.0-windows7.0 enable true enable diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs similarity index 99% rename from LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs rename to LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs index 74ab7d7..8da36c9 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs @@ -1,6 +1,6 @@ namespace LocomativeProject { - partial class LocomotiveProject + partial class LocomotiveProjectForm { /// /// Required designer variable. @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProjectForm)); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); this.buttonCreateBaseLocomotive = new System.Windows.Forms.Button(); diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs similarity index 92% rename from LocomativeProject/LocomativeProject/LocomotiveProject.cs rename to LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs index 168ef74..d180baa 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs @@ -15,13 +15,25 @@ using LocomativeProject.MovementStrategy; namespace LocomativeProject { - public partial class LocomotiveProject : Form + public partial class LocomotiveProjectForm : Form { private DrawningBaseLocomotive? _drawningLocomotive; private AbstractStrategy? _strategy; - public LocomotiveProject() + public DrawningBaseLocomotive SetLocomotive + { + set + { + _drawningLocomotive = value; + _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + comboBox1.Enabled = true; + _strategy = null; + Draw(); + } + } + + public LocomotiveProjectForm() { InitializeComponent(); _strategy = null; diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx similarity index 100% rename from LocomativeProject/LocomativeProject/LocomotiveProject.resx rename to LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx diff --git a/LocomativeProject/LocomativeProject/Program.cs b/LocomativeProject/LocomativeProject/Program.cs index a383f1c..6b6a9b3 100644 --- a/LocomativeProject/LocomativeProject/Program.cs +++ b/LocomativeProject/LocomativeProject/Program.cs @@ -11,7 +11,7 @@ namespace LocomativeProject // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new LocomotiveProject()); + Application.Run(new FormLocomotiveCollection()); } } } \ No newline at end of file -- 2.25.1 From 0b8b77927796087aa337700f9b65cc1804f26e31 Mon Sep 17 00:00:00 2001 From: Vladislav_396ntk Date: Mon, 8 Apr 2024 15:49:24 +0400 Subject: [PATCH 7/8] =?UTF-8?q?Revert=20"=D0=9D=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=20=D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B9=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1=D1=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 4311f2f59b5563ead86f26171fd27794d2816ae1. --- .../AbstractCompany.cs | 108 ----------- .../ICollectionGenericObjects.cs | 39 ---- .../LocomotiveDock.cs | 57 ------ .../LocomotiveSharingService.cs | 57 ------ .../MassiveGenericObjects.cs | 84 -------- .../FormLocomotiveCollection.Designer.cs | 169 ---------------- .../FormLocomotiveCollection.cs | 183 ------------------ .../FormLocomotiveCollection.resx | 120 ------------ .../LocomativeProject.csproj | 2 +- ...igner.cs => LocomotiveProject.Designer.cs} | 4 +- ...iveProjectForm.cs => LocomotiveProject.cs} | 16 +- ...rojectForm.resx => LocomotiveProject.resx} | 0 .../LocomativeProject/Program.cs | 2 +- 13 files changed, 6 insertions(+), 835 deletions(-) delete mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs delete mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs delete mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs delete mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs delete mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs delete mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs delete mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs delete mode 100644 LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx rename LocomativeProject/LocomativeProject/{LocomotiveProjectForm.Designer.cs => LocomotiveProject.Designer.cs} (99%) rename LocomativeProject/LocomativeProject/{LocomotiveProjectForm.cs => LocomotiveProject.cs} (92%) rename LocomativeProject/LocomativeProject/{LocomotiveProjectForm.resx => LocomotiveProject.resx} (100%) diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs deleted file mode 100644 index 1eb7c91..0000000 --- a/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs +++ /dev/null @@ -1,108 +0,0 @@ -using LocomativeProject.CollectionGenericObjects; -using LocomativeProject.Drawnings; - -namespace LocomotiveProject.CollectionGenericObjects; -/// -/// Абстракция компании,хранящий коллекцию круизеров -/// -public abstract class AbstractCompany -{ - /// - /// Размер места(ширина) - /// - protected readonly int _placeSizeWidth = 210; - /// - /// Размер места(высота) - /// - protected readonly int _placeSizeHeight = 120; - /// - /// Ширина окна - /// - protected readonly int _pictureWidth; - /// - /// Высота окна - /// - protected readonly int _pictureHeight; - /// - /// Коллекцияя круизеров - /// - protected ICollectionGenericObjects _collection = null; - /// - /// Вычисление макс кол-ва элементов,который можно разместить в окне - /// - private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight); - /// - /// конструктор - /// - /// Ширина окна - /// Высота окна - /// коллекция - public AbstractCompany(int picWidth, int pictureHeight,ICollectionGenericObjects collection) - { - _pictureWidth = picWidth; - _pictureHeight = pictureHeight; - _collection = collection; - _collection.SetMaxCount = GetMaxCount; - } - /// - /// перегрузка оператора + для класса - /// - /// Компания - /// добавляемый объект - /// - public static int operator +(AbstractCompany company, DrawningBaseLocomotive cruiser) - { - if (company._collection == null) - return -1; - return company._collection.Insert(cruiser); - } - /// - /// перегрузка оператора - для класса - /// - /// Компания - /// позиция удаления - /// - public static DrawningBaseLocomotive operator -(AbstractCompany company, int position) - { - if (company._collection == null) - return null; - - return company._collection.Remove(position); - } - /// - /// получение случайног обьекта из коллекции - /// - /// - public DrawningBaseLocomotive? GetRandomObject() - { - Random rnd = new Random(); - return _collection?.Get(rnd.Next(GetMaxCount)); - } - /// - /// вывод всей коллекции - /// - /// - public Bitmap? Show() - { - Bitmap? bitmap = new(_pictureWidth,_pictureHeight); - Graphics graphics = Graphics.FromImage(bitmap); - DrawBackground(graphics); - - SetObjectPosition(); - for (int i = 0; i < (_collection?.Count ?? 0); ++i) - { - DrawningBaseLocomotive? obj = _collection?.Get(i); - obj?.DrawTransport(graphics); - } - return bitmap; - } - /// - /// Вывод заднего фона - /// - /// - protected abstract void DrawBackground(Graphics graphics); - /// - /// Расстановка объектов - /// - protected abstract void SetObjectPosition(); -} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs deleted file mode 100644 index eadbcb6..0000000 --- a/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace LocomativeProject.CollectionGenericObjects; - -public interface ICollectionGenericObjects - where T : class -{ - /// - /// Кол-во объектов в коллекции - /// - int Count { get; } - /// - /// Установка макс. кол-ва элементов - /// - int SetMaxCount { set; } - /// - /// Добавление объекта в коллекцию - /// - /// Добавляемый объект - /// true-вставка прошла удачно,false- вставка не удалась - int Insert(T obj); - /// - /// Добавление объекта в коллекцию на конкретную позицию - /// - /// Добавляемый объект - /// позиция - /// true-вставка прошла удачно,false- вставка не удалась - int Insert(T obj,int position); - /// - /// Удаление обьекта из коллекции с конкретной позиции - /// - /// позиция - /// true-удаление прошло удачно,false- удаление не удалось - T? Remove(int positon); - /// - /// получение объекта по позиции - /// - /// позиция - /// Обьект - T? Get(int positon); -} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs deleted file mode 100644 index d08259d..0000000 --- a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveDock.cs +++ /dev/null @@ -1,57 +0,0 @@ -using LocomativeProject.CollectionGenericObjects; -using LocomativeProject.Drawnings; -using LocomotiveProject.CollectionGenericObjects; -using System; -namespace Cruiser.CollectionGenericObjects; - -public class LocomotiveDock : AbstractCompany -{ - public LocomotiveDock(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) - { - } - - protected override void DrawBackground(Graphics g) - { - Pen pen = new Pen(Color.Black,2); - int width = _pictureWidth / _placeSizeWidth; - int height = _pictureHeight / _placeSizeHeight; - for (int i = 0; i < width; i++) - { - for (int j = 0; j < height; j++) - { - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); - } - } - } - - protected override void SetObjectPosition() - { - int width = _pictureWidth / _placeSizeWidth; - int height = _pictureHeight / _placeSizeHeight; - - int curWidth = 0; - int curHeight = 0; - - for (int i = 0; i < (_collection?.Count ?? 0); i++) - { - if (_collection?.Get(i) != null) - { - _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); - _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); - } - if (curHeight < height - 1) - curHeight++; - else - { - curHeight = 0; - curWidth++; - } - if (curWidth > width - 1) - { - return; - } - } - } -} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs deleted file mode 100644 index 24d514a..0000000 --- a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs +++ /dev/null @@ -1,57 +0,0 @@ -using LocomativeProject.CollectionGenericObjects; -using LocomativeProject.Drawnings; -using LocomotiveProject.CollectionGenericObjects; - -namespace Cruiser.CollectionGenericObjects; - -public class LocomotiveSharingService : AbstractCompany -{ - public LocomotiveSharingService(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) - { - } - - protected override void DrawBackground(Graphics g) - { - Pen pen = new Pen(Color.Black,2); - int width = _pictureWidth / _placeSizeWidth; - int height = _pictureHeight / _placeSizeHeight; - for (int i = 0; i < width; i++) - { - for (int j = 0; j < height; j++) - { - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); - g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); - } - } - } - - protected override void SetObjectPosition() - { - int width = _pictureWidth / _placeSizeWidth; - int height = _pictureHeight / _placeSizeHeight; - - int curWidth = 0; - int curHeight = 0; - - for (int i = 0; i < (_collection?.Count ?? 0); i++) - { - if (_collection?.Get(i) != null) - { - _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); - _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); - } - if (curHeight < height - 1) - curHeight++; - else - { - curHeight = 0; - curWidth++; - } - if (curWidth > width - 1) - { - return; - } - } - } -} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs deleted file mode 100644 index d10a026..0000000 --- a/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs +++ /dev/null @@ -1,84 +0,0 @@ -namespace LocomativeProject.CollectionGenericObjects; - -public class MassiveGenericObjects : ICollectionGenericObjects - where T : class -{ - /// - /// - /// - private T[] _collection; - - public int Count => _collection.Length; - - public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } - /// - /// конструктор - /// - public MassiveGenericObjects() - { - _collection = Array.Empty(); - } - - public T? Get(int positon) - { - if (positon <= Count || positon > 0) - { - return _collection[positon]; - } - return null; - } - - public int Insert(T obj) - { - for (int i = 0; i < Count; i++) - { - if (_collection[i] == null ) - { - _collection[i] = obj; - return i; - } - } - return -1; - } - - public int Insert(T obj, int position) - { - if (_collection[position]== null) - { - _collection[position] = obj; - return position; - } - else - { - for (int i = position; i < Count; i++) - { - if (_collection[i] == null) - { - _collection[i] = obj; - return i; - } - } - for (int i = Count -1; i > 0; i--) - { - if (_collection[i] == null) - { - _collection[i] = obj; - return i; - } - } - } - return -1; - } - - public T? Remove(int position) - { - if (position >= Count || position < 0) return null; - if (_collection[position] != null) - { - T obj = _collection[position]; - _collection[position] = null; - return obj; - } - return null; - } -} diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs deleted file mode 100644 index b76f085..0000000 --- a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs +++ /dev/null @@ -1,169 +0,0 @@ -namespace LocomativeProject -{ - partial class FormLocomotiveCollection - { - /// - /// 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() - { - groupBox1 = new GroupBox(); - buttonRefresh = new Button(); - buttonGoToCheck = new Button(); - buttonRemoveLocomotive = new Button(); - maskedTextBox = new MaskedTextBox(); - buttonModifLocomotive = new Button(); - buttonAddLocomotive = new Button(); - comboBoxSelectorCompany = new ComboBox(); - pictureBox = new PictureBox(); - groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); - SuspendLayout(); - // - // groupBox1 - // - groupBox1.Controls.Add(buttonRefresh); - groupBox1.Controls.Add(buttonGoToCheck); - groupBox1.Controls.Add(buttonRemoveLocomotive); - groupBox1.Controls.Add(maskedTextBox); - groupBox1.Controls.Add(buttonModifLocomotive); - groupBox1.Controls.Add(buttonAddLocomotive); - groupBox1.Controls.Add(comboBoxSelectorCompany); - groupBox1.Dock = DockStyle.Right; - groupBox1.Location = new Point(912, 0); - groupBox1.Name = "groupBox1"; - groupBox1.Size = new Size(180, 581); - groupBox1.TabIndex = 0; - groupBox1.TabStop = false; - groupBox1.Text = "Инструменты"; - // - // buttonRefresh - // - buttonRefresh.Location = new Point(32, 530); - buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(124, 39); - buttonRefresh.TabIndex = 6; - buttonRefresh.Text = "Обновить"; - buttonRefresh.UseVisualStyleBackColor = true; - buttonRefresh.Click += ButtonRefresh_Click; - // - // buttonGoToCheck - // - buttonGoToCheck.Location = new Point(32, 349); - buttonGoToCheck.Name = "buttonGoToCheck"; - buttonGoToCheck.Size = new Size(124, 39); - buttonGoToCheck.TabIndex = 5; - buttonGoToCheck.Text = "Передать на тесты"; - buttonGoToCheck.UseVisualStyleBackColor = true; - buttonGoToCheck.Click += ButtonGoToCheck_Click; - // - // buttonRemoveLocomotive - // - buttonRemoveLocomotive.Location = new Point(18, 207); - buttonRemoveLocomotive.Name = "buttonRemoveLocomotive"; - buttonRemoveLocomotive.Size = new Size(150, 23); - buttonRemoveLocomotive.TabIndex = 4; - buttonRemoveLocomotive.Text = "Удалить поезд"; - buttonRemoveLocomotive.UseVisualStyleBackColor = true; - buttonRemoveLocomotive.Click += ButtonRemoveLocomotive_Click; - // - // maskedTextBox - // - maskedTextBox.Location = new Point(18, 178); - maskedTextBox.Mask = "00"; - maskedTextBox.Name = "maskedTextBox"; - maskedTextBox.Size = new Size(150, 23); - maskedTextBox.TabIndex = 3; - maskedTextBox.ValidatingType = typeof(int); - // - // buttonModifLocomotive - // - buttonModifLocomotive.Location = new Point(18, 102); - buttonModifLocomotive.Name = "buttonModifLocomotive"; - buttonModifLocomotive.Size = new Size(150, 43); - buttonModifLocomotive.TabIndex = 2; - buttonModifLocomotive.Text = "Добавление модиф поезда"; - buttonModifLocomotive.UseVisualStyleBackColor = true; - buttonModifLocomotive.Click += ButtonModifLocomotive_Click; - // - // buttonAddLocomotive - // - buttonAddLocomotive.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddLocomotive.Location = new Point(18, 62); - buttonAddLocomotive.Name = "buttonAddLocomotive"; - buttonAddLocomotive.Size = new Size(150, 23); - buttonAddLocomotive.TabIndex = 1; - buttonAddLocomotive.Text = "Добавление поезда"; - buttonAddLocomotive.UseVisualStyleBackColor = true; - buttonAddLocomotive.Click += ButtonAddLocomotive_Click; - // - // comboBoxSelectorCompany - // - comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; - comboBoxSelectorCompany.FormattingEnabled = true; - comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); - comboBoxSelectorCompany.Location = new Point(18, 22); - comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; - comboBoxSelectorCompany.Size = new Size(150, 23); - comboBoxSelectorCompany.TabIndex = 0; - comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged; - // - // pictureBox - // - pictureBox.Dock = DockStyle.Fill; - pictureBox.Location = new Point(0, 0); - pictureBox.Name = "pictureBox"; - pictureBox.Size = new Size(912, 581); - pictureBox.TabIndex = 1; - pictureBox.TabStop = false; - // - // FormLocomotiveCollection - // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1092, 581); - Controls.Add(pictureBox); - Controls.Add(groupBox1); - Name = "FormLocomotiveCollection"; - Text = "Коллекция Крейсеров"; - groupBox1.ResumeLayout(false); - groupBox1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); - ResumeLayout(false); - } - - #endregion - - private GroupBox groupBox1; - private ComboBox comboBoxSelectorCompany; - private Button buttonAddLocomotive; - private Button buttonModifLocomotive; - private Button buttonRemoveLocomotive; - private MaskedTextBox maskedTextBox; - private PictureBox pictureBox; - private Button buttonRefresh; - private Button buttonGoToCheck; - } -} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs deleted file mode 100644 index 578409b..0000000 --- a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs +++ /dev/null @@ -1,183 +0,0 @@ -using Cruiser.CollectionGenericObjects; -using LocomativeProject.CollectionGenericObjects; -using LocomativeProject.Drawnings; -using LocomotiveProject.CollectionGenericObjects; -using LocomotiveProject.Drawnings; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace LocomativeProject -{ - public partial class FormLocomotiveCollection : Form - { - /// - /// Компания - /// - private AbstractCompany? _company = null; - /// - /// Консруктор - /// - public FormLocomotiveCollection() - { - InitializeComponent(); - } - /// - /// Выбор компании - /// - /// - /// - private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) - { - switch (comboBoxSelectorCompany.Text) - { - case "Хранилище": - _company = new LocomotiveDock(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); - break; - } - } - /// - /// Создание объекта класса-перемещения - /// - /// тип создаваемого объекта - private void CreateObject(string type) - { - if (_company == null) - { - return; - } - Random rnd = new(); - DrawningBaseLocomotive drawningBaseLocomotive; - switch (type) - { - case nameof(DrawningBaseLocomotive): - drawningBaseLocomotive = new DrawningBaseLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd)); - break; - case nameof(DrawningLocomotive): - drawningBaseLocomotive = new DrawningLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd), GetColor(rnd), - Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); - break; - default: - return; - } - if (_company + drawningBaseLocomotive != -1) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - - } - else - { - MessageBox.Show("Не удалось добавить объект"); - } - } - /// - /// Получение рандом цвета - /// - /// - /// - private static Color GetColor(Random rnd) - { - Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(255, 256)); - ColorDialog dialog = new ColorDialog(); - if (dialog.ShowDialog() == DialogResult.OK) - { - color = dialog.Color; - } - return color; - } - /// - /// Кнопка создания обычного крейсера - /// - /// - /// - private void ButtonAddLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive)); - /// - /// Кнопка создания модиф крейсера - /// - /// - /// - private void ButtonModifLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive)); - /// - /// Кнопка удаления Крейсера - /// - /// - /// - private void ButtonRemoveLocomotive_Click(object sender, EventArgs e) - { - if (_company == null) - { - return; - } - if (string.IsNullOrEmpty(maskedTextBox.Text)) - { - return; - } - if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) - { - return; - } - int pos = Convert.ToInt32(maskedTextBox.Text); - if (_company - pos != null) - { - MessageBox.Show("Объект удален"); - pictureBox.Image = _company.Show(); - } - else - { - MessageBox.Show("Не удалось удалить объект"); - } - } - /// - /// Кнопка отправить на полигон для испытаний - /// - /// - /// - private void ButtonGoToCheck_Click(object sender, EventArgs e) - { - if (_company == null) - { - return; - } - DrawningBaseLocomotive baseLocomotive = null; - int counter = 100; - while (baseLocomotive == null) - { - baseLocomotive = _company.GetRandomObject(); - counter--; - if (counter <= 0) - { - break; - } - } - - if (baseLocomotive == null) - { - return; - } - - LocomotiveProjectForm form = new() { SetLocomotive = baseLocomotive }; - form.ShowDialog(); - - } - /// - /// Кнопка обновления компании - /// - /// - /// - private void ButtonRefresh_Click(object sender, EventArgs e) - { - if (_company == null) - { - return; - } - pictureBox.Image = _company.Show(); - } - } -} diff --git a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx b/LocomativeProject/LocomativeProject/FormLocomotiveCollection.resx deleted file mode 100644 index af32865..0000000 --- a/LocomativeProject/LocomativeProject/FormLocomotiveCollection.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/LocomativeProject/LocomativeProject/LocomativeProject.csproj b/LocomativeProject/LocomativeProject/LocomativeProject.csproj index 8bf3ed6..13ee123 100644 --- a/LocomativeProject/LocomativeProject/LocomativeProject.csproj +++ b/LocomativeProject/LocomativeProject/LocomativeProject.csproj @@ -2,7 +2,7 @@ WinExe - net7.0-windows7.0 + net6.0-windows enable true enable diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs similarity index 99% rename from LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs rename to LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 8da36c9..74ab7d7 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -1,6 +1,6 @@ namespace LocomativeProject { - partial class LocomotiveProjectForm + partial class LocomotiveProject { /// /// Required designer variable. @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProjectForm)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); this.buttonCreateBaseLocomotive = new System.Windows.Forms.Button(); diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs similarity index 92% rename from LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs rename to LocomativeProject/LocomativeProject/LocomotiveProject.cs index d180baa..168ef74 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -15,25 +15,13 @@ using LocomativeProject.MovementStrategy; namespace LocomativeProject { - public partial class LocomotiveProjectForm : Form + public partial class LocomotiveProject : Form { private DrawningBaseLocomotive? _drawningLocomotive; private AbstractStrategy? _strategy; - public DrawningBaseLocomotive SetLocomotive - { - set - { - _drawningLocomotive = value; - _drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); - comboBox1.Enabled = true; - _strategy = null; - Draw(); - } - } - - public LocomotiveProjectForm() + public LocomotiveProject() { InitializeComponent(); _strategy = null; diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx similarity index 100% rename from LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx rename to LocomativeProject/LocomativeProject/LocomotiveProject.resx diff --git a/LocomativeProject/LocomativeProject/Program.cs b/LocomativeProject/LocomativeProject/Program.cs index 6b6a9b3..a383f1c 100644 --- a/LocomativeProject/LocomativeProject/Program.cs +++ b/LocomativeProject/LocomativeProject/Program.cs @@ -11,7 +11,7 @@ namespace LocomativeProject // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormLocomotiveCollection()); + Application.Run(new LocomotiveProject()); } } } \ No newline at end of file -- 2.25.1 From 7f2792be67d078eee5626bd4d850952f3da707b8 Mon Sep 17 00:00:00 2001 From: Vladislav_396ntk Date: Sun, 5 May 2024 20:19:56 +0400 Subject: [PATCH 8/8] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B9=20=D0=BB=D0=B0=D0=B1?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LocomativeProject/LocomativeProject.sln | 2 +- .../AbstractCompany.cs | 113 ++++++++++ .../ICollectionGenericObjects.cs | 45 ++++ .../LocomotiveSharingService.cs | 61 +++++ .../LocomotiveStation.cs | 61 +++++ .../MassiveGenericObjects.cs | 90 ++++++++ .../parameterizedClass.cs | 15 ++ .../Drawnings/DrawningBaseLocomotive.cs | 4 +- .../Drawnings/DrawningLocomotive.cs | 6 +- .../LocomotiveProject.Designer.cs | 210 ++++++++---------- .../LocomativeProject/LocomotiveProject.cs | 16 +- ...roject.csproj => LocomotiveProject.csproj} | 2 +- .../LocomativeProject/LocomotiveProject.resx | 62 +++++- .../LocomotiveProjectCollection.Designer.cs | 169 ++++++++++++++ .../LocomotiveProjectCollection.cs | 179 +++++++++++++++ .../LocomotiveProjectCollection.resx | 120 ++++++++++ .../LocomativeProject/Program.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- desktop.ini | 2 + 19 files changed, 1030 insertions(+), 135 deletions(-) create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveStation.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs create mode 100644 LocomativeProject/LocomativeProject/CollectionGenericObjects/parameterizedClass.cs rename LocomativeProject/LocomativeProject/{LocomativeProject.csproj => LocomotiveProject.csproj} (90%) create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProjectCollection.Designer.cs create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProjectCollection.cs create mode 100644 LocomativeProject/LocomativeProject/LocomotiveProjectCollection.resx create mode 100644 desktop.ini diff --git a/LocomativeProject/LocomativeProject.sln b/LocomativeProject/LocomativeProject.sln index 83b9c41..2ab61ba 100644 --- a/LocomativeProject/LocomativeProject.sln +++ b/LocomativeProject/LocomativeProject.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.32014.148 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocomativeProject", "LocomativeProject\LocomativeProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocomotiveProject", "LocomativeProject\LocomotiveProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs new file mode 100644 index 0000000..00fdde0 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/AbstractCompany.cs @@ -0,0 +1,113 @@ +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects; +/// +/// Абстракция компании,хранящий коллекцию круизеров +/// +public abstract class AbstractCompany +{ + /// + /// Размер места(ширина) + /// + protected readonly int _placeSizeWidth = 210; + /// + /// Размер места(высота) + /// + protected readonly int _placeSizeHeight = 120; + /// + /// Ширина окна + /// + protected readonly int _pictureWidth; + /// + /// Высота окна + /// + protected readonly int _pictureHeight; + /// + /// Коллекцияя круизеров + /// + protected ICollectionGenericObjects _collection = null; + /// + /// Вычисление макс кол-ва элементов,который можно разместить в окне + /// + private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight); + /// + /// конструктор + /// + /// Ширина окна + /// Высота окна + /// коллекция + public AbstractCompany(int picWidth, int pictureHeight,ICollectionGenericObjects collection) + { + _pictureWidth = picWidth; + _pictureHeight = pictureHeight; + _collection = collection; + _collection.SetMaxCount = GetMaxCount; + } + /// + /// перегрузка оператора + для класса + /// + /// Компания + /// добавляемый объект + /// + public static int operator +(AbstractCompany company, DrawningBaseLocomotive Locomotive) + { + if (company._collection == null) + return -1; + return company._collection.Insert(Locomotive); + } + /// + /// перегрузка оператора - для класса + /// + /// Компания + /// позиция удаления + /// + public static DrawningBaseLocomotive operator -(AbstractCompany company, int position) + { + if (company._collection == null) + return null; + + return company._collection.Remove(position); + } + /// + /// получение случайног обьекта из коллекции + /// + /// + public DrawningBaseLocomotive? GetRandomObject() + { + Random rnd = new Random(); + return _collection?.Get(rnd.Next(GetMaxCount)); + } + /// + /// вывод всей коллекции + /// + /// + public Bitmap? Show() + { + Bitmap? bitmap = new(_pictureWidth,_pictureHeight); + Graphics graphics = Graphics.FromImage(bitmap); + DrawBackground(graphics); + + SetObjectPosition(); + for (int i = 0; i < (_collection?.Count ?? 0); ++i) + { + DrawningBaseLocomotive? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + return bitmap; + } + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackground(Graphics graphics); + /// + /// Расстановка объектов + /// + protected abstract void SetObjectPosition(); +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs new file mode 100644 index 0000000..c32bf8c --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects; + +public interface ICollectionGenericObjects + where T : class +{ + /// + /// Кол-во объектов в коллекции + /// + int Count { get; } + /// + /// Установка макс. кол-ва элементов + /// + int SetMaxCount { set; } + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true-вставка прошла удачно,false- вставка не удалась + int Insert(T obj); + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// позиция + /// true-вставка прошла удачно,false- вставка не удалась + int Insert(T obj,int position); + /// + /// Удаление обьекта из коллекции с конкретной позиции + /// + /// позиция + /// true-удаление прошло удачно,false- удаление не удалось + T? Remove(int positon); + /// + /// получение объекта по позиции + /// + /// позиция + /// Обьект + T? Get(int positon); +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs new file mode 100644 index 0000000..a56d570 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveSharingService.cs @@ -0,0 +1,61 @@ +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects; + +public class LocomotiveSharingService : AbstractCompany +{ + public LocomotiveSharingService(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new Pen(Color.Black,2); + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); + } + } + } + + protected override void SetObjectPosition() + { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + + int curWidth = 0; + int curHeight = 0; + + for (int i = 0; i < (_collection?.Count ?? 0); i++) + { + if (_collection?.Get(i) != null) + { + _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); + } + if (curHeight < height - 1) + curHeight++; + else + { + curHeight = 0; + curWidth++; + } + if (curWidth > width - 1) + { + return; + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveStation.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveStation.cs new file mode 100644 index 0000000..51d344b --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/LocomotiveStation.cs @@ -0,0 +1,61 @@ +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects; + +public class LocomotiveDock : AbstractCompany +{ + public LocomotiveDock(int picWidth, int pictureHeight, ICollectionGenericObjects collection) : base(picWidth, pictureHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new Pen(Color.Black,2); + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120); + g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120); + } + } + } + + protected override void SetObjectPosition() + { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + + int curWidth = 0; + int curHeight = 0; + + for (int i = 0; i < (_collection?.Count ?? 0); i++) + { + if (_collection?.Get(i) != null) + { + _collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35); + } + if (curHeight < height - 1) + curHeight++; + else + { + curHeight = 0; + curWidth++; + } + if (curWidth > width - 1) + { + return; + } + } + } +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs new file mode 100644 index 0000000..45f2d18 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/MassiveGenericObjects.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects; + +public class MassiveGenericObjects : ICollectionGenericObjects + where T : class +{ + /// + /// + /// + private T[] _collection; + + public int Count => _collection.Length; + + public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } + /// + /// конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + + public T? Get(int positon) + { + if (positon <= Count || positon > 0) + { + return _collection[positon]; + } + return null; + } + + public int Insert(T obj) + { + for (int i = 0; i < Count; i++) + { + if (_collection[i] == null ) + { + _collection[i] = obj; + return i; + } + } + return -1; + } + + public int Insert(T obj, int position) + { + if (_collection[position]== null) + { + _collection[position] = obj; + return position; + } + else + { + for (int i = position; i < Count; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + for (int i = Count -1; i > 0; i--) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + } + return -1; + } + + public T? Remove(int position) + { + if (position >= Count || position < 0) return null; + if (_collection[position] != null) + { + T obj = _collection[position]; + _collection[position] = null; + return obj; + } + return null; + } +} diff --git a/LocomativeProject/LocomativeProject/CollectionGenericObjects/parameterizedClass.cs b/LocomativeProject/LocomativeProject/CollectionGenericObjects/parameterizedClass.cs new file mode 100644 index 0000000..0c30b28 --- /dev/null +++ b/LocomativeProject/LocomativeProject/CollectionGenericObjects/parameterizedClass.cs @@ -0,0 +1,15 @@ +using LocomotiveProject.Drawnings; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LocomotiveProject.CollectionGenericObjects +{ + /// + /// Параметризованный класс + /// + /// + public class parameterizedClass where T : DrawningLocomotive { } +} diff --git a/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs index 3e6adac..aa6b85a 100644 --- a/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs +++ b/LocomativeProject/LocomativeProject/Drawnings/DrawningBaseLocomotive.cs @@ -32,12 +32,12 @@ namespace LocomativeProject.Drawnings /// /// Ширина прорисовки тепловоза /// - private readonly int _drawningBaseLocomotiveWidth = 120; + private readonly int _drawningBaseLocomotiveWidth = 150; /// /// Высота прорисовки тепловоза /// - private readonly int _drawningBaseLocomotiveHeight = 60; + private readonly int _drawningBaseLocomotiveHeight = 80; /// diff --git a/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs b/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs index fda6f3b..799084a 100644 --- a/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs +++ b/LocomativeProject/LocomativeProject/Drawnings/DrawningLocomotive.cs @@ -31,19 +31,19 @@ namespace LocomotiveProject.Drawnings Brush bodyBrush = new SolidBrush(entityLocomotive.BodyColor); //Brush blackBrush = new SolidBrush(Color.Black); //Brush whiteBrush = new SolidBrush(Color.White); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); + //g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20); g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20); base.DrawTransport(g); if (entityLocomotive.ExehaustPipe) { Brush greyBrush = new SolidBrush(Color.Gray); - g.FillRectangle(greyBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); + g.FillRectangle(additionalBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10); g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10); } // отсек для топлива if (entityLocomotive.FuelCompartment) { - g.FillRectangle(bodyBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); + g.FillRectangle(additionalBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20); } } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs index 74ab7d7..06802b1 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.Designer.cs @@ -1,4 +1,4 @@ -namespace LocomativeProject +namespace LocomotiveProject { partial class LocomotiveProject { @@ -29,163 +29,131 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProject)); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); - this.buttonCreateBaseLocomotive = new System.Windows.Forms.Button(); - this.buttonUp = new System.Windows.Forms.Button(); - this.buttonDown = new System.Windows.Forms.Button(); - this.buttonLeft = new System.Windows.Forms.Button(); - this.buttonRight = new System.Windows.Forms.Button(); - this.buttonCreateLocomotive = new System.Windows.Forms.Button(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.buttonStrategyStep = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); - this.SuspendLayout(); + pictureBox1 = new PictureBox(); + pictureBoxLocomotive = new PictureBox(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + comboBox1 = new ComboBox(); + buttonStrategyStep = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit(); + SuspendLayout(); // // pictureBox1 // - this.pictureBox1.Location = new System.Drawing.Point(0, 0); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(100, 50); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; + pictureBox1.Location = new Point(0, 0); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(100, 50); + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; // // 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, 450); - this.pictureBoxLocomotive.TabIndex = 1; - this.pictureBoxLocomotive.TabStop = false; - // - // buttonCreateBaseLocomotive - // - this.buttonCreateBaseLocomotive.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonCreateBaseLocomotive.Location = new System.Drawing.Point(12, 415); - this.buttonCreateBaseLocomotive.Name = "buttonCreateBaseLocomotive"; - this.buttonCreateBaseLocomotive.Size = new System.Drawing.Size(171, 23); - this.buttonCreateBaseLocomotive.TabIndex = 2; - this.buttonCreateBaseLocomotive.Text = "создать обычный поезд"; - this.buttonCreateBaseLocomotive.UseVisualStyleBackColor = true; - this.buttonCreateBaseLocomotive.Click += new System.EventHandler(this.ButtonCreateBaseLocomotive_Click); + pictureBoxLocomotive.Dock = DockStyle.Fill; + pictureBoxLocomotive.Location = new Point(0, 0); + pictureBoxLocomotive.Name = "pictureBoxLocomotive"; + pictureBoxLocomotive.Size = new Size(880, 561); + pictureBoxLocomotive.TabIndex = 1; + pictureBoxLocomotive.TabStop = false; // // buttonUp // - this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage"))); - this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonUp.Location = new System.Drawing.Point(691, 362); - this.buttonUp.Name = "buttonUp"; - this.buttonUp.Size = new System.Drawing.Size(35, 35); - this.buttonUp.TabIndex = 3; - this.buttonUp.UseVisualStyleBackColor = true; - this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(771, 473); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; // // buttonDown // - this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonDown.BackgroundImage"))); - this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonDown.Location = new System.Drawing.Point(691, 403); - this.buttonDown.Name = "buttonDown"; - this.buttonDown.Size = new System.Drawing.Size(35, 35); - this.buttonDown.TabIndex = 4; - this.buttonDown.UseVisualStyleBackColor = true; - this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(771, 514); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 4; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; // // buttonLeft // - this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonLeft.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonLeft.BackgroundImage"))); - this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonLeft.Location = new System.Drawing.Point(650, 403); - this.buttonLeft.Name = "buttonLeft"; - this.buttonLeft.Size = new System.Drawing.Size(35, 35); - this.buttonLeft.TabIndex = 5; - this.buttonLeft.UseVisualStyleBackColor = true; - this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(730, 514); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 5; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; // // buttonRight // - this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonRight.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRight.BackgroundImage"))); - this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.buttonRight.Location = new System.Drawing.Point(732, 403); - this.buttonRight.Name = "buttonRight"; - this.buttonRight.Size = new System.Drawing.Size(35, 35); - this.buttonRight.TabIndex = 6; - this.buttonRight.UseVisualStyleBackColor = true; - this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); - // - // buttonCreateLocomotive - // - this.buttonCreateLocomotive.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonCreateLocomotive.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.buttonCreateLocomotive.Location = new System.Drawing.Point(189, 415); - this.buttonCreateLocomotive.Name = "buttonCreateLocomotive"; - this.buttonCreateLocomotive.Size = new System.Drawing.Size(173, 23); - this.buttonCreateLocomotive.TabIndex = 7; - this.buttonCreateLocomotive.Text = "создать продвинутый поезд"; - this.buttonCreateLocomotive.UseVisualStyleBackColor = true; - this.buttonCreateLocomotive.Click += new System.EventHandler(this.ButtonCreateLocomotive_Click); + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(812, 514); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 6; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; // // comboBox1 // - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "К центру", - "К краю"}); - this.comboBox1.Location = new System.Drawing.Point(667, 12); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(121, 23); - this.comboBox1.TabIndex = 8; + comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; + comboBox1.FormattingEnabled = true; + comboBox1.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBox1.Location = new Point(667, 12); + comboBox1.Name = "comboBox1"; + comboBox1.Size = new Size(121, 23); + comboBox1.TabIndex = 8; // // buttonStrategyStep // - this.buttonStrategyStep.Location = new System.Drawing.Point(713, 41); - this.buttonStrategyStep.Name = "buttonStrategyStep"; - this.buttonStrategyStep.Size = new System.Drawing.Size(75, 23); - this.buttonStrategyStep.TabIndex = 9; - this.buttonStrategyStep.Text = "Шаг"; - this.buttonStrategyStep.UseVisualStyleBackColor = true; - this.buttonStrategyStep.Click += new System.EventHandler(this.buttonStrategyStep_Click); + buttonStrategyStep.Location = new Point(713, 41); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(75, 23); + buttonStrategyStep.TabIndex = 9; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += buttonStrategyStep_Click; // // LocomotiveProject // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.buttonStrategyStep); - this.Controls.Add(this.comboBox1); - this.Controls.Add(this.buttonCreateLocomotive); - this.Controls.Add(this.buttonRight); - this.Controls.Add(this.buttonLeft); - this.Controls.Add(this.buttonDown); - this.Controls.Add(this.buttonUp); - this.Controls.Add(this.buttonCreateBaseLocomotive); - this.Controls.Add(this.pictureBoxLocomotive); - this.Controls.Add(this.pictureBox1); - this.Name = "LocomotiveProject"; - this.Text = "Тепловоз"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); - this.ResumeLayout(false); - + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(880, 561); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBox1); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(pictureBoxLocomotive); + Controls.Add(pictureBox1); + Name = "LocomotiveProject"; + Text = "Тепловоз"; + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit(); + ResumeLayout(false); } #endregion private PictureBox pictureBox1; private PictureBox pictureBoxLocomotive; - private Button buttonCreateBaseLocomotive; private Button buttonUp; private Button buttonDown; private Button buttonLeft; private Button buttonRight; - private Button buttonCreateLocomotive; private ComboBox comboBox1; private Button buttonStrategyStep; } diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.cs b/LocomativeProject/LocomativeProject/LocomotiveProject.cs index 168ef74..3f5fd4c 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.cs +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.cs @@ -9,11 +9,11 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using LocomotiveProject.Entities; -using LocomativeProject.Drawnings; using LocomotiveProject.Drawnings; +using LocomativeProject.Drawnings; using LocomativeProject.MovementStrategy; -namespace LocomativeProject +namespace LocomotiveProject { public partial class LocomotiveProject : Form { @@ -21,6 +21,18 @@ namespace LocomativeProject private AbstractStrategy? _strategy; + public DrawningBaseLocomotive SetLocomotive + { + set + { + _drawningLocomotive = value; + _drawningLocomotive.SetPictureSize(pictureBox1.Width, pictureBox1.Height); + comboBox1.Enabled = true; + _strategy = null; + Draw(); + } + } + public LocomotiveProject() { InitializeComponent(); diff --git a/LocomativeProject/LocomativeProject/LocomativeProject.csproj b/LocomativeProject/LocomativeProject/LocomotiveProject.csproj similarity index 90% rename from LocomativeProject/LocomativeProject/LocomativeProject.csproj rename to LocomativeProject/LocomativeProject/LocomotiveProject.csproj index 13ee123..8bf3ed6 100644 --- a/LocomativeProject/LocomativeProject/LocomativeProject.csproj +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net7.0-windows7.0 enable true enable diff --git a/LocomativeProject/LocomativeProject/LocomotiveProject.resx b/LocomativeProject/LocomativeProject/LocomotiveProject.resx index c4a61e0..08f78d3 100644 --- a/LocomativeProject/LocomativeProject/LocomotiveProject.resx +++ b/LocomativeProject/LocomativeProject/LocomotiveProject.resx @@ -1,4 +1,64 @@ - + + + diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.Designer.cs b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.Designer.cs new file mode 100644 index 0000000..3e96b1a --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.Designer.cs @@ -0,0 +1,169 @@ +namespace LocomotiveProject +{ + partial class LocomotiveProjectCollection + { + /// + /// 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() + { + groupBox1 = new GroupBox(); + buttonRefresh = new Button(); + buttonGoToCheck = new Button(); + buttonRemoveLocomotive = new Button(); + maskedTextBox = new MaskedTextBox(); + buttonModifLocomotive = new Button(); + buttonAddLocomotive = new Button(); + comboBoxSelectorCompany = new ComboBox(); + pictureBox = new PictureBox(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + SuspendLayout(); + // + // groupBox1 + // + groupBox1.Controls.Add(buttonRefresh); + groupBox1.Controls.Add(buttonGoToCheck); + groupBox1.Controls.Add(buttonRemoveLocomotive); + groupBox1.Controls.Add(maskedTextBox); + groupBox1.Controls.Add(buttonModifLocomotive); + groupBox1.Controls.Add(buttonAddLocomotive); + groupBox1.Controls.Add(comboBoxSelectorCompany); + groupBox1.Dock = DockStyle.Right; + groupBox1.Location = new Point(912, 0); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(180, 581); + groupBox1.TabIndex = 0; + groupBox1.TabStop = false; + groupBox1.Text = "Инструменты"; + // + // buttonRefresh + // + buttonRefresh.Location = new Point(32, 530); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(124, 39); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonGoToCheck + // + buttonGoToCheck.Location = new Point(32, 349); + buttonGoToCheck.Name = "buttonGoToCheck"; + buttonGoToCheck.Size = new Size(124, 39); + buttonGoToCheck.TabIndex = 5; + buttonGoToCheck.Text = "Передать на тесты"; + buttonGoToCheck.UseVisualStyleBackColor = true; + buttonGoToCheck.Click += ButtonGoToCheck_Click; + // + // buttonRemoveLocomotive + // + buttonRemoveLocomotive.Location = new Point(18, 207); + buttonRemoveLocomotive.Name = "buttonRemoveLocomotive"; + buttonRemoveLocomotive.Size = new Size(150, 23); + buttonRemoveLocomotive.TabIndex = 4; + buttonRemoveLocomotive.Text = "Удалить поезд"; + buttonRemoveLocomotive.UseVisualStyleBackColor = true; + buttonRemoveLocomotive.Click += ButtonRemoveLocomotive_Click; + // + // maskedTextBox + // + maskedTextBox.Location = new Point(18, 178); + maskedTextBox.Mask = "00"; + maskedTextBox.Name = "maskedTextBox"; + maskedTextBox.Size = new Size(150, 23); + maskedTextBox.TabIndex = 3; + maskedTextBox.ValidatingType = typeof(int); + // + // buttonModifLocomotive + // + buttonModifLocomotive.Location = new Point(18, 102); + buttonModifLocomotive.Name = "buttonModifLocomotive"; + buttonModifLocomotive.Size = new Size(150, 43); + buttonModifLocomotive.TabIndex = 2; + buttonModifLocomotive.Text = "Добавление модиф поезда"; + buttonModifLocomotive.UseVisualStyleBackColor = true; + buttonModifLocomotive.Click += ButtonModifLocomotive_Click; + // + // buttonAddLocomotive + // + buttonAddLocomotive.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddLocomotive.Location = new Point(18, 62); + buttonAddLocomotive.Name = "buttonAddLocomotive"; + buttonAddLocomotive.Size = new Size(150, 23); + buttonAddLocomotive.TabIndex = 1; + buttonAddLocomotive.Text = "Добавление поезда"; + buttonAddLocomotive.UseVisualStyleBackColor = true; + buttonAddLocomotive.Click += ButtonAddLocomotive_Click; + // + // comboBoxSelectorCompany + // + comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxSelectorCompany.FormattingEnabled = true; + comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); + comboBoxSelectorCompany.Location = new Point(18, 22); + comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; + comboBoxSelectorCompany.Size = new Size(150, 23); + comboBoxSelectorCompany.TabIndex = 0; + comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged; + // + // pictureBox + // + pictureBox.Dock = DockStyle.Fill; + pictureBox.Location = new Point(0, 0); + pictureBox.Name = "pictureBox"; + pictureBox.Size = new Size(912, 581); + pictureBox.TabIndex = 1; + pictureBox.TabStop = false; + // + // LocomotiveProjectCollection + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1092, 581); + Controls.Add(pictureBox); + Controls.Add(groupBox1); + Name = "LocomotiveProjectCollection"; + Text = "Коллекция Тепловозов"; + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBox1; + private ComboBox comboBoxSelectorCompany; + private Button buttonAddLocomotive; + private Button buttonModifLocomotive; + private Button buttonRemoveLocomotive; + private MaskedTextBox maskedTextBox; + private PictureBox pictureBox; + private Button buttonRefresh; + private Button buttonGoToCheck; + } +} \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.cs b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.cs new file mode 100644 index 0000000..dd59e46 --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.cs @@ -0,0 +1,179 @@ +using LocomativeProject.Drawnings; +using LocomotiveProject.CollectionGenericObjects; +using LocomotiveProject.Drawnings; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LocomotiveProject; +public partial class LocomotiveProjectCollection : Form +{ + /// + /// Компания + /// + private AbstractCompany? _company = null; + /// + /// Консруктор + /// + public LocomotiveProjectCollection() + { + InitializeComponent(); + } + /// + /// Выбор компании + /// + /// + /// + private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new LocomotiveDock(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + break; + } + } + /// + /// Создание объекта класса-перемещения + /// + /// тип создаваемого объекта + private void CreateObject(string type) + { + if (_company == null) + { + return; + } + Random rnd = new(); + DrawningBaseLocomotive drawningBaseLocomotive; + switch (type) + { + case nameof(DrawningBaseLocomotive): + drawningBaseLocomotive = new DrawningBaseLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd)); + break; + case nameof(DrawningLocomotive): + drawningBaseLocomotive = new DrawningLocomotive(rnd.Next(100, 300), rnd.Next(1000, 3000), GetColor(rnd), GetColor(rnd), + Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); + break; + default: + return; + } + if (_company + drawningBaseLocomotive != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + /// + /// Получение рандом цвета + /// + /// + /// + private static Color GetColor(Random rnd) + { + Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(255, 256)); + ColorDialog dialog = new ColorDialog(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + return color; + } + /// + /// Кнопка создания обычного поезда + /// + /// + /// + private void ButtonAddLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive)); + /// + /// Кнопка создания модиф поезда + /// + /// + /// + private void ButtonModifLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive)); + /// + /// Кнопка удаления поезда + /// + /// + /// + private void ButtonRemoveLocomotive_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + if (string.IsNullOrEmpty(maskedTextBox.Text)) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + int pos = Convert.ToInt32(maskedTextBox.Text); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + /// + /// Кнопка отправить на полигон для испытаний + /// + /// + /// + private void ButtonGoToCheck_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + DrawningBaseLocomotive BaseLocomotive = null; + int counter = 100; + while (BaseLocomotive == null) + { + BaseLocomotive = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } + } + + if (BaseLocomotive == null) + { + return; + } + + LocomotiveProject form = new() { SetLocomotive = BaseLocomotive }; + form.ShowDialog(); + + } + /// + /// Кнопка обновления компании + /// + /// + /// + private void ButtonRefresh_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + pictureBox.Image = _company.Show(); + } +} diff --git a/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.resx b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/LocomativeProject/LocomativeProject/LocomotiveProjectCollection.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/LocomativeProject/LocomativeProject/Program.cs b/LocomativeProject/LocomativeProject/Program.cs index a383f1c..662fce3 100644 --- a/LocomativeProject/LocomativeProject/Program.cs +++ b/LocomativeProject/LocomativeProject/Program.cs @@ -1,4 +1,4 @@ -namespace LocomativeProject +namespace LocomotiveProject { internal static class Program { @@ -11,7 +11,7 @@ namespace LocomativeProject // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new LocomotiveProject()); + Application.Run(new LocomotiveProjectCollection()); } } } \ No newline at end of file diff --git a/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs b/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs index 3a133ad..b31bfc3 100644 --- a/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs +++ b/LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace LocomativeProject.Properties { +namespace LocomotiveProject.Properties { using System; @@ -39,7 +39,7 @@ namespace LocomativeProject.Properties { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LocomativeProject.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LocomotiveProject.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/desktop.ini b/desktop.ini new file mode 100644 index 0000000..8a27920 --- /dev/null +++ b/desktop.ini @@ -0,0 +1,2 @@ +[.ShellClassInfo] +LocalizedResourceName= 11(final version) -- 2.25.1