From 028d0d760d4ccaaddb53dd46918c63b8000865b2 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Thu, 14 Mar 2024 16:09:51 +0400 Subject: [PATCH 01/11] End of First Lab --- ProjectAntiAircraftGun/AntiAircraft.cs | 77 +++++++++++ ProjectAntiAircraftGun/DrawingAntiAircraft.cs | 52 +++++++ ProjectAntiAircraftGun/Form1.Designer.cs | 39 ------ ProjectAntiAircraftGun/Form1.cs | 10 -- .../FormAntiAircraftGun.Designer.cs | 129 ++++++++++++++++++ ProjectAntiAircraftGun/FormAntiAircraftGun.cs | 54 ++++++++ .../{Form1.resx => FormAntiAircraftGun.resx} | 50 +++---- ProjectAntiAircraftGun/GameObject.cs | 11 ++ ProjectAntiAircraftGun/Program.cs | 3 +- ProjectAntiAircraftGun/Vector2.cs | 19 +++ 10 files changed, 369 insertions(+), 75 deletions(-) create mode 100644 ProjectAntiAircraftGun/AntiAircraft.cs create mode 100644 ProjectAntiAircraftGun/DrawingAntiAircraft.cs delete mode 100644 ProjectAntiAircraftGun/Form1.Designer.cs delete mode 100644 ProjectAntiAircraftGun/Form1.cs create mode 100644 ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs create mode 100644 ProjectAntiAircraftGun/FormAntiAircraftGun.cs rename ProjectAntiAircraftGun/{Form1.resx => FormAntiAircraftGun.resx} (93%) create mode 100644 ProjectAntiAircraftGun/GameObject.cs create mode 100644 ProjectAntiAircraftGun/Vector2.cs diff --git a/ProjectAntiAircraftGun/AntiAircraft.cs b/ProjectAntiAircraftGun/AntiAircraft.cs new file mode 100644 index 0000000..7c25bb5 --- /dev/null +++ b/ProjectAntiAircraftGun/AntiAircraft.cs @@ -0,0 +1,77 @@ +namespace ProjectAntiAircraftGun +{ + public class AntiAircraft : GameObject + { + private int _speed; + private int _weight; + private Color _firstCol; + private Color _secondCol; + private bool _monoChrome; + private int _numOfRollers; + private int _step; + public int Speed { get => _speed;} + public int Weight { get => _weight;} + public Color FirstColor { get => _firstCol; } + public Color SecondColor { get => _secondCol; } + public bool MonoChrome { get => _monoChrome; } + public int NumOfRollers { get => _numOfRollers; } + public int Step { get => _step>0?_step:1; } + public AntiAircraft() + { + _speed = 1; + _weight = 1; + _firstCol = Color.Magenta; + _secondCol = Color.Black; + _monoChrome = true; + _numOfRollers = 6; + try + { + _step = _speed / _weight; + }catch(Exception e) { throw new Exception("Дурашка, какой ноль в весе?"); } + } + /// + /// + /// + /// + /// (0,int.MaxValue] + /// + /// + /// [2,6] + /// + public AntiAircraft(int speed, int weight, Color firstCol, Color secondCol, int numOfRollers) + { + if (numOfRollers < 2 || numOfRollers > 6) + throw new Exception("numOfRollers out of range [2,6]"); + _speed = speed; + _weight = weight; + _firstCol = firstCol; + _secondCol = secondCol; + _monoChrome = false; + _numOfRollers = numOfRollers; + try + { + _step = _speed / _weight; + } + catch (Exception e) { throw new Exception("Дурашка, какой ноль в весе?"); } + } + /// + /// + /// + /// + /// (0,int.MaxValue] + /// + public AntiAircraft(int speed, int weight, Color firstCol) + { + _speed = speed; + _weight = weight; + _firstCol = firstCol; + _monoChrome = false; + _numOfRollers = 6; + try + { + _step = _speed / _weight; + } + catch (Exception e) { throw e; } + } + } +} diff --git a/ProjectAntiAircraftGun/DrawingAntiAircraft.cs b/ProjectAntiAircraftGun/DrawingAntiAircraft.cs new file mode 100644 index 0000000..81bfe42 --- /dev/null +++ b/ProjectAntiAircraftGun/DrawingAntiAircraft.cs @@ -0,0 +1,52 @@ +using System.Drawing; + +namespace ProjectAntiAircraftGun +{ + internal class DrawingAntiAircraft + { + AntiAircraft aag; + private readonly int _width = 0; + private readonly int _height = 0; + public DrawingAntiAircraft(AntiAircraft aag) + { + this.aag = aag; + } + public DrawingAntiAircraft() + { + aag = new AntiAircraft(); + } + public void SetPos(Point pos) + { + aag.position.X = Math.Clamp(pos.X + aag.position.X, 0, Program.faag.ClientSize.Width-_width); + aag.position.Y = Math.Clamp(pos.Y + aag.position.Y, 0, Program.faag.ClientSize.Height-_height); + } + public void MoveTransport(Vector2 way) + { + if(way == null) + { + throw new NullReferenceException(); + } + SetPos(new Point((int)(way.x*aag.Step), (int)(way.y*aag.Step))); + } + public void Draw(Graphics g) + { + Pen pen = new Pen(Color.Black); + Brush brush = new SolidBrush(aag.FirstColor); + + // Отрисовка гусениц + g.DrawLine(pen, aag.position.X, aag.position.Y + 30, aag.position.X + 90, aag.position.Y + 30); + g.DrawLine(pen, aag.position.X + 90, aag.position.Y + 30, aag.position.X + 90, aag.position.Y + 15); + g.DrawLine(pen, aag.position.X + 90, aag.position.Y + 15, aag.position.X, aag.position.Y + 15); + g.DrawLine(pen, aag.position.X, aag.position.Y + 15, aag.position.X, aag.position.Y + 30); + + // Отрисовка катков + g.FillEllipse(brush, aag.position.X, aag.position.Y + 15, 15, 15); + g.FillEllipse(brush, aag.position.X + 75, aag.position.Y + 15, 15, 15); + for (int i = 1; i <= aag.NumOfRollers - 2; i++) + g.FillEllipse(new SolidBrush(aag.SecondColor), aag.position.X +(75/(aag.NumOfRollers-1))*i, aag.position.Y + 15, 15, 15); + + // Отрисовка кузова + g.FillRectangle(brush, aag.position.X + 15, aag.position.Y, 60, 15); + } + } +} diff --git a/ProjectAntiAircraftGun/Form1.Designer.cs b/ProjectAntiAircraftGun/Form1.Designer.cs deleted file mode 100644 index f0a04d1..0000000 --- a/ProjectAntiAircraftGun/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectAntiAircraftGun -{ - 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/ProjectAntiAircraftGun/Form1.cs b/ProjectAntiAircraftGun/Form1.cs deleted file mode 100644 index c5553d6..0000000 --- a/ProjectAntiAircraftGun/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectAntiAircraftGun -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs b/ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs new file mode 100644 index 0000000..30b8095 --- /dev/null +++ b/ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs @@ -0,0 +1,129 @@ +namespace ProjectAntiAircraftGun +{ + partial class FormAntiAircraftGun + { + /// + /// 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() + { + pictureBoxAntiAircraftGun = new PictureBox(); + CreateButton = new Button(); + buttonRight = new Button(); + buttonDown = new Button(); + buttonLeft = new Button(); + buttonUp = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxAntiAircraftGun).BeginInit(); + SuspendLayout(); + // + // pictureBoxAntiAircraftGun + // + pictureBoxAntiAircraftGun.Dock = DockStyle.Fill; + pictureBoxAntiAircraftGun.Location = new Point(0, 0); + pictureBoxAntiAircraftGun.Name = "pictureBoxAntiAircraftGun"; + pictureBoxAntiAircraftGun.Size = new Size(800, 450); + pictureBoxAntiAircraftGun.TabIndex = 5; + pictureBoxAntiAircraftGun.TabStop = false; + // + // CreateButton + // + CreateButton.Location = new Point(12, 408); + CreateButton.Name = "CreateButton"; + CreateButton.Size = new Size(90, 30); + CreateButton.TabIndex = 0; + CreateButton.Text = "Create"; + CreateButton.UseVisualStyleBackColor = true; + CreateButton.Click += ButtonCreate_Click; + // + // buttonRight + // + buttonRight.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); + buttonRight.Location = new Point(748, 398); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(40, 40); + buttonRight.TabIndex = 1; + buttonRight.Text = "⇒"; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); + buttonDown.Location = new Point(702, 398); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(40, 40); + buttonDown.TabIndex = 2; + buttonDown.Text = "⇓"; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonLeft + // + buttonLeft.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); + buttonLeft.Location = new Point(656, 398); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(40, 40); + buttonLeft.TabIndex = 3; + buttonLeft.Text = "⇐"; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); + buttonUp.Location = new Point(702, 352); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(40, 40); + buttonUp.TabIndex = 4; + buttonUp.Text = "⇑"; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // FormAntiAircraftGun + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonUp); + Controls.Add(buttonLeft); + Controls.Add(buttonDown); + Controls.Add(buttonRight); + Controls.Add(CreateButton); + Controls.Add(pictureBoxAntiAircraftGun); + Name = "FormAntiAircraftGun"; + Text = "Form1"; + ((System.ComponentModel.ISupportInitialize)pictureBoxAntiAircraftGun).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxAntiAircraftGun; + private Button CreateButton; + private Button buttonRight; + private Button buttonDown; + private Button buttonLeft; + private Button buttonUp; + } +} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/FormAntiAircraftGun.cs b/ProjectAntiAircraftGun/FormAntiAircraftGun.cs new file mode 100644 index 0000000..794aca0 --- /dev/null +++ b/ProjectAntiAircraftGun/FormAntiAircraftGun.cs @@ -0,0 +1,54 @@ +namespace ProjectAntiAircraftGun +{ + public partial class FormAntiAircraftGun : Form + { + private DrawingAntiAircraft? _drawer; + public FormAntiAircraftGun() + { + InitializeComponent(); + } + private void Draw() + { + if (_drawer == null) + return; + + Bitmap bmp = new(pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawer.Draw(gr); + pictureBoxAntiAircraftGun.Image = bmp; + } + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawer == null) + { + return; + } + switch (((Button)sender)?.Name ?? string.Empty) + { + case "buttonUp": + _drawer.MoveTransport(new Vector2(0, -1)); + break; + case "buttonDown": + _drawer.MoveTransport(new Vector2(0, 1)); + break; + case "buttonLeft": + _drawer.MoveTransport(new Vector2(-1, 0)); + break; + case "buttonRight": + _drawer.MoveTransport(new Vector2(1, 0)); + break; + } + + Draw(); + } + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random rnd = new Random(); + _drawer = new DrawingAntiAircraft(new AntiAircraft(rnd.Next(1,100),rnd.Next(1,10), + Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), + Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), + rnd.Next(2, 7))); + Draw(); + } + } +} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/Form1.resx b/ProjectAntiAircraftGun/FormAntiAircraftGun.resx similarity index 93% rename from ProjectAntiAircraftGun/Form1.resx rename to ProjectAntiAircraftGun/FormAntiAircraftGun.resx index 1af7de1..af32865 100644 --- a/ProjectAntiAircraftGun/Form1.resx +++ b/ProjectAntiAircraftGun/FormAntiAircraftGun.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectAntiAircraftGun/GameObject.cs b/ProjectAntiAircraftGun/GameObject.cs new file mode 100644 index 0000000..a67dfbc --- /dev/null +++ b/ProjectAntiAircraftGun/GameObject.cs @@ -0,0 +1,11 @@ +namespace ProjectAntiAircraftGun +{ + abstract public class GameObject + { + public Point position; + public GameObject() + { + position = new Point(); + } + } +} diff --git a/ProjectAntiAircraftGun/Program.cs b/ProjectAntiAircraftGun/Program.cs index f60dd13..a09edc2 100644 --- a/ProjectAntiAircraftGun/Program.cs +++ b/ProjectAntiAircraftGun/Program.cs @@ -5,13 +5,14 @@ namespace ProjectAntiAircraftGun /// /// The main entry point for the application. /// + public static FormAntiAircraftGun faag = new FormAntiAircraftGun(); [STAThread] static void Main() { // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(faag); } } } \ No newline at end of file diff --git a/ProjectAntiAircraftGun/Vector2.cs b/ProjectAntiAircraftGun/Vector2.cs new file mode 100644 index 0000000..d92680b --- /dev/null +++ b/ProjectAntiAircraftGun/Vector2.cs @@ -0,0 +1,19 @@ +namespace ProjectAntiAircraftGun +{ + public class Vector2 + { + public float x, y; + public float lenght => MathF.Sqrt(x * x + y * y); + public Vector2 normilized => new Vector2(x/lenght, y/lenght); + public Vector2(float x, float y) + { + this.x = x; + this.y = y; + } + public Vector2() + { + x = 0; + y = 0; + } + } +} -- 2.25.1 From de79772313ad2b5334d49a0f4dddc1be1f812ca5 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Thu, 14 Mar 2024 16:23:13 +0400 Subject: [PATCH 02/11] some dispose --- ProjectAntiAircraftGun/AntiAircraft.cs | 5 ----- ProjectAntiAircraftGun/DrawingAntiAircraft.cs | 15 ++++++++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ProjectAntiAircraftGun/AntiAircraft.cs b/ProjectAntiAircraftGun/AntiAircraft.cs index 7c25bb5..5b2a6c8 100644 --- a/ProjectAntiAircraftGun/AntiAircraft.cs +++ b/ProjectAntiAircraftGun/AntiAircraft.cs @@ -6,14 +6,12 @@ private int _weight; private Color _firstCol; private Color _secondCol; - private bool _monoChrome; private int _numOfRollers; private int _step; public int Speed { get => _speed;} public int Weight { get => _weight;} public Color FirstColor { get => _firstCol; } public Color SecondColor { get => _secondCol; } - public bool MonoChrome { get => _monoChrome; } public int NumOfRollers { get => _numOfRollers; } public int Step { get => _step>0?_step:1; } public AntiAircraft() @@ -22,7 +20,6 @@ _weight = 1; _firstCol = Color.Magenta; _secondCol = Color.Black; - _monoChrome = true; _numOfRollers = 6; try { @@ -46,7 +43,6 @@ _weight = weight; _firstCol = firstCol; _secondCol = secondCol; - _monoChrome = false; _numOfRollers = numOfRollers; try { @@ -65,7 +61,6 @@ _speed = speed; _weight = weight; _firstCol = firstCol; - _monoChrome = false; _numOfRollers = 6; try { diff --git a/ProjectAntiAircraftGun/DrawingAntiAircraft.cs b/ProjectAntiAircraftGun/DrawingAntiAircraft.cs index 81bfe42..bfd1d2a 100644 --- a/ProjectAntiAircraftGun/DrawingAntiAircraft.cs +++ b/ProjectAntiAircraftGun/DrawingAntiAircraft.cs @@ -31,7 +31,8 @@ namespace ProjectAntiAircraftGun public void Draw(Graphics g) { Pen pen = new Pen(Color.Black); - Brush brush = new SolidBrush(aag.FirstColor); + Brush brush1 = new SolidBrush(aag.FirstColor); + Brush brush2 = new SolidBrush(aag.SecondColor); // Отрисовка гусениц g.DrawLine(pen, aag.position.X, aag.position.Y + 30, aag.position.X + 90, aag.position.Y + 30); @@ -40,13 +41,17 @@ namespace ProjectAntiAircraftGun g.DrawLine(pen, aag.position.X, aag.position.Y + 15, aag.position.X, aag.position.Y + 30); // Отрисовка катков - g.FillEllipse(brush, aag.position.X, aag.position.Y + 15, 15, 15); - g.FillEllipse(brush, aag.position.X + 75, aag.position.Y + 15, 15, 15); + g.FillEllipse(brush1, aag.position.X, aag.position.Y + 15, 15, 15); + g.FillEllipse(brush1, aag.position.X + 75, aag.position.Y + 15, 15, 15); for (int i = 1; i <= aag.NumOfRollers - 2; i++) - g.FillEllipse(new SolidBrush(aag.SecondColor), aag.position.X +(75/(aag.NumOfRollers-1))*i, aag.position.Y + 15, 15, 15); + g.FillEllipse(brush2, aag.position.X +(75/(aag.NumOfRollers-1))*i, aag.position.Y + 15, 15, 15); // Отрисовка кузова - g.FillRectangle(brush, aag.position.X + 15, aag.position.Y, 60, 15); + g.FillRectangle(brush1, aag.position.X + 15, aag.position.Y, 60, 15); + + brush1.Dispose(); + brush2.Dispose(); + pen.Dispose(); } } } -- 2.25.1 From 14240925ba8fb37ff721e01b9ad3012c33d01e9f Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Wed, 27 Mar 2024 13:30:13 +0400 Subject: [PATCH 03/11] VariantChange --- ProjectAntiAircraftGun/DrawingAntiAircraft.cs | 57 ------------- ProjectAntiAircraftGun/DrawingLiner.cs | 82 +++++++++++++++++++ ...tGun.Designer.cs => FormLiner.Designer.cs} | 32 ++++---- .../{FormAntiAircraftGun.cs => FormLiner.cs} | 17 ++-- ...ormAntiAircraftGun.resx => FormLiner.resx} | 0 ProjectAntiAircraftGun/GameObject.cs | 2 +- .../{AntiAircraft.cs => Liner.cs} | 30 ++++--- ProjectAntiAircraftGun/Program.cs | 4 +- ...AircraftGun.csproj => ProjectLiner.csproj} | 0 ...ctAntiAircraftGun.sln => ProjectLiner.sln} | 2 +- ProjectAntiAircraftGun/Vector2.cs | 2 +- 11 files changed, 128 insertions(+), 100 deletions(-) delete mode 100644 ProjectAntiAircraftGun/DrawingAntiAircraft.cs create mode 100644 ProjectAntiAircraftGun/DrawingLiner.cs rename ProjectAntiAircraftGun/{FormAntiAircraftGun.Designer.cs => FormLiner.Designer.cs} (84%) rename ProjectAntiAircraftGun/{FormAntiAircraftGun.cs => FormLiner.cs} (75%) rename ProjectAntiAircraftGun/{FormAntiAircraftGun.resx => FormLiner.resx} (100%) rename ProjectAntiAircraftGun/{AntiAircraft.cs => Liner.cs} (70%) rename ProjectAntiAircraftGun/{ProjectAntiAircraftGun.csproj => ProjectLiner.csproj} (100%) rename ProjectAntiAircraftGun/{ProjectAntiAircraftGun.sln => ProjectLiner.sln} (86%) diff --git a/ProjectAntiAircraftGun/DrawingAntiAircraft.cs b/ProjectAntiAircraftGun/DrawingAntiAircraft.cs deleted file mode 100644 index bfd1d2a..0000000 --- a/ProjectAntiAircraftGun/DrawingAntiAircraft.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Drawing; - -namespace ProjectAntiAircraftGun -{ - internal class DrawingAntiAircraft - { - AntiAircraft aag; - private readonly int _width = 0; - private readonly int _height = 0; - public DrawingAntiAircraft(AntiAircraft aag) - { - this.aag = aag; - } - public DrawingAntiAircraft() - { - aag = new AntiAircraft(); - } - public void SetPos(Point pos) - { - aag.position.X = Math.Clamp(pos.X + aag.position.X, 0, Program.faag.ClientSize.Width-_width); - aag.position.Y = Math.Clamp(pos.Y + aag.position.Y, 0, Program.faag.ClientSize.Height-_height); - } - public void MoveTransport(Vector2 way) - { - if(way == null) - { - throw new NullReferenceException(); - } - SetPos(new Point((int)(way.x*aag.Step), (int)(way.y*aag.Step))); - } - public void Draw(Graphics g) - { - Pen pen = new Pen(Color.Black); - Brush brush1 = new SolidBrush(aag.FirstColor); - Brush brush2 = new SolidBrush(aag.SecondColor); - - // Отрисовка гусениц - g.DrawLine(pen, aag.position.X, aag.position.Y + 30, aag.position.X + 90, aag.position.Y + 30); - g.DrawLine(pen, aag.position.X + 90, aag.position.Y + 30, aag.position.X + 90, aag.position.Y + 15); - g.DrawLine(pen, aag.position.X + 90, aag.position.Y + 15, aag.position.X, aag.position.Y + 15); - g.DrawLine(pen, aag.position.X, aag.position.Y + 15, aag.position.X, aag.position.Y + 30); - - // Отрисовка катков - g.FillEllipse(brush1, aag.position.X, aag.position.Y + 15, 15, 15); - g.FillEllipse(brush1, aag.position.X + 75, aag.position.Y + 15, 15, 15); - for (int i = 1; i <= aag.NumOfRollers - 2; i++) - g.FillEllipse(brush2, aag.position.X +(75/(aag.NumOfRollers-1))*i, aag.position.Y + 15, 15, 15); - - // Отрисовка кузова - g.FillRectangle(brush1, aag.position.X + 15, aag.position.Y, 60, 15); - - brush1.Dispose(); - brush2.Dispose(); - pen.Dispose(); - } - } -} diff --git a/ProjectAntiAircraftGun/DrawingLiner.cs b/ProjectAntiAircraftGun/DrawingLiner.cs new file mode 100644 index 0000000..75f61ab --- /dev/null +++ b/ProjectAntiAircraftGun/DrawingLiner.cs @@ -0,0 +1,82 @@ +using System.Drawing; + +namespace ProjectLiner +{ + internal class DrawingLiner + { + Liner aag; + private readonly int _width = 0; + private readonly int _height = 0; + public DrawingLiner(Liner aag) + { + this.aag = aag; + _height = 60 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15); + _width = 150; + } + public DrawingLiner() + { + aag = new Liner(); + } + public void SetPos(Point pos) + { + aag.position.X = Math.Clamp(pos.X + aag.position.X, 0, Program.faag.ClientSize.Width-_width); + aag.position.Y = Math.Clamp(pos.Y + aag.position.Y, 0, Program.faag.ClientSize.Height-_height); + } + public void MoveTransport(Vector2 way) + { + if(way == null) + { + throw new NullReferenceException(); + } + SetPos(new Point((int)(way.x*aag.Step), (int)(way.y*aag.Step))); + } + public void Draw(Graphics g) + { + Pen pen = new Pen(Color.Black); + Brush brush1 = new SolidBrush(aag.FirstColor); + Brush brush2 = new SolidBrush(aag.SecondColor); + + //deck + g.DrawPolygon(pen, new Point[] { + new Point(0 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(150 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(120 + aag.position.X, 45 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(30 + aag.position.X, 45 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15)), + new Point(0 + aag.position.X, 15 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15))}); + g.FillPolygon(brush1, new Point[] { + new Point(0 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(150 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(120 + aag.position.X, 45 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), + new Point(30 + aag.position.X, 45 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15)), + new Point(0 + aag.position.X, 15 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15))}); + //mark + if (aag.HasMark) + { + g.DrawLine(new Pen(aag.SecondColor),30+aag.position.X, 20 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 30 + aag.position.X, 35 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15)); + g.DrawLine(new Pen(aag.SecondColor), 20+aag.position.X, 25 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 40 + aag.position.X, 25 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15)); + } + //block + for (int j = 0; j <= (int)(aag.NumOfBoxes / 8 + 0.5); j++) + { + if(aag.NumOfBoxes - j * 8 >= 8) + for (int i = 0; i < 8; i++) + { + g.FillRectangle(brush2, 15 + aag.position.X + i * 15, aag.position.Y - j * 15+((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + g.DrawRectangle(pen, 15 + aag.position.X + i * 15, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + } + else + for (int i = 0; i < aag.NumOfBoxes%8; i++) + { + if(aag.NumOfBoxes % 8 == 1) + { + g.FillRectangle(brush2, 8 + 15 + aag.position.X + (90 / 2), aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + g.DrawRectangle(pen, 8 + 15 + aag.position.X + (90 / 2), aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + continue; + } + g.FillRectangle(brush2,8 +15 + aag.position.X + (90 / (aag.NumOfBoxes % 8 - 1)) * i, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + g.DrawRectangle(pen,8 + 15 + aag.position.X + (90 / (aag.NumOfBoxes % 8 - 1)) * i, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); + } + } + } + } +} diff --git a/ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs b/ProjectAntiAircraftGun/FormLiner.Designer.cs similarity index 84% rename from ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs rename to ProjectAntiAircraftGun/FormLiner.Designer.cs index 30b8095..d02ac01 100644 --- a/ProjectAntiAircraftGun/FormAntiAircraftGun.Designer.cs +++ b/ProjectAntiAircraftGun/FormLiner.Designer.cs @@ -1,6 +1,6 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { - partial class FormAntiAircraftGun + partial class FormLiner { /// /// Required designer variable. @@ -28,23 +28,23 @@ /// private void InitializeComponent() { - pictureBoxAntiAircraftGun = new PictureBox(); + pictureBoxLiner = new PictureBox(); CreateButton = new Button(); buttonRight = new Button(); buttonDown = new Button(); buttonLeft = new Button(); buttonUp = new Button(); - ((System.ComponentModel.ISupportInitialize)pictureBoxAntiAircraftGun).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); SuspendLayout(); // - // pictureBoxAntiAircraftGun + // pictureBoxLiner // - pictureBoxAntiAircraftGun.Dock = DockStyle.Fill; - pictureBoxAntiAircraftGun.Location = new Point(0, 0); - pictureBoxAntiAircraftGun.Name = "pictureBoxAntiAircraftGun"; - pictureBoxAntiAircraftGun.Size = new Size(800, 450); - pictureBoxAntiAircraftGun.TabIndex = 5; - pictureBoxAntiAircraftGun.TabStop = false; + pictureBoxLiner.Dock = DockStyle.Fill; + pictureBoxLiner.Location = new Point(0, 0); + pictureBoxLiner.Name = "pictureBoxLiner"; + pictureBoxLiner.Size = new Size(800, 450); + pictureBoxLiner.TabIndex = 5; + pictureBoxLiner.TabStop = false; // // CreateButton // @@ -110,16 +110,16 @@ Controls.Add(buttonDown); Controls.Add(buttonRight); Controls.Add(CreateButton); - Controls.Add(pictureBoxAntiAircraftGun); - Name = "FormAntiAircraftGun"; - Text = "Form1"; - ((System.ComponentModel.ISupportInitialize)pictureBoxAntiAircraftGun).EndInit(); + Controls.Add(pictureBoxLiner); + Name = "FormLiner"; + Text = "Liner"; + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); ResumeLayout(false); } #endregion - private PictureBox pictureBoxAntiAircraftGun; + private PictureBox pictureBoxLiner; private Button CreateButton; private Button buttonRight; private Button buttonDown; diff --git a/ProjectAntiAircraftGun/FormAntiAircraftGun.cs b/ProjectAntiAircraftGun/FormLiner.cs similarity index 75% rename from ProjectAntiAircraftGun/FormAntiAircraftGun.cs rename to ProjectAntiAircraftGun/FormLiner.cs index 794aca0..d738aad 100644 --- a/ProjectAntiAircraftGun/FormAntiAircraftGun.cs +++ b/ProjectAntiAircraftGun/FormLiner.cs @@ -1,9 +1,9 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { - public partial class FormAntiAircraftGun : Form + public partial class FormLiner : Form { - private DrawingAntiAircraft? _drawer; - public FormAntiAircraftGun() + private DrawingLiner? _drawer; + public FormLiner() { InitializeComponent(); } @@ -12,10 +12,10 @@ namespace ProjectAntiAircraftGun if (_drawer == null) return; - Bitmap bmp = new(pictureBoxAntiAircraftGun.Width, pictureBoxAntiAircraftGun.Height); + Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); Graphics gr = Graphics.FromImage(bmp); _drawer.Draw(gr); - pictureBoxAntiAircraftGun.Image = bmp; + pictureBoxLiner.Image = bmp; } private void ButtonMove_Click(object sender, EventArgs e) { @@ -38,16 +38,15 @@ namespace ProjectAntiAircraftGun _drawer.MoveTransport(new Vector2(1, 0)); break; } - Draw(); } private void ButtonCreate_Click(object sender, EventArgs e) { Random rnd = new Random(); - _drawer = new DrawingAntiAircraft(new AntiAircraft(rnd.Next(1,100),rnd.Next(1,10), + _drawer = new DrawingLiner(new Liner(rnd.Next(1,100),rnd.Next(1,10), Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), - rnd.Next(2, 7))); + rnd.Next(2, 25), Convert.ToBoolean(rnd.Next(0,2)))); Draw(); } } diff --git a/ProjectAntiAircraftGun/FormAntiAircraftGun.resx b/ProjectAntiAircraftGun/FormLiner.resx similarity index 100% rename from ProjectAntiAircraftGun/FormAntiAircraftGun.resx rename to ProjectAntiAircraftGun/FormLiner.resx diff --git a/ProjectAntiAircraftGun/GameObject.cs b/ProjectAntiAircraftGun/GameObject.cs index a67dfbc..ba40162 100644 --- a/ProjectAntiAircraftGun/GameObject.cs +++ b/ProjectAntiAircraftGun/GameObject.cs @@ -1,4 +1,4 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { abstract public class GameObject { diff --git a/ProjectAntiAircraftGun/AntiAircraft.cs b/ProjectAntiAircraftGun/Liner.cs similarity index 70% rename from ProjectAntiAircraftGun/AntiAircraft.cs rename to ProjectAntiAircraftGun/Liner.cs index 5b2a6c8..40b1668 100644 --- a/ProjectAntiAircraftGun/AntiAircraft.cs +++ b/ProjectAntiAircraftGun/Liner.cs @@ -1,26 +1,29 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { - public class AntiAircraft : GameObject + public class Liner : GameObject { private int _speed; private int _weight; private Color _firstCol; private Color _secondCol; - private int _numOfRollers; + private int _numOfBoxes; + private bool _haveMark; private int _step; public int Speed { get => _speed;} public int Weight { get => _weight;} public Color FirstColor { get => _firstCol; } public Color SecondColor { get => _secondCol; } - public int NumOfRollers { get => _numOfRollers; } + public int NumOfBoxes { get => _numOfBoxes; } public int Step { get => _step>0?_step:1; } - public AntiAircraft() + public bool HasMark { get => _haveMark;} + public Liner() { _speed = 1; _weight = 1; _firstCol = Color.Magenta; _secondCol = Color.Black; - _numOfRollers = 6; + _numOfBoxes = 6; + _haveMark = true; try { _step = _speed / _weight; @@ -33,17 +36,18 @@ /// (0,int.MaxValue] /// /// - /// [2,6] + /// [2,6] /// - public AntiAircraft(int speed, int weight, Color firstCol, Color secondCol, int numOfRollers) + public Liner(int speed, int weight, Color firstCol, Color secondCol, int numOfBoxes,bool haveMark) { - if (numOfRollers < 2 || numOfRollers > 6) - throw new Exception("numOfRollers out of range [2,6]"); + if (numOfBoxes > 24||numOfBoxes<2) + throw new ArgumentOutOfRangeException($"{nameof(numOfBoxes)} out of range [2,24]"); _speed = speed; _weight = weight; _firstCol = firstCol; _secondCol = secondCol; - _numOfRollers = numOfRollers; + _numOfBoxes = numOfBoxes; + _haveMark = haveMark; try { _step = _speed / _weight; @@ -56,12 +60,12 @@ /// /// (0,int.MaxValue] /// - public AntiAircraft(int speed, int weight, Color firstCol) + public Liner(int speed, int weight, Color firstCol) { _speed = speed; _weight = weight; _firstCol = firstCol; - _numOfRollers = 6; + _numOfBoxes = 6; try { _step = _speed / _weight; diff --git a/ProjectAntiAircraftGun/Program.cs b/ProjectAntiAircraftGun/Program.cs index a09edc2..fff1540 100644 --- a/ProjectAntiAircraftGun/Program.cs +++ b/ProjectAntiAircraftGun/Program.cs @@ -1,11 +1,11 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { internal static class Program { /// /// The main entry point for the application. /// - public static FormAntiAircraftGun faag = new FormAntiAircraftGun(); + public static FormLiner faag = new FormLiner(); [STAThread] static void Main() { diff --git a/ProjectAntiAircraftGun/ProjectAntiAircraftGun.csproj b/ProjectAntiAircraftGun/ProjectLiner.csproj similarity index 100% rename from ProjectAntiAircraftGun/ProjectAntiAircraftGun.csproj rename to ProjectAntiAircraftGun/ProjectLiner.csproj diff --git a/ProjectAntiAircraftGun/ProjectAntiAircraftGun.sln b/ProjectAntiAircraftGun/ProjectLiner.sln similarity index 86% rename from ProjectAntiAircraftGun/ProjectAntiAircraftGun.sln rename to ProjectAntiAircraftGun/ProjectLiner.sln index 71ca527..1b46542 100644 --- a/ProjectAntiAircraftGun/ProjectAntiAircraftGun.sln +++ b/ProjectAntiAircraftGun/ProjectLiner.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.6.33815.320 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectAntiAircraftGun", "ProjectAntiAircraftGun.csproj", "{0C215558-2860-459F-A04D-5BCE3792F5CC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectLiner", "ProjectLiner.csproj", "{0C215558-2860-459F-A04D-5BCE3792F5CC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/ProjectAntiAircraftGun/Vector2.cs b/ProjectAntiAircraftGun/Vector2.cs index d92680b..c48cd3e 100644 --- a/ProjectAntiAircraftGun/Vector2.cs +++ b/ProjectAntiAircraftGun/Vector2.cs @@ -1,4 +1,4 @@ -namespace ProjectAntiAircraftGun +namespace ProjectLiner { public class Vector2 { -- 2.25.1 From 9067a2b57684f335f03e5c9842e093beaa675bfe Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Sat, 20 Apr 2024 15:31:50 +0400 Subject: [PATCH 04/11] TheEndVariantChange --- .gitignore | 337 ++---------------- ProjectAntiAircraftGun/DrawingLiner.cs | 82 ----- ProjectAntiAircraftGun/FormLiner.Designer.cs | 129 ------- ProjectAntiAircraftGun/FormLiner.cs | 53 --- ProjectAntiAircraftGun/GameObject.cs | 11 - ProjectAntiAircraftGun/Liner.cs | 76 ---- ProjectAntiAircraftGun/Program.cs | 18 - ProjectAntiAircraftGun/ProjectLiner.csproj | 11 - ProjectAntiAircraftGun/Vector2.cs | 19 - .../projectliner.metadata.v7.bin | Bin 0 -> 183784 bytes .../projectliner.projects.v7.bin | Bin 0 -> 206646 bytes .../ProjectLiner/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 97435 bytes ...aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx | Bin 0 -> 43322 bytes .../.vs/ProjectLiner/v17/.futdcache.v2 | Bin 0 -> 160 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 122 +++++++ .../ProjectLiner.sln | 14 +- ProjectLiner/ProjectLiner/DirectionType.cs | 27 ++ ProjectLiner/ProjectLiner/DrawingLiner.cs | 247 +++++++++++++ ProjectLiner/ProjectLiner/EntityLiner.cs | 62 ++++ .../ProjectLiner/FormLiner.Designer.cs | 134 +++++++ ProjectLiner/ProjectLiner/FormLiner.cs | 93 +++++ .../ProjectLiner}/FormLiner.resx | 0 ProjectLiner/ProjectLiner/Program.cs | 17 + ProjectLiner/ProjectLiner/ProjectLiner.csproj | 26 ++ .../Properties/Resources.Designer.cs | 103 ++++++ .../ProjectLiner/Properties/Resources.resx | 133 +++++++ .../ProjectLiner/Resources/arrowDown.jpg | Bin 0 -> 62022 bytes .../ProjectLiner/Resources/arrowLeft.jpg | Bin 0 -> 61872 bytes .../ProjectLiner/Resources/arrowRight.jpg | Bin 0 -> 61715 bytes .../ProjectLiner/Resources/arrowUp.jpg | Bin 0 -> 62105 bytes README.md | 2 - 31 files changed, 1006 insertions(+), 710 deletions(-) delete mode 100644 ProjectAntiAircraftGun/DrawingLiner.cs delete mode 100644 ProjectAntiAircraftGun/FormLiner.Designer.cs delete mode 100644 ProjectAntiAircraftGun/FormLiner.cs delete mode 100644 ProjectAntiAircraftGun/GameObject.cs delete mode 100644 ProjectAntiAircraftGun/Liner.cs delete mode 100644 ProjectAntiAircraftGun/Program.cs delete mode 100644 ProjectAntiAircraftGun/ProjectLiner.csproj delete mode 100644 ProjectAntiAircraftGun/Vector2.cs create mode 100644 ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin create mode 100644 ProjectLiner/.vs/ProjectEvaluation/projectliner.projects.v7.bin create mode 100644 ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 create mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx create mode 100644 ProjectLiner/.vs/ProjectLiner/v17/.futdcache.v2 create mode 100644 ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json rename {ProjectAntiAircraftGun => ProjectLiner}/ProjectLiner.sln (61%) create mode 100644 ProjectLiner/ProjectLiner/DirectionType.cs create mode 100644 ProjectLiner/ProjectLiner/DrawingLiner.cs create mode 100644 ProjectLiner/ProjectLiner/EntityLiner.cs create mode 100644 ProjectLiner/ProjectLiner/FormLiner.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/FormLiner.cs rename {ProjectAntiAircraftGun => ProjectLiner/ProjectLiner}/FormLiner.resx (100%) create mode 100644 ProjectLiner/ProjectLiner/Program.cs create mode 100644 ProjectLiner/ProjectLiner/ProjectLiner.csproj create mode 100644 ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/Properties/Resources.resx create mode 100644 ProjectLiner/ProjectLiner/Resources/arrowDown.jpg create mode 100644 ProjectLiner/ProjectLiner/Resources/arrowLeft.jpg create mode 100644 ProjectLiner/ProjectLiner/Resources/arrowRight.jpg create mode 100644 ProjectLiner/ProjectLiner/Resources/arrowUp.jpg delete mode 100644 README.md diff --git a/.gitignore b/.gitignore index ca1c7a3..8c7f0e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,85 +1,31 @@ -# ---> VisualStudio ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore # User-specific files -*.rsuser *.suo *.user -*.userosscache *.sln.docstates -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - # Build results + [Dd]ebug/ -[Dd]ebugPublic/ [Rr]elease/ -[Rr]eleases/ x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ [Bb]in/ [Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio *_i.c *_p.c -*_h.h +*_i.h *.ilk *.meta *.obj -*.iobj *.pch *.pdb -*.ipdb *.pgc *.pgd *.rsp @@ -89,41 +35,27 @@ StyleCopReport.xml *.tlh *.tmp *.tmp_proj -*_wpftmp.csproj *.log -*.tlog *.vspscc *.vssscc .builds *.pidb +*.log *.svclog *.scc -# Chutzpah Test files -_Chutzpah* - # Visual C++ cache files ipch/ *.aps *.ncb -*.opendb *.opensdf *.sdf *.cachefile -*.VC.db -*.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ # Guidance Automation Toolkit *.gpState @@ -133,268 +65,69 @@ _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - # Click-Once directory publish/ # Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted +*.Publish.xml *.pubxml -*.publishproj +*.azurePubxml -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +packages/ +## TODO: If the tool you use requires repositories.config, also uncomment the next line +!packages/repositories.config -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output +# Windows Azure Build Output csx/ *.build.csdef -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files +# Windows Store app package directory AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ # Others +sql/ +*.Cache ClientBin/ +[Ss]tyle[Cc]op.* +![Ss]tyle[Cc]op.targets ~$* *~ *.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx +*.[Pp]ublish.xml + *.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ # RIA/Silverlight projects Generated_Code/ -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak # SQL Server files -*.mdf -*.ldf -*.ndf +App_Data/*.mdf +App_Data/*.ldf -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl +# ========================= +# Windows detritus +# ========================= -# Microsoft Fakes -FakesAssemblies/ +# Windows image file caches +Thumbs.db +ehthumbs.db -# GhostDoc plugin setting file -*.GhostDoc.xml +# Folder config file +Desktop.ini -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ +# Recycle Bin used on file shares +$RECYCLE.BIN/ -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml +# Mac desktop service store files +.DS_Store +_NCrunch* diff --git a/ProjectAntiAircraftGun/DrawingLiner.cs b/ProjectAntiAircraftGun/DrawingLiner.cs deleted file mode 100644 index 75f61ab..0000000 --- a/ProjectAntiAircraftGun/DrawingLiner.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Drawing; - -namespace ProjectLiner -{ - internal class DrawingLiner - { - Liner aag; - private readonly int _width = 0; - private readonly int _height = 0; - public DrawingLiner(Liner aag) - { - this.aag = aag; - _height = 60 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15); - _width = 150; - } - public DrawingLiner() - { - aag = new Liner(); - } - public void SetPos(Point pos) - { - aag.position.X = Math.Clamp(pos.X + aag.position.X, 0, Program.faag.ClientSize.Width-_width); - aag.position.Y = Math.Clamp(pos.Y + aag.position.Y, 0, Program.faag.ClientSize.Height-_height); - } - public void MoveTransport(Vector2 way) - { - if(way == null) - { - throw new NullReferenceException(); - } - SetPos(new Point((int)(way.x*aag.Step), (int)(way.y*aag.Step))); - } - public void Draw(Graphics g) - { - Pen pen = new Pen(Color.Black); - Brush brush1 = new SolidBrush(aag.FirstColor); - Brush brush2 = new SolidBrush(aag.SecondColor); - - //deck - g.DrawPolygon(pen, new Point[] { - new Point(0 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(150 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(120 + aag.position.X, 45 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(30 + aag.position.X, 45 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15)), - new Point(0 + aag.position.X, 15 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15))}); - g.FillPolygon(brush1, new Point[] { - new Point(0 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(150 + aag.position.X, 15 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(120 + aag.position.X, 45 + aag.position.Y+((int)(aag.NumOfBoxes/8+0.5)*15)), - new Point(30 + aag.position.X, 45 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15)), - new Point(0 + aag.position.X, 15 + aag.position.Y +((int)(aag.NumOfBoxes / 8 + 0.5) * 15))}); - //mark - if (aag.HasMark) - { - g.DrawLine(new Pen(aag.SecondColor),30+aag.position.X, 20 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 30 + aag.position.X, 35 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15)); - g.DrawLine(new Pen(aag.SecondColor), 20+aag.position.X, 25 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 40 + aag.position.X, 25 + aag.position.Y + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15)); - } - //block - for (int j = 0; j <= (int)(aag.NumOfBoxes / 8 + 0.5); j++) - { - if(aag.NumOfBoxes - j * 8 >= 8) - for (int i = 0; i < 8; i++) - { - g.FillRectangle(brush2, 15 + aag.position.X + i * 15, aag.position.Y - j * 15+((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - g.DrawRectangle(pen, 15 + aag.position.X + i * 15, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - } - else - for (int i = 0; i < aag.NumOfBoxes%8; i++) - { - if(aag.NumOfBoxes % 8 == 1) - { - g.FillRectangle(brush2, 8 + 15 + aag.position.X + (90 / 2), aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - g.DrawRectangle(pen, 8 + 15 + aag.position.X + (90 / 2), aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - continue; - } - g.FillRectangle(brush2,8 +15 + aag.position.X + (90 / (aag.NumOfBoxes % 8 - 1)) * i, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - g.DrawRectangle(pen,8 + 15 + aag.position.X + (90 / (aag.NumOfBoxes % 8 - 1)) * i, aag.position.Y - j * 15 + ((int)(aag.NumOfBoxes / 8 + 0.5) * 15), 15, 15); - } - } - } - } -} diff --git a/ProjectAntiAircraftGun/FormLiner.Designer.cs b/ProjectAntiAircraftGun/FormLiner.Designer.cs deleted file mode 100644 index d02ac01..0000000 --- a/ProjectAntiAircraftGun/FormLiner.Designer.cs +++ /dev/null @@ -1,129 +0,0 @@ -namespace ProjectLiner -{ - partial class FormLiner - { - /// - /// 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() - { - pictureBoxLiner = new PictureBox(); - CreateButton = new Button(); - buttonRight = new Button(); - buttonDown = new Button(); - buttonLeft = new Button(); - buttonUp = new Button(); - ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); - SuspendLayout(); - // - // pictureBoxLiner - // - pictureBoxLiner.Dock = DockStyle.Fill; - pictureBoxLiner.Location = new Point(0, 0); - pictureBoxLiner.Name = "pictureBoxLiner"; - pictureBoxLiner.Size = new Size(800, 450); - pictureBoxLiner.TabIndex = 5; - pictureBoxLiner.TabStop = false; - // - // CreateButton - // - CreateButton.Location = new Point(12, 408); - CreateButton.Name = "CreateButton"; - CreateButton.Size = new Size(90, 30); - CreateButton.TabIndex = 0; - CreateButton.Text = "Create"; - CreateButton.UseVisualStyleBackColor = true; - CreateButton.Click += ButtonCreate_Click; - // - // buttonRight - // - buttonRight.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); - buttonRight.Location = new Point(748, 398); - buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(40, 40); - buttonRight.TabIndex = 1; - buttonRight.Text = "⇒"; - buttonRight.UseVisualStyleBackColor = true; - buttonRight.Click += ButtonMove_Click; - // - // buttonDown - // - buttonDown.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); - buttonDown.Location = new Point(702, 398); - buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(40, 40); - buttonDown.TabIndex = 2; - buttonDown.Text = "⇓"; - buttonDown.UseVisualStyleBackColor = true; - buttonDown.Click += ButtonMove_Click; - // - // buttonLeft - // - buttonLeft.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); - buttonLeft.Location = new Point(656, 398); - buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(40, 40); - buttonLeft.TabIndex = 3; - buttonLeft.Text = "⇐"; - buttonLeft.UseVisualStyleBackColor = true; - buttonLeft.Click += ButtonMove_Click; - // - // buttonUp - // - buttonUp.Font = new Font("Segoe UI", 15F, FontStyle.Regular, GraphicsUnit.Point); - buttonUp.Location = new Point(702, 352); - buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(40, 40); - buttonUp.TabIndex = 4; - buttonUp.Text = "⇑"; - buttonUp.UseVisualStyleBackColor = true; - buttonUp.Click += ButtonMove_Click; - // - // FormAntiAircraftGun - // - AutoScaleDimensions = new SizeF(8F, 20F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); - Controls.Add(buttonUp); - Controls.Add(buttonLeft); - Controls.Add(buttonDown); - Controls.Add(buttonRight); - Controls.Add(CreateButton); - Controls.Add(pictureBoxLiner); - Name = "FormLiner"; - Text = "Liner"; - ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); - ResumeLayout(false); - } - - #endregion - - private PictureBox pictureBoxLiner; - private Button CreateButton; - private Button buttonRight; - private Button buttonDown; - private Button buttonLeft; - private Button buttonUp; - } -} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/FormLiner.cs b/ProjectAntiAircraftGun/FormLiner.cs deleted file mode 100644 index d738aad..0000000 --- a/ProjectAntiAircraftGun/FormLiner.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace ProjectLiner -{ - public partial class FormLiner : Form - { - private DrawingLiner? _drawer; - public FormLiner() - { - InitializeComponent(); - } - private void Draw() - { - if (_drawer == null) - return; - - Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawer.Draw(gr); - pictureBoxLiner.Image = bmp; - } - private void ButtonMove_Click(object sender, EventArgs e) - { - if (_drawer == null) - { - return; - } - switch (((Button)sender)?.Name ?? string.Empty) - { - case "buttonUp": - _drawer.MoveTransport(new Vector2(0, -1)); - break; - case "buttonDown": - _drawer.MoveTransport(new Vector2(0, 1)); - break; - case "buttonLeft": - _drawer.MoveTransport(new Vector2(-1, 0)); - break; - case "buttonRight": - _drawer.MoveTransport(new Vector2(1, 0)); - break; - } - Draw(); - } - private void ButtonCreate_Click(object sender, EventArgs e) - { - Random rnd = new Random(); - _drawer = new DrawingLiner(new Liner(rnd.Next(1,100),rnd.Next(1,10), - Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), - Color.FromArgb(rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), - rnd.Next(2, 25), Convert.ToBoolean(rnd.Next(0,2)))); - Draw(); - } - } -} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/GameObject.cs b/ProjectAntiAircraftGun/GameObject.cs deleted file mode 100644 index ba40162..0000000 --- a/ProjectAntiAircraftGun/GameObject.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ProjectLiner -{ - abstract public class GameObject - { - public Point position; - public GameObject() - { - position = new Point(); - } - } -} diff --git a/ProjectAntiAircraftGun/Liner.cs b/ProjectAntiAircraftGun/Liner.cs deleted file mode 100644 index 40b1668..0000000 --- a/ProjectAntiAircraftGun/Liner.cs +++ /dev/null @@ -1,76 +0,0 @@ -namespace ProjectLiner -{ - public class Liner : GameObject - { - private int _speed; - private int _weight; - private Color _firstCol; - private Color _secondCol; - private int _numOfBoxes; - private bool _haveMark; - private int _step; - public int Speed { get => _speed;} - public int Weight { get => _weight;} - public Color FirstColor { get => _firstCol; } - public Color SecondColor { get => _secondCol; } - public int NumOfBoxes { get => _numOfBoxes; } - public int Step { get => _step>0?_step:1; } - public bool HasMark { get => _haveMark;} - public Liner() - { - _speed = 1; - _weight = 1; - _firstCol = Color.Magenta; - _secondCol = Color.Black; - _numOfBoxes = 6; - _haveMark = true; - try - { - _step = _speed / _weight; - }catch(Exception e) { throw new Exception("Дурашка, какой ноль в весе?"); } - } - /// - /// - /// - /// - /// (0,int.MaxValue] - /// - /// - /// [2,6] - /// - public Liner(int speed, int weight, Color firstCol, Color secondCol, int numOfBoxes,bool haveMark) - { - if (numOfBoxes > 24||numOfBoxes<2) - throw new ArgumentOutOfRangeException($"{nameof(numOfBoxes)} out of range [2,24]"); - _speed = speed; - _weight = weight; - _firstCol = firstCol; - _secondCol = secondCol; - _numOfBoxes = numOfBoxes; - _haveMark = haveMark; - try - { - _step = _speed / _weight; - } - catch (Exception e) { throw new Exception("Дурашка, какой ноль в весе?"); } - } - /// - /// - /// - /// - /// (0,int.MaxValue] - /// - public Liner(int speed, int weight, Color firstCol) - { - _speed = speed; - _weight = weight; - _firstCol = firstCol; - _numOfBoxes = 6; - try - { - _step = _speed / _weight; - } - catch (Exception e) { throw e; } - } - } -} diff --git a/ProjectAntiAircraftGun/Program.cs b/ProjectAntiAircraftGun/Program.cs deleted file mode 100644 index fff1540..0000000 --- a/ProjectAntiAircraftGun/Program.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace ProjectLiner -{ - internal static class Program - { - /// - /// The main entry point for the application. - /// - public static FormLiner faag = new FormLiner(); - [STAThread] - static void Main() - { - // To customize application configuration such as set high DPI settings or default font, - // see https://aka.ms/applicationconfiguration. - ApplicationConfiguration.Initialize(); - Application.Run(faag); - } - } -} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/ProjectLiner.csproj b/ProjectAntiAircraftGun/ProjectLiner.csproj deleted file mode 100644 index e1a0735..0000000 --- a/ProjectAntiAircraftGun/ProjectLiner.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - WinExe - net7.0-windows - enable - true - enable - - - \ No newline at end of file diff --git a/ProjectAntiAircraftGun/Vector2.cs b/ProjectAntiAircraftGun/Vector2.cs deleted file mode 100644 index c48cd3e..0000000 --- a/ProjectAntiAircraftGun/Vector2.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace ProjectLiner -{ - public class Vector2 - { - public float x, y; - public float lenght => MathF.Sqrt(x * x + y * y); - public Vector2 normilized => new Vector2(x/lenght, y/lenght); - public Vector2(float x, float y) - { - this.x = x; - this.y = y; - } - public Vector2() - { - x = 0; - y = 0; - } - } -} diff --git a/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin b/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin new file mode 100644 index 0000000000000000000000000000000000000000..1318f3eefd03c2fd76c7f2ef51864b67e0304099 GIT binary patch literal 183784 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 hXzb{F5 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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/.vs/ProjectEvaluation/projectliner.projects.v7.bin b/ProjectLiner/.vs/ProjectEvaluation/projectliner.projects.v7.bin new file mode 100644 index 0000000000000000000000000000000000000000..024caa947565c9b0a13b314d04114dec34a9a0d1 GIT binary patch literal 206646 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⋙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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 b/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..b7b953026f9f13478fe05d78dcf294edf8782914 GIT binary patch literal 97435 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 +/// Направление перемещения +/// +public enum DirectionType +{ + ///

+ /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/DrawingLiner.cs b/ProjectLiner/ProjectLiner/DrawingLiner.cs new file mode 100644 index 0000000..8497562 --- /dev/null +++ b/ProjectLiner/ProjectLiner/DrawingLiner.cs @@ -0,0 +1,247 @@ +namespace ProjectLiner; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningLiner +{ + /// + /// Класс-сущность + /// + public EntityLiner? EntityLiner { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки автомобиля + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки автомобиля + /// + private int? _startPosY; + + /// + /// Ширина прорисовки автомобиля + /// + private readonly int _drawingLinerWidth = 80; + + /// + /// Высота прорисовки автомобиля + /// + private readonly int _drawingLinerHeight = 60; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoratins) + { + EntityLiner = new EntityLiner(); + EntityLiner.Init(speed, weight, bodyColor, additionalColor, hasMark, hasDecoratins); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + if (_drawingLinerWidth > width || _drawingLinerHeight > height) + return false; + + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_pictureWidth - _drawingLinerWidth < _startPosX) + _startPosX = _pictureWidth - _drawingLinerWidth; + if (_pictureHeight - _drawingLinerHeight < _startPosY) + _startPosY = _pictureHeight - _drawingLinerHeight; + + } + return true; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + _startPosX = _pictureWidth - _drawingLinerWidth < x ? _pictureWidth - _drawingLinerWidth : x; + _startPosY = _pictureHeight - _drawingLinerHeight < y ? _pictureHeight - _drawingLinerHeight : y; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityLiner.Step > 0) + { + _startPosX -= (int)EntityLiner.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityLiner.Step > 0) + { + _startPosY -= (int)EntityLiner.Step; + } + return true; + // вправо + case DirectionType.Right: + if(_startPosX.Value + EntityLiner.Step < _pictureWidth-_drawingLinerWidth) + { + _startPosX += (int)EntityLiner.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityLiner.Step < _pictureHeight-_drawingLinerHeight) + { + _startPosY += (int)EntityLiner.Step; + } + return true; + default: + return false; + } + } + + public void FormChanged(object sender, EventArgs e) + { + _pictureWidth = (sender as FormLiner).Size.Width; + _pictureHeight = (sender as FormLiner).Size.Height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_pictureWidth - _drawingLinerWidth < _startPosX) + _startPosX = _pictureWidth - _drawingLinerWidth; + if (_pictureHeight - _drawingLinerHeight < _startPosY) + _startPosY = _pictureHeight - _drawingLinerHeight; + (sender as FormLiner).Draw(); + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new Pen(Color.Black); + Brush mainBrush = new SolidBrush(EntityLiner.BodyColor); + Brush additionalBrush = new SolidBrush(EntityLiner.AdditionalColor); + + g.DrawRectangle(pen, new(_startPosX.Value, _startPosY.Value, 80, 60)); + + //Рисуем тело + g.FillPolygon(mainBrush, new Point[] { + new(_startPosX.Value+0, _startPosY.Value + 30), + new(_startPosX.Value+15,_startPosY.Value+50), + new(_startPosX.Value+65,_startPosY.Value+50), + new(_startPosX.Value+80,_startPosY.Value+30), + new(_startPosX.Value+0,_startPosY.Value+30), + new(_startPosX.Value+0,_startPosY.Value+20), + new(_startPosX.Value+80, _startPosY.Value+20), + new(_startPosX.Value+80, _startPosY.Value+30) + }); + g.DrawLines(pen, new Point[] { + new(_startPosX.Value+0, _startPosY.Value + 30), + new(_startPosX.Value+15,_startPosY.Value+50), + new(_startPosX.Value+65,_startPosY.Value+50), + new(_startPosX.Value+80,_startPosY.Value+30), + new(_startPosX.Value+0,_startPosY.Value+30), + new(_startPosX.Value+0,_startPosY.Value+20), + new(_startPosX.Value+80, _startPosY.Value+20), + new(_startPosX.Value+80, _startPosY.Value+30) + }); + + //Рисуем окна + g.FillRectangles(additionalBrush, new Rectangle[]{ + new(_startPosX.Value+5,_startPosY.Value+22,10,6), + new(_startPosX.Value+20,_startPosY.Value+22,10,6), + new(_startPosX.Value+35,_startPosY.Value+22,10,6), + new(_startPosX.Value+50,_startPosY.Value+22,10,6), + new(_startPosX.Value+65,_startPosY.Value+22,10,6), + }); + g.DrawRectangles(pen, new Rectangle[]{ + new(_startPosX.Value+5,_startPosY.Value+22,10,6), + new(_startPosX.Value+20,_startPosY.Value+22,10,6), + new(_startPosX.Value+35,_startPosY.Value+22,10,6), + new(_startPosX.Value+50,_startPosY.Value+22,10,6), + new(_startPosX.Value+65,_startPosY.Value+22,10,6), + }); + + //Марка на борту + if (EntityLiner.HasMark) + { + g.FillRectangles(additionalBrush, new Rectangle[] + { + new(_startPosX.Value+15,_startPosY.Value+38,17,3), + new(_startPosX.Value+22,_startPosY.Value+32,3,16) + }); + } + + //Декорации + if (EntityLiner.HasDecoratins) + { + g.FillRectangles(additionalBrush, new Rectangle[] + { + new(_startPosX.Value+8,_startPosY.Value+0,10,20), + new(_startPosX.Value+26,_startPosY.Value+0,10,20), + new(_startPosX.Value+44,_startPosY.Value+0,10,20), + new(_startPosX.Value+62,_startPosY.Value+0,10,20), + }); + g.DrawRectangles(pen, new Rectangle[] + { + new(_startPosX.Value+8,_startPosY.Value+0,10,20), + new(_startPosX.Value+26,_startPosY.Value+0,10,20), + new(_startPosX.Value+44,_startPosY.Value+0,10,20), + new(_startPosX.Value+62,_startPosY.Value+0,10,20), + }); + } + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/EntityLiner.cs b/ProjectLiner/ProjectLiner/EntityLiner.cs new file mode 100644 index 0000000..8a6d5e1 --- /dev/null +++ b/ProjectLiner/ProjectLiner/EntityLiner.cs @@ -0,0 +1,62 @@ +namespace ProjectLiner; + +/// +/// Класс-сущность "Спортивный автомобиль" +/// +public class EntityLiner +{ + /// + /// Скорость + /// + 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 HasMark { get; private set; } + + /// + /// Имеет декорации сверху + /// + public bool HasDecoratins { get; private set; } + + /// + /// Шаг перемещения автомобиля + /// + public double Step => Speed * 100 / Weight; + + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Имеет значёк на куове + /// Имеет декорации сверху + /// + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoratins) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + HasMark = hasMark; + HasDecoratins = hasDecoratins; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs new file mode 100644 index 0000000..8b7f316 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs @@ -0,0 +1,134 @@ +namespace ProjectLiner +{ + partial class FormLiner + { + /// + /// 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() + { + pictureBoxLiner = new PictureBox(); + buttonCreateLiner = new Button(); + buttonLeft = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonRight = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); + SuspendLayout(); + // + // pictureBoxLiner + // + pictureBoxLiner.Dock = DockStyle.Fill; + pictureBoxLiner.Location = new Point(0, 0); + pictureBoxLiner.Name = "pictureBoxLiner"; + pictureBoxLiner.Size = new Size(923, 597); + pictureBoxLiner.TabIndex = 0; + pictureBoxLiner.TabStop = false; + // + // buttonCreateLiner + // + buttonCreateLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateLiner.Location = new Point(12, 562); + buttonCreateLiner.Name = "buttonCreateLiner"; + buttonCreateLiner.Size = new Size(75, 23); + buttonCreateLiner.TabIndex = 1; + buttonCreateLiner.Text = "Создать"; + buttonCreateLiner.UseVisualStyleBackColor = true; + buttonCreateLiner.Click += ButtonCreateLiner_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(787, 550); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(828, 509); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(828, 550); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 4; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(869, 550); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 5; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // FormLiner + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(923, 597); + Controls.Add(buttonRight); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(buttonLeft); + Controls.Add(buttonCreateLiner); + Controls.Add(pictureBoxLiner); + Name = "FormLiner"; + Text = "Пассажирский лайнер"; + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxLiner; + private Button buttonCreateLiner; + private Button buttonLeft; + private Button buttonUp; + private Button buttonDown; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.cs b/ProjectLiner/ProjectLiner/FormLiner.cs new file mode 100644 index 0000000..2ac37f2 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLiner.cs @@ -0,0 +1,93 @@ +namespace ProjectLiner; + +/// +/// Форма работы с объектом "Спортивный автомобиль" +/// +public partial class FormLiner : Form +{ + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningLiner? _drawningLiner; + + /// + /// Конструктор формы + /// + public FormLiner() + { + InitializeComponent(); + } + + /// + /// Метод прорисовки машины + /// + public void Draw() + { + if (_drawningLiner == null) + { + return; + } + + Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningLiner.DrawTransport(gr); + pictureBoxLiner.Image = bmp; + } + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreateLiner_Click(object sender, EventArgs e) + { + if (_drawningLiner != null) + ResizeEnd -= _drawningLiner.FormChanged; + Random random = new(); + _drawningLiner = new DrawningLiner(); + _drawningLiner.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))); + _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); + _drawningLiner.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + ResizeEnd += _drawningLiner.FormChanged; + } + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningLiner == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningLiner.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningLiner.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningLiner.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningLiner.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { + Draw(); + } + } +} \ No newline at end of file diff --git a/ProjectAntiAircraftGun/FormLiner.resx b/ProjectLiner/ProjectLiner/FormLiner.resx similarity index 100% rename from ProjectAntiAircraftGun/FormLiner.resx rename to ProjectLiner/ProjectLiner/FormLiner.resx diff --git a/ProjectLiner/ProjectLiner/Program.cs b/ProjectLiner/ProjectLiner/Program.cs new file mode 100644 index 0000000..20e3493 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Program.cs @@ -0,0 +1,17 @@ +namespace ProjectLiner +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new FormLiner()); + } + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/ProjectLiner.csproj b/ProjectLiner/ProjectLiner/ProjectLiner.csproj new file mode 100644 index 0000000..244387d --- /dev/null +++ b/ProjectLiner/ProjectLiner/ProjectLiner.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net7.0-windows + enable + true + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs b/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2df683e --- /dev/null +++ b/ProjectLiner/ProjectLiner/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectLiner.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("ProjectLiner.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 arrowDown { + get { + object obj = ResourceManager.GetObject("arrowDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowLeft { + get { + object obj = ResourceManager.GetObject("arrowLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowRight { + get { + object obj = ResourceManager.GetObject("arrowRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowUp { + get { + object obj = ResourceManager.GetObject("arrowUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectLiner/ProjectLiner/Properties/Resources.resx b/ProjectLiner/ProjectLiner/Properties/Resources.resx new file mode 100644 index 0000000..293419e --- /dev/null +++ b/ProjectLiner/ProjectLiner/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\arrowDown.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Resources/arrowDown.jpg b/ProjectLiner/ProjectLiner/Resources/arrowDown.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f21002e9dce74a1a585cf193d689dabca519cdff GIT binary patch literal 62022 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 av7M8J~td~%> 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 OjHZEMlm?jp-vj_Aq!j}I literal 0 HcmV?d00001 diff --git a/ProjectLiner/ProjectLiner/Resources/arrowRight.jpg b/ProjectLiner/ProjectLiner/Resources/arrowRight.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b440197337637a3901527809017ac3875c61ab4d GIT binary patch literal 61715 zcmeEv2_RJc`v0--*_Uin_6S)*l2HKtc|b7s!@`ke3gc|OnQdA>{iOGJoo z=MM875Ca1PE|_3mYpN+w#KB z!NtMO&dJWk#>vCU$;Ay`Y#gh2dAL_CZ!dqy^6ATGf&bj>Z0yTNeBW!S5#ncOHDWbl zVvvCt`5Bn_8I}kT0$eEzXo=;<_~FIC$i&RT3NDG03mj0z2QHt9i4j~Z3p2P~hEw48 z5HmlEz*>#1tb#WC*kpo)G*74IvdeBOZxY_qMV8a@JQ~TtDIzMiT3lX1QE8pB_C_6D zy-oVY+f8;OOM+wcq=I&q3cq!6Bi?!orWAh>DJhJ##iLKJEO4^o-1l zS(mQmMdpN z!^cnapW!cGm+y-KV)}Mlf4#GRxG#QiUyR^yz|6LMUkr?4U}55CW?8GjDzMdtZC{X} zjOJ-}p>3(TCXOoV}HA^L5LdwlaZf^ zA3{Ql)NAod5PhMy0UZN$4A3z^#{eAzbPUijK*s&@n*A038E# z4A3z^#{eAz|8p2%QfYHn?LjkHYsLS?zydv_{W#L^>@SQ>Sa}VW`l8@ZXzkI^h zKyac&blf4ja`9x#rMAp*9yYsZSI4)`0mEU(GE=2fB+Jv13(NOxE!(o#fShc_XfHwi zXG*bC4JT+ju*8d4vNJYmjJy*s+BVAChpaXb4AQbF3fFZ^Gp{_^O=L^w+u(PcEEMOd zY`%S!oRM_|_MnghVF@DdEQ8fvHz8r=hB#InX~d*nmZGe;E3<*?g`y3bvDDqdX@kJ~ zHB3@nq+T_5y*aJw6aJ)0Tc@iVlWrP^DYEnQ--%&__Bwe9PaSvN}^_511y4mMwcnjRon zk;Lo#zJ`J?6jDgIHm-EX?3TLxiRnv(0a==SpCY3_weaDQ^Nfzl4{q#VgSgiFU+^dU zUw?GI2eK?eHbyLls|QEzLJpX2TkW))Gxb^2u4@rUcRVo_^jx8{1nhvY_81fOSjt|w zocwCUesIWMpg26mIFY~eA}m^d`mTRg#@5uhV>c3)pdF|?_?am3qxm7&EpWmr#!$Np z?MHePb$i&cR=@>`QVVxof7?6}p|;nwiA_ufAEW=NtpD}=1YEShgm#Wc!8<_G%1C@lF zU;7UCH82MsD^7cj|H(c`>010>7nP4KG!Eeie<1d-}- z`QB-%UE&#W+VN(wZ$}yq4!t}gc0hNoKd&z7`TLDj1g#TWc_w)Y^5%^{5t!5<0T(-y z!{RG5o;2iLf9iSOx9!dFsR3DksO#?jpq6!#4j(syPBv}{imEn{STK@OX~b4WPT_gc zJ{rm0eXY+h?^?bV<1#~EOwgj%ZZ3iemCHJC$(y5Hk)nR<2PNUl^ znhZ2KWO8&E(x1l~uVdyjWfre7T6sj5A5;4Br?r8!#R3}pFrMnW1eNoG!LSGYiMpZh z^Om34`;5Uv$od}_wow#$r#h^sJ`qS2n6T;jxcSt!z_SR>wdVz4UB|jW*?dJ3aOT_-T>tOVAyqQ-~{VERHnrO@({rtb@o;O;cI(L=z5oT`g+4c z6|HG<2|?BhXX~;0ksSjz)V=nfTTpSMGVsQU60KHgfxe9>p70ct%dU=xPI&hWjyRj? zYnnxC=Hx{^kPErWJ9{Xe$`8J3C-{=F+wU}eY3z%|Ym;BR-FAB@dkE(mi7qj+R)j^ZijDqVU?P0#hSHGb=TCMc< z)ZSDhiU0Kh_|Lxo?;h}ft|vJa1bVR+fQnx95wNy{t6UoEUeC8jmMZv$seR5e3}hY9G?(U7TBfzpQ!?QG%h^Zg2q{#?=sbZ=yhpYf&@hbH_k?W zii@}};ShZP)?JP;K8EBs%ao43X)j10_tTZI<_z?EG9{cAnilzd%Es}Wzta{qH;CG*@&2|8$>cy&qPj^fHw z)hv*^`mn-&l?|LPV_Iq;L|2J$81$+-A+^s4>ox0C;NWU z2R_B~gNJjKx*x!HKh+u~06ZMa)}#``Lxtk2?xHx8KD!h0&#Q@I#B_nR=GI#Np%2TZ z{Ae61z_3_LT@B94FwKXpoO6(|NHMkaeSxdq2B(z26HGIuT9oc)9%`_id?4WAc=Oij zU1z=^3U|zK6{`q)Z(^3@JIJ&!e+{3x1i^9+RH-0}?7WesZsQUpC29wkkVi*E2K)93 zsD!6%P2`W1Lv!^v4(se{-kMIxwcdfvLk^(kn_-`Y!|3%jl)`45_`y+a^2-)~T@g*q zhyIJ`TGEj_O$wXlUT*j23yS1{P6YhiV@u!nyBY=m?!f<#h5&RXba`0Ux966V?wV`OG|A z%qEs4A_kD`v~{k6Lctb6FT(>}PhCCDLMXMYzZJ&7JiT?ZuzdRPnnm|AqBPzD_-#0H zuxKj)rQ+IdDq=#R9$+zcjPH8tsn8nRXA@J|64$wpDK&}Ay)sbi-SA%B2=T&Bn1sKb zNfojnA*ezrq&1W?%_!l)cQ2~P*B15fY}iqd`$Q&#Z^WhMiG;T+>*}P({$61=b@w|W zIF+u^mp`Zt3^M28CFr~`+_MCEO4lwy*T1}j_m#ar`E$FkGR7Sfi~{Het}bm+o5 zv~3SMfIQLa+!=+o%RfJV%GC0%hMCYr$YI0j)anhu#o5=ws8{yJi^c&uS~h72O`=Wz_Pw;GR|{&FUK`?#M7(k=&R7zD@+^oRQood^I9j?;q`2M3os)#?H4(Pv1i zfD3Ka5|m<>X+=iPIB_5QEWpoGL*P*$$n7S4>Q$A26tSa23S)KL%DU#Ld(y0w_h%@& zO<%ER4YY1e8Ol5h1-?yk!F9LxFrSnBZzvYPw>c>+=Rn?ya>X`n0C26uN#Kd;hU!iR z9Hm%4SnchB%su48<#OlW^xYz=bez4#Eh=XBS2KAHVvt3cf><$=TgX;4&XQ|GQ+2Cy zmmqd5p*1eQo@`&PzgRQr_H_P^hy1V+>*jN8c6;3Q+O+0h{-O=^XZsufzklEF;xGMz z;U%iQ<=8^=*XKFFKOS*Bq>p|W}W;{LLx)A+1f45HUz9UaHU@Wi_!pE3s z2I1=SnXvcu@JE2~iq}So!Y+;}k1Ig{qTp_X9<{bf^G;^q2l+f|fV1Cpc9qq@ha0;aT8 z+hM?Sv8+!pCnwixW4RkPxGFb~O834-mHTO}n9Amit{@n2PVQ>Cozu3}>}+qI|3Vwl z8LeN>>izD9>CdoME5_^Yq(M=8d*zO!?0Rc@4qoN$3xwr-zBxCBE6$B%racG*jE?LX z9J2i&TyJ`{P3)*VaBiC4OS?XnTkTfCvUN2r5xXBhq)5WeJR~P~wj(&HZUy1@TKXLA z)1J?FdMjw|yBkw3Cy-nqXXnp%WGnL$#3lT83A)2JQ$sPG=YnejCjw&(H#|qnmhNB< zLmW8uVldI@^~2iJ6_OOerw@f9jDV>OAx3zFzij@294KlKq771}FstB)i&^B9@tBsg zvN`5E!vmdzBO12PY54hyWk~OxOcq+-trdW{Mfdc72d3k9^WuNah$8&e1^lT2FCTT$ za09k!lglnLHevAHIKEi|y}fSB;)@ZB?I{vl%j-M{GDQABg*W7Twh!04#g$-_w<<))z$#Utq4)3aagV)Ov6F|>rgw2Np5q<7shpEu z?ELOhK*^`1*84BhCoK#_`OM_v!~0nscDTmwVP6v!x#|$z68JSZ`De%c8KeHsjcABa zK(i}hiFlkio|qwi<$6-#XiYLr_)F9Kda2@J-SYzHGj(i9IZut#FxFiH<_Cv~DN}hg zjsh^+o`BWC+J?Nk_nT|8G3NH&7wC0G<2+ub5|J4P=eCz0R%Y%JO?hp-vsMWi-!Tja zQxpjZHfnGIoY#C}w1kA`KiHFy&11Ez?xf4TO{S*F+t*&0+p+bH8HfWMji+(|yzW?z z1MrV1WD}8tH-%$&$yXH;c+`4c2A^Z-4e(mH|6ya@#QP||FZpF7V~p@;V>p*2g+!5` zR^`J9Tc78Ois)x#g-MNEnKsR9UB5rC=+hn($iM54ClUWI619J7m-^#JMfg)DRZxY- zwTS{^u3qEtB$@YYes8@*P|)kQ7~bcT$3Obb4H?(9Umkk8?Z$^|%I%)9qj~$j=zv&j z8=eU0d9r(8B$jMbXNwq%yAj++Bg}3Vk8w4H} zgp1DSB!6hbh?-dVVI`c5B%FKBLB;bAG8rilQ%G?f?SpR4Yaxb3X&cwT#?F*cuEpyO zKrN#MW5<(3+oVNb@NFqAC>T*Cs5i<>NaiP8*7j%0ec-_^b5HrNapxb$py}Ixi^u)od|Ew#R^n(zeBRyuHOQ)WRje;;HSpD&q!I6&0d;8!J&ZE4|IZziFBI zS07NBe++vq1XE=zDecX8(J4c9^5P2-)5`OrBAQ+b5@%fmwko~5V`AUL%*Zas)O+Jc znuve=8_?hXJwE@_m|S7RKLrjj%@4qN3oKNp8cIzwPVCSqf1fPp`Nd0?z?In=b^IIa zzvGx$J|lye2m9P5C8n?G0L{xW`R51_{tpQ0rb>yK)NGGMuVvnUC*b|DBnrsKI`h8N?k7*6p3M5WUL#PCuTE?FT_yK&;U?jmfPBHe_6z$cc|fu1T3%TsVcZ z>)P+Zn;Gmsrq6dY7wBG!g~Cvm?vMXr5A^?~aKax)-~U#kdDRe+ZAN$kH-H+?xH5q{ zJZ-5Bm4LMxKX8TKg4Q0Qv{e=airpJ9w0wvQj+kfQv9uq9{ zidDRs#RciF^M`y-0P2Cd7AKgYkT%=oT>oyqjs0GZh53=9Wl@YZhp=@;yI2!4 z@F!BTpG1`Z8FBX=``IW_OAznd#d7=`QiBYZ=!vChV_UxB{R6-11)jyhVmPWLI>7`w z1zcD9Ve|%}BZU4e&^rfuZ~6blxL`Nl39HV|_)d&*zC9sbPI=uv7<<0N*~06T-^Rg< z?>*8v%_Vs7q3LH0+Zyct1CDj=H9vJce_xTCB^{eX47#)303`HCdb9)f;(> zeVO!fm) zuWMT|GRrAqy5C89(ZKkR!;x+Ai8%7EvUsj>5O`D0wu~J=IQcw88oT7A*wm6&j3 zhupTbtH%ap1T3*T$Cedpo79P)sX{;t&QB3+BICywpFR*Z>QxJKdUrHOYu{0$RgZ(t zBK&Lpm-!QDam}?qwvZze%=QO=!*}ae{+qAo$3j-$N^7=vnN$H?+NvrzeL=GQI*gcz zK2g?+i>-cJ{h}`AGM=3JMkDsAy+h;u#C0CBSC+}FjvKPbuEOc`g#&1f#abHwVE6qoCSs(PtU0u%3aN96D8d+5SCCr_5h4$EWdFbVpxYK*rL5n5Vil)S?O79m8j`a@@ zjXI8P&lLGAG6&MRbQ#jSGS{Y`W(G=!C$8V$WWNA2IuO72(f#r9ymd(81q2y|O#&HP zGoF2>J%KLmNG@lO&pABL-@81Bv+y45@YiyBaJ2m;kA%phwn;|hbsVe^MipTq;;F)> zjRzJ;oo5X@#}g#>1>b_LY#CQ#vmyuQ>>a~|84p?%&hlwE$g@%0T(GNXa^X=V(WH-^ zg5eI%&+9jhtBM2#?<<+a@Txg(PO-$WDRD2(pE`n5iO2!s0i-5w1Tz(b-Ey z6mK3rSa&)gcf{+d$K@EC*W2u#w({KH(K2@m1UVD2P0Pv9^`Jw<5{t#RRA*ir!#0aj zjJ9{XhpRZ;Wu1<8>y*#$-+S*Y)UG6A!tOM&H4;NCBU){LQD(5Q*!ivash3Y;bG?*1 z1A5OrAWmd28|;MTa8#**aeOqJCD74sminA*pe|f12or~kyod;SWteKF5C|Pmhb0prkGgdz^$xs^3GohS``4lbS{8rz)qm%0h z$By=OGLx)HjUk)38JHb>f0rB%MB^5^;PCfpNh83@BeBFnB#<)^vrwRl$rvZvF6eqo zkoM6-mxKq7e{?%;t7lOh(18F-QImDbY(Odc3SVHg%)(0MlCd;So5f5LuYfj!i?+c{ zsK%1bx^~2?bQef3HL6|1dO(i=;;O1KAGT$dP2P<0EJQKl$PEzzI~0q2_ZcqLje6>&2Y|W7cQ+MlB!nTzq}@+^UDd zu|~4Yj0UA3(3B69A!Fpwz-IiAdB_+m^?;ieiI?#1%$!W^aZWG{21i_5J$b;-X+`>3 z##Qa((~opkf!WHsfvVMkDp^K}qH){}!Lz|dr48$-YpMt;xnr&~z1n7!2oNsSQZ5x* z%(3j^D_B+%Mj%U+RhqCKv+z3IrcQVrvPGVPY{rT?z1t=>5ny3{`4rB+Yri+!quT1g zEcQ)q@9Gqlhol-u+&}&1hmzi<{hXri-`yuw*l0B<+K#yMx|K(_4Zn(NR}#Lt)!E{3 zHPFpxM0&H$%6gqiI>RFonXD6uv+b+ zex9^wnewQPtcAV$V0ZWaSHl^{6h`*0qXhu<^lXLc3stm9{va4=pWpwKG`%h;AUJSM zhQ!&+tfr=Wj8#CD2eUO%AQ<`%__uqoP3Q)ovTsuPbka@Hq9ITct?En2Y~X&OCNcdc z|K(r@T5AAUqDtbL?ZJdeZmcDqylV^wiL6b5%NbCZ5%OyS!iQp#bffkKT5(w>XeJRU zvVTf@bNp#-lb+9K#fsA+nBJcFair~6ZX+Xp%US=I0{Va0y$r#}DH0&oSs!qHCDvI) z8e5KaK94QDKC-1`m%!#2rciL>b{E0NAKho8InS)CPk%Q<=! z(oesI8F&nQf~{vVfKO1*LSfqq7ZDeD`NL7J-Dq>tqO-bTyKVQZY<)$2idok_0kUjH(H}2(|jzdzl9tb~Wui z{wzJX+*s765%>lRHI9Y&@6wRa!S{!O?}x`<_088OV`oBLTow)AzH0m0VV5)dYScddpxhqL zI?Z!-r=iGIpc2Ef0w1W9qV5?uk&jp6nP@$!W8o9cl$*{&;oTi90l~Yi8Px|TB@u8 zX)lx0a=+3kraQdfX8HOaj;Mu?JcDRTPw@iWs0>X4^t+NHS^FH+JC zi-UnVMx(ONa@lB3k0-e*t#`{_sey#;_u6rwx@x8q7JRAdi}xA?oZ&H&RiZXd^q{Vo zlk>p*u%kt9OE8nCnY`37vzulu+(pX?NL9cB)txD#7|#p96+h%3Q4wX^n1eUwXVvt| za7#R>jRE;b0t^E(cP1I3HGB+<-8QH+9N8QN>$j6qW^#iHVfBe!C#;$gaiYv7Ebn$d zBHcf{?TE;_e9sqmBq@^9dx@U*2RKkAA-^PDXP`3C1@wPjB^HM%U8;Z%|l#|Lr``2aPZf_X)Ha<|*oh>W9{r#FQnFauqCKc4dJBRE@@<`#~) zj5&@rXNvUc%yI0y8`ro$BvelG4$$L8vTr>4PX}cB;QL1pzCZW*hLZqPHp>oy4iHC% z7P~3#T=oal(}Lt@qc)z5UC=MubgUwqd;X|o4e$qcyDP5o`sxGD0X55-_8YQ;wJlm$ zs;^~?Ulo_28bGM4i4NVS`YCDsYwlw{{*+a`S2#i#dNoV|HSOzyTXR3YnuWr(6)q;uAPMdwecD)oaIC{wP;~c_-DFrsSa}XptG0J) zUsOk$-c_EupYcWL==(Wz{3-js7SlKi0kxa}kAPnB4&}x@IBZw)M^c-LTsFS^t+#Gw)R=H6Af9 zlhSIOw?XyX2eKO%tbWMexJz{+n@wSu7O#8tqQgjL6c&8qjO~-YN>Uf*MHb_nMw_eW z5naL8)u7g5{t1-?m}9{RM$G5JsO#Z9q}L!@UM$?j-e|rqIWwe!&<eSg!EFM zPGO?@if6W_#Oma#=GKSVQ>3HV6&LqDHM(c=kPyam7rJ@p+KrvGWaNI-kSz&2Ge%D9 zX#)iMzI?c5+g-?F-e)Md@WJu9!yf+T%z32`h0VqGrLQ^1YyX2~O!qPV6d&VX`ymv(E)*U!z06}lfXN>qAUW}1=QxjA** zp3-n;9o~`Oy#(b|)vBaQ4vco>3g-{1%phSoJXIV;k(j@7-ilHu*OWM-d%#W8h2_IWhNfqDQ1Seh95|ow}ZnLR#RnflM&5J5XY1u5BYjdo7uF# zHEnJi#@5HDbK5=iQ2`o_062xqsW_S=>qW3T0GSu?x@ zi4J6tE}_;RVf}D-!oY{A^at@9jp5CIKnC}Z83_Ng?@M^O!+rKp%Ff=ZyaEzno>v9z z^scVBQ*pXfO|8HyCRwjnVzdTsC$q><9uR?NTL{vUKH(!g~4awz1Fz$vFA~tm_u+cccTnNnO@DMN$?I^nfh$CV! zw(-a=&tA08tyVc_%W@Q6QjVuj>vVg%$PuTo%0poeZ$TX)6&epuH&s%5Od9h%Ah6_6 zV^#nS;rrR;R={r79&8vFZLviFebJ?(Lv2dI{$Tri-Dm@;eCif*11|TCxP5l+n>tsO z0Pn)7`G*01J_3pBg9s7IN|G$r&{f{^SYigAY&;f;1oLh180$uV45jE2xX#*bM2P!Y zo2nJ5_^Zgc1SRN+Rbbw#IUS3W-V^_P{%4Fjx~cc)o0=y?r@IzZ(c2cwX=+mqOt2Se zi%Xld@^i`cI`$fgJ8Gdv>l3#hA=F9~q^1iUb>yU-{Wd>=uTKR2KvlOv=)!jM>(t$p z-a|DS;clKE3^wJNr)}$y$o|Z9IP7LKhxgn|1~5Oxc@){a4AzaBaG(lvzG^4zalyA> zqv!Z#;WEccES#k1-gJR>KH1H>`*C?83t}PnlvD%u#g7h-h$vl)V>A^| zYQA}c2tm*)s95`-5rA~!@1M2IAF%(V?zH&=1Jw}>t7oZh2~AiIwCt(z0BZ)-myI%9 zQp(c78=thKO0H{ao2Y#-82^6TIo{P}y+GuWLKXi)37)5=SW<9=z#6m+YFQ#_{EBRKZ!2I#sZYqz~(o)T3|J>lQvN zpM77OZT&*Q+UU|-(w#Z{dLzX{ht~>=zAQWR3&tGX-1{?3O=TAgC-uW#v0{Tx1s-S5 z7G(94A*Le5s#Br>2+Og4JM=-Y&PAKinqU+uOHF&oJY$OsA#9=KqZ^;3WT#=z2jZlO z*m1}G(Q5>d*VSRULaIas8AanbKrs=Szm_r{*Vm*bmV5R6oHa`Jg1o^xv2eX|7ngAa0RSTmf&vJ}!IZ}`d` zI5w!+&Ul~mU*{J8rMcU9*2`VR=tJ3sJBS3?ydJ5S5Z|o?U}6#aM_a;aBKP&(JvvP z$dTlgypiR~#dC}i<_h>AFy^Aj2b0StGP=>H7HrLfu1-nh)mD>P5*Gr?CKeh|!)*iA zwv8JIyY6~&HFwzK?SYhFjBGr+Y?Gz%nCeD{1j6QqYg~=W-x_Ma$W3rZPqPhFE~;DBxSaIc`_QY( zA+bVBOXFo$R-9bgiC+-OGydrJbiw?OTjO`#uCt0BW3RWNOpJ?Ul8`Jg)`4OgS5*`( z^39XbRey8i>ScyBD7hhMjq!OASpac2u^ups8oF)3q8aW6mkrMKr; zxAp=yz0{@b>CSCBw>1wl@P2#Pw3qn-TSuJNS^jeoX=ZFMJE;PjX*^urXn_zs@I3@v-VNTwd>tcwih25u%f4|i zuyhFW2As9&JDP9wpA-J+%~_ z;`;+AzD28y^lT6yD`q1PoeH^V2;C=ixInfhqo!K zcWk*Cp)%lPT)tp>A1Bq6zfFq9kl|2#y7Iu=1qz_wO*x zS_^64c|dpwcw%F7S*_}>3_T%+FTey{DS_s0D1>Qjx1baPe`G8HE22u#K04wO_$*|d ze#)I8GvrB`ob!)0+3mN-#ag}f{^?9t-$ND9iIwkZt$%*3Z@5cyU12iX#4GPjT>!1T z`0e?Usw+uJ_l8|ZI@-A;gRZWhHgB|JK99N!q*FLp+ti*?+g*QZVegiPNOTI1BSF^P^ zJZ%XIZAiEl6_xdR@M!-g{vFcxl7DeeYN!%5%kD{(kJtF-W%q>Y=w;k zK+WLea-|vgCyyWP!USGc5kee6%fY53Y{VGPM=Tqx-tyHdhN^zGX+8jH(G!p{I`~}E zF~$ViUw%NbSW8R5T<&A_w4gBGG6YT_5^=1qgnN~KQBIsw!zCPrM z=JWT552Lzlw(2o0lf~wcppoRrsRYo~fZ0nT*P;W!x;Q*%lK~1;UPxzJvt}BD5 z@;m}``)rV3jhQ-^jW$+581F~i#R!lw=|o;0$2WDWG7AsZ>11*aIrTfb$XAu*@7z${ zE)LzedPLZWF~ZOiT+Fh!v?7&JuGbJ6HH zw+H2p?~E-gzw!Iccth8={AL}C$}{`{)PM^ZBvUEDmSn{i1jpNk4HWwu{qav*S!G=# zyfb#l=y|#(bwB7x$Z>S|Xbw=A3b+sp8iMwCte>X8n0ufHqZmH7p=JZ@D?3JdBEBn4 z#Cmw_?w8ZBM9Gx%g$GhQnKlVB=tms1(0EIQE0-qbx0MWyR-mvDmx+njk9NFH1!&Ub^m{MQ6 zvRDhQK`6^7ui3GUDGifYQ4!nxROMv2S1h}=spP@jJsX)Aj3gm8F=5Yts?GbY?MFx6 z_qW`#F^Biy1-6`xdO{GaMbeE9L|fie5^x`$+`2EnIe6jSH&ZTR_iNchD&?F;1_$sq zz*9&=ko`Ja@k8&o=(gbm8b-(|B+I7c@K^V%R7&5GZx4$<9q8jHJW90E5sKr_Gmj1W zx*Tv=u5|C-Ac$$i4Pdn3tVJ9pc)aSapxozULm#D9x#vx1bn}irD9r!BIAFKm%rW?D zx{fyOhuTs@w-sl113 z8tlhQz$RFT`PSPO59X#=o-Yy)tsSmz^pZZ{?3J-dwC{(I3d>N%l6}Jn>Vxi<$TobX z>3n;0CsVo8RWdQ9gQ8GcyKpBj<)hFRYO9tc|I6#feIG3sv@ws6yjU+>bhRN12-~SD zHerN&;=*tF%gR1J7a{Jn-*f*Zd(Pba)U2U{k0d!iDt|Xu@;yue({e=mEGSzTVD)v4 zq4E;c_y|Emno^C+77k&%7$^=jRuJu>e5E~9y2?8dNL$;tScQBO0T(YpOzW}mB7(9C zKU1^>ZD(sm!K=NNp!RnQa-hCs5*|K-n(tkLt}%_5QMt>Ppox!Ig8mXzUAV}H5XKU{ zQoC6bj;WCT0`NoALV5%((M2tV7#ILBdk5w6Dic2TAZ7vRkd_S`UmRVC94~c422lOT~ zaVtJ)k$lLt&h~2+I0>kRBiB*|z7}8oV=G=Px z*j(;>&mZI|e2<;{-+1hQYF?>-Sp_3xjKh#Oym(@kV5!w?$U%NzK3*p94v=(}-$*)% z0U^N%O>+Y!<}^s50cgV`cVV0AmLM=iRbfv*oHjmcwH%7gUpv;S-J^R5p!c4B)S5x&8!mBYbQS(LBaw8hFEPotp*W(m9KgFvo|saqlD7 z%{7_Gh&6A|7hzw0@f`0X94v>Tic96g!XKAqpddXr$^kXzLPg%L9Vr~tF|<7uDu~V3 zlfx+p$aL^@@4EE>d8A&E#G}~gE?(XhqN;Ay6%wGvQeAQTcD03{i`j*JUdh@FHbz9{ z2$n;?en!QA*?#{=3rYQHvq=7otoEnz4B@ZY068(sJcpq&ZFJ7pPzSzNm)VSpuHg}G zzW-R-9X~E{OrpY@Iexp%oe5FFq`RrBWv>K-fNkKw`FUG7ZowM_Y^louTm72EdYhsR z`~&@MIs_mW)&4;)nw~CdaJ%dcm`_c331ZDgZ&}Pdzl+j2!?Bo2v1spzGmw^IN43;( z=SK0o?O#BjHe!2X!#+CEakNMklZGMSZmTz^z=|o&W>g6>u35)$b&reJn5&ZJ*r5+f zvQO*o`qy_p@=`qXeyy+r=ay?AT079P&qw%vy+#YOl5DcJb&>e#h^wn0rbNzi`h;k| z6nXfMO@8*bamCiz+2T~NBwxE+&n}W|l2FBF!3an)%}Pv&f#;;@v@rlI4FN052}SQyp|Xrsk^!Ce&m z48KAF8Q-L-m!Zy;e*h_XD1HMLU3$;o%Rlu)EN;@nD^d6y;2)3`rqdPV&-0sL3ojxn z)=;1uElP6J%ZzVp)--s?&QOrCL&3bjMPZW<&9T)JI9tKg5saa3G)o6)Z0+} zm)gf?Tm3@KyT|7rWB0wW^$?u5aOk}F=F3o!?vuIV{3ALhm}~Sw{Z~(~{U0Cbg^P%@ ztbPc7s>Ag+hSJ@kswZ7vsO{;r>ZyF^PX`q&>2Fsa?!tuN{7y+s*8Q&Oq zM%*fjDoR>ZY^I4mySiYAE10T&6zF#_YyGxs5t@z_g3rGx{0`Bl=lca^_dm)?|1*>N zlxC9@n`VX4r{K8j;igT7QZEeb#@!C>W68+6?tK5rla`Y*kw;j~6=R?@Bj#spTB!Zl zCRHr)3|<0Dyg4eHjOFm^^{^7$t(?f`L4Rvw&ZZW~X+K|?maX74{4jWa!rEp5z zGA1W8f9e=zV8Ch6=(fv1lX!Hp(uB1z|6Ue5YmlL#VT6#!HmTu>XYtHfV!EM-lYvBD z&Dr|n!2;I{CR7h7y?U;=*(@aDbb=#?>cWlNjsXJN1;!5jm2~s-x0u!c8ME|+;&l7M zI_mbt3XHn%C=7o)d$70g*qQ-Z(PsI4K-H;+m^^X3*iY@1T^0D`jiZqwZ`cloA;5h4vwHpjxc zUK3VSAsWa!$`qMH>%bPWY*?YU^JVzGDSEQIYly=+d5`7SN;n>m$=pZF!V+_UW*Q#} z3jC>`LG~lL3{<2_7P|v_sirrgYx_cRbwOL6nQUgT-fj~ew|nQ+^@K$pA0M8W%l7l+ zc5c3_$$DMe@(-~xM(9DSHYm6L>Ot;rmeAklX8tel|8oa^he}KfP#jp5C1A-mRtXyL z<`vDL`3*Jc`RPL!A0mI80=8LydnGia66pp5lJ z%fl8&x?E*lx4wj<2s$$#4m{-$I_u@#rlu&?k|!6e7WDNAfb@CbfT0>dXt4>I-%a(V zaQ9PP;gZ8~n!}@mywjGP{){G9DqcSh@jo4;`}o*5yD`_AEs@rWxNW-Z9pReI(4ybG zqwXQE(P53u=Iy| zhvLD~A+{|$aEHTGZ_K>%zP{%62gd3~hA*3cKAIq-kyT@J?2Fru4f{%{kV`+lNr~`v+b46Vsq*XF{`ZDS7uo| z``)%w1wPQ&lgP$24hPa+EZadm`CRz>SHhO2ZO)Hvp4@zTjMUA@s_Nls_5NBLsnV<) zF!B4Iv27$5l5}G+%+$@@Xj$TYCUY`AR$C0ySvYkf;LgzCpn?V8jjIe9>j|F@cmg8c zP4(ZCVgHnf```XNwlvxpV$KsUj-58{Lw+3Fg5}=0*opbaeg8CN`=7E}4p!tS;%s~a z5^d5=l_la?I!6GIo_UC3n1FHYKpdsJdexw)e$-2e!gI+ z-N)Oz)1>1BsC~EW!t}R^2 zJoywT7M`~UDPM5G%YWTD?uwlRQ|_H+BXWs1YFEqPui;_2K&p5Ud3N48VHc%+h6T{@ zw&RR9hqsazW2l>QE$;Hyx*!gpV~F$yG7fh0Zl zexw8Qmq7MgfB*Y}Q+Q+2g~9Ymoq39RP|%Tay=zHa28p{FZ%C$@H!_t##_nAUyuh9` zYyiY#lZoN_cH(Sw1AhZW;p*L!LwB}|W6tw;&K^FD;3wQ=gRVT?(d*zTM7xM>k^?Ho zZmcw>i{jg$zj&>nmnH_Q?GR`o?M-YQceB~SJNvv(M58+B49}*)#&&7D&W~FcbTE$* z;LE&bqX)64F{@!KGjd=|$m2>KakPouFc3LP#U1zd$opnXCP5esxFk6wv0ptJB>Yt` z`&3-hNDVx<`DfP~<(!5L(d|2)4#mZOsB#lvN=4n+OULGK#on(y@At!~ zU$}acejfoRGSz?}ze+87H#lE@BqKxoaQ30k4w*fhnoU-WNdXAtVLfwrZ%P$V2eprS z>+J_oDcD1C3SA%T3!dOx77bsEW+wb#OXiT9(T{aCw|DG~z_8&ImfS7y{iVtT7 z)U~$<4RJE1W#ewe0J`7!I)dvuQ9cYn@)`~2OWnWrzSq-tIQ7fUlBAZn&82FXF)NY)~arjih>Z}eBv zuo_iwY2Viw2$%_weWRaOJ}d@`Otot?Mdi{CJEUucDJP_m^WfdL6`|o?2?io z&CUm=AP?DBQ4}ig=8QG!=t_JXQfO2L*|C8iGuduw@UPl?_;`AJ$}lf)c$gJA`LtL5 zl)cUg_jF)N`uh0za<&Bea{two6jF|WAclD8%VrwKae(Vxuq;>?k#Fiog`j3;rQEj3 z_M*LSnMe+nJXASjwo1c~L5}uz{eG4Y;@fhIr^Wy8df5Ms%)-Cp_1_nr_gFlSk;M!m zL;-8CTy!R(46a)B&6JS)dOOK7}{8@e)DWl zzjlzLANNy3>bDL2!ZWzrpQ(bc$NQ*4F5{0eJg_AYeDELQC(V|LozWQ>X$UI(ZZ>SvanfIf06A*#ldUa}FejENox)rM5Dm2Pz^>RJi@` z|BZ?71brLGG>qD3$OlGlL)0!x3W4`FVB*UT7iqeqoKmLU027aCKlEkv&4`-9BkIiu z=h93tSFPESFyHGR{j_=Lkoj}ko{OpqGCAPCfG0UATgD8$6sJ>-)TNV**b*IliZ8g zU7!YH3apz=1V!5CI@$>+@04-H)|j)$X)4cWY()eR_1~l#0bhL2uIJ8n@qnl~pxXrH zuk&dJi`UvRC&~sjKB>oIxO@anNZXA?<2LRU)4QxW-lp?(!%*R7N3rpa2iV-%fr@z# z7`uQ#D=aJYI-5_JMxj-%d*|Nn8CNcygt{M0TRc)>0X=%w5Yu`;I{*G3k3am{5!?b4 z^#X-fQOiPjlz?#%>69F(U^lFJ@e{AO--h}V{+lshUCMYuH%#3@rvHU{HxMOW@f){F z2pQvrgUxzB&75?+Yhl5oYgu)&_|ep5l1#i(({ZV|W$OKn%4b0EgF1Pvv4^Bp#8JSc zj8p6m>E83Ik3_o?TK#@XZw-*bUvAD1jTQN@VfdjSWBON+k;i-wz*G?p0-2F^@NONl zd&1)ViQ*f~Co&VOE~W+8Po|zR+x;UWafkKuc@`)b%h@0V`w;_MMiiS3d7g#fxL_~i zsOfoe_bmVF7uBhgmt~Y7?>NsB8J@e%73y}<&C34<^OJi_DBQ=2f{zVV6?Len=?y7y zf8nAsWZr{zur`a4OX~e(Z@(s)*i*lSG=gl_XGuO^;5aaK!ag%ls^H3%d=;Mi`5HIO z#*;TP*a#b0-vpdBtID=tSI6)lWmfd}^me0TfQ|t=2Iv@|V}OnUItJ(%pksiJ0Xhcg m7@%W-jsZFb=op}5fQ|t=2Iv@|V}OnUItKoH3@i=&zX1S8$$5+b literal 0 HcmV?d00001 diff --git a/ProjectLiner/ProjectLiner/Resources/arrowUp.jpg b/ProjectLiner/ProjectLiner/Resources/arrowUp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e630cea81778990ee584c30bf17b379509fe52d8 GIT binary patch literal 62105 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 a8 Date: Tue, 23 Apr 2024 18:24:23 +0400 Subject: [PATCH 05/11] Somethink changed but idk --- .../projectliner.metadata.v7.bin | Bin 183784 -> 183836 bytes .../projectliner.projects.v7.bin | Bin 206646 -> 309991 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 27 +++++++----------- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin b/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin index 1318f3eefd03c2fd76c7f2ef51864b67e0304099..a4d3d32b15174ee5be1f21ab1f56d11eda328f56 100644 GIT binary patch delta 116 zcmaDcn|sb2ZZ?LsJPZsB(*uq&l{8khRxxg^VhSuUT?G{6Ff%hXH+3^KSq Date: Wed, 24 Apr 2024 11:02:23 +0400 Subject: [PATCH 06/11] End of Work i think --- .../projectliner.metadata.v7.bin | Bin 183836 -> 186288 bytes .../projectliner.projects.v7.bin | Bin 309991 -> 729379 bytes .../ProjectLiner/DesignTimeBuild/.dtbcache.v2 | Bin 97435 -> 98490 bytes ...57eed10a-826f-42f5-9d3c-ac29b4f49149.vsidx | Bin 0 -> 36741 bytes ...5e8e704f-127d-4d12-ab12-19f196e2ff2e.vsidx | Bin 0 -> 3436 bytes ...8398abf5-0c42-41a3-9bdc-664f70068d7e.vsidx | Bin 0 -> 25534 bytes ...a370e9f2-84ae-4b0c-8c8f-0526ba89f656.vsidx | Bin 0 -> 9845 bytes ...aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx | Bin 43322 -> 0 bytes .../.vs/ProjectLiner/v17/.futdcache.v2 | Bin 160 -> 160 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 209 +++++++++++------ .../ProjectLiner/Drawnings/DirectionType.cs | 32 +++ .../Drawnings/DrawningBetterLiner.cs | 64 ++++++ .../DrawningLiner.cs} | 210 +++++++++--------- .../Entities/EntityBetterLiner.cs | 38 ++++ .../ProjectLiner/Entities/EntityLiner.cs | 40 ++++ ProjectLiner/ProjectLiner/EntityLiner.cs | 62 ------ .../ProjectLiner/FormLiner.Designer.cs | 74 ++++-- ProjectLiner/ProjectLiner/FormLiner.cs | 111 +++++++-- .../MovementStrategy/AbstractStrategy.cs | 139 ++++++++++++ .../MovementStrategy/IMoveableObjectcs.cs | 24 ++ .../MovementStrategy/MoveToCenter.cs | 54 +++++ .../MovementStrategy/MoveToCorner.cs | 26 +++ .../MovementStrategy/MoveableLiner.cs | 64 ++++++ .../MovementDirection.cs} | 4 +- .../MovementStrategy/ObjectParameters.cs | 72 ++++++ .../MovementStrategy/StrategyStatus.cs | 22 ++ 26 files changed, 969 insertions(+), 276 deletions(-) create mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/57eed10a-826f-42f5-9d3c-ac29b4f49149.vsidx create mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/5e8e704f-127d-4d12-ab12-19f196e2ff2e.vsidx create mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/8398abf5-0c42-41a3-9bdc-664f70068d7e.vsidx create mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/a370e9f2-84ae-4b0c-8c8f-0526ba89f656.vsidx delete mode 100644 ProjectLiner/.vs/ProjectLiner/FileContentIndex/aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx create mode 100644 ProjectLiner/ProjectLiner/Drawnings/DirectionType.cs create mode 100644 ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs rename ProjectLiner/ProjectLiner/{DrawingLiner.cs => Drawnings/DrawningLiner.cs} (51%) create mode 100644 ProjectLiner/ProjectLiner/Entities/EntityBetterLiner.cs create mode 100644 ProjectLiner/ProjectLiner/Entities/EntityLiner.cs delete mode 100644 ProjectLiner/ProjectLiner/EntityLiner.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/AbstractStrategy.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/IMoveableObjectcs.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/MoveToCenter.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/MoveToCorner.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/MoveableLiner.cs rename ProjectLiner/ProjectLiner/{DirectionType.cs => MovementStrategy/MovementDirection.cs} (80%) create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/ObjectParameters.cs create mode 100644 ProjectLiner/ProjectLiner/MovementStrategy/StrategyStatus.cs diff --git a/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin b/ProjectLiner/.vs/ProjectEvaluation/projectliner.metadata.v7.bin index a4d3d32b15174ee5be1f21ab1f56d11eda328f56..c9c5ab9ecbb7584525657207fa3d5e6ce869831d 100644 GIT binary patch delta 1374 zcmZvc&u#tI}==!T&LHy-sR%I z3H|9d_qg7uqW$;Cec~Dl zNSx_i?<&m!a5PG#J2H_osu(2{r!}I;$zmS+(&{|OJvMn06eJ4bOAz~8#YA4AnnAn* z;$TeHh(@p~@{?vZ>6HhEJ-Dz&`F-hhc=W63E+`K9|3Aj*0}jqiAp&P9LwMnfJ03&i=uhW zgf=8;(~SEJ+&;(CQmo!x1nYI)WV@|0FM%z|ZM%3qp|D@TBy!V%=1^Zj(g#;iyw7qV z`tT&t6q;7#TO{)hfD}L5Yr1m+-vOB7Kx-ZjPe0m)%4C(4lr=&vw+m$ls#Yj}a~`74 z4z2*`2?Ros*oZ$+gUuQnu{fW^4&StjseQ!ijE)H5SU7Yh_>*l${HH^aa8y`@&A`^f zn5ziZpnT)RXzX7A*(Y>!1WkDj82dL)O zwVG0)#zlo02?-UUfXd14M-O)LPZay#zW8ioAzkqd32~t)UBU zqrR;H9QAc&*s;r%Mh(@G+vu6Ctehxsxg+L#s?Lsb-C&N+>8I*wuRc*jp31*fbkhAF DSLWil delta 121 zcmdn6o_o$5ZZ3wkJPcqEKYbxHqtA5x3rxa|nXQ?OTQixa6)-waPGoZ4zNnIEYlx7U zIx|=$h+MlWv0OKCd*(T&k4&t>Kmjk1cBARpmzlVx&%Vgy!I%yb@ZLWA64NOr#xM}a LetX_ECMQM!P@p7Y diff --git a/ProjectLiner/.vs/ProjectEvaluation/projectliner.projects.v7.bin b/ProjectLiner/.vs/ProjectEvaluation/projectliner.projects.v7.bin index 832315a869e71b16e380fda69cb2729a63636da8..2e614815735f659cecb3dac0b904778fddf8cf4e 100644 GIT binary patch delta 2145 zcmaFFEiBJ>Z8*rx@$unW9!4NB{l6Bo*yg*;f7#d^KO9dwoILpf zmmZWkJ;8`M9wuDL4HKTc7QuW7XKqh4W?mG;z7AySI-bq@;x5@RUYk5|wgk+8^|RHX z%*}UZKg?lT&oh1FDn^m%@&+vSOdF6n8<9DikU5)?Ia?4M&gr)~8Ku}5Ot{WI=bQeU zlhKK3D?-+uX&W+UJ2GbnGG`|;XBRSOH!^1rGG{M@vwglHOFSdfKB$x|4Fip3MuP8%mdrk)(2wBhHsE9Xe^Xxbo{HXs3oC2cTrPPbKOj@THV z1WF>OK#_S0DTxR&tUhxDQhY#|km3U>3@SdLOi=LwWrB(i2oqX-U`ZlSrJ&*i!lYU8 zk+#9}!e|n~UVK1f2~vDO0t%W${`-RBeLJ}LKusd2K}qB^QWDwSR{i=IB#A(nkR$>X z1|<~b?X$?7bI6?YNSx_=I2kS3<`_pjJ_as0 ursJtcE+FY+La9eks*a1u%5c>qQD%ds(trj$B-SAT0gZL23^3LwO9B9k3=<;& delta 17 ZcmZ2{Nay)ip@tU57N!>FEiBJ>0RT$v2kQU; diff --git a/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 b/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 index b7b953026f9f13478fe05d78dcf294edf8782914..56012cd952b7668f3fa5abfe7071cb05fa445e19 100644 GIT binary patch delta 10735 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 wY7MR~{W!Dqe;vNtO@(fUa;_>0}q=u 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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/.vs/ProjectLiner/FileContentIndex/8398abf5-0c42-41a3-9bdc-664f70068d7e.vsidx b/ProjectLiner/.vs/ProjectLiner/FileContentIndex/8398abf5-0c42-41a3-9bdc-664f70068d7e.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..a2e122bdc16f84f4abd6fa1f5267289d0a94e62a GIT binary patch literal 25534 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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/.vs/ProjectLiner/FileContentIndex/a370e9f2-84ae-4b0c-8c8f-0526ba89f656.vsidx b/ProjectLiner/.vs/ProjectLiner/FileContentIndex/a370e9f2-84ae-4b0c-8c8f-0526ba89f656.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..51c00bb3b157412ab48b5eec222f168f0141c591 GIT binary patch literal 9845 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 literal 0 HcmV?d00001 diff --git a/ProjectLiner/.vs/ProjectLiner/FileContentIndex/aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx b/ProjectLiner/.vs/ProjectLiner/FileContentIndex/aa0c2f71-fd4c-4feb-b357-7ffdadf3f236.vsidx deleted file mode 100644 index b9caa4d74558385ae98d9668d3d4cab7ab5d210c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43322 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 +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Неизвестное направление + /// + Unknow = -1, + + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs b/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs new file mode 100644 index 0000000..789f875 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs @@ -0,0 +1,64 @@ +using ProjectLiner.Entities; + +namespace ProjectLiner.Drawnings; + +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningBetterLiner : DrawningLiner +{ + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + public DrawningBetterLiner(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoration) : base(110, 60) + { + EntityLiner = new EntityBetterLiner(speed, weight, bodyColor, additionalColor, hasMark, hasDecoration); + } + + public override void DrawTransport(Graphics g) + { + if (EntityLiner == null || EntityLiner is not EntityBetterLiner betterLiner || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(betterLiner.AdditionalColor); + + base.DrawTransport(g); + + //Марка на борту + if (((EntityBetterLiner)EntityLiner).HasMark) + { + g.FillRectangles(additionalBrush, new Rectangle[] + { + new(_startPosX.Value+15,_startPosY.Value+38,17,3), + new(_startPosX.Value+22,_startPosY.Value+32,3,16) + }); + } + + //Декорации + if (((EntityBetterLiner)EntityLiner).HasDecoratins) + { + g.FillRectangles(additionalBrush, new Rectangle[] + { + new(_startPosX.Value+8,_startPosY.Value+0,10,20), + new(_startPosX.Value+26,_startPosY.Value+0,10,20), + new(_startPosX.Value+44,_startPosY.Value+0,10,20), + new(_startPosX.Value+62,_startPosY.Value+0,10,20), + }); + g.DrawRectangles(pen, new Rectangle[] + { + new(_startPosX.Value+8,_startPosY.Value+0,10,20), + new(_startPosX.Value+26,_startPosY.Value+0,10,20), + new(_startPosX.Value+44,_startPosY.Value+0,10,20), + new(_startPosX.Value+62,_startPosY.Value+0,10,20), + }); + + } + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/DrawingLiner.cs b/ProjectLiner/ProjectLiner/Drawnings/DrawningLiner.cs similarity index 51% rename from ProjectLiner/ProjectLiner/DrawingLiner.cs rename to ProjectLiner/ProjectLiner/Drawnings/DrawningLiner.cs index 8497562..a7a0cf1 100644 --- a/ProjectLiner/ProjectLiner/DrawingLiner.cs +++ b/ProjectLiner/ProjectLiner/Drawnings/DrawningLiner.cs @@ -1,14 +1,16 @@ -namespace ProjectLiner; +using ProjectLiner.Entities; + +namespace ProjectLiner.Drawnings; /// -/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// Класс, отвечающий за прорисовку и перемещение базового объекта-сущности /// public class DrawningLiner { /// /// Класс-сущность /// - public EntityLiner? EntityLiner { get; private set; } + public EntityLiner? EntityLiner { get; protected set; } /// /// Ширина окна @@ -23,40 +25,76 @@ public class DrawningLiner /// /// Левая координата прорисовки автомобиля /// - private int? _startPosX; + protected int? _startPosX; /// /// Верхняя кооридната прорисовки автомобиля /// - private int? _startPosY; + protected int? _startPosY; /// /// Ширина прорисовки автомобиля /// - private readonly int _drawingLinerWidth = 80; + private readonly int _drawningLinerWidth = 80; /// /// Высота прорисовки автомобиля /// - private readonly int _drawingLinerHeight = 60; + private readonly int _drawningLinerHeight = 50; /// - /// Инициализация свойств + /// Координата X объекта /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoratins) - { - EntityLiner = new EntityLiner(); - EntityLiner.Init(speed, weight, bodyColor, additionalColor, hasMark, hasDecoratins); + public int? GetPosX => _startPosX; + + /// + /// Координата Y объекта + /// + public int? GetPosY => _startPosY; + + /// + /// Ширина объекта + /// + public int GetWidth => _drawningLinerWidth; + + /// + /// Высота объекта + /// + public int GetHeight => _drawningLinerHeight; + + /// + /// Пустой конструктор + /// + private DrawningLiner() + { _pictureWidth = null; _pictureHeight = null; _startPosX = null; _startPosY = null; } + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + public DrawningLiner(int speed, double weight, Color bodyColor) : this() + { + EntityLiner = new EntityLiner(speed, weight, bodyColor); + } + + /// + /// Конструктор для наследников + /// + /// Ширина прорисовки лайнера + /// Высота прорисовки лайнера + protected DrawningLiner(int drawningLinerWidth, int drawningLinerHeight) : this() + { + _drawningLinerWidth = drawningLinerWidth; + _pictureHeight = drawningLinerHeight; + } + /// /// Установка границ поля /// @@ -65,23 +103,20 @@ public class DrawningLiner /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - // TODO проверка, что объект "влезает" в размеры поля - // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена - if (_drawingLinerWidth > width || _drawingLinerHeight > height) - return false; - - _pictureWidth = width; - _pictureHeight = height; - if (_startPosX.HasValue && _startPosY.HasValue) - { - if (_pictureWidth - _drawingLinerWidth < _startPosX) - _startPosX = _pictureWidth - _drawingLinerWidth; - if (_pictureHeight - _drawingLinerHeight < _startPosY) - _startPosY = _pictureHeight - _drawingLinerHeight; + if (_drawningLinerWidth > width || _drawningLinerHeight > height) + return false; + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_pictureWidth - _drawningLinerWidth < _startPosX) + _startPosX = _pictureWidth - _drawningLinerWidth; + if (_pictureHeight - _drawningLinerHeight < _startPosY) + _startPosY = _pictureHeight - _drawningLinerHeight; } - return true; - } + return true; + } /// /// Установка позиции @@ -90,21 +125,22 @@ public class DrawningLiner /// Координата Y public void SetPosition(int x, int y) { - if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) - { - return; - } + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + _startPosX = _pictureWidth - _drawningLinerWidth < x ? _pictureWidth - _drawningLinerWidth : x; + _startPosY = _pictureHeight - _drawningLinerHeight < y ? _pictureHeight - _drawningLinerHeight : y; - _startPosX = _pictureWidth - _drawingLinerWidth < x ? _pictureWidth - _drawingLinerWidth : x; - _startPosY = _pictureHeight - _drawingLinerHeight < y ? _pictureHeight - _drawingLinerHeight : y; } - /// - /// Изменение направления перемещения - /// - /// Направление - /// true - перемещене выполнено, false - перемещение невозможно - public bool MoveTransport(DirectionType direction) + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) { if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) { @@ -126,58 +162,43 @@ public class DrawningLiner { _startPosY -= (int)EntityLiner.Step; } - return true; + return true; // вправо - case DirectionType.Right: - if(_startPosX.Value + EntityLiner.Step < _pictureWidth-_drawingLinerWidth) - { - _startPosX += (int)EntityLiner.Step; - } - return true; - //вниз - case DirectionType.Down: - if (_startPosY.Value + EntityLiner.Step < _pictureHeight-_drawingLinerHeight) + case DirectionType.Right: + if (_startPosX.Value + EntityLiner.Step < _pictureWidth - _drawningLinerWidth) + { + _startPosX += (int)EntityLiner.Step; + } + return true; + //вниз + case DirectionType.Down: + if (_startPosY.Value + EntityLiner.Step < _pictureHeight - _drawningLinerHeight) { _startPosY += (int)EntityLiner.Step; } return true; - default: + + default: return false; } } - - public void FormChanged(object sender, EventArgs e) - { - _pictureWidth = (sender as FormLiner).Size.Width; - _pictureHeight = (sender as FormLiner).Size.Height; - if (_startPosX.HasValue && _startPosY.HasValue) - { - if (_pictureWidth - _drawingLinerWidth < _startPosX) - _startPosX = _pictureWidth - _drawingLinerWidth; - if (_pictureHeight - _drawingLinerHeight < _startPosY) - _startPosY = _pictureHeight - _drawingLinerHeight; - (sender as FormLiner).Draw(); - } - } - - /// - /// Прорисовка объекта - /// - /// - public void DrawTransport(Graphics g) + /// + /// Прорисовка объекта + /// + /// + public virtual void DrawTransport(Graphics g) { if (EntityLiner == null || !_startPosX.HasValue || !_startPosY.HasValue) { return; } - - Pen pen = new Pen(Color.Black); + + Pen pen = new(Color.Black); + Brush mainBrush = new SolidBrush(EntityLiner.BodyColor); - Brush additionalBrush = new SolidBrush(EntityLiner.AdditionalColor); - g.DrawRectangle(pen, new(_startPosX.Value, _startPosY.Value, 80, 60)); + Brush negativeMainBrush = new SolidBrush(Color.FromArgb(255-EntityLiner.BodyColor.R, 255 - EntityLiner.BodyColor.G, 255 - EntityLiner.BodyColor.B)); - //Рисуем тело g.FillPolygon(mainBrush, new Point[] { new(_startPosX.Value+0, _startPosY.Value + 30), new(_startPosX.Value+15,_startPosY.Value+50), @@ -199,8 +220,7 @@ public class DrawningLiner new(_startPosX.Value+80, _startPosY.Value+30) }); - //Рисуем окна - g.FillRectangles(additionalBrush, new Rectangle[]{ + g.FillRectangles(negativeMainBrush, new Rectangle[]{ new(_startPosX.Value+5,_startPosY.Value+22,10,6), new(_startPosX.Value+20,_startPosY.Value+22,10,6), new(_startPosX.Value+35,_startPosY.Value+22,10,6), @@ -215,33 +235,5 @@ public class DrawningLiner new(_startPosX.Value+65,_startPosY.Value+22,10,6), }); - //Марка на борту - if (EntityLiner.HasMark) - { - g.FillRectangles(additionalBrush, new Rectangle[] - { - new(_startPosX.Value+15,_startPosY.Value+38,17,3), - new(_startPosX.Value+22,_startPosY.Value+32,3,16) - }); - } - - //Декорации - if (EntityLiner.HasDecoratins) - { - g.FillRectangles(additionalBrush, new Rectangle[] - { - new(_startPosX.Value+8,_startPosY.Value+0,10,20), - new(_startPosX.Value+26,_startPosY.Value+0,10,20), - new(_startPosX.Value+44,_startPosY.Value+0,10,20), - new(_startPosX.Value+62,_startPosY.Value+0,10,20), - }); - g.DrawRectangles(pen, new Rectangle[] - { - new(_startPosX.Value+8,_startPosY.Value+0,10,20), - new(_startPosX.Value+26,_startPosY.Value+0,10,20), - new(_startPosX.Value+44,_startPosY.Value+0,10,20), - new(_startPosX.Value+62,_startPosY.Value+0,10,20), - }); - } } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Entities/EntityBetterLiner.cs b/ProjectLiner/ProjectLiner/Entities/EntityBetterLiner.cs new file mode 100644 index 0000000..c9da407 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Entities/EntityBetterLiner.cs @@ -0,0 +1,38 @@ +namespace ProjectLiner.Entities; + +/// +/// Класс-сущность "Спортивный автомобиль" +/// +public class EntityBetterLiner : EntityLiner +{/// + /// Дополнительный цвет (для опциональных элементов) + /// + public Color AdditionalColor { get; private set; } + + /// + /// Имеет марку на боку + /// + public bool HasMark { get; private set; } + + /// + /// Имеет декорации сверху + /// + public bool HasDecoratins { get; private set; } + + + /// + /// Конструктор сущности + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Присутствие марки + /// Присутствие декораций + public EntityBetterLiner(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoratins) : base(speed, weight, bodyColor) + { + AdditionalColor = additionalColor; + HasMark = hasMark; + HasDecoratins = hasDecoratins; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs b/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs new file mode 100644 index 0000000..a48d099 --- /dev/null +++ b/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs @@ -0,0 +1,40 @@ +namespace ProjectLiner.Entities; + +/// +/// Класс-сущность "Автомобиль" +/// +public class EntityLiner +{ + /// + /// Скорость + /// + 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 EntityLiner(int speed, double weight, Color bodyColor) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/EntityLiner.cs b/ProjectLiner/ProjectLiner/EntityLiner.cs deleted file mode 100644 index 8a6d5e1..0000000 --- a/ProjectLiner/ProjectLiner/EntityLiner.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace ProjectLiner; - -/// -/// Класс-сущность "Спортивный автомобиль" -/// -public class EntityLiner -{ - /// - /// Скорость - /// - 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 HasMark { get; private set; } - - /// - /// Имеет декорации сверху - /// - public bool HasDecoratins { get; private set; } - - /// - /// Шаг перемещения автомобиля - /// - public double Step => Speed * 100 / Weight; - - /// - /// Инициализация полей объекта-класса спортивного автомобиля - /// - /// Скорость - /// Вес автомобиля - /// Основной цвет - /// Дополнительный цвет - /// Имеет значёк на куове - /// Имеет декорации сверху - /// - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoratins) - { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; - AdditionalColor = additionalColor; - HasMark = hasMark; - HasDecoratins = hasDecoratins; - } -} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs index 8b7f316..fe5ebb3 100644 --- a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs +++ b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs @@ -29,11 +29,14 @@ private void InitializeComponent() { pictureBoxLiner = new PictureBox(); - buttonCreateLiner = new Button(); + buttonCreateBetterLiner = new Button(); buttonLeft = new Button(); buttonUp = new Button(); buttonDown = new Button(); buttonRight = new Button(); + buttonCreateLiner = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); SuspendLayout(); // @@ -45,17 +48,17 @@ pictureBoxLiner.Size = new Size(923, 597); pictureBoxLiner.TabIndex = 0; pictureBoxLiner.TabStop = false; - // - // buttonCreateLiner - // - buttonCreateLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateLiner.Location = new Point(12, 562); - buttonCreateLiner.Name = "buttonCreateLiner"; - buttonCreateLiner.Size = new Size(75, 23); - buttonCreateLiner.TabIndex = 1; - buttonCreateLiner.Text = "Создать"; - buttonCreateLiner.UseVisualStyleBackColor = true; - buttonCreateLiner.Click += ButtonCreateLiner_Click; + // + // buttonCreateBetterLiner + // + buttonCreateBetterLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateBetterLiner.Location = new Point(12, 562); + buttonCreateBetterLiner.Name = "buttonCreateBetterLiner"; + buttonCreateBetterLiner.Size = new Size(223, 23); + buttonCreateBetterLiner.TabIndex = 1; + buttonCreateBetterLiner.Text = "Создать крутой лайнер"; + buttonCreateBetterLiner.UseVisualStyleBackColor = true; + buttonCreateBetterLiner.Click += ButtonCreateBetterLiner_Click; // // buttonLeft // @@ -105,30 +108,67 @@ buttonRight.UseVisualStyleBackColor = true; buttonRight.Click += ButtonMove_Click; // + // buttonCreateLiner + // + buttonCreateLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateLiner.Location = new Point(250, 562); + buttonCreateLiner.Name = "buttonCreateLiner"; + buttonCreateLiner.Size = new Size(223, 23); + buttonCreateLiner.TabIndex = 6; + buttonCreateLiner.Text = "Создать лайнер"; + buttonCreateLiner.UseVisualStyleBackColor = true; + buttonCreateLiner.Click += ButtonCreateLiner_Click; + // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(790, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(121, 23); + comboBoxStrategy.TabIndex = 7; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(836, 41); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(75, 23); + buttonStrategyStep.TabIndex = 8; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += ButtonStrategyStep_Click; + // // FormLiner // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(923, 597); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); + Controls.Add(buttonCreateLiner); Controls.Add(buttonRight); Controls.Add(buttonDown); Controls.Add(buttonUp); Controls.Add(buttonLeft); - Controls.Add(buttonCreateLiner); + Controls.Add(buttonCreateBetterLiner); Controls.Add(pictureBoxLiner); Name = "FormLiner"; - Text = "Пассажирский лайнер"; + Text = "Лайнер"; ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); ResumeLayout(false); } - #endregion + #endregion - private PictureBox pictureBoxLiner; - private Button buttonCreateLiner; + private PictureBox pictureBoxLiner; + private Button buttonCreateBetterLiner; private Button buttonLeft; private Button buttonUp; private Button buttonDown; private Button buttonRight; + private Button buttonCreateLiner; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.cs b/ProjectLiner/ProjectLiner/FormLiner.cs index 2ac37f2..3bfac7f 100644 --- a/ProjectLiner/ProjectLiner/FormLiner.cs +++ b/ProjectLiner/ProjectLiner/FormLiner.cs @@ -1,4 +1,7 @@ -namespace ProjectLiner; +using ProjectLiner.Drawnings; +using ProjectLiner.MovementStrategy; + +namespace ProjectLiner; /// /// Форма работы с объектом "Спортивный автомобиль" @@ -10,18 +13,24 @@ public partial class FormLiner : Form /// private DrawningLiner? _drawningLiner; + /// + /// Стратегия перемещения + /// + private AbstractStrategy? _strategy; + /// /// Конструктор формы /// public FormLiner() { InitializeComponent(); + _strategy = null; } /// /// Метод прорисовки машины /// - public void Draw() + private void Draw() { if (_drawningLiner == null) { @@ -35,25 +44,48 @@ public partial class FormLiner : Form } /// - /// Обработка нажатия кнопки "Создать" + /// Создание объекта класса-перемещения + /// + /// Тип создаваемого объекта + private void CreateObject(string type) + { + Random random = new(); + switch (type) + { + case nameof(DrawningLiner): + _drawningLiner = new DrawningLiner(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(DrawningBetterLiner): + _drawningLiner = new DrawningBetterLiner(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; + } + + _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); + _drawningLiner.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _strategy = null; + comboBoxStrategy.Enabled = true; + Draw(); + } + + /// + /// Обработка нажатия кнопки "Создать спортивный автомобиль" /// /// /// - private void ButtonCreateLiner_Click(object sender, EventArgs e) - { - if (_drawningLiner != null) - ResizeEnd -= _drawningLiner.FormChanged; - Random random = new(); - _drawningLiner = new DrawningLiner(); - _drawningLiner.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))); - _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); - _drawningLiner.SetPosition(random.Next(10, 100), random.Next(10, 100)); - Draw(); - ResizeEnd += _drawningLiner.FormChanged; - } + private void ButtonCreateBetterLiner_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBetterLiner)); + + /// + /// Обработка нажатия кнопки "Создать автомобиль" + /// + /// + /// + private void ButtonCreateLiner_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLiner)); /// /// Перемещение объекта по форме (нажатие кнопок навигации) @@ -90,4 +122,47 @@ public partial class FormLiner : Form Draw(); } } + + /// + /// Обработка нажатия кнопки "Шаг" + /// + /// + /// + private void ButtonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawningLiner == null) + { + return; + } + + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToCorner(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableLiner(_drawningLiner), pictureBoxLiner.Width, pictureBoxLiner.Height); + } + + if (_strategy == null) + { + return; + } + + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/AbstractStrategy.cs b/ProjectLiner/ProjectLiner/MovementStrategy/AbstractStrategy.cs new file mode 100644 index 0000000..dea4f76 --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/AbstractStrategy.cs @@ -0,0 +1,139 @@ +namespace ProjectLiner.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 StrategyStatus GetStatus() { return _state; } + + /// + /// Установка данных + /// + /// Перемещаемый объект + /// Ширина поля + /// Высота поля + 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; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/IMoveableObjectcs.cs b/ProjectLiner/ProjectLiner/MovementStrategy/IMoveableObjectcs.cs new file mode 100644 index 0000000..255eebb --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/IMoveableObjectcs.cs @@ -0,0 +1,24 @@ +namespace ProjectLiner.MovementStrategy; + +/// +/// Интерфейс для работы с перемещаемым объектом +/// +public interface IMoveableObject +{ + /// + /// Получение координаты объекта + /// + ObjectParameters? GetObjectPosition { get; } + + /// + /// Шаг объекта + /// + int GetStep { get; } + + /// + /// Попытка переместить объект в указанном направлении + /// + /// Направление + /// true - объект перемещен, false - перемещение невозможно + bool TryMoveObject(MovementDirection direction); +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCenter.cs b/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCenter.cs new file mode 100644 index 0000000..92c40cb --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCenter.cs @@ -0,0 +1,54 @@ +namespace ProjectLiner.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(); + } + } + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCorner.cs b/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCorner.cs new file mode 100644 index 0000000..fbf039a --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/MoveToCorner.cs @@ -0,0 +1,26 @@ +namespace ProjectLiner.MovementStrategy; + +public class MoveToCorner : AbstractStrategy +{ + protected override bool IsTargetDestinaion() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + return objParams.LeftBorder - GetStep() <= 0 || objParams.RightBorder + GetStep() >= FieldWidth || objParams.TopBorder - GetStep() <= 0 || objParams.ObjectMiddleVertical + 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(); + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/MoveableLiner.cs b/ProjectLiner/ProjectLiner/MovementStrategy/MoveableLiner.cs new file mode 100644 index 0000000..b0f31d8 --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/MoveableLiner.cs @@ -0,0 +1,64 @@ +using ProjectLiner.Drawnings; + +namespace ProjectLiner.MovementStrategy; + +/// +/// Класс-реализация IMoveableObject с использованием DrawningLiner +/// +public class MoveableLiner : IMoveableObject +{ + /// + /// Поле-объект класса DrawningLiner или его наследника + /// + private readonly DrawningLiner? _liner = null; + + /// + /// Конструктор + /// + /// Объект класса DrawningLiner + public MoveableLiner(DrawningLiner liner) + { + _liner = liner; + } + + public ObjectParameters? GetObjectPosition + { + get + { + if (_liner == null || _liner.EntityLiner == null || !_liner.GetPosX.HasValue || !_liner.GetPosY.HasValue) + { + return null; + } + return new ObjectParameters(_liner.GetPosX.Value, _liner.GetPosY.Value, _liner.GetWidth, _liner.GetHeight); + } + } + + public int GetStep => (int)(_liner?.EntityLiner?.Step ?? 0); + + public bool TryMoveObject(MovementDirection direction) + { + if (_liner == null || _liner.EntityLiner == null) + { + return false; + } + + return _liner.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, + }; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/DirectionType.cs b/ProjectLiner/ProjectLiner/MovementStrategy/MovementDirection.cs similarity index 80% rename from ProjectLiner/ProjectLiner/DirectionType.cs rename to ProjectLiner/ProjectLiner/MovementStrategy/MovementDirection.cs index 5be3752..43cc5fc 100644 --- a/ProjectLiner/ProjectLiner/DirectionType.cs +++ b/ProjectLiner/ProjectLiner/MovementStrategy/MovementDirection.cs @@ -1,9 +1,9 @@ -namespace ProjectLiner; +namespace ProjectLiner.MovementStrategy; /// /// Направление перемещения /// -public enum DirectionType +public enum MovementDirection { /// /// Вверх diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/ObjectParameters.cs b/ProjectLiner/ProjectLiner/MovementStrategy/ObjectParameters.cs new file mode 100644 index 0000000..62df457 --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/ObjectParameters.cs @@ -0,0 +1,72 @@ +namespace ProjectLiner.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; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/MovementStrategy/StrategyStatus.cs b/ProjectLiner/ProjectLiner/MovementStrategy/StrategyStatus.cs new file mode 100644 index 0000000..3c647fe --- /dev/null +++ b/ProjectLiner/ProjectLiner/MovementStrategy/StrategyStatus.cs @@ -0,0 +1,22 @@ +namespace ProjectLiner.MovementStrategy; + +/// +/// Статус выполнения операции перемещения +/// +public enum StrategyStatus +{ + /// + /// Все готово к началу + /// + NotInit, + + /// + /// Выполняется + /// + InProgress, + + /// + /// Завершено + /// + Finish +} \ No newline at end of file -- 2.25.1 From 7239b3c2e7835bd427fc1c25cc1fe0ba124c3976 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Wed, 24 Apr 2024 11:04:53 +0400 Subject: [PATCH 07/11] some fix --- .gitignore | 138 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 116 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 8c7f0e8..e0dfc29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,11 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. +# The following command works for downloading when using Git for Windows: +# curl -LOf http://gist.githubusercontent.com/kmorcinek/2710267/raw/.gitignore +# +# Download this file using PowerShell v3 under Windows with the following comand: +# Invoke-WebRequest https://gist.githubusercontent.com/kmorcinek/2710267/raw/ -OutFile .gitignore +# +# or wget: +# wget --no-check-certificate http://gist.githubusercontent.com/kmorcinek/2710267/raw/.gitignore # User-specific files *.suo @@ -7,12 +13,22 @@ *.sln.docstates # Build results - [Dd]ebug/ [Rr]elease/ x64/ [Bb]in/ [Oo]bj/ +# build folder is nowadays used for build scripts and should not be ignored +#build/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config # MSTest test Results [Tt]est[Rr]esult*/ @@ -20,7 +36,6 @@ x64/ *_i.c *_p.c -*_i.h *.ilk *.meta *.obj @@ -40,8 +55,6 @@ x64/ *.vssscc .builds *.pidb -*.log -*.svclog *.scc # Visual C++ cache files @@ -63,41 +76,58 @@ ipch/ # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper -*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.Publish.xml -*.pubxml -*.azurePubxml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -packages/ -## TODO: If the tool you use requires repositories.config, also uncomment the next line -!packages/repositories.config # Windows Azure Build Output -csx/ +csx *.build.csdef # Windows Store app package directory AppPackages/ # Others -sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* -![Ss]tyle[Cc]op.targets ~$* *~ *.dbmdl *.[Pp]ublish.xml - +*.pfx *.publishsettings +modulesbin/ +tempbin/ + +# EPiServer Site file (VPP) +AppData/ # RIA/Silverlight projects Generated_Code/ @@ -109,9 +139,33 @@ Backup*/ UpgradeLog*.XML UpgradeLog*.htm +# vim +*.txt~ +*.swp +*.swo + +# Temp files when opening LibreOffice on ubuntu +.~lock.* + +# svn +.svn + +# CVS - Source Control +**/CVS/ + +# Remainings from resolving conflicts in Source Control +*.orig + # SQL Server files -App_Data/*.mdf -App_Data/*.ldf +**/App_Data/*.mdf +**/App_Data/*.ldf +**/App_Data/*.sdf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml # ========================= # Windows detritus @@ -127,7 +181,47 @@ Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ +# OS generated files # +Icon? + # Mac desktop service store files .DS_Store -_NCrunch* +# SASS Compiler cache +.sass-cache + +# Visual Studio 2014 CTP +**/*.sln.ide + +# Visual Studio temp something +.vs/ + +# dotnet stuff +project.lock.json + +# VS 2015+ +*.vc.vc.opendb +*.vc.db + +# Rider +.idea/ + +# Visual Studio Code +.vscode/ + +# Output folder used by Webpack or other FE stuff +**/node_modules/* +**/wwwroot/* + +# SpecFlow specific +*.feature.cs +*.feature.xlsx.* +*.Specs_*.html + +# UWP Projects +AppPackages/ + +##### +# End of core ignore list, below put you custom 'per project' settings (patterns or path) +##### + -- 2.25.1 From ba7340fc32b3610f3f59236f0f9a4cc4b0f59669 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Wed, 24 Apr 2024 11:56:14 +0400 Subject: [PATCH 08/11] some fix --- ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs b/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs index 789f875..f611f06 100644 --- a/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs +++ b/ProjectLiner/ProjectLiner/Drawnings/DrawningBetterLiner.cs @@ -14,7 +14,7 @@ public class DrawningBetterLiner : DrawningLiner /// Вес /// Основной цвет /// Дополнительный цвет - public DrawningBetterLiner(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoration) : base(110, 60) + public DrawningBetterLiner(int speed, double weight, Color bodyColor, Color additionalColor, bool hasMark, bool hasDecoration) : base(80, 50) { EntityLiner = new EntityBetterLiner(speed, weight, bodyColor, additionalColor, hasMark, hasDecoration); } -- 2.25.1 From caf3fd83ae61a469328a59073ac2b9b5ca39d020 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Fri, 26 Apr 2024 14:01:22 +0400 Subject: [PATCH 09/11] TheEnd --- .../ProjectLiner/DesignTimeBuild/.dtbcache.v2 | Bin 98490 -> 98875 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 278 ++++++++-------- .../AbstractCompany.cs | 100 ++++++ .../CollectionGenericObjects/DockService.cs | 59 ++++ .../ICollectionGenericObjects.cs | 41 +++ .../MassiveGenericObjects.cs | 86 +++++ .../ProjectLiner/FormLiner.Designer.cs | 308 ++++++++---------- ProjectLiner/ProjectLiner/FormLiner.cs | 262 ++++++--------- .../FormLinerCollection.Designer.cs | 177 ++++++++++ .../ProjectLiner/FormLinerCollection.cs | 133 ++++++++ .../ProjectLiner/FormLinerCollection.resx | 120 +++++++ ProjectLiner/ProjectLiner/Program.cs | 2 +- 12 files changed, 1105 insertions(+), 461 deletions(-) create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/AbstractCompany.cs create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/DockService.cs create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/MassiveGenericObjects.cs create mode 100644 ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/FormLinerCollection.cs create mode 100644 ProjectLiner/ProjectLiner/FormLinerCollection.resx diff --git a/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 b/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 index 56012cd952b7668f3fa5abfe7071cb05fa445e19..902b0055ec0b563e13f57cf94233c007b61dc0d3 100644 GIT binary patch delta 2852 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 diff --git a/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json b/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json index 267a5cd..d0d5d30 100644 --- a/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json +++ b/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json @@ -2,45 +2,49 @@ "Version": 1, "WorkspaceRootPath": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\", "Documents": [ - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\drawnings\\drawningbetterliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\drawnings\\drawningbetterliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\drawnings\\drawningliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\drawnings\\drawningliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\entities\\entitybetterliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\entities\\entitybetterliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\entities\\entityliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\entities\\entityliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\movementstrategy\\movetocorner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\movementstrategy\\movetocorner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\movementstrategy\\movetocenter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\movementstrategy\\movetocenter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\movementstrategy\\moveableliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\movementstrategy\\moveableliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\movementstrategy\\abstractstrategy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\movementstrategy\\abstractstrategy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\dockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\dockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -50,137 +54,149 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 1, + "SelectedChildIndex": 0, "Children": [ { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 0, "Title": "FormLiner.Designer.cs", "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.Designer.cs", "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", "RelativeToolTip": "ProjectLiner\\FormLiner.Designer.cs", - "ViewState": "AQIAACoAAAAAAAAAAAAewDMAAAAhAAAA", + "ViewState": "AQIAAIEAAAAAAAAAAAAYwF0AAABHAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-24T06:50:50.101Z", + "WhenOpened": "2024-04-26T08:59:21.855Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, - "Title": "FormLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", - "RelativeToolTip": "ProjectLiner\\FormLiner.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABMAAAAAAAAA", + "DocumentIndex": 1, + "Title": "FormLinerCollection.Designer.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.Designer.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.Designer.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.Designer.cs", + "RelativeToolTip": "ProjectLiner\\FormLinerCollection.Designer.cs", + "ViewState": "AQIAAGMAAAAAAAAAAAAEwHQAAAAPAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-24T06:44:12.266Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 2, - "Title": "DrawningBetterLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Drawnings\\DrawningBetterLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\Drawnings\\DrawningBetterLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Drawnings\\DrawningBetterLiner.cs", - "RelativeToolTip": "ProjectLiner\\Drawnings\\DrawningBetterLiner.cs", - "ViewState": "AQIAAAMAAAAAAAAAAAAAABAAAAAeAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-24T06:24:10.949Z", + "WhenOpened": "2024-04-26T08:29:33.271Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 4, - "Title": "EntityBetterLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Entities\\EntityBetterLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\Entities\\EntityBetterLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Entities\\EntityBetterLiner.cs", - "RelativeToolTip": "ProjectLiner\\Entities\\EntityBetterLiner.cs", - "ViewState": "AQIAAA4AAAAAAAAAAAD4vxwAAABBAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-24T06:26:19.536Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 5, - "Title": "EntityLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Entities\\EntityLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\Entities\\EntityLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Entities\\EntityLiner.cs", - "RelativeToolTip": "ProjectLiner\\Entities\\EntityLiner.cs", - "ViewState": "AQIAAA0AAAAAAAAAAAAQwAAAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-24T06:25:44.938Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 7, - "Title": "MoveToCenter.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveToCenter.cs", - "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\MoveToCenter.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveToCenter.cs", - "RelativeToolTip": "ProjectLiner\\MovementStrategy\\MoveToCenter.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABkAAAADAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T15:59:24.952Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 6, - "Title": "MoveToCorner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveToCorner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\MoveToCorner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveToCorner.cs", - "RelativeToolTip": "ProjectLiner\\MovementStrategy\\MoveToCorner.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAAXAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T15:58:58.074Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 3, - "Title": "DrawningLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Drawnings\\DrawningLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\Drawnings\\DrawningLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Drawnings\\DrawningLiner.cs", - "RelativeToolTip": "ProjectLiner\\Drawnings\\DrawningLiner.cs", - "ViewState": "AQIAALwAAAAAAAAAAAASwMcAAAB5AAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T15:54:39.654Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 8, - "Title": "MoveableLiner.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveableLiner.cs", - "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\MoveableLiner.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\MoveableLiner.cs", - "RelativeToolTip": "ProjectLiner\\MovementStrategy\\MoveableLiner.cs", - "ViewState": "AQIAAA4AAAAAAAAAAAAAwAAAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T15:54:19.94Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 9, "Title": "Program.cs", "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", "RelativeDocumentMoniker": "ProjectLiner\\Program.cs", "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", "RelativeToolTip": "ProjectLiner\\Program.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABAAAAABAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-23T15:50:13.098Z", "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "FormLinerCollection.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", + "RelativeToolTip": "ProjectLiner\\FormLinerCollection.cs", + "ViewState": "AQIAAGoAAAAAAAAAAADwv0wAAAAiAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:28:37.934Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "DockService.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "ViewState": "AQIAAAYAAAAAAAAAAAAAAAUAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:24:12.713Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ICollectionGenericObjects.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAACAAAABEAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:15:01.722Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "FormLinerCollection.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435]", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435]", + "RelativeToolTip": "ProjectLiner\\FormLinerCollection.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:28:26.275Z", + "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435]" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "FormLiner.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", + "RelativeToolTip": "ProjectLiner\\FormLiner.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAF4AAAA+AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:36:36.397Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "AbstractStrategy.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "RelativeToolTip": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "ViewState": "AQIAABsAAAAAAAAAAAAYwAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:39:03.078Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "MassiveGenericObjects.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAIAAAAWAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:17:19.278Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "AbstractCompany.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAGAAAAAcAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:22:53.302Z", + "EditorCaption": "" } ] } diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/AbstractCompany.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/AbstractCompany.cs new file mode 100644 index 0000000..d90bdf5 --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/AbstractCompany.cs @@ -0,0 +1,100 @@ +using ProjectLiner.CollectionGenericObjects; +using ProjectLiner.Drawnings; + +namespace ProjectLiner.CollectionGenericObjects; + +public abstract class AbstractCompany +{ + /// + /// Размер места (ширина) + /// + protected readonly int _placeSizeWidth = 210; + /// + /// Размер места (высота) + /// + protected readonly int _placeSizeHeight = 150; + /// + /// Ширина окна + /// + protected readonly int _pictureWidth; + /// + /// Высота окна + /// + protected readonly int _pictureHeight; + /// + /// Коллекция судов + /// + protected ICollectionGenericObjects? _collection = null; + /// + /// Вычисление максимального количества элементов, который можно разместить в окне + /// + private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); + /// + /// Конструктор + /// + /// Ширина окна + /// Высота окна + /// Коллекция автомобилей + public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects collection) + { + _pictureWidth = picWidth; + _pictureHeight = picHeight; + _collection = collection; + _collection.SetMaxCount = GetMaxCount; + } + /// + /// Перегрузка оператора сложения для класса + /// + /// Компания + /// Добавляемый объект + /// + public static bool operator +(AbstractCompany company, DrawningLiner ship) + { + return company._collection?.Insert(ship) ?? false; + } + /// + /// Перегрузка оператора удаления для класса + /// + /// Компания + /// Номер удаляемого объекта + /// + public static bool operator -(AbstractCompany company, int position) + { + return company._collection?.Remove(position) ?? false; + } + /// + /// Получение случайного объекта из коллекции + /// + /// + public DrawningLiner? GetRandomObject() + { + Random rnd = new(); + return _collection?.Get(rnd.Next(GetMaxCount)); + } + /// + /// Вывод всей коллекции + /// + /// + public Bitmap? Show() + { + Bitmap bitmap = new(_pictureWidth, _pictureHeight); + Graphics graphics = Graphics.FromImage(bitmap); + DrawBackgound(graphics); + SetObjectsPosition(); + for (int i = 0; i < (_collection?.Count ?? 0); ++i) + { + DrawningLiner? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + return bitmap; + } + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackgound(Graphics g); + /// + /// Расстановка объектов + /// + protected abstract void SetObjectsPosition(); +} diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/DockService.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/DockService.cs new file mode 100644 index 0000000..32f6e62 --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/DockService.cs @@ -0,0 +1,59 @@ +using ProjectLiner.CollectionGenericObjects; +using ProjectLiner.Drawnings; +using System.Drawing; + +namespace ProjectLiner.CollectionGenericObjects; + +public class DockService : AbstractCompany +{ + public DockService(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) + { + } + + protected override void DrawBackgound(Graphics g) + { + //рисуем пристань + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + Pen pen = new(Color.Black, 3); + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height + 1; ++j) + { + g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, + i * _placeSizeWidth + _placeSizeWidth - 5, j * _placeSizeHeight); + } + } + } + + protected override void SetObjectsPosition() + { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + + int curWidth = width - 1; + 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 + 20, curHeight * _placeSizeHeight + 4); + } + + if (curWidth > 0) + curWidth--; + else + { + curWidth = width - 1; + curHeight++; + } + if (curHeight > height) + { + return; + } + } + } +} + diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs new file mode 100644 index 0000000..915d57b --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -0,0 +1,41 @@ +namespace ProjectLiner.CollectionGenericObjects; +/// +/// Интерфейс описания действий для набора хранимых объектов +/// +/// Параметр: ограничение - ссылочный тип +public interface ICollectionGenericObjects where T : class +{ + /// + /// Количество объектов в коллекции + /// + int Count { get; } + /// + /// Установка максимального количества элементов + /// + int SetMaxCount { set; } + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true - вставка прошла удачно, false - вставка не удалась +bool Insert(T obj); + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// Позиция + /// true - вставка прошла удачно, false - вставка не удалась +bool Insert(T obj, int position); + /// + /// Удаление объекта из коллекции с конкретной позиции + /// + /// Позиция + /// true - удаление прошло удачно, false - удаление не удалось +bool Remove(int position); + /// + /// Получение объекта по позиции + /// + /// Позиция + /// Объект + T? Get(int position); +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/MassiveGenericObjects.cs new file mode 100644 index 0000000..7992918 --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/MassiveGenericObjects.cs @@ -0,0 +1,86 @@ +using ProjectLiner.CollectionGenericObjects; + +namespace ProjectLiner.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 position) + { + // TODO проверка позиции + if (position >= _collection.Length || position < 0) return null; + return _collection[position]; + } + public bool Insert(T obj) + { + // TODO вставка в свободное место набора + int index = 0; + while (index < _collection.Length) + { + if (_collection[index] == null) + { + _collection[index] = obj; + return true; + } + ++index; + } + return false; + } + public bool Insert(T obj, int position) + { + // TODO проверка позиции + // TODO проверка, что элемент массива по этой позиции пустой, если нет, то + // ищется свободное место после этой позиции и идет вставка туда + // если нет после, ищем до + // TODO вставка + if (position >= _collection.Length || position < 0) + return false; + if (_collection[position] == null) + { + _collection[position] = obj; + return true; + } + int index = position + 1; + while (index < _collection.Length) + { + if (_collection[index] == null) + { + _collection[index] = obj; + return true; + } + ++index; + } + index = position - 1; + while (index >= 0) + { + if (_collection[index] == null) + { + _collection[index] = obj; + return true; + } + --index; + } + return false; + } + public bool Remove(int position) + { + // TODO проверка позиции + // TODO удаление объекта из массива, присвоив элементу массива значение null + if (position >= _collection.Length || position < 0) + return false; + _collection[position] = null; + return true; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs index fe5ebb3..a62aad1 100644 --- a/ProjectLiner/ProjectLiner/FormLiner.Designer.cs +++ b/ProjectLiner/ProjectLiner/FormLiner.Designer.cs @@ -1,174 +1,152 @@ -namespace ProjectLiner +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectLiner { - partial class FormLiner - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; + partial class FormLiner + { + /// + /// 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); - } + /// + /// 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 + #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() - { - pictureBoxLiner = new PictureBox(); - buttonCreateBetterLiner = new Button(); - buttonLeft = new Button(); - buttonUp = new Button(); - buttonDown = new Button(); - buttonRight = new Button(); - buttonCreateLiner = new Button(); - comboBoxStrategy = new ComboBox(); - buttonStrategyStep = new Button(); - ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); - SuspendLayout(); - // - // pictureBoxLiner - // - pictureBoxLiner.Dock = DockStyle.Fill; - pictureBoxLiner.Location = new Point(0, 0); - pictureBoxLiner.Name = "pictureBoxLiner"; - pictureBoxLiner.Size = new Size(923, 597); - pictureBoxLiner.TabIndex = 0; - pictureBoxLiner.TabStop = false; + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + pictureBoxLiner = new PictureBox(); + buttonUp = new Button(); + buttonRight = new Button(); + buttonLeft = new Button(); + buttonDown = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).BeginInit(); + SuspendLayout(); // - // buttonCreateBetterLiner + // pictureBoxWarmlyShip // - buttonCreateBetterLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateBetterLiner.Location = new Point(12, 562); - buttonCreateBetterLiner.Name = "buttonCreateBetterLiner"; - buttonCreateBetterLiner.Size = new Size(223, 23); - buttonCreateBetterLiner.TabIndex = 1; - buttonCreateBetterLiner.Text = "Создать крутой лайнер"; - buttonCreateBetterLiner.UseVisualStyleBackColor = true; - buttonCreateBetterLiner.Click += ButtonCreateBetterLiner_Click; - // - // buttonLeft - // - buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; - buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; - buttonLeft.Location = new Point(787, 550); - buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(35, 35); - buttonLeft.TabIndex = 2; - buttonLeft.UseVisualStyleBackColor = true; - buttonLeft.Click += ButtonMove_Click; - // - // buttonUp - // - buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonUp.BackgroundImage = Properties.Resources.arrowUp; - buttonUp.BackgroundImageLayout = ImageLayout.Stretch; - buttonUp.Location = new Point(828, 509); - buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(35, 35); - buttonUp.TabIndex = 3; - buttonUp.UseVisualStyleBackColor = true; - buttonUp.Click += ButtonMove_Click; - // - // buttonDown - // - buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonDown.BackgroundImage = Properties.Resources.arrowDown; - buttonDown.BackgroundImageLayout = ImageLayout.Stretch; - buttonDown.Location = new Point(828, 550); - buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(35, 35); - buttonDown.TabIndex = 4; - buttonDown.UseVisualStyleBackColor = true; - buttonDown.Click += ButtonMove_Click; - // - // buttonRight - // - buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonRight.BackgroundImage = Properties.Resources.arrowRight; - buttonRight.BackgroundImageLayout = ImageLayout.Stretch; - buttonRight.Location = new Point(869, 550); - buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(35, 35); - buttonRight.TabIndex = 5; - buttonRight.UseVisualStyleBackColor = true; - buttonRight.Click += ButtonMove_Click; - // - // buttonCreateLiner - // - buttonCreateLiner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateLiner.Location = new Point(250, 562); - buttonCreateLiner.Name = "buttonCreateLiner"; - buttonCreateLiner.Size = new Size(223, 23); - buttonCreateLiner.TabIndex = 6; - buttonCreateLiner.Text = "Создать лайнер"; - buttonCreateLiner.UseVisualStyleBackColor = true; - buttonCreateLiner.Click += ButtonCreateLiner_Click; - // - // comboBoxStrategy - // - comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; - comboBoxStrategy.FormattingEnabled = true; - comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); - comboBoxStrategy.Location = new Point(790, 12); - comboBoxStrategy.Name = "comboBoxStrategy"; - comboBoxStrategy.Size = new Size(121, 23); - comboBoxStrategy.TabIndex = 7; - // - // buttonStrategyStep - // - buttonStrategyStep.Location = new Point(836, 41); - buttonStrategyStep.Name = "buttonStrategyStep"; - buttonStrategyStep.Size = new Size(75, 23); - buttonStrategyStep.TabIndex = 8; - buttonStrategyStep.Text = "Шаг"; - buttonStrategyStep.UseVisualStyleBackColor = true; - buttonStrategyStep.Click += ButtonStrategyStep_Click; - // - // FormLiner - // - AutoScaleDimensions = new SizeF(7F, 15F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(923, 597); - Controls.Add(buttonStrategyStep); - Controls.Add(comboBoxStrategy); - Controls.Add(buttonCreateLiner); - Controls.Add(buttonRight); - Controls.Add(buttonDown); - Controls.Add(buttonUp); - Controls.Add(buttonLeft); - Controls.Add(buttonCreateBetterLiner); - Controls.Add(pictureBoxLiner); - Name = "FormLiner"; - Text = "Лайнер"; - ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); - ResumeLayout(false); - } + pictureBoxLiner.Dock = DockStyle.Fill; + pictureBoxLiner.Location = new Point(0, 0); + pictureBoxLiner.Name = "pictureBoxLiner"; + pictureBoxLiner.Size = new Size(830, 366); + pictureBoxLiner.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBoxLiner.TabIndex = 0; + pictureBoxLiner.TabStop = false; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(732, 279); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(30, 30); + buttonUp.TabIndex = 2; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(778, 324); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(30, 30); + buttonRight.TabIndex = 3; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(685, 324); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(30, 30); + buttonLeft.TabIndex = 4; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(732, 324); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(30, 30); + buttonDown.TabIndex = 5; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(685, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(133, 23); + comboBoxStrategy.TabIndex = 7; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(732, 41); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(86, 23); + buttonStrategyStep.TabIndex = 8; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += buttonStrategyStep_Click; + // + // FormWarmlyShip + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(830, 366); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); + Controls.Add(buttonDown); + Controls.Add(buttonLeft); + Controls.Add(buttonRight); + Controls.Add(buttonUp); + Controls.Add(pictureBoxLiner); + Name = "FormWarmlyShip"; + Text = "WarmlyShip"; + ((System.ComponentModel.ISupportInitialize)pictureBoxLiner).EndInit(); + ResumeLayout(false); + PerformLayout(); + } - #endregion + #endregion - private PictureBox pictureBoxLiner; - private Button buttonCreateBetterLiner; - private Button buttonLeft; - private Button buttonUp; - private Button buttonDown; - private Button buttonRight; - private Button buttonCreateLiner; - private ComboBox comboBoxStrategy; - private Button buttonStrategyStep; - } + private PictureBox pictureBoxLiner; + private Button buttonUp; + private Button buttonRight; + private Button buttonLeft; + private Button buttonDown; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; + } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLiner.cs b/ProjectLiner/ProjectLiner/FormLiner.cs index 3bfac7f..5a20a24 100644 --- a/ProjectLiner/ProjectLiner/FormLiner.cs +++ b/ProjectLiner/ProjectLiner/FormLiner.cs @@ -1,168 +1,102 @@ using ProjectLiner.Drawnings; using ProjectLiner.MovementStrategy; -namespace ProjectLiner; - -/// -/// Форма работы с объектом "Спортивный автомобиль" -/// -public partial class FormLiner : Form +namespace ProjectLiner { - /// - /// Поле-объект для прорисовки объекта - /// - private DrawningLiner? _drawningLiner; - - /// - /// Стратегия перемещения - /// - private AbstractStrategy? _strategy; - - /// - /// Конструктор формы - /// - public FormLiner() - { - InitializeComponent(); - _strategy = null; - } - - /// - /// Метод прорисовки машины - /// - private void Draw() - { - if (_drawningLiner == null) - { - return; - } - - Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawningLiner.DrawTransport(gr); - pictureBoxLiner.Image = bmp; - } - - /// - /// Создание объекта класса-перемещения - /// - /// Тип создаваемого объекта - private void CreateObject(string type) - { - Random random = new(); - switch (type) - { - case nameof(DrawningLiner): - _drawningLiner = new DrawningLiner(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(DrawningBetterLiner): - _drawningLiner = new DrawningBetterLiner(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; - } - - _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); - _drawningLiner.SetPosition(random.Next(10, 100), random.Next(10, 100)); - _strategy = null; - comboBoxStrategy.Enabled = true; - Draw(); - } - - /// - /// Обработка нажатия кнопки "Создать спортивный автомобиль" - /// - /// - /// - private void ButtonCreateBetterLiner_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBetterLiner)); - - /// - /// Обработка нажатия кнопки "Создать автомобиль" - /// - /// - /// - private void ButtonCreateLiner_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLiner)); - - /// - /// Перемещение объекта по форме (нажатие кнопок навигации) - /// - /// - /// - private void ButtonMove_Click(object sender, EventArgs e) - { - if (_drawningLiner == null) - { - return; - } - - string name = ((Button)sender)?.Name ?? string.Empty; - bool result = false; - switch (name) - { - case "buttonUp": - result = _drawningLiner.MoveTransport(DirectionType.Up); - break; - case "buttonDown": - result = _drawningLiner.MoveTransport(DirectionType.Down); - break; - case "buttonLeft": - result = _drawningLiner.MoveTransport(DirectionType.Left); - break; - case "buttonRight": - result = _drawningLiner.MoveTransport(DirectionType.Right); - break; - } - - if (result) - { - Draw(); - } - } - - /// - /// Обработка нажатия кнопки "Шаг" - /// - /// - /// - private void ButtonStrategyStep_Click(object sender, EventArgs e) - { - if (_drawningLiner == null) - { - return; - } - - if (comboBoxStrategy.Enabled) - { - _strategy = comboBoxStrategy.SelectedIndex switch - { - 0 => new MoveToCenter(), - 1 => new MoveToCorner(), - _ => null, - }; - if (_strategy == null) - { - return; - } - _strategy.SetData(new MoveableLiner(_drawningLiner), pictureBoxLiner.Width, pictureBoxLiner.Height); - } - - if (_strategy == null) - { - return; - } - - comboBoxStrategy.Enabled = false; - _strategy.MakeStep(); - Draw(); - - if (_strategy.GetStatus() == StrategyStatus.Finish) - { - comboBoxStrategy.Enabled = true; - _strategy = null; - } - } -} \ No newline at end of file + public partial class FormLiner : Form + { + private DrawningLiner? _drawningLiner; + private AbstractStrategy? _strategy; + /// + /// Получение объекта + /// + public DrawningLiner SetLiner + { + set + { + _drawningLiner = value; + _drawningLiner.SetPictureSize(pictureBoxLiner.Width, pictureBoxLiner.Height); + comboBoxStrategy.Enabled = true; + Draw(); + } + } + public FormLiner() + { + InitializeComponent(); + _strategy = null; + } + private void Draw() + { + if (_drawningLiner == null) + { + return; + } + Bitmap bmp = new(pictureBoxLiner.Width, pictureBoxLiner.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningLiner.DrawTransport(gr); + pictureBoxLiner.Image = bmp; + } + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningLiner == null) + { + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningLiner.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningLiner.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningLiner.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningLiner.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } + private void buttonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawningLiner == null) + { + return; + } + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToCorner(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableLiner(_drawningLiner), + pictureBoxLiner.Width, pictureBoxLiner.Height); + } + if (_strategy == null) + { + return; + } + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } + } +} diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs new file mode 100644 index 0000000..3a7fb12 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs @@ -0,0 +1,177 @@ +using static System.Net.Mime.MediaTypeNames; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace ProjectLiner +{ + partial class FormLinerCollection + { + /// + /// 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() + { + groupBoxTools = new GroupBox(); + buttonRefresh = new Button(); + buttonGoToCheck = new Button(); + buttonRemoveLiner = new Button(); + maskedTextBox = new MaskedTextBox(); + buttonAddBetterLiner = new Button(); + buttonAddLiner = new Button(); + comboBoxSelectorCompany = new ComboBox(); + pictureBox = new PictureBox(); + groupBoxTools.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + SuspendLayout(); + // + // groupBoxTools + // + groupBoxTools.Controls.Add(buttonRefresh); + groupBoxTools.Controls.Add(buttonGoToCheck); + groupBoxTools.Controls.Add(buttonRemoveLiner); + groupBoxTools.Controls.Add(maskedTextBox); + groupBoxTools.Controls.Add(buttonAddBetterLiner); + groupBoxTools.Controls.Add(buttonAddLiner); + groupBoxTools.Controls.Add(comboBoxSelectorCompany); + groupBoxTools.Dock = DockStyle.Right; + groupBoxTools.Location = new Point(887, 0); + groupBoxTools.Name = "groupBoxTools"; + groupBoxTools.Size = new Size(146, 596); + groupBoxTools.TabIndex = 0; + groupBoxTools.TabStop = false; + groupBoxTools.Text = "Инструменты"; + // + // buttonRefresh + // + buttonRefresh.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + buttonRefresh.Location = new Point(6, 544); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(128, 40); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += buttonRefresh_Click; + // + // buttonGoToCheck + // + buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonGoToCheck.Location = new Point(6, 324); + buttonGoToCheck.Name = "buttonGoToCheck"; + buttonGoToCheck.Size = new Size(128, 40); + buttonGoToCheck.TabIndex = 5; + buttonGoToCheck.Text = "Передать на тесты"; + buttonGoToCheck.UseVisualStyleBackColor = true; + buttonGoToCheck.Click += buttonGoToCheck_Click; + // + // buttonRemoveShip + // + buttonRemoveLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRemoveLiner.Location = new Point(6, 250); + buttonRemoveLiner.Name = "buttonRemoveShip"; + buttonRemoveLiner.Size = new Size(128, 40); + buttonRemoveLiner.TabIndex = 4; + buttonRemoveLiner.Text = "Удаление"; + buttonRemoveLiner.UseVisualStyleBackColor = true; + buttonRemoveLiner.Click += buttonRemoveLiner_Click; + // + // maskedTextBox + // + maskedTextBox.Location = new Point(6, 221); + maskedTextBox.Mask = "00"; + maskedTextBox.Name = "maskedTextBox"; + maskedTextBox.Size = new Size(128, 23); + maskedTextBox.TabIndex = 3; + maskedTextBox.ValidatingType = typeof(int); + // + // buttonAddWarmlyShip + // + buttonAddBetterLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddBetterLiner.Location = new Point(6, 131); + buttonAddBetterLiner.Name = "buttonAddBetterLiner"; + buttonAddBetterLiner.Size = new Size(128, 40); + buttonAddBetterLiner.TabIndex = 2; + buttonAddBetterLiner.Text = "Добавление крутого лайнера"; + buttonAddBetterLiner.UseVisualStyleBackColor = true; + buttonAddBetterLiner.Click += buttonAddBetterLiner_Click; + // + // buttonAddShip + // + buttonAddLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddLiner.Location = new Point(6, 87); + buttonAddLiner.Name = "buttonAddLiner"; + buttonAddLiner.Size = new Size(128, 38); + buttonAddLiner.TabIndex = 1; + buttonAddLiner.Text = "Добавление лайнера"; + buttonAddLiner.UseVisualStyleBackColor = true; + buttonAddLiner.Click += buttonAddLiner_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(6, 22); + comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; + comboBoxSelectorCompany.Size = new Size(134, 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(887, 596); + pictureBox.TabIndex = 1; + pictureBox.TabStop = false; + // + // FormLinerCollection + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1033, 596); + Controls.Add(pictureBox); + Controls.Add(groupBoxTools); + Name = "FormLinerCollection"; + Text = "Коллекция лайнеров"; + groupBoxTools.ResumeLayout(false); + groupBoxTools.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBoxTools; + private ComboBox comboBoxSelectorCompany; + private Button buttonAddBetterLiner; + private Button buttonAddLiner; + private Button buttonGoToCheck; + private Button buttonRemoveLiner; + private MaskedTextBox maskedTextBox; + private PictureBox pictureBox; + private Button buttonRefresh; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.cs new file mode 100644 index 0000000..c1f0a7a --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.cs @@ -0,0 +1,133 @@ +using ProjectLiner.CollectionGenericObjects; +using ProjectLiner.Drawnings; +using System.Windows.Forms; + +namespace ProjectLiner; + +public partial class FormLinerCollection : Form +{ + private AbstractCompany? _company = null; + public FormLinerCollection() + { + InitializeComponent(); + } + private void comboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new DockService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + break; + } + } + private void CreateObject(string type) + { + if (_company == null) + { + return; + } + Random random = new(); + DrawningLiner drawningLiner; + switch (type) + { + case nameof(DrawningLiner): + drawningLiner = new DrawningLiner(random.Next(100, 300), + random.Next(1000, 3000), GetColor(random)); + break; + case nameof(DrawningBetterLiner): + // TODO вызов диалогового окна для выбора цвета (made) + drawningLiner = new DrawningBetterLiner(random.Next(100, 300), random.Next(1000, 3000), + GetColor(random), GetColor(random), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + default: + return; + } + if (_company + drawningLiner) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + private static Color GetColor(Random random) + { + Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + ColorDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + return color; + } + + private void buttonAddLiner_Click(object sender, EventArgs e) + { + CreateObject(nameof(DrawningLiner)); + } + + private void buttonAddBetterLiner_Click(object sender, EventArgs e) + { + CreateObject(nameof(DrawningBetterLiner)); + } + + private void buttonRemoveLiner_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + int pos = Convert.ToInt32(maskedTextBox.Text); + if (_company - pos) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + private void buttonGoToCheck_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + DrawningLiner? liner = null; + int counter = 100; + while (liner == null) + { + liner = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } + } + if (liner == null) + { + return; + } + FormLiner form = new() + { + SetLiner = liner + }; + form.ShowDialog(); + } + private void buttonRefresh_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + pictureBox.Image = _company.Show(); + } +} diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.resx b/ProjectLiner/ProjectLiner/FormLinerCollection.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.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/ProjectLiner/ProjectLiner/Program.cs b/ProjectLiner/ProjectLiner/Program.cs index 20e3493..49d860e 100644 --- a/ProjectLiner/ProjectLiner/Program.cs +++ b/ProjectLiner/ProjectLiner/Program.cs @@ -11,7 +11,7 @@ namespace ProjectLiner // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormLiner()); + Application.Run(new FormLinerCollection()); } } } \ No newline at end of file -- 2.25.1 From d90bca7c169b0b89f4e6efb6eb8fd7f9a7d6ac46 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Mon, 6 May 2024 14:03:59 +0400 Subject: [PATCH 10/11] LabWork04 1 --- .../ProjectLiner/DesignTimeBuild/.dtbcache.v2 | Bin 98875 -> 98875 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 269 +++++++++++------- .../CollectionType.cs | 19 ++ .../ListGenericObjects.cs | 55 ++++ .../StorageCollection.cs | 72 +++++ .../FormLinerCollection.Designer.cs | 218 +++++++++++--- .../ProjectLiner/FormLinerCollection.cs | 107 +++++-- 7 files changed, 567 insertions(+), 173 deletions(-) create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs create mode 100644 ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs diff --git a/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 b/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 index 902b0055ec0b563e13f57cf94233c007b61dc0d3..6013e224eebe757efccc03164cdf39202ccede6a 100644 GIT binary patch delta 751 zcmZ|MOHUI~6bJA*GwoPwTdS37sTCAsV@$}w)i5nHzw+4bw zgm%Qc65o#niEl>3hHs!-Oxzehz)1{=OaB*JcihZx{&RBfoIdXAjJ`UftA~}QdiF%c zajZ(-$Y=7koRuwDw(U5kQ?2Dy#(h zrz#VdoT*7=j@$@2qNhZ0v0SE@SS-_!9xTbWIC`GeXbc<9xJ3%p`^P7*PF%UHD*sj( z5r@674-(J~N!Sl5H~>A+3kTs45cGjuL%_;36RWJTkNvD)=WQ)&abS?QbAW@qgF_tV z$Zt*ucqd1B7w_iSAn)NAnq8e{tkY{WrZ@cFhM!tR?^l@$T0OM+Ns6K&XK}j$Hz9)h zR{Qxj@($dEIk*S&umDYHfeZIx5u$ka0aCs%K+fA@Msmv`2}LZ8P&_9GJcK291drhf zJcVcQ9A3ancm=PaDb|N6S(j(=2IX78rM$zfQ_KJPJ!+XB+I=}j{+{J_{jpttLh9JJ qf|Os!1G)Dz$h~sL7o=Q$>HlXI>>S#kF7L+(Mbm1d;SJa6r}`IZMyK2W delta 1056 zcmaKo&rcIU6vt{C)G}l@t00nCykbqu-$=3JFf;GjHC!H{W@0=B9#kQ$g{oE#71JDMwiBVJD5)E?s7JDmZ%VbCmWWlzJLpbj`HY^8jMyws zcC2b(Rf1O(!l6|sBv83TS9(;$MsJgNc=-YBg%h6Ju*LhXw0O-@tv4^$Nl7i|Er^Nc zjs3c6F`H$aNa8>$f@4w}aTF^{9h?7!J-HMpF9ig*-s@E~tZlzPk5dFMx~S5-5So;0m}3u7T^|2Dl08arYK1 zzkeHWy>&FUtt%2HrPD(~sK^EGf_vaTcmN)PM_>j#22a3K@C-Z$yr>so7Q6(nz-v$j zB8qzh`xao5cUV?@0sb6(Zs#lU;<7jwx_{21FR+;TmS$7 diff --git a/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json b/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json index d0d5d30..952e325 100644 --- a/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json +++ b/ProjectLiner/.vs/ProjectLiner/v17/DocumentLayout.json @@ -2,49 +2,61 @@ "Version": 1, "WorkspaceRootPath": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\", "Documents": [ - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\storagecollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\storagecollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\collectiontype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\collectiontype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\listgenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\listgenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formlinercollection.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\formliner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\movementstrategy\\abstractstrategy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\movementstrategy\\abstractstrategy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\movementstrategy\\abstractstrategy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\dockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\projectliner\\collectiongenericobjects\\dockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\dockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\abstractcompany.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\massivegenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|c:\\somegitstuff\\isebd-11_khatypov_k.r_fundamental\\projectliner\\projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{7FB62E78-175F-490A-B5F2-2FF676947033}|ProjectLiner\\ProjectLiner.csproj|solutionrelative:projectliner\\collectiongenericobjects\\icollectiongenericobjects.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -54,19 +66,75 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 0, + "SelectedChildIndex": 4, "Children": [ + { + "$type": "Bookmark", + "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "StorageCollection.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\StorageCollection.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\StorageCollection.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\StorageCollection.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\StorageCollection.cs", + "ViewState": "AQIAAB0AAAAAAAAAAAAAACkAAAAVAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-06T08:44:24.856Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "CollectionType.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\CollectionType.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\CollectionType.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\CollectionType.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\CollectionType.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAA8AAAAOAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-06T08:43:38.726Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "ListGenericObjects.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ListGenericObjects.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\ListGenericObjects.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ListGenericObjects.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\ListGenericObjects.cs", + "ViewState": "AQIAABwAAAAAAAAAAAAkwC8AAAAFAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-05-06T08:25:52.063Z", + "EditorCaption": "" + }, { "$type": "Document", "DocumentIndex": 0, - "Title": "FormLiner.Designer.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", - "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.Designer.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", - "RelativeToolTip": "ProjectLiner\\FormLiner.Designer.cs", - "ViewState": "AQIAAIEAAAAAAAAAAAAYwF0AAABHAAAA", + "Title": "FormLinerCollection.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", + "RelativeToolTip": "ProjectLiner\\FormLinerCollection.cs", + "ViewState": "AQIAABcAAAAAAAAAAAAgwCoAAAAnAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:59:21.855Z", + "WhenOpened": "2024-04-26T08:28:37.934Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "AbstractCompany.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", + "ViewState": "AQIAACcAAAAAAAAAAAAYwGAAAAAcAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:22:53.302Z", "EditorCaption": "" }, { @@ -77,66 +145,14 @@ "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.Designer.cs", "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.Designer.cs", "RelativeToolTip": "ProjectLiner\\FormLinerCollection.Designer.cs", - "ViewState": "AQIAAGMAAAAAAAAAAAAEwHQAAAAPAAAA", + "ViewState": "AQIAABEBAAAAAAAAAAAYwBgBAAAJAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-26T08:29:33.271Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 4, - "Title": "Program.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", - "RelativeDocumentMoniker": "ProjectLiner\\Program.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", - "RelativeToolTip": "ProjectLiner\\Program.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABAAAAABAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-23T15:50:13.098Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 2, - "Title": "FormLinerCollection.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", - "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", - "RelativeToolTip": "ProjectLiner\\FormLinerCollection.cs", - "ViewState": "AQIAAGoAAAAAAAAAAADwv0wAAAAiAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:28:37.934Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 7, - "Title": "DockService.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", - "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", - "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", - "ViewState": "AQIAAAYAAAAAAAAAAAAAAAUAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:24:12.713Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 10, - "Title": "ICollectionGenericObjects.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", - "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", - "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAACAAAABEAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:15:01.722Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 8, "Title": "FormLinerCollection.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435]", "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLinerCollection.cs", "RelativeDocumentMoniker": "ProjectLiner\\FormLinerCollection.cs", @@ -149,28 +165,52 @@ { "$type": "Document", "DocumentIndex": 5, + "Title": "ICollectionGenericObjects.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\ICollectionGenericObjects.cs", + "ViewState": "AQIAABQAAAAAAAAAAAA3wCAAAABEAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:15:01.722Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, "Title": "FormLiner.cs", "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.cs", "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.cs", "RelativeToolTip": "ProjectLiner\\FormLiner.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAF4AAAA+AAAA", + "ViewState": "AQIAAEYAAAAAAAAAAAAUwGYAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-26T08:36:36.397Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 6, - "Title": "AbstractStrategy.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", - "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", - "RelativeToolTip": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", - "ViewState": "AQIAABsAAAAAAAAAAAAYwAAAAAAAAAAA", + "DocumentIndex": 13, + "Title": "DockService.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\DockService.cs", + "ViewState": "AQIAAAYAAAAAAAAAAAAAAAUAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:39:03.078Z", - "EditorCaption": "" + "WhenOpened": "2024-04-26T08:24:12.713Z" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "Program.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", + "RelativeDocumentMoniker": "ProjectLiner\\Program.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\Program.cs", + "RelativeToolTip": "ProjectLiner\\Program.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABAAAAABAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-23T15:50:13.098Z" }, { "$type": "Document", @@ -180,23 +220,34 @@ "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\MassiveGenericObjects.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAIAAAAWAAAA", + "ViewState": "AQIAACcAAAAAAAAAAAAowAIAAAAWAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-04-26T08:17:19.278Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 8, - "Title": "AbstractCompany.cs", - "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", - "RelativeDocumentMoniker": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", - "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", - "RelativeToolTip": "ProjectLiner\\CollectionGenericObjects\\AbstractCompany.cs", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAGAAAAAcAAAA", + "DocumentIndex": 10, + "Title": "FormLiner.Designer.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", + "RelativeDocumentMoniker": "ProjectLiner\\FormLiner.Designer.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\FormLiner.Designer.cs", + "RelativeToolTip": "ProjectLiner\\FormLiner.Designer.cs", + "ViewState": "AQIAAIEAAAAAAAAAAAAYwF0AAABHAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-04-26T08:22:53.302Z", - "EditorCaption": "" + "WhenOpened": "2024-04-26T08:59:21.855Z" + }, + { + "$type": "Document", + "DocumentIndex": 12, + "Title": "AbstractStrategy.cs", + "DocumentMoniker": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "RelativeDocumentMoniker": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "ToolTip": "C:\\SomeGitStuff\\ISEbd-11_Khatypov_K.R_fundamental\\ProjectLiner\\ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "RelativeToolTip": "ProjectLiner\\MovementStrategy\\AbstractStrategy.cs", + "ViewState": "AQIAABsAAAAAAAAAAAAYwAAAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-04-26T08:39:03.078Z" } ] } diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs new file mode 100644 index 0000000..2dd3c4d --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs @@ -0,0 +1,19 @@ +namespace ProjectLiner.CollectionGenericObjects; +/// +/// Тип коллекции +/// +public enum CollectionType +{ + /// + /// Неопределено + /// + None = 0, + /// + /// Массив + /// + Massive = 1, + /// + /// Список + /// + List = 2 +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs new file mode 100644 index 0000000..953e2b9 --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs @@ -0,0 +1,55 @@ +namespace ProjectLiner.CollectionGenericObjects; + +public class ListGenericObjects : ICollectionGenericObjects + where T : class +{ + /// + /// Список объектов, которые храним + /// + private readonly List _collection; + /// + /// Максимально допустимое число объектов в списке + /// + private int _maxCount; + public int Count => _collection.Count; + public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } + /// + /// Конструктор + /// + public ListGenericObjects() + { + _collection = new(); + } + public T? Get(int position) + { + // TODO проверка позиции + if (position >= Count || position < 0) return null; + return _collection[position]; + } + public bool Insert(T obj) + { + // TODO проверка, что не превышено максимальное количество элементов + // TODO вставка в конец набора + if (Count == _maxCount) return false; + _collection.Add(obj); + return true;//возможна проблема + } + public bool Insert(T obj, int position) + { + // TODO проверка, что не превышено максимальное количество элементов + // TODO проверка позиции + // TODO вставка по позиции + if (Count == _maxCount) return false; + if (position >= Count || position < 0) return false; + _collection.Insert(position, obj); + return true; + } + public bool Remove(int position) + { + // TODO проверка позиции + // TODO удаление объекта из списка + if (position >= Count || position < 0) return false; + _collection.RemoveAt(position); + return true; + } +} diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs new file mode 100644 index 0000000..be189c0 --- /dev/null +++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs @@ -0,0 +1,72 @@ +using ProjectLiner.Drawnings; + +namespace ProjectLiner.CollectionGenericObjects; + +public class StorageCollection + where T : class +{ + /// + /// Словарь (хранилище) с коллекциями + /// + readonly Dictionary> _storages; + /// + /// Возвращение списка названий коллекций + /// + public List Keys => _storages.Keys.ToList(); + /// + /// Конструктор + /// + public StorageCollection() + { + _storages = new Dictionary>(); + } + /// + /// Добавление коллекции в хранилище + /// + /// Название коллекции + /// тип коллекции + public void AddCollection(string name, CollectionType collectionType) + { + // TODO проверка, что name не пустой и нет в словаре записи с таким ключом + // TODO Прописать логику для добавления + if (_storages.ContainsKey(name)) return; + switch (collectionType) + { + case CollectionType.None: + return; + case CollectionType.List: + _storages[name] = new ListGenericObjects(); + break; + case CollectionType.Massive: + _storages[name] = new MassiveGenericObjects(); + break; + + } + } + /// + /// Удаление коллекции + /// + /// Название коллекции + public void DelCollection(string name) + { + + // TODO Прописать логику для удаления коллекции + if (_storages.ContainsKey(name)) + _storages.Remove(name); + } + /// + /// Доступ к коллекции + /// + /// Название коллекции + /// + public ICollectionGenericObjects? this[string name] + { + get + { + // TODO Продумать логику получения объекта + if (_storages.ContainsKey(name)) + return _storages[name]; + return null; + } + } +} diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs index 3a7fb12..2810b61 100644 --- a/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs @@ -33,27 +33,35 @@ namespace ProjectLiner private void InitializeComponent() { groupBoxTools = new GroupBox(); + panelCompanyTools = new Panel(); + buttonAddLiner = new Button(); + buttonAddBetterLiner = new Button(); buttonRefresh = new Button(); + maskedTextBox = new MaskedTextBox(); buttonGoToCheck = new Button(); buttonRemoveLiner = new Button(); - maskedTextBox = new MaskedTextBox(); - buttonAddBetterLiner = new Button(); - buttonAddLiner = new Button(); + buttonCreateCompany = new Button(); + panelStorage = new Panel(); + buttonCollectionDel = new Button(); + listBoxCollection = new ListBox(); + buttonCollectionAdd = new Button(); + radioButtonList = new RadioButton(); + radioButtonMassive = new RadioButton(); + textBoxCollectionName = new TextBox(); + labelCollectionName = new Label(); comboBoxSelectorCompany = new ComboBox(); pictureBox = new PictureBox(); groupBoxTools.SuspendLayout(); + panelCompanyTools.SuspendLayout(); + panelStorage.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); SuspendLayout(); // // groupBoxTools // - groupBoxTools.Controls.Add(buttonRefresh); - groupBoxTools.Controls.Add(buttonGoToCheck); - groupBoxTools.Controls.Add(buttonRemoveLiner); - groupBoxTools.Controls.Add(maskedTextBox); - groupBoxTools.Controls.Add(buttonAddBetterLiner); - groupBoxTools.Controls.Add(buttonAddLiner); - groupBoxTools.Controls.Add(comboBoxSelectorCompany); + groupBoxTools.Controls.Add(panelCompanyTools); + groupBoxTools.Controls.Add(buttonCreateCompany); + groupBoxTools.Controls.Add(panelStorage); groupBoxTools.Dock = DockStyle.Right; groupBoxTools.Location = new Point(887, 0); groupBoxTools.Name = "groupBoxTools"; @@ -62,10 +70,46 @@ namespace ProjectLiner groupBoxTools.TabStop = false; groupBoxTools.Text = "Инструменты"; // + // panelCompanyTools + // + panelCompanyTools.Controls.Add(buttonAddLiner); + panelCompanyTools.Controls.Add(buttonAddBetterLiner); + panelCompanyTools.Controls.Add(buttonRefresh); + panelCompanyTools.Controls.Add(maskedTextBox); + panelCompanyTools.Controls.Add(buttonGoToCheck); + panelCompanyTools.Controls.Add(buttonRemoveLiner); + panelCompanyTools.Enabled = false; + panelCompanyTools.Location = new Point(6, 333); + panelCompanyTools.Name = "panelCompanyTools"; + panelCompanyTools.Size = new Size(200, 280); + panelCompanyTools.TabIndex = 2; + // + // buttonAddLiner + // + buttonAddLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddLiner.Location = new Point(3, 3); + buttonAddLiner.Name = "buttonAddLiner"; + buttonAddLiner.Size = new Size(128, 38); + buttonAddLiner.TabIndex = 1; + buttonAddLiner.Text = "Добавление Лайнера"; + buttonAddLiner.UseVisualStyleBackColor = true; + buttonAddLiner.Click += buttonAddShip_Click; + // + // buttonAddBetterLiner + // + buttonAddBetterLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddBetterLiner.Location = new Point(3, 47); + buttonAddBetterLiner.Name = "buttonAddBetterLiner"; + buttonAddBetterLiner.Size = new Size(128, 40); + buttonAddBetterLiner.TabIndex = 2; + buttonAddBetterLiner.Text = "Добавление крутого лайнера"; + buttonAddBetterLiner.UseVisualStyleBackColor = true; + buttonAddBetterLiner.Click += buttonAddWarmlyShip_Click; + // // buttonRefresh // buttonRefresh.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - buttonRefresh.Location = new Point(6, 544); + buttonRefresh.Location = new Point(3, 214); buttonRefresh.Name = "buttonRefresh"; buttonRefresh.Size = new Size(128, 40); buttonRefresh.TabIndex = 6; @@ -73,10 +117,19 @@ namespace ProjectLiner buttonRefresh.UseVisualStyleBackColor = true; buttonRefresh.Click += buttonRefresh_Click; // + // maskedTextBox + // + maskedTextBox.Location = new Point(3, 93); + maskedTextBox.Mask = "00"; + maskedTextBox.Name = "maskedTextBox"; + maskedTextBox.Size = new Size(128, 23); + maskedTextBox.TabIndex = 3; + maskedTextBox.ValidatingType = typeof(int); + // // buttonGoToCheck // buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonGoToCheck.Location = new Point(6, 324); + buttonGoToCheck.Location = new Point(3, 168); buttonGoToCheck.Name = "buttonGoToCheck"; buttonGoToCheck.Size = new Size(128, 40); buttonGoToCheck.TabIndex = 5; @@ -84,47 +137,109 @@ namespace ProjectLiner buttonGoToCheck.UseVisualStyleBackColor = true; buttonGoToCheck.Click += buttonGoToCheck_Click; // - // buttonRemoveShip + // buttonRemoveLiner // buttonRemoveLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRemoveLiner.Location = new Point(6, 250); - buttonRemoveLiner.Name = "buttonRemoveShip"; + buttonRemoveLiner.Location = new Point(3, 122); + buttonRemoveLiner.Name = "buttonRemoveLiner"; buttonRemoveLiner.Size = new Size(128, 40); buttonRemoveLiner.TabIndex = 4; buttonRemoveLiner.Text = "Удаление"; buttonRemoveLiner.UseVisualStyleBackColor = true; - buttonRemoveLiner.Click += buttonRemoveLiner_Click; + buttonRemoveLiner.Click += buttonRemoveShip_Click; // - // maskedTextBox + // buttonCreateCompany // - maskedTextBox.Location = new Point(6, 221); - maskedTextBox.Mask = "00"; - maskedTextBox.Name = "maskedTextBox"; - maskedTextBox.Size = new Size(128, 23); - maskedTextBox.TabIndex = 3; - maskedTextBox.ValidatingType = typeof(int); + buttonCreateCompany.Location = new Point(6, 304); + buttonCreateCompany.Name = "buttonCreateCompany"; + buttonCreateCompany.Size = new Size(128, 23); + buttonCreateCompany.TabIndex = 8; + buttonCreateCompany.Text = "Создать компанию"; + buttonCreateCompany.UseVisualStyleBackColor = true; + buttonCreateCompany.Click += buttonCreateCompany_Click; // - // buttonAddWarmlyShip + // panelStorage // - buttonAddBetterLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddBetterLiner.Location = new Point(6, 131); - buttonAddBetterLiner.Name = "buttonAddBetterLiner"; - buttonAddBetterLiner.Size = new Size(128, 40); - buttonAddBetterLiner.TabIndex = 2; - buttonAddBetterLiner.Text = "Добавление крутого лайнера"; - buttonAddBetterLiner.UseVisualStyleBackColor = true; - buttonAddBetterLiner.Click += buttonAddBetterLiner_Click; + panelStorage.Controls.Add(buttonCollectionDel); + panelStorage.Controls.Add(listBoxCollection); + panelStorage.Controls.Add(buttonCollectionAdd); + panelStorage.Controls.Add(radioButtonList); + panelStorage.Controls.Add(radioButtonMassive); + panelStorage.Controls.Add(textBoxCollectionName); + panelStorage.Controls.Add(labelCollectionName); + panelStorage.Controls.Add(comboBoxSelectorCompany); + panelStorage.Dock = DockStyle.Top; + panelStorage.Location = new Point(3, 19); + panelStorage.Name = "panelStorage"; + panelStorage.Size = new Size(140, 279); + panelStorage.TabIndex = 7; // - // buttonAddShip + // buttonCollectionDel // - buttonAddLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddLiner.Location = new Point(6, 87); - buttonAddLiner.Name = "buttonAddLiner"; - buttonAddLiner.Size = new Size(128, 38); - buttonAddLiner.TabIndex = 1; - buttonAddLiner.Text = "Добавление лайнера"; - buttonAddLiner.UseVisualStyleBackColor = true; - buttonAddLiner.Click += buttonAddLiner_Click; + buttonCollectionDel.Location = new Point(3, 216); + buttonCollectionDel.Name = "buttonCollectionDel"; + buttonCollectionDel.Size = new Size(132, 23); + buttonCollectionDel.TabIndex = 6; + buttonCollectionDel.Text = "Удалить коллецию"; + buttonCollectionDel.UseVisualStyleBackColor = true; + buttonCollectionDel.Click += buttonCollectionDel_Click; + // + // listBoxCollection + // + listBoxCollection.FormattingEnabled = true; + listBoxCollection.ItemHeight = 15; + listBoxCollection.Location = new Point(3, 101); + listBoxCollection.Name = "listBoxCollection"; + listBoxCollection.Size = new Size(134, 109); + listBoxCollection.TabIndex = 5; + // + // buttonCollectionAdd + // + buttonCollectionAdd.Location = new Point(3, 72); + buttonCollectionAdd.Name = "buttonCollectionAdd"; + buttonCollectionAdd.Size = new Size(128, 23); + buttonCollectionAdd.TabIndex = 4; + buttonCollectionAdd.Text = "Добавить коллекцию"; + buttonCollectionAdd.UseVisualStyleBackColor = true; + buttonCollectionAdd.Click += buttonCollectionAdd_Click; + // + // radioButtonList + // + radioButtonList.AutoSize = true; + radioButtonList.Location = new Point(71, 47); + radioButtonList.Name = "radioButtonList"; + radioButtonList.Size = new Size(66, 19); + radioButtonList.TabIndex = 3; + radioButtonList.TabStop = true; + radioButtonList.Text = "Список"; + radioButtonList.UseVisualStyleBackColor = true; + // + // radioButtonMassive + // + radioButtonMassive.AutoSize = true; + radioButtonMassive.Location = new Point(3, 47); + radioButtonMassive.Name = "radioButtonMassive"; + radioButtonMassive.Size = new Size(67, 19); + radioButtonMassive.TabIndex = 2; + radioButtonMassive.TabStop = true; + radioButtonMassive.Text = "Массив"; + radioButtonMassive.UseVisualStyleBackColor = true; + // + // textBoxCollectionName + // + textBoxCollectionName.Location = new Point(3, 18); + textBoxCollectionName.Name = "textBoxCollectionName"; + textBoxCollectionName.Size = new Size(128, 23); + textBoxCollectionName.TabIndex = 1; + // + // labelCollectionName + // + labelCollectionName.AutoSize = true; + labelCollectionName.Location = new Point(3, 0); + labelCollectionName.Name = "labelCollectionName"; + labelCollectionName.Size = new Size(125, 15); + labelCollectionName.TabIndex = 0; + labelCollectionName.Text = "Название коллекции:"; // // comboBoxSelectorCompany // @@ -132,11 +247,11 @@ namespace ProjectLiner comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxSelectorCompany.FormattingEnabled = true; comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); - comboBoxSelectorCompany.Location = new Point(6, 22); + comboBoxSelectorCompany.Location = new Point(3, 256); comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; - comboBoxSelectorCompany.Size = new Size(134, 23); + comboBoxSelectorCompany.Size = new Size(128, 23); comboBoxSelectorCompany.TabIndex = 0; - comboBoxSelectorCompany.SelectedIndexChanged += comboBoxSelectorCompany_SelectedIndexChanged; + comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged; // // pictureBox // @@ -157,7 +272,10 @@ namespace ProjectLiner Name = "FormLinerCollection"; Text = "Коллекция лайнеров"; groupBoxTools.ResumeLayout(false); - groupBoxTools.PerformLayout(); + panelCompanyTools.ResumeLayout(false); + panelCompanyTools.PerformLayout(); + panelStorage.ResumeLayout(false); + panelStorage.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); ResumeLayout(false); } @@ -173,5 +291,15 @@ namespace ProjectLiner private MaskedTextBox maskedTextBox; private PictureBox pictureBox; private Button buttonRefresh; + private Panel panelStorage; + private RadioButton radioButtonList; + private RadioButton radioButtonMassive; + private TextBox textBoxCollectionName; + private Label labelCollectionName; + private Button buttonCreateCompany; + private Button buttonCollectionDel; + private ListBox listBoxCollection; + private Button buttonCollectionAdd; + private Panel panelCompanyTools; } } \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.cs index c1f0a7a..9dba283 100644 --- a/ProjectLiner/ProjectLiner/FormLinerCollection.cs +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.cs @@ -7,18 +7,15 @@ namespace ProjectLiner; public partial class FormLinerCollection : Form { private AbstractCompany? _company = null; + private readonly StorageCollection _storageCollection; public FormLinerCollection() { InitializeComponent(); + _storageCollection = new(); } - private void comboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) { - switch (comboBoxSelectorCompany.Text) - { - case "Хранилище": - _company = new DockService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); - break; - } + panelCompanyTools.Enabled = false; } private void CreateObject(string type) { @@ -43,7 +40,7 @@ public partial class FormLinerCollection : Form default: return; } - if (_company + drawningLiner) + if ((_company + drawningLiner)) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -64,17 +61,15 @@ public partial class FormLinerCollection : Form return color; } - private void buttonAddLiner_Click(object sender, EventArgs e) + private void buttonAddShip_Click(object sender, EventArgs e) { CreateObject(nameof(DrawningLiner)); } - - private void buttonAddBetterLiner_Click(object sender, EventArgs e) + private void buttonAddWarmlyShip_Click(object sender, EventArgs e) { CreateObject(nameof(DrawningBetterLiner)); } - - private void buttonRemoveLiner_Click(object sender, EventArgs e) + private void buttonRemoveShip_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) { @@ -85,7 +80,7 @@ public partial class FormLinerCollection : Form return; } int pos = Convert.ToInt32(maskedTextBox.Text); - if (_company - pos) + if (_company - pos != null) { MessageBox.Show("Объект удален"); pictureBox.Image = _company.Show(); @@ -101,24 +96,24 @@ public partial class FormLinerCollection : Form { return; } - DrawningLiner? liner = null; + DrawningLiner? ship = null; int counter = 100; - while (liner == null) + while (ship == null) { - liner = _company.GetRandomObject(); + ship = _company.GetRandomObject(); counter--; if (counter <= 0) { break; } } - if (liner == null) + if (ship == null) { return; } FormLiner form = new() { - SetLiner = liner + SetLiner = ship }; form.ShowDialog(); } @@ -130,4 +125,78 @@ public partial class FormLinerCollection : Form } pictureBox.Image = _company.Show(); } + private void buttonCollectionAdd_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) + { + MessageBox.Show("Не все данные заполнены", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.Checked) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.Checked) + { + collectionType = CollectionType.List; + } + _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + RerfreshListBoxItems(); + } + private void RerfreshListBoxItems() + { + listBoxCollection.Items.Clear(); + for (int i = 0; i < _storageCollection.Keys?.Count; ++i) + { + string? colName = _storageCollection.Keys?[i]; + if (!string.IsNullOrEmpty(colName)) + { + listBoxCollection.Items.Add(colName); + } + } + } + private void buttonCollectionDel_Click(object sender, EventArgs e) + { + // TODO прописать логику удаления элемента из коллекции + // нужно убедиться, что есть выбранная коллекция + // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись + // удалить и обновить ListBox + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + { + MessageBox.Show("Коллекция не выбрана"); + return; + } + if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + RerfreshListBoxItems(); + } + private void buttonCreateCompany_Click(object sender, EventArgs e) + { + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + { + MessageBox.Show("Коллекция не выбрана"); + return; + } + ICollectionGenericObjects? collection = + _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; + if (collection == null) + { + MessageBox.Show("Коллекция не проинициализирована"); + return; + } + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new DockService(pictureBox.Width, pictureBox.Height, collection); + break; + } + panelCompanyTools.Enabled = true; + RerfreshListBoxItems(); + } } + -- 2.25.1 From 1fb73f7c7b70f6bd633787023561cea9688a5930 Mon Sep 17 00:00:00 2001 From: BroPlasmaNinja Date: Tue, 7 May 2024 23:57:25 +0400 Subject: [PATCH 11/11] LabWork05 1 --- .../ProjectLiner/DesignTimeBuild/.dtbcache.v2 | Bin 98875 -> 98875 bytes .../.vs/ProjectLiner/v17/DocumentLayout.json | 202 ++++++---- .../Entities/EntityBetterLiner.cs | 2 +- .../ProjectLiner/Entities/EntityLiner.cs | 2 +- .../FormLinerCollection.Designer.cs | 16 +- .../ProjectLiner/FormLinerCollection.cs | 61 +-- .../ProjectLiner/FormLinerConfig.Designer.cs | 357 ++++++++++++++++++ ProjectLiner/ProjectLiner/FormLinerConfig.cs | 130 +++++++ .../ProjectLiner/FormLinerConfig.resx | 120 ++++++ 9 files changed, 746 insertions(+), 144 deletions(-) create mode 100644 ProjectLiner/ProjectLiner/FormLinerConfig.Designer.cs create mode 100644 ProjectLiner/ProjectLiner/FormLinerConfig.cs create mode 100644 ProjectLiner/ProjectLiner/FormLinerConfig.resx diff --git a/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 b/ProjectLiner/.vs/ProjectLiner/DesignTimeBuild/.dtbcache.v2 index 6013e224eebe757efccc03164cdf39202ccede6a..ab7028705ba22275ec3fcc7cb40f30687ea115eb 100644 GIT binary patch delta 2556 zcmZA24@{J090&0Cxku1uqGW_rNDc9V^6&sb<}3@)6#s*u3F3S2y>}cOcgMZ&p-u@* z)J&TlXI^OLoO5MnW@Kd8oNLw0wQ{bNbI!HqTx;b$-JEmP>i0fhDDmC>p3m=jp5O1e z_XYMc*poWglgh?K+0v(-YFX(_ms(P)Ycr?oMQ)dCy5@G4d$gkIF1M$sL@O?HI*ZF( zGfLEwqH<43X_-rPX+5vGR8l;u-_Vr_OT)nyT{9Q@ z0(w{$Mxxgia+fah~+7%y8u1IybG~RhOF|a=Y$1%37IP5%l}%@a4J@^mpj) zn#$^UdkxEYYRb^YicoE^QZ@C8W?gGt5-~#&vr;#F-axIdO;<9Xi}?Iz^lNqKc5)rz zNWi2WEg10lyp9$l7*KLXJiv&8SQpEBXvB(=f+l_V8C6?m>_OWC`301-hFEmsq}X?A zZfr6i6FXx|<2CNq*k#+|$?1!HS~zF~J*H!ERjq@Tl`#%e4SRLduznUs|E-i-l@-LY zy;&279?usH)NTmr4$V;P)_P3y&SefO8@149n6bFGicPbo={06Bta|nT`}%+M{_%Up z4z4J#Q0$~gqu=!|D~}h}Gkf-4O5+r7P)wk$KGNFWM}d;OyGydDWIt`aNpXPUEsBE_ z`{Envw63F+zDse8Vh_c86vrvvr#M0J0mVrQ8y)i@*-t?qDPbS3^OyskqC}7F|E@6*9*1#sQf_QlY%Oje=R&Wel1h+wUqpYj| zKCl~{0#^WABP;D-5imd>I18?Wu}!kU3F<*7I1J8%n;>JYY?uX9upJx+m%ts6qsoRV z&*P4=#g$ zKwg_{s0QsI4n6}vgZl!qvJk8Q8^Iy)75EKI49bRb&;+)EW8fmV4YEVBp#u28Zg2`* z0jynC+QA}VfIe^*TnA&rvcU=JK_@s2&V!pE!;lTLfC{#QSqKh_P6Wwy$EXSARxP``E l;pWvz8bl9OZneJC!>h$M>;A>|;iZ?Y`tI(5L>H^J{R@q)4^;pF delta 2534 zcma*oeQZ-z7zXfrcD6d_7_iMbCLe0Sr3LwTfzaqHm)`lXwjRD8Xq;&dF=A90zPj>gI4h0Rk1<7 zlJ*`IYe;=g8QoM6yX-8A{gs+GYUrv~M1sLU$S5_OA&+i^wRy2C*Xir4My!>G%8IVzFTsJziVGvO0z?HH15E3i#bV4{oaD(U<#(%A)^Ksb$ou z%dT}AUM+n=q_x!?#q~ONJlfaTk)q)kM&wbRqU2LXQ3@zeQ$|z9P{vZmQ3@&JDHAA+ zQbaM2=P5#aO)!xnxJVUg!m>>~*28*4`W*4NNEaF636Uv=iL3-ohKmtmWTD6wIdep= z$f3n2hZb|ND6%^{Pu@yf>5N4@jj=SZ?WD&$I5@tWYuf9S?UXF~$v2YY9psyoo$>zF zta!`_TI!{#xg4jM;PkEPefMS-vM>$A&KYo{X>xk0uW6Dv=CzL+Q zr<8t*`3yfJk5TBO9jC9Mx%qrf(A@N7a{WWn+|S&DKH90|{BzPm^V6hx2?G?f_6*mu zRk69r7j(irisI+$Sr7YjVA&crk}v9E_s+_RtSTWg6A3wq$;m7si&^6SL5mp6lA)?+ zn4I!(RY^SB!17sf{AdH4L|g{9!RU4B6B+ovNV;2ZE8 z7_m_`RDcHXD)9Z(IGU_IypN5N%q8;lOBhPl8Cc7apinxc1;Dx3^zKnUyw=fDk+5mF6SunKGe zhrk6e2y(-!VFqXf-JlO#0e8SyLp4-^7O)$f2G>DKL{*l6rN99D!Fg~KWVWk@GEfh; zg2Uh<5FqbG)i4vdz;@6Nt`Z#&{C}?C$^Xw)oL*^iHJ>f(DQjpJm23I@gnWU^2Ab^= zSqrFCuH%aJU;}7W%}!n|U0gQt>V#~jGrdyh3#FS&58>s~N3`(8awFNwWgFq=GC%~m z+(ZrgWQZ?H(3co4!{#V#jtp~T@Pv$*g9r`U%|Sa)#J}InigS}MiNy)?WkBx%8k7ta Zyu`XJ@gv( /// Дополнительный цвет (для опциональных элементов) /// - public Color AdditionalColor { get; private set; } + public Color AdditionalColor { get; set; } /// /// Имеет марку на боку diff --git a/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs b/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs index a48d099..f313118 100644 --- a/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs +++ b/ProjectLiner/ProjectLiner/Entities/EntityLiner.cs @@ -18,7 +18,7 @@ public class EntityLiner /// /// Основной цвет /// - public Color BodyColor { get; private set; } + public Color BodyColor { get; set; } /// /// Шаг перемещения автомобиля diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs index 2810b61..60baaa8 100644 --- a/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.Designer.cs @@ -35,7 +35,6 @@ namespace ProjectLiner groupBoxTools = new GroupBox(); panelCompanyTools = new Panel(); buttonAddLiner = new Button(); - buttonAddBetterLiner = new Button(); buttonRefresh = new Button(); maskedTextBox = new MaskedTextBox(); buttonGoToCheck = new Button(); @@ -73,7 +72,6 @@ namespace ProjectLiner // panelCompanyTools // panelCompanyTools.Controls.Add(buttonAddLiner); - panelCompanyTools.Controls.Add(buttonAddBetterLiner); panelCompanyTools.Controls.Add(buttonRefresh); panelCompanyTools.Controls.Add(maskedTextBox); panelCompanyTools.Controls.Add(buttonGoToCheck); @@ -95,17 +93,6 @@ namespace ProjectLiner buttonAddLiner.UseVisualStyleBackColor = true; buttonAddLiner.Click += buttonAddShip_Click; // - // buttonAddBetterLiner - // - buttonAddBetterLiner.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddBetterLiner.Location = new Point(3, 47); - buttonAddBetterLiner.Name = "buttonAddBetterLiner"; - buttonAddBetterLiner.Size = new Size(128, 40); - buttonAddBetterLiner.TabIndex = 2; - buttonAddBetterLiner.Text = "Добавление крутого лайнера"; - buttonAddBetterLiner.UseVisualStyleBackColor = true; - buttonAddBetterLiner.Click += buttonAddWarmlyShip_Click; - // // buttonRefresh // buttonRefresh.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; @@ -146,7 +133,7 @@ namespace ProjectLiner buttonRemoveLiner.TabIndex = 4; buttonRemoveLiner.Text = "Удаление"; buttonRemoveLiner.UseVisualStyleBackColor = true; - buttonRemoveLiner.Click += buttonRemoveShip_Click; + buttonRemoveLiner.Click += buttonRemoveLiner_Click; // // buttonCreateCompany // @@ -284,7 +271,6 @@ namespace ProjectLiner private GroupBox groupBoxTools; private ComboBox comboBoxSelectorCompany; - private Button buttonAddBetterLiner; private Button buttonAddLiner; private Button buttonGoToCheck; private Button buttonRemoveLiner; diff --git a/ProjectLiner/ProjectLiner/FormLinerCollection.cs b/ProjectLiner/ProjectLiner/FormLinerCollection.cs index 9dba283..adbf95b 100644 --- a/ProjectLiner/ProjectLiner/FormLinerCollection.cs +++ b/ProjectLiner/ProjectLiner/FormLinerCollection.cs @@ -17,30 +17,20 @@ public partial class FormLinerCollection : Form { panelCompanyTools.Enabled = false; } - private void CreateObject(string type) + private void buttonAddShip_Click(object sender, EventArgs e) { - if (_company == null) + FormLinerConfig form = new(); + // TODO передать метод + form.Show(); + form.AddEvent(SetLiner); + } + private void SetLiner(DrawningLiner? liner) + { + if (_company == null || liner == null) { return; } - Random random = new(); - DrawningLiner drawningLiner; - switch (type) - { - case nameof(DrawningLiner): - drawningLiner = new DrawningLiner(random.Next(100, 300), - random.Next(1000, 3000), GetColor(random)); - break; - case nameof(DrawningBetterLiner): - // TODO вызов диалогового окна для выбора цвета (made) - drawningLiner = new DrawningBetterLiner(random.Next(100, 300), random.Next(1000, 3000), - GetColor(random), GetColor(random), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); - break; - default: - return; - } - if ((_company + drawningLiner)) + if (_company + liner) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -50,26 +40,7 @@ public partial class FormLinerCollection : Form MessageBox.Show("Не удалось добавить объект"); } } - private static Color GetColor(Random random) - { - Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); - ColorDialog dialog = new(); - if (dialog.ShowDialog() == DialogResult.OK) - { - color = dialog.Color; - } - return color; - } - - private void buttonAddShip_Click(object sender, EventArgs e) - { - CreateObject(nameof(DrawningLiner)); - } - private void buttonAddWarmlyShip_Click(object sender, EventArgs e) - { - CreateObject(nameof(DrawningBetterLiner)); - } - private void buttonRemoveShip_Click(object sender, EventArgs e) + private void buttonRemoveLiner_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) { @@ -96,24 +67,24 @@ public partial class FormLinerCollection : Form { return; } - DrawningLiner? ship = null; + DrawningLiner? liner = null; int counter = 100; - while (ship == null) + while (liner == null) { - ship = _company.GetRandomObject(); + liner = _company.GetRandomObject(); counter--; if (counter <= 0) { break; } } - if (ship == null) + if (liner == null) { return; } FormLiner form = new() { - SetLiner = ship + SetLiner = liner }; form.ShowDialog(); } diff --git a/ProjectLiner/ProjectLiner/FormLinerConfig.Designer.cs b/ProjectLiner/ProjectLiner/FormLinerConfig.Designer.cs new file mode 100644 index 0000000..0af83b6 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerConfig.Designer.cs @@ -0,0 +1,357 @@ +namespace ProjectLiner +{ + partial class FormLinerConfig + { + /// + /// 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() + { + groupBoxConfig = new GroupBox(); + groupBoxColors = new GroupBox(); + panelPurple = new Panel(); + panelBlack = new Panel(); + panelGrey = new Panel(); + panelWhite = new Panel(); + panelYellow = new Panel(); + panelBlue = new Panel(); + panelGreen = new Panel(); + panelRed = new Panel(); + checkBoxMark = new CheckBox(); + checkBoxDecoratins = new CheckBox(); + numericUpDownWeight = new NumericUpDown(); + labelWeight = new Label(); + numericUpDownSpeed = new NumericUpDown(); + labelSpeed = new Label(); + labelModifiedObject = new Label(); + labelSimpleObject = new Label(); + pictureBoxObject = new PictureBox(); + buttonAdd = new Button(); + buttonCancel = new Button(); + panelObject = new Panel(); + labelAdditionalColor = new Label(); + labelBodyColor = new Label(); + groupBoxConfig.SuspendLayout(); + groupBoxColors.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit(); + panelObject.SuspendLayout(); + SuspendLayout(); + // + // groupBoxConfig + // + groupBoxConfig.Controls.Add(groupBoxColors); + groupBoxConfig.Controls.Add(checkBoxMark); + groupBoxConfig.Controls.Add(checkBoxDecoratins); + groupBoxConfig.Controls.Add(numericUpDownWeight); + groupBoxConfig.Controls.Add(labelWeight); + groupBoxConfig.Controls.Add(numericUpDownSpeed); + groupBoxConfig.Controls.Add(labelSpeed); + groupBoxConfig.Controls.Add(labelModifiedObject); + groupBoxConfig.Controls.Add(labelSimpleObject); + groupBoxConfig.Dock = DockStyle.Left; + groupBoxConfig.Location = new Point(0, 0); + groupBoxConfig.Name = "groupBoxConfig"; + groupBoxConfig.Size = new Size(478, 239); + groupBoxConfig.TabIndex = 0; + groupBoxConfig.TabStop = false; + groupBoxConfig.Text = "Параметры"; + // + // groupBoxColors + // + groupBoxColors.Controls.Add(panelPurple); + groupBoxColors.Controls.Add(panelBlack); + groupBoxColors.Controls.Add(panelGrey); + groupBoxColors.Controls.Add(panelWhite); + groupBoxColors.Controls.Add(panelYellow); + groupBoxColors.Controls.Add(panelBlue); + groupBoxColors.Controls.Add(panelGreen); + groupBoxColors.Controls.Add(panelRed); + groupBoxColors.Location = new Point(211, 22); + groupBoxColors.Name = "groupBoxColors"; + groupBoxColors.Size = new Size(231, 122); + groupBoxColors.TabIndex = 8; + groupBoxColors.TabStop = false; + groupBoxColors.Text = "Цвета"; + // + // panelPurple + // + panelPurple.BackColor = Color.Purple; + panelPurple.Location = new Point(176, 73); + panelPurple.Name = "panelPurple"; + panelPurple.Size = new Size(35, 32); + panelPurple.TabIndex = 1; + // + // panelBlack + // + panelBlack.BackColor = Color.Black; + panelBlack.Location = new Point(118, 73); + panelBlack.Name = "panelBlack"; + panelBlack.Size = new Size(35, 32); + panelBlack.TabIndex = 1; + // + // panelGrey + // + panelGrey.BackColor = Color.Gray; + panelGrey.Location = new Point(65, 73); + panelGrey.Name = "panelGrey"; + panelGrey.Size = new Size(35, 32); + panelGrey.TabIndex = 4; + // + // panelWhite + // + panelWhite.BackColor = Color.White; + panelWhite.Location = new Point(15, 73); + panelWhite.Name = "panelWhite"; + panelWhite.Size = new Size(35, 32); + panelWhite.TabIndex = 3; + // + // panelYellow + // + panelYellow.BackColor = Color.Yellow; + panelYellow.Location = new Point(176, 22); + panelYellow.Name = "panelYellow"; + panelYellow.Size = new Size(35, 32); + panelYellow.TabIndex = 1; + // + // panelBlue + // + panelBlue.BackColor = Color.Blue; + panelBlue.Location = new Point(118, 22); + panelBlue.Name = "panelBlue"; + panelBlue.Size = new Size(35, 32); + panelBlue.TabIndex = 2; + // + // panelGreen + // + panelGreen.BackColor = Color.FromArgb(0, 192, 0); + panelGreen.Location = new Point(65, 22); + panelGreen.Name = "panelGreen"; + panelGreen.Size = new Size(35, 32); + panelGreen.TabIndex = 1; + // + // panelRed + // + panelRed.BackColor = Color.Red; + panelRed.Location = new Point(15, 22); + panelRed.Name = "panelRed"; + panelRed.Size = new Size(35, 32); + panelRed.TabIndex = 0; + // + // checkBoxMark + // + checkBoxMark.AutoSize = true; + checkBoxMark.Location = new Point(6, 202); + checkBoxMark.Name = "checkBoxMark"; + checkBoxMark.Size = new Size(219, 19); + checkBoxMark.TabIndex = 7; + checkBoxMark.Text = "Признак наличия маркировки"; + checkBoxMark.UseVisualStyleBackColor = true; + // + // checkBoxDecoratins + // + checkBoxDecoratins.AutoSize = true; + checkBoxDecoratins.Location = new Point(6, 160); + checkBoxDecoratins.Name = "checkBoxDecoratins"; + checkBoxDecoratins.Size = new Size(151, 19); + checkBoxDecoratins.TabIndex = 6; + checkBoxDecoratins.Text = "Признак наличия декораций"; + checkBoxDecoratins.UseVisualStyleBackColor = true; + // + // numericUpDownWeight + // + numericUpDownWeight.Location = new Point(80, 68); + numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); + numericUpDownWeight.Name = "numericUpDownWeight"; + numericUpDownWeight.Size = new Size(62, 23); + numericUpDownWeight.TabIndex = 5; + numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 }); + // + // labelWeight + // + labelWeight.AutoSize = true; + labelWeight.Location = new Point(12, 70); + labelWeight.Name = "labelWeight"; + labelWeight.Size = new Size(29, 15); + labelWeight.TabIndex = 4; + labelWeight.Text = "Вес:"; + // + // numericUpDownSpeed + // + numericUpDownSpeed.Location = new Point(80, 32); + numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); + numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); + numericUpDownSpeed.Name = "numericUpDownSpeed"; + numericUpDownSpeed.Size = new Size(62, 23); + numericUpDownSpeed.TabIndex = 3; + numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 }); + // + // labelSpeed + // + labelSpeed.AutoSize = true; + labelSpeed.Location = new Point(12, 34); + labelSpeed.Name = "labelSpeed"; + labelSpeed.Size = new Size(62, 15); + labelSpeed.TabIndex = 2; + labelSpeed.Text = "Скорость:"; + // + // labelModifiedObject + // + labelModifiedObject.BorderStyle = BorderStyle.FixedSingle; + labelModifiedObject.Location = new Point(354, 194); + labelModifiedObject.Name = "labelModifiedObject"; + labelModifiedObject.Size = new Size(88, 33); + labelModifiedObject.TabIndex = 1; + labelModifiedObject.Text = "Продвинутый"; + labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter; + labelModifiedObject.MouseDown += labelObject_MouseDown; + // + // labelSimpleObject + // + labelSimpleObject.BorderStyle = BorderStyle.FixedSingle; + labelSimpleObject.Location = new Point(248, 194); + labelSimpleObject.Name = "labelSimpleObject"; + labelSimpleObject.Size = new Size(88, 33); + labelSimpleObject.TabIndex = 0; + labelSimpleObject.Text = "Простой"; + labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter; + labelSimpleObject.MouseDown += labelObject_MouseDown; + // + // pictureBoxObject + // + pictureBoxObject.Location = new Point(23, 26); + pictureBoxObject.Name = "pictureBoxObject"; + pictureBoxObject.Size = new Size(158, 152); + pictureBoxObject.TabIndex = 1; + pictureBoxObject.TabStop = false; + // + // buttonAdd + // + buttonAdd.Location = new Point(498, 204); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 23); + buttonAdd.TabIndex = 2; + buttonAdd.Text = "Добавить"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(579, 204); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 3; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + // + // panelObject + // + panelObject.AllowDrop = true; + panelObject.Controls.Add(labelAdditionalColor); + panelObject.Controls.Add(labelBodyColor); + panelObject.Controls.Add(pictureBoxObject); + panelObject.Location = new Point(484, 12); + panelObject.Name = "panelObject"; + panelObject.Size = new Size(194, 186); + panelObject.TabIndex = 4; + panelObject.DragDrop += panelObject_DragDrop; + panelObject.DragEnter += panelObject_DragEnter; + // + // labelAdditionalColor + // + labelAdditionalColor.AllowDrop = true; + labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle; + labelAdditionalColor.Location = new Point(93, 0); + labelAdditionalColor.Name = "labelAdditionalColor"; + labelAdditionalColor.Size = new Size(88, 21); + labelAdditionalColor.TabIndex = 3; + labelAdditionalColor.Text = "Доп цвет"; + labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter; + labelAdditionalColor.DragDrop += labelAdditionalColor_DragDrop; + labelAdditionalColor.DragEnter += labelAdditionalColor_DragEnter; + // + // labelBodyColor + // + labelBodyColor.AllowDrop = true; + labelBodyColor.BorderStyle = BorderStyle.FixedSingle; + labelBodyColor.Location = new Point(14, 0); + labelBodyColor.Name = "labelBodyColor"; + labelBodyColor.Size = new Size(75, 21); + labelBodyColor.TabIndex = 2; + labelBodyColor.Text = "Цвет"; + labelBodyColor.TextAlign = ContentAlignment.MiddleCenter; + labelBodyColor.DragDrop += labelBodyColor_DragDrop; + labelBodyColor.DragEnter += labelBodyColor_DragEnter; + // + // FormLinerConfig + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(679, 239); + Controls.Add(panelObject); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Controls.Add(groupBoxConfig); + Name = "FormLinerConfig"; + Text = "Создание объетка"; + groupBoxConfig.ResumeLayout(false); + groupBoxConfig.PerformLayout(); + groupBoxColors.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit(); + panelObject.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBoxConfig; + private Label labelSimpleObject; + private Label labelModifiedObject; + private NumericUpDown numericUpDownWeight; + private Label labelWeight; + private NumericUpDown numericUpDownSpeed; + private Label labelSpeed; + private CheckBox checkBoxDecoratins; + private CheckBox checkBoxMark; + private GroupBox groupBoxColors; + private Panel panelRed; + private Panel panelPurple; + private Panel panelBlack; + private Panel panelGrey; + private Panel panelWhite; + private Panel panelYellow; + private Panel panelBlue; + private Panel panelGreen; + private PictureBox pictureBoxObject; + private Button buttonAdd; + private Button buttonCancel; + private Panel panelObject; + private Label labelAdditionalColor; + private Label labelBodyColor; + } +} \ No newline at end of file diff --git a/ProjectLiner/ProjectLiner/FormLinerConfig.cs b/ProjectLiner/ProjectLiner/FormLinerConfig.cs new file mode 100644 index 0000000..d5bd084 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerConfig.cs @@ -0,0 +1,130 @@ +using ProjectLiner.Drawnings; +using ProjectLiner.Entities; + +namespace ProjectLiner; + +public partial class FormLinerConfig : Form +{ + private DrawningLiner? _Liner = null; + private event Action? LinerDelegate; + public FormLinerConfig() + { + InitializeComponent(); + panelRed.MouseDown += Panel_MouseDown; + panelGreen.MouseDown += Panel_MouseDown; + panelBlue.MouseDown += Panel_MouseDown; + panelYellow.MouseDown += Panel_MouseDown; + panelWhite.MouseDown += Panel_MouseDown; + panelGrey.MouseDown += Panel_MouseDown; + panelBlack.MouseDown += Panel_MouseDown; + panelPurple.MouseDown += Panel_MouseDown; + buttonCancel.Click += (sender, e) => Close(); + } + public void AddEvent(Action inerDelegate) + { + if (LinerDelegate == null) + { + LinerDelegate = inerDelegate; + } + else + { + LinerDelegate += inerDelegate; + } + } + private void DrawObject() + { + Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height); + Graphics gr = Graphics.FromImage(bmp); + _Liner?.SetPictureSize(pictureBoxObject.Width, pictureBoxObject.Height); + _Liner?.SetPosition(5, 5); + _Liner?.DrawTransport(gr); + pictureBoxObject.Image = bmp; + } + private void labelObject_MouseDown(object sender, MouseEventArgs e) + { + (sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy); + } + private void panelObject_DragEnter(object sender, DragEventArgs e) + { + if (e.Data?.GetDataPresent(DataFormats.Text) ?? false) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + private void panelObject_DragDrop(object sender, DragEventArgs e) + { + switch (e.Data?.GetData(DataFormats.Text)?.ToString()) + { + case "labelSimpleObject": + _Liner = new DrawningLiner((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White); + break; + case "labelModifiedObject": + _Liner = new DrawningBetterLiner((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, + Color.White, Color.Black, checkBoxDecoratins.Checked, checkBoxMark.Checked); + break; + } + labelBodyColor.BackColor = Color.Empty; + labelAdditionalColor.BackColor = Color.Empty; + DrawObject(); + } + private void Panel_MouseDown(object? sender, MouseEventArgs e) + { + // TODO отправка цвета в Drag&Drop + (sender as Control).DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy); + } + // TODO Реализовать логику смены цветов: основного и дополнительного (для продвинутого объекта) + private void labelBodyColor_DragEnter(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(typeof(Color))) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + private void labelBodyColor_DragDrop(object sender, DragEventArgs e) + { + if (_Liner != null) + { + _Liner.EntityLiner.BodyColor = (Color)e.Data.GetData(typeof(Color)); + DrawObject(); + } + } + private void labelAdditionalColor_DragEnter(object sender, DragEventArgs e) + { + if (_Liner is DrawningBetterLiner) + { + if (e.Data.GetDataPresent(typeof(Color))) + { + e.Effect = DragDropEffects.Copy; + } + else + { + e.Effect = DragDropEffects.None; + } + } + } + + private void labelAdditionalColor_DragDrop(object sender, DragEventArgs e) + { + if (_Liner.EntityLiner is EntityBetterLiner _warmlyship) + { + _warmlyship.AdditionalColor = (Color)e.Data.GetData(typeof(Color)); + } + DrawObject(); + } + private void buttonAdd_Click(object sender, EventArgs e) + { + if (_Liner != null) + { + LinerDelegate?.Invoke(_Liner); + Close(); + } + } +} diff --git a/ProjectLiner/ProjectLiner/FormLinerConfig.resx b/ProjectLiner/ProjectLiner/FormLinerConfig.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ProjectLiner/ProjectLiner/FormLinerConfig.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 -- 2.25.1