From f159985f6a3ef4c1e18e779a8d7eabd3e895ff15 Mon Sep 17 00:00:00 2001 From: "n.guryanov" Date: Mon, 10 Feb 2025 13:21:14 +0400 Subject: [PATCH 1/2] lab1 v0.1 --- .../DirectionType.cs | 33 +++ .../DrawningElectricLocomotive.cs | 249 ++++++++++++++++++ .../EntityElectricLocomotive.cs | 68 +++++ .../Form1.Designer.cs | 39 --- .../ProjectElectricLocomotive/Form1.cs | 10 - .../FormElectricLocomotive.Designer.cs | 138 ++++++++++ .../FormElectricLocomotive.cs | 92 +++++++ ...Form1.resx => FormElectricLocomotive.resx} | 60 +++-- .../ProjectElectricLocomotive/Program.cs | 2 +- .../ProjectElectricLocomotive.csproj | 15 ++ .../Properties/Resources.Designer.cs | 103 ++++++++ .../Properties/Resources.resx | 133 ++++++++++ .../Resources/стрелка вверх.jpg | Bin 0 -> 16327 bytes .../Resources/стрелка влево.jpg | Bin 0 -> 16123 bytes .../Resources/стрелка вниз.jpg | Bin 0 -> 16234 bytes .../Resources/стрелка вправо.jpg | Bin 0 -> 8566 bytes 16 files changed, 865 insertions(+), 77 deletions(-) create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/DirectionType.cs create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs delete mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.Designer.cs delete mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.cs create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.Designer.cs create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs rename ProjectElectricLocomotive/ProjectElectricLocomotive/{Form1.resx => FormElectricLocomotive.resx} (88%) create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.Designer.cs create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.resx create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка вверх.jpg create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка влево.jpg create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка вниз.jpg create mode 100644 ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка вправо.jpg diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/DirectionType.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/DirectionType.cs new file mode 100644 index 0000000..7b29eff --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/DirectionType.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectElectricLocomotive; + +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 +} diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs new file mode 100644 index 0000000..2a48e17 --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectElectricLocomotive; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningElectricLocomotive +{ + /// + /// класс-сущность + /// + public EntityElectricLocomotive? entityElectricLocomotive { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки электровоза + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки электровоза + /// + private int? _startPosY; + + /// + /// Ширина прорисовки автомобиля + /// + private readonly int _drawningEntityElectricLocomotiveWidth = 110; + + /// + /// Высота прорисовки автомобиля + /// + private readonly int _drawningEntityElectricLocomotiveHeight = 60; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + { + entityElectricLocomotive = new EntityElectricLocomotive(); + entityElectricLocomotive.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + _pictureWidth = width; + _pictureHeight = height; + return true; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + _startPosX = x; + _startPosY = y; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (entityElectricLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - entityElectricLocomotive.Step > 0) + { + _startPosX -= (int)entityElectricLocomotive.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - entityElectricLocomotive.Step > 0) + { + _startPosY -= (int)entityElectricLocomotive.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + entityElectricLocomotive.Step + _drawningEntityElectricLocomotiveWidth < _pictureWidth) + { + _startPosX += (int)entityElectricLocomotive.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + entityElectricLocomotive.Step + _drawningEntityElectricLocomotiveHeight < _pictureHeight) + { + _startPosY += (int)entityElectricLocomotive.Step; + } + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (entityElectricLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(entityElectricLocomotive.AdditionalColor); + + // обвесы + if (entityElectricLocomotive.BodyKit) + { + g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); + g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value, 15, 15); + g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); + + g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value, 20, 20); + g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); + g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); + g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 1, 15, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); + + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, 20); + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 40, 20, 20); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, 20, 40); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 14, 15); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 45, 14, 15); + + g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value, 20, 20); + g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 40, 20, 20); + g.FillRectangle(additionalBrush, _startPosX.Value + 1, _startPosY.Value + 10, 25, 40); + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 1, 15, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 45, 15, 15); + + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value, 39, 15); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 45, 39, 15); + + g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 1, 40, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 45, 40, 15); + } + + //границы автомобиля + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); + + //задние фары + Brush brRed = new SolidBrush(Color.Red); + g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); + g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); + + //передние фары + Brush brYellow = new SolidBrush(Color.Yellow); + g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); + g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); + + //кузов + Brush br = new SolidBrush(entityElectricLocomotive.BodyColor); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); + g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); + g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); + + //стекла + Brush brBlue = new SolidBrush(Color.LightBlue); + g.FillRectangle(brBlue, _startPosX.Value + 70, _startPosY.Value + 10, 5, 40); + g.FillRectangle(brBlue, _startPosX.Value + 30, _startPosY.Value + 10, 5, 40); + g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 8, 35, 2); + g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 51, 35, 2); + + //выделяем рамкой крышу + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 35, 40); + g.DrawRectangle(pen, _startPosX.Value + 75, _startPosY.Value + 15, 25, 30); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 15, 15, 30); + + // спортивная линия + if (entityElectricLocomotive.SportLine) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15); + } + + // крыло + if (entityElectricLocomotive.Wing) + { + g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 5, 10, 50); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 10, 50); + } + } +} \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs new file mode 100644 index 0000000..ac78990 --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectElectricLocomotive; + +/// +/// класс-сущность "Электровоз" +/// +public class EntityElectricLocomotive +{ + /// + /// Скорость + /// + 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 BodyKit { get; private set; } + /// + /// Признак опция наличие антикрыла + /// + public bool Wing { get; private set; } + /// + /// Признак опция наличие гоночной полосы + /// + public bool SportLine { get; private set; } + /// + /// шаг перемещение + /// + public double Step => Speed*100 / Weight; + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + BodyKit = bodyKit; + Wing = wing; + SportLine = sportLine; + + } +} + diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.Designer.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.Designer.cs deleted file mode 100644 index 87b464a..0000000 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectElectricLocomotive -{ - 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 - } -} diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.cs deleted file mode 100644 index dfcdcdb..0000000 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectElectricLocomotive -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.Designer.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.Designer.cs new file mode 100644 index 0000000..75c305d --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.Designer.cs @@ -0,0 +1,138 @@ +namespace ProjectElectricLocomotive +{ + partial class FormElectricLocomotive + { + /// + /// 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() + { + saveFileDialog1 = new SaveFileDialog(); + pictureBoxElectricLocomotive = new PictureBox(); + buttonCreate = new Button(); + buttonLeft = new Button(); + buttonRight = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxElectricLocomotive).BeginInit(); + SuspendLayout(); + // + // pictureBoxElectricLocomotive + // + pictureBoxElectricLocomotive.Dock = DockStyle.Fill; + pictureBoxElectricLocomotive.Location = new Point(0, 0); + pictureBoxElectricLocomotive.Name = "pictureBoxElectricLocomotive"; + pictureBoxElectricLocomotive.Size = new Size(820, 429); + pictureBoxElectricLocomotive.TabIndex = 0; + pictureBoxElectricLocomotive.TabStop = false; + pictureBoxElectricLocomotive.Click += ButtonMove_Click; + // + // buttonCreate + // + buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreate.Location = new Point(12, 388); + buttonCreate.Name = "buttonCreate"; + buttonCreate.Size = new Size(94, 29); + buttonCreate.TabIndex = 1; + buttonCreate.Text = "Создать"; + buttonCreate.UseVisualStyleBackColor = true; + buttonCreate.Click += ButtonCreate_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.стрелка_влево; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(685, 382); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.стрелка_вправо; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(767, 382); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 3; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.AllowDrop = true; + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.стрелка_вверх; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(726, 341); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 4; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.стрелка_вниз; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(726, 382); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 5; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // FormElectricLocomotive + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(820, 429); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(buttonRight); + Controls.Add(buttonLeft); + Controls.Add(buttonCreate); + Controls.Add(pictureBoxElectricLocomotive); + Name = "FormElectricLocomotive"; + Text = "Электровоз"; + ((System.ComponentModel.ISupportInitialize)pictureBoxElectricLocomotive).EndInit(); + ResumeLayout(false); + } + + #endregion + + private SaveFileDialog saveFileDialog1; + private PictureBox pictureBoxElectricLocomotive; + private Button buttonCreate; + private Button buttonLeft; + private Button buttonRight; + private Button buttonUp; + private Button buttonDown; + } +} \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs new file mode 100644 index 0000000..bcc9a7a --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Configuration; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProjectElectricLocomotive; +/// +/// "Форма работы с объектом "Электровоз" +/// + +public partial class FormElectricLocomotive : Form +{ + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningElectricLocomotive? _drawningElectricLocomotive; + + /// + /// Конструктор формы + /// + public FormElectricLocomotive() + { + InitializeComponent(); + } + + private void Draw() + { + if (_drawningElectricLocomotive == null) + { + return; + } + + Bitmap bmp = new(pictureBoxElectricLocomotive.Width, pictureBoxElectricLocomotive.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningElectricLocomotive.DrawTransport(gr); + pictureBoxElectricLocomotive.Image = bmp; + } + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningElectricLocomotive = new DrawningElectricLocomotive(); + _drawningElectricLocomotive.Init(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawningElectricLocomotive.SetPictureSize(pictureBoxElectricLocomotive.Width, pictureBoxElectricLocomotive.Height); + _drawningElectricLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); + + Draw(); + } + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningElectricLocomotive == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningElectricLocomotive.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningElectricLocomotive.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningElectricLocomotive.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningElectricLocomotive.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { + Draw(); + } + } +} diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.resx b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.resx similarity index 88% rename from ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.resx rename to ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.resx index 1af7de1..f05556c 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/Form1.resx +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.resx @@ -1,17 +1,17 @@  - @@ -117,4 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + 51 + \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Program.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/Program.cs index 9a38110..ddb490c 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/Program.cs +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/Program.cs @@ -11,7 +11,7 @@ namespace ProjectElectricLocomotive // 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 FormElectricLocomotive()); } } } \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/ProjectElectricLocomotive.csproj b/ProjectElectricLocomotive/ProjectElectricLocomotive/ProjectElectricLocomotive.csproj index 663fdb8..af03d74 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/ProjectElectricLocomotive.csproj +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/ProjectElectricLocomotive.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.Designer.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.Designer.cs new file mode 100644 index 0000000..aa20c83 --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectElectricLocomotive.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("ProjectElectricLocomotive.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 стрелка_вверх { + get { + object obj = ResourceManager.GetObject("стрелка вверх", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap стрелка_влево { + get { + object obj = ResourceManager.GetObject("стрелка влево", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap стрелка_вниз { + get { + object obj = ResourceManager.GetObject("стрелка вниз", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap стрелка_вправо { + get { + object obj = ResourceManager.GetObject("стрелка вправо", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.resx b/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.resx new file mode 100644 index 0000000..dd0c350 --- /dev/null +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\стрелка вверх.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\стрелка влево.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\стрелка вправо.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\стрелка вниз.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка вверх.jpg b/ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка вверх.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2cd62a618ffc4b1e7055397813ea0a3bce98c8e GIT binary patch literal 16327 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 boHreLqLq#c2@flB-C9RK>91T0(x(3cu*WvF literal 0 HcmV?d00001 diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка влево.jpg b/ProjectElectricLocomotive/ProjectElectricLocomotive/Resources/стрелка влево.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d395ada0238e29897131ad8b2b9e28509035169 GIT binary patch literal 16123 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 ar%(xdhwNuos^z!6*>E}9s|NfK-1lGUA~xOt literal 0 HcmV?d00001 -- 2.25.1 From 0b2c87fc1dd3742c31918a81b91005fb35719d8a Mon Sep 17 00:00:00 2001 From: "n.guryanov" Date: Mon, 17 Feb 2025 13:50:22 +0400 Subject: [PATCH 2/2] realese --- .../DrawningElectricLocomotive.cs | 146 +++++++----------- .../EntityElectricLocomotive.cs | 25 ++- .../FormElectricLocomotive.cs | 2 +- 3 files changed, 66 insertions(+), 107 deletions(-) diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs index 2a48e17..365e287 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/DrawningElectricLocomotive.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.Metadata.Ecma335; using System.Text; using System.Threading.Tasks; @@ -37,12 +38,12 @@ public class DrawningElectricLocomotive private int? _startPosY; /// - /// Ширина прорисовки автомобиля + /// Ширина прорисовки электровоза /// - private readonly int _drawningEntityElectricLocomotiveWidth = 110; + private readonly int _drawningEntityElectricLocomotiveWidth = 100; /// - /// Высота прорисовки автомобиля + /// Высота прорисовки электровоза /// private readonly int _drawningEntityElectricLocomotiveHeight = 60; @@ -53,13 +54,12 @@ public class DrawningElectricLocomotive /// Вес /// Основной цвет /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия антикрыла - /// Признак наличия гоночной полосы - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + /// Признак наличия рогов + /// Признак наличия отсека + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool horns, bool compartment) { entityElectricLocomotive = new EntityElectricLocomotive(); - entityElectricLocomotive.Init(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine); + entityElectricLocomotive.Init(speed, weight, bodyColor, additionalColor, horns, compartment); _pictureWidth = null; _pictureHeight = null; _startPosX = null; @@ -74,7 +74,10 @@ public class DrawningElectricLocomotive /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - // TODO проверка, что объект "влезает" в размеры поля + // проверка, что объект "влезает" в размеры поля + if (width <= 0 || height <= 0) return false; + if (_drawningEntityElectricLocomotiveWidth > width || _drawningEntityElectricLocomotiveHeight > height) return false; + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена _pictureWidth = width; _pictureHeight = height; @@ -88,13 +91,11 @@ public class DrawningElectricLocomotive /// Координата Y public void SetPosition(int x, int y) { - if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) - { - return; - } + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) return; + if (x < 0 || y < 0 || + x + _drawningEntityElectricLocomotiveWidth > _pictureWidth || + y + _drawningEntityElectricLocomotiveHeight > _pictureHeight) return; - // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы - // то надо изменить координаты, чтобы он оставался в этих границах _startPosX = x; _startPosY = y; } @@ -160,90 +161,55 @@ public class DrawningElectricLocomotive Pen pen = new(Color.Black); Brush additionalBrush = new SolidBrush(entityElectricLocomotive.AdditionalColor); - // обвесы - if (entityElectricLocomotive.BodyKit) - { - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value, 15, 15); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); - - g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); - - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 40, 20, 20); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 14, 15); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 45, 14, 15); - - g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 1, _startPosY.Value + 10, 25, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 45, 15, 15); - - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value, 39, 15); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 45, 39, 15); - - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 1, 40, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 45, 40, 15); + // рога для подключения к проводам + if (entityElectricLocomotive.Horns) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 38, _startPosY.Value + 50, 20, 11); } - //границы автомобиля - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); + // отсек под электрические батареи + if (entityElectricLocomotive.Compartment) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 18, _startPosY.Value + 0, 32, 2); + g.DrawLine(pen, _startPosX.Value + 45, _startPosY.Value + 15, _startPosX.Value + 35, _startPosY.Value + 2); + } - //задние фары - Brush brRed = new SolidBrush(Color.Red); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - //передние фары - Brush brYellow = new SolidBrush(Color.Yellow); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); + //границы Электровоза + g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value + 15, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 15, 67, 20); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 28, 80, 23); + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 22, 6, 29); + + //переходный тамбур + Brush brBlack = new SolidBrush(Color.Black); + g.FillRectangle(brBlack, _startPosX.Value + 5, _startPosY.Value + 22, 6, 29); + + //лобовое стекло + Brush brBlue = new SolidBrush(Color.Blue); + g.FillEllipse(brBlue, _startPosX.Value + 70, _startPosY.Value + 15, 20, 20); //кузов Brush br = new SolidBrush(entityElectricLocomotive.BodyColor); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 67, 20); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 28, 80, 23); - //стекла - Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX.Value + 70, _startPosY.Value + 10, 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 30, _startPosY.Value + 10, 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 8, 35, 2); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 51, 35, 2); + //стёкла + g.FillRectangle(brBlue, _startPosX.Value + 14, _startPosY.Value + 15, 10, 20); + g.FillRectangle(brBlue, _startPosX.Value + 45, _startPosY.Value + 15, 10, 20); + g.FillRectangle(brBlue, _startPosX.Value + 55, _startPosY.Value + 15, 10, 20); + g.FillRectangle(brBlue, _startPosX.Value + 77, _startPosY.Value + 25, 13, 10); - //выделяем рамкой крышу - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 35, 40); - g.DrawRectangle(pen, _startPosX.Value + 75, _startPosY.Value + 15, 25, 30); - g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 15, 15, 30); + //дверь + g.DrawRectangle(pen, _startPosX.Value + 26, _startPosY.Value + 16, 15, 33); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 35, 5, 2); - // спортивная линия - if (entityElectricLocomotive.SportLine) - { - g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15); - } - - // крыло - if (entityElectricLocomotive.Wing) - { - g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 5, 10, 50); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 10, 50); - } + //колеса + g.FillEllipse(brBlack, _startPosX.Value + 10, _startPosY.Value + 50, 12, 12); + g.FillEllipse(brBlack, _startPosX.Value + 24, _startPosY.Value + 50, 12, 12); + g.FillEllipse(brBlack, _startPosX.Value + 60, _startPosY.Value + 50, 12, 12); + g.FillEllipse(brBlack, _startPosX.Value + 74, _startPosY.Value + 50, 12, 12); + g.DrawLine(pen, _startPosX.Value + 15, _startPosY.Value + 50, _startPosX.Value + 0, _startPosY.Value + 55); + g.DrawLine(pen, _startPosX.Value + 80, _startPosY.Value + 50, _startPosX.Value + 105, _startPosY.Value + 55); } } \ No newline at end of file diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs index ac78990..8510bda 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/EntityElectricLocomotive.cs @@ -28,17 +28,13 @@ public class EntityElectricLocomotive /// public Color AdditionalColor { get; private set; } /// - /// Признак опция наличие обвеса + /// Признак опция рога /// - public bool BodyKit { get; private set; } + public bool Horns { get; private set; } /// - /// Признак опция наличие антикрыла + /// Признак опция отсек для батарей /// - public bool Wing { get; private set; } - /// - /// Признак опция наличие гоночной полосы - /// - public bool SportLine { get; private set; } + public bool Compartment { get; private set; } /// /// шаг перемещение /// @@ -50,19 +46,16 @@ public class EntityElectricLocomotive /// /// /// - /// - /// - /// - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + /// + /// + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool horns, bool compartment) { Speed = speed; Weight = weight; BodyColor = bodyColor; AdditionalColor = additionalColor; - BodyKit = bodyKit; - Wing = wing; - SportLine = sportLine; - + Horns = horns; + Compartment = compartment; } } diff --git a/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs index bcc9a7a..400358b 100644 --- a/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs +++ b/ProjectElectricLocomotive/ProjectElectricLocomotive/FormElectricLocomotive.cs @@ -53,7 +53,7 @@ public partial class FormElectricLocomotive : Form _drawningElectricLocomotive.Init(random.Next(100, 300), random.Next(1000, 3000), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); _drawningElectricLocomotive.SetPictureSize(pictureBoxElectricLocomotive.Width, pictureBoxElectricLocomotive.Height); _drawningElectricLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100)); -- 2.25.1