From b97db5b0227922f8412fd5f5860903789b973b59 Mon Sep 17 00:00:00 2001 From: AparyanLuiza Date: Thu, 30 Nov 2023 02:31:42 +0400 Subject: [PATCH 1/5] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20Lab0?= =?UTF-8?q?4.=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20SetGeneric.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectBulldozer/Generics/SetGeneric.cs | 70 ++++++++++++------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/ProjectBulldozer/Generics/SetGeneric.cs b/ProjectBulldozer/Generics/SetGeneric.cs index fd209d9..d8a115b 100644 --- a/ProjectBulldozer/Generics/SetGeneric.cs +++ b/ProjectBulldozer/Generics/SetGeneric.cs @@ -2,62 +2,58 @@ { internal class SetGeneric where T : class { - private readonly T[] _places; - public int Count => _places.Length; + + private readonly List _places; + public int Count => _places.Count; + /// Максимальное количество объектов в списке + private readonly int _maxCount; public SetGeneric(int count) { - _places = new T[count]; + _maxCount = count; + _places = new List(count); } - /// Добавление объекта в набор public int Insert(T tract) { return Insert(tract, 0); } public int Insert(T tract, int position) { - int NoEmpty = 0, temp = 0; - for (int i = position; i < Count; i++) - { - if (_places[i] != null) NoEmpty++; - } - if (NoEmpty == Count - position - 1) return -1; - - if (position < Count && position >= 0) - { - for (int j = position; j < Count; j++) - { - if (_places[j] == null) - { - temp = j; - break; - } - } - // shift right - for (int i = temp; i > position; i--) - { - _places[i] = _places[i - 1]; - } - _places[position] = tract; - return position; - } - return -1; + if (position < 0 || position >= _maxCount) return -1; + _places.Insert(position, tract); + return position; } - public T? Remove(int position) { if (position >= Count || position < 0) return null; - T tmp = _places[position]; + T? tmp = _places[position]; _places[position] = null; return tmp; } - //Получение объекта из набора по позиции - public T? Get(int position) + public T? this[int position] { - // TODO проверка позиции - if (position < 0 || position >= Count) return null; - return _places[position]; + get + { + if (position < 0 || position >= Count) return null; + return _places[position]; + } + set + { + if (position < 0 || position >= Count || Count == _maxCount) return; + _places.Insert(position, value); + } + } + public IEnumerable GetTractors(int? maxTracts = null) + { + for (int i = 0; i < _places.Count; ++i) + { + yield return _places[i]; + if (maxTracts.HasValue && i == maxTracts.Value) + { + yield break; + } + } } } } -- 2.25.1 From e173941bbc6b7c566782f0ca25bb2ee6859d95bd Mon Sep 17 00:00:00 2001 From: AparyanLuiza Date: Thu, 30 Nov 2023 02:33:36 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20BulldozerGenericCollection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Generics/BulldozerGenericCollection.cs | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/ProjectBulldozer/Generics/BulldozerGenericCollection.cs b/ProjectBulldozer/Generics/BulldozerGenericCollection.cs index e19cec2..7756c53 100644 --- a/ProjectBulldozer/Generics/BulldozerGenericCollection.cs +++ b/ProjectBulldozer/Generics/BulldozerGenericCollection.cs @@ -1,20 +1,19 @@ -using ProjectBulldozer.MovementStrategy; -using ProjectBulldozer.Drawning; +using ProjectBulldozer.Drawning; +using ProjectBulldozer.MovementStrategy; namespace ProjectBulldozer.Generics { internal class TractorGenericCollection where T : DrawingTractor where U : IMoveableObject { - //ширина /высота окна + //ширина/высота окна private readonly int _pictureWidth; private readonly int _pictureHeight; - //ширина /высота занимаемого места - private readonly int _placeSizeWidth = 170; + //ширина/высота занимаемого места + private readonly int _placeSizeWidth = 150; private readonly int _placeSizeHeight = 130; /// Набор объектов private readonly SetGeneric _collection; public TractorGenericCollection(int picWidth, int picHeight) { - // высчитываем размер массива для setgeneric int width = picWidth / _placeSizeWidth; int height = picHeight / _placeSizeHeight; @@ -23,7 +22,7 @@ namespace ProjectBulldozer.Generics _collection = new SetGeneric(width * height); } /// Перегрузка оператора сложения - public static int operator +(TractorGenericCollection collect, T tract) + public static int operator +(TractorGenericCollection collect, T? tract) { if (tract == null) { @@ -31,24 +30,20 @@ namespace ProjectBulldozer.Generics } return collect._collection.Insert(tract); } - public static bool operator -(TractorGenericCollection collect, int - pos) + /// Перегрузка оператора вычитания + public static T? operator -(TractorGenericCollection collect, int pos) { - T obj = collect._collection.Get(pos); + T? obj = collect._collection[pos]; if (obj != null) { - return collect.Remove(pos); + collect._collection.Remove(pos); } - return false; - } - private bool Remove(int pos) - { - throw new NotImplementedException(); + return obj; } // получение объекта imoveableObj public U? GetU(int pos) { - return (U?)_collection.Get(pos)?.GetMoveableObject; + return (U?)_collection[pos]?.GetMoveableObject; } /// Вывод всего набора объектов public Bitmap ShowTractors() @@ -74,19 +69,25 @@ namespace ProjectBulldozer.Generics } private void DrawObjects(Graphics g) { - int HeightObjCount = _pictureHeight / _placeSizeHeight; - int WidthObjCount = _pictureWidth / _placeSizeWidth; + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; for (int i = 0; i < _collection.Count; i++) { - T t = _collection.Get(i); - if (t != null) - { - { - t.SetPosition(((_collection.Count - i - 1) % (_pictureWidth / _placeSizeWidth)) * _placeSizeWidth, (_collection.Count - i - 1) / (_pictureWidth / _placeSizeWidth) * _placeSizeHeight); - t.DrawTransport(g); - } - } + // Получение объекта + var obj = _collection[i]; + // Установка позиции + obj?.SetPosition( + (int)((width - 1) * _placeSizeWidth - (i % width * _placeSizeWidth)), + (int)((height - 1) * _placeSizeHeight - (i / width * _placeSizeHeight)) + ); + // Прорисовка объекта + obj?.DrawTransport(g); } } } } + + + + + -- 2.25.1 From a92d29b24288a2106d882648fef8417a95dd52b7 Mon Sep 17 00:00:00 2001 From: AparyanLuiza Date: Thu, 30 Nov 2023 02:42:08 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20TractorGenericS?= =?UTF-8?q?torage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Generics/TractorGenericStorage.cs | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ProjectBulldozer/Generics/TractorGenericStorage.cs diff --git a/ProjectBulldozer/Generics/TractorGenericStorage.cs b/ProjectBulldozer/Generics/TractorGenericStorage.cs new file mode 100644 index 0000000..1ad1526 --- /dev/null +++ b/ProjectBulldozer/Generics/TractorGenericStorage.cs @@ -0,0 +1,46 @@ +using ProjectBulldozer.Drawning; +namespace ProjectBulldozer.Generics +{ + internal class TractorGenericStorage + { + readonly Dictionary> _TractorsStorage; + public List Keys => _TractorsStorage.Keys.ToList(); + private readonly int _pictureWidth; + private readonly int _pictureHeight; + /// + /// + public TractorGenericStorage(int pictureWidth, int pictureHeight) + { + _TractorsStorage = new Dictionary>(); + _pictureWidth = pictureWidth; + _pictureHeight = pictureHeight; + } + public void AddSet(string name) + { + if (!_TractorsStorage.ContainsKey(name)) + { + _TractorsStorage.Add(name, new TractorGenericCollection(_pictureWidth, _pictureHeight)); + } + } + public void DelSet(string name) + { + if (_TractorsStorage.ContainsKey(name)) + { + _TractorsStorage.Remove(name); + } + } + /// + /// Доступ к набору + /// + /// + /// + public TractorGenericCollection? + this[string ind] + { + get + { + + } + } + } +} -- 2.25.1 From 9bbe889440a25ee0445df499490223dcf96daeb7 Mon Sep 17 00:00:00 2001 From: AparyanLuiza Date: Thu, 30 Nov 2023 02:46:03 +0400 Subject: [PATCH 4/5] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BB=D0=B5=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=84=D0=BE=D1=80=D0=BC=D1=83=20?= =?UTF-8?q?FormBulldozerCollection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormBulldozerCollections.Designer.cs | 158 +++++++++++++----- ProjectBulldozer/FormBulldozerCollections.cs | 89 ++++++++-- 2 files changed, 193 insertions(+), 54 deletions(-) diff --git a/ProjectBulldozer/FormBulldozerCollections.Designer.cs b/ProjectBulldozer/FormBulldozerCollections.Designer.cs index c2d85cc..2390fee 100644 --- a/ProjectBulldozer/FormBulldozerCollections.Designer.cs +++ b/ProjectBulldozer/FormBulldozerCollections.Designer.cs @@ -15,58 +15,55 @@ #region Windows Form Designer generated code private void InitializeComponent() { - Instruments = new Panel(); + components = new System.ComponentModel.Container(); maskedTextBoxNumber = new MaskedTextBox(); ButtonRefreshCollection = new Button(); ButtonRemoveTractor = new Button(); ButtonAddTractor = new Button(); pictureBoxCollections = new PictureBox(); - Instruments.SuspendLayout(); + textBoxStorageName = new TextBox(); + bindingSource1 = new BindingSource(components); + bindingSource2 = new BindingSource(components); + groupBox1 = new GroupBox(); + listBoxStorage = new ListBox(); + ButtonAddObject = new Button(); + ButtonRemoveObject = new Button(); + Instruments = new GroupBox(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollections).BeginInit(); + ((System.ComponentModel.ISupportInitialize)bindingSource1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)bindingSource2).BeginInit(); + groupBox1.SuspendLayout(); + Instruments.SuspendLayout(); SuspendLayout(); // - // Instruments - // - Instruments.Anchor = AnchorStyles.Right; - Instruments.AutoSize = true; - Instruments.Controls.Add(maskedTextBoxNumber); - Instruments.Controls.Add(ButtonRefreshCollection); - Instruments.Controls.Add(ButtonAddTractor); - Instruments.Controls.Add(ButtonRemoveTractor); - Instruments.Location = new Point(588, 11); - Instruments.Margin = new Padding(3, 2, 3, 2); - Instruments.Name = "Instruments"; - Instruments.Size = new Size(150, 456); - Instruments.TabIndex = 0; - // // maskedTextBoxNumber // - maskedTextBoxNumber.Location = new Point(15, 51); + maskedTextBoxNumber.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + maskedTextBoxNumber.Location = new Point(33, 399); maskedTextBoxNumber.Margin = new Padding(3, 2, 3, 2); maskedTextBoxNumber.Mask = "0"; maskedTextBoxNumber.Name = "maskedTextBoxNumber"; - maskedTextBoxNumber.Size = new Size(119, 23); + maskedTextBoxNumber.Size = new Size(131, 23); maskedTextBoxNumber.TabIndex = 4; // // ButtonRefreshCollection // - ButtonRefreshCollection.Anchor = AnchorStyles.Right; - ButtonRefreshCollection.Location = new Point(3, 175); + ButtonRefreshCollection.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + ButtonRefreshCollection.Location = new Point(33, 499); ButtonRefreshCollection.Margin = new Padding(3, 2, 3, 2); ButtonRefreshCollection.Name = "ButtonRefreshCollection"; - ButtonRefreshCollection.Size = new Size(131, 27); + ButtonRefreshCollection.Size = new Size(131, 31); ButtonRefreshCollection.TabIndex = 2; - ButtonRefreshCollection.Text = "Обновить "; + ButtonRefreshCollection.Text = "Обновить все"; ButtonRefreshCollection.UseVisualStyleBackColor = true; - ButtonRefreshCollection.Click += ButtonRefreshCollection_Click; // // ButtonRemoveTractor // - ButtonRemoveTractor.Anchor = AnchorStyles.Right; - ButtonRemoveTractor.Location = new Point(3, 133); + ButtonRemoveTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + ButtonRemoveTractor.Location = new Point(33, 444); ButtonRemoveTractor.Margin = new Padding(3, 2, 3, 2); ButtonRemoveTractor.Name = "ButtonRemoveTractor"; - ButtonRemoveTractor.Size = new Size(131, 27); + ButtonRemoveTractor.Size = new Size(131, 33); ButtonRemoveTractor.TabIndex = 1; ButtonRemoveTractor.Text = "Удалить объект"; ButtonRemoveTractor.UseVisualStyleBackColor = true; @@ -74,11 +71,11 @@ // // ButtonAddTractor // - ButtonAddTractor.Anchor = AnchorStyles.Top | AnchorStyles.Right; - ButtonAddTractor.Location = new Point(6, 20); + ButtonAddTractor.Anchor = AnchorStyles.Top; + ButtonAddTractor.Location = new Point(33, 346); ButtonAddTractor.Margin = new Padding(3, 2, 3, 2); ButtonAddTractor.Name = "ButtonAddTractor"; - ButtonAddTractor.Size = new Size(128, 27); + ButtonAddTractor.Size = new Size(131, 29); ButtonAddTractor.TabIndex = 0; ButtonAddTractor.Text = "Добавить объект"; ButtonAddTractor.UseVisualStyleBackColor = true; @@ -86,41 +83,116 @@ // // pictureBoxCollections // - pictureBoxCollections.Anchor = AnchorStyles.Left; - pictureBoxCollections.Location = new Point(12, 11); + pictureBoxCollections.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + pictureBoxCollections.Location = new Point(4, 4); pictureBoxCollections.Margin = new Padding(3, 2, 3, 2); pictureBoxCollections.Name = "pictureBoxCollections"; - pictureBoxCollections.Size = new Size(570, 456); + pictureBoxCollections.Size = new Size(693, 541); pictureBoxCollections.TabIndex = 1; pictureBoxCollections.TabStop = false; - pictureBoxCollections.Click += pictureBoxCollections_Click; + // + // textBoxStorageName + // + textBoxStorageName.Location = new Point(27, 32); + textBoxStorageName.Name = "textBoxStorageName"; + textBoxStorageName.Size = new Size(131, 23); + textBoxStorageName.TabIndex = 5; + textBoxStorageName.TextChanged += textBoxStorageName_TextChanged; + // + // groupBox1 + // + groupBox1.Controls.Add(listBoxStorage); + groupBox1.Controls.Add(ButtonAddObject); + groupBox1.Controls.Add(ButtonRemoveObject); + groupBox1.Controls.Add(textBoxStorageName); + groupBox1.Location = new Point(6, 22); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(189, 296); + groupBox1.TabIndex = 5; + groupBox1.TabStop = false; + groupBox1.Text = "Наборы"; + // + // listBoxStorage + // + listBoxStorage.FormattingEnabled = true; + listBoxStorage.ItemHeight = 15; + listBoxStorage.Location = new Point(27, 122); + listBoxStorage.Name = "listBoxStorage"; + listBoxStorage.Size = new Size(131, 94); + listBoxStorage.TabIndex = 9; + listBoxStorage.SelectedIndexChanged += listBoxStorage_SelectedIndexChanged; + // + // ButtonAddObject + // + ButtonAddObject.Anchor = AnchorStyles.Top; + ButtonAddObject.Location = new Point(27, 72); + ButtonAddObject.Margin = new Padding(3, 2, 3, 2); + ButtonAddObject.Name = "ButtonAddObject"; + ButtonAddObject.Size = new Size(131, 29); + ButtonAddObject.TabIndex = 7; + ButtonAddObject.Text = "Добавить набор"; + ButtonAddObject.UseVisualStyleBackColor = true; + ButtonAddObject.Click += ButtonAddObject_Click; + // + // ButtonRemoveObject + // + ButtonRemoveObject.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + ButtonRemoveObject.Location = new Point(27, 244); + ButtonRemoveObject.Margin = new Padding(3, 2, 3, 2); + ButtonRemoveObject.Name = "ButtonRemoveObject"; + ButtonRemoveObject.Size = new Size(131, 33); + ButtonRemoveObject.TabIndex = 8; + ButtonRemoveObject.Text = "Удалить набор"; + ButtonRemoveObject.UseVisualStyleBackColor = true; + ButtonRemoveObject.Click += ButtonRemoveObject_Click; + // + // Instruments + // + Instruments.Controls.Add(ButtonRefreshCollection); + Instruments.Controls.Add(groupBox1); + Instruments.Controls.Add(maskedTextBoxNumber); + Instruments.Controls.Add(ButtonAddTractor); + Instruments.Controls.Add(ButtonRemoveTractor); + Instruments.Location = new Point(697, 4); + Instruments.Name = "Instruments"; + Instruments.Size = new Size(200, 541); + Instruments.TabIndex = 6; + Instruments.TabStop = false; + Instruments.Text = "Инструменты"; // // FormTractorCollections // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(748, 478); - Controls.Add(pictureBoxCollections); + ClientSize = new Size(904, 543); Controls.Add(Instruments); + Controls.Add(pictureBoxCollections); Margin = new Padding(3, 2, 3, 2); Name = "FormTractorCollections"; - Text = "Набор трактороов"; + Text = "Набор локомотивов"; + ((System.ComponentModel.ISupportInitialize)pictureBoxCollections).EndInit(); + ((System.ComponentModel.ISupportInitialize)bindingSource1).EndInit(); + ((System.ComponentModel.ISupportInitialize)bindingSource2).EndInit(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); Instruments.ResumeLayout(false); Instruments.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBoxCollections).EndInit(); ResumeLayout(false); - PerformLayout(); - } - private void pictureBoxCollections_Click(object sender, EventArgs e) - { - throw new NotImplementedException(); } + #endregion - private Panel Instruments; private Button ButtonRefreshCollection; private Button ButtonRemoveTractor; private Button ButtonAddTractor; private PictureBox pictureBoxCollections; private MaskedTextBox maskedTextBoxNumber; + private GroupBox groupBox1; + private TextBox textBoxStorageName; + private BindingSource bindingSource1; + private BindingSource bindingSource2; + private ListBox listBoxStorage; + private Button ButtonAddObject; + private Button ButtonRemoveObject; + private GroupBox Instruments; } } \ No newline at end of file diff --git a/ProjectBulldozer/FormBulldozerCollections.cs b/ProjectBulldozer/FormBulldozerCollections.cs index 7b080fa..f82e027 100644 --- a/ProjectBulldozer/FormBulldozerCollections.cs +++ b/ProjectBulldozer/FormBulldozerCollections.cs @@ -1,29 +1,79 @@ using Bulldozer; -using ProjectBulldozer.Drawning; using ProjectBulldozer.Generics; -using ProjectBulldozer.MovementStrategy; namespace ProjectBulldozer { public partial class FormTractorCollections : Form { - private readonly TractorGenericCollection _Tractors; + private readonly TractorGenericStorage _storage; + //private readonly TractorGenericCollection _Tractors; public FormTractorCollections() { InitializeComponent(); - _Tractors = new TractorGenericCollection(pictureBoxCollections.Width, - pictureBoxCollections.Height); + _storage = new TractorGenericStorage(pictureBoxCollections.Width, pictureBoxCollections.Height); + } + private void ReloadObjects() + { + int index = listBoxStorage.SelectedIndex; + + listBoxStorage.Items.Clear(); + for (int i = 0; i < _storage.Keys.Count; i++) + { + listBoxStorage.Items.Add(_storage.Keys[i]); + } + if (listBoxStorage.Items.Count > 0 && (index == -1 || index >= listBoxStorage.Items.Count)) + { + listBoxStorage.SelectedIndex = 0; + } + else if (listBoxStorage.Items.Count > 0 && index > -1 && index < listBoxStorage.Items.Count) + { + listBoxStorage.SelectedIndex = index; + } + } + private void ButtonAddObject_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxStorageName.Text)) + { + MessageBox.Show("Не всё заполнено", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _storage.AddSet(textBoxStorageName.Text); + ReloadObjects(); + } + private void listBoxStorage_SelectedIndexChanged(object sender, EventArgs e) + { + pictureBoxCollections.Image = _storage[listBoxStorage.SelectedItem?.ToString() ?? string.Empty]?.ShowTractors(); + } + private void ButtonRemoveObject_Click(object sender, EventArgs e) + { + if (listBoxStorage.SelectedIndex == -1) + { + return; + } + if (MessageBox.Show($"Удалить объект {listBoxStorage.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, + MessageBoxIcon.Question) == DialogResult.Yes) + { + _storage.DelSet(listBoxStorage.SelectedItem.ToString() ?? string.Empty); + ReloadObjects(); + } } private void ButtonAddTractor_Click(object sender, EventArgs e) { - if (_Tractors == null) return; + + if (listBoxStorage.SelectedIndex == -1) return; + + var obj = _storage[listBoxStorage.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } FormBulldozer form = new(); if (form.ShowDialog() == DialogResult.OK) { //проверяем, удалось ли нам загрузить объект - if (_Tractors + form.SelectedTractor != -1) + if (obj + form.SelectedTractor > -1) { MessageBox.Show("Объект добавлен"); - pictureBoxCollections.Image = _Tractors.ShowTractors(); + pictureBoxCollections.Image = obj.ShowTractors(); } else { @@ -33,15 +83,22 @@ namespace ProjectBulldozer } private void ButtonRemoveTractor_Click(object sender, EventArgs e) { + if (listBoxStorage.SelectedIndex == -1) return; + var obj = _storage[listBoxStorage.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } int pos = Convert.ToInt32(maskedTextBoxNumber.Text); - if (_Tractors - pos != null) + if (obj - pos != null) { MessageBox.Show("Объект удален"); - pictureBoxCollections.Image = _Tractors.ShowTractors(); + pictureBoxCollections.Image = obj.ShowTractors(); } else { @@ -50,7 +107,17 @@ namespace ProjectBulldozer } private void ButtonRefreshCollection_Click(object sender, EventArgs e) { - pictureBoxCollections.Image = _Tractors.ShowTractors(); + if (listBoxStorage.SelectedIndex == -1) return; + var obj = _storage[listBoxStorage.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } + pictureBoxCollections.Image = obj.ShowTractors(); + } + private void textBoxStorageName_TextChanged(object sender, EventArgs e) + { + } } } -- 2.25.1 From e03720990d5f6a2ea450c2bfa571378b949df9df Mon Sep 17 00:00:00 2001 From: AparyanLuiza Date: Thu, 30 Nov 2023 03:15:19 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= =?UTF-8?q?.=20=D0=A4=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectBulldozer/Drawning/DrawingBulldozer.cs | 15 ++--- ProjectBulldozer/Entities/EntityBulldozer.cs | 9 ++- ProjectBulldozer/FormBulldozer.Designer.cs | 62 ++++++++++--------- ProjectBulldozer/FormBulldozer.cs | 6 +- .../FormBulldozerCollections.Designer.cs | 16 ++++- ProjectBulldozer/FormBulldozerCollections.cs | 4 -- .../Generics/BulldozerGenericCollection.cs | 6 +- ProjectBulldozer/Generics/SetGeneric.cs | 2 +- ProjectBulldozer/Generics/Status.cs | 2 +- .../Generics/TractorGenericStorage.cs | 16 +++-- .../MovementStrategy/AbstractStrategy.cs | 6 +- .../MovementStrategy/DrawingObjectTractor.cs | 6 +- .../MovementStrategy/IMoveableObject.cs | 3 +- 13 files changed, 87 insertions(+), 66 deletions(-) diff --git a/ProjectBulldozer/Drawning/DrawingBulldozer.cs b/ProjectBulldozer/Drawning/DrawingBulldozer.cs index 7525965..0a71a4c 100644 --- a/ProjectBulldozer/Drawning/DrawingBulldozer.cs +++ b/ProjectBulldozer/Drawning/DrawingBulldozer.cs @@ -4,7 +4,7 @@ namespace ProjectBulldozer.Drawning public class DrawingBulldozer : DrawingTractor { public DrawingBulldozer(int speed, double weight, Color bodyColor, Color additionalColor, - bool horns, bool seifBatteries, int width, int height) : base(speed, weight, bodyColor, width, height, 140, 130) + bool horns, bool seifBatteries, int width, int height) : base(speed, weight, bodyColor, width, height, 120, 110) { if (EntityTractor != null) { @@ -18,22 +18,23 @@ namespace ProjectBulldozer.Drawning { return; } - Pen pen = new(Color.Black); Brush blackBrush = new SolidBrush(Color.Black); Brush windows = new SolidBrush(Color.LightBlue); Brush bodyColor = new SolidBrush(Bulldozer.BodyColor); Brush additionalColor = new SolidBrush(Bulldozer.AdditionalColor); Brush grayBrush = new SolidBrush(Color.Gray); - //otval - Point[] Otval = - { + //otval + Point[] Otval = + { new Point(_startPosX + 118, _startPosY + 50), new Point(_startPosX + 148, _startPosY + 111), new Point(_startPosX+ 118, _startPosY + 111), + + }; - g.FillPolygon(additionalColor, Otval); - g.DrawPolygon(pen, Otval); + g.FillPolygon(additionalColor, Otval); + g.DrawPolygon(pen, Otval); //гусеницы Brush gg = new SolidBrush(Color.LightGray); g.FillEllipse(gg, _startPosX + 16, _startPosY + 65, 101, 63); diff --git a/ProjectBulldozer/Entities/EntityBulldozer.cs b/ProjectBulldozer/Entities/EntityBulldozer.cs index 78c1da4..149ee6e 100644 --- a/ProjectBulldozer/Entities/EntityBulldozer.cs +++ b/ProjectBulldozer/Entities/EntityBulldozer.cs @@ -1,16 +1,15 @@ -using System; -namespace ProjectBulldozer.Entities +namespace ProjectBulldozer.Entities { public class EntityBulldozer : EntityTractor { public Color AdditionalColor { get; private set; } - public bool Otval { get; private set; } + public bool Horns { get; private set; } public bool SeifBatteries { get; private set; } - public EntityBulldozer(int speed, double weight, Color bodyColor, Color additionalColor, bool otval, + public EntityBulldozer(int speed, double weight, Color bodyColor, Color additionalColor, bool horns, bool seifBatteries) : base(speed, weight, bodyColor) { AdditionalColor = additionalColor; - Otval = otval; + Horns = horns; SeifBatteries = seifBatteries; } } diff --git a/ProjectBulldozer/FormBulldozer.Designer.cs b/ProjectBulldozer/FormBulldozer.Designer.cs index d314ac0..a543a34 100644 --- a/ProjectBulldozer/FormBulldozer.Designer.cs +++ b/ProjectBulldozer/FormBulldozer.Designer.cs @@ -4,6 +4,11 @@ namespace Bulldozer partial class FormBulldozer { 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)) @@ -13,8 +18,13 @@ namespace Bulldozer base.Dispose(disposing); } #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBulldozer)); pictureBoxBulldozer = new PictureBox(); buttonCreateBulldozer = new Button(); buttonLeft = new Button(); @@ -34,7 +44,7 @@ namespace Bulldozer pictureBoxBulldozer.Location = new Point(0, 0); pictureBoxBulldozer.Margin = new Padding(2); pictureBoxBulldozer.Name = "pictureBoxBulldozer"; - pictureBoxBulldozer.Size = new Size(870, 390); + pictureBoxBulldozer.Size = new Size(870, 572); pictureBoxBulldozer.SizeMode = PictureBoxSizeMode.AutoSize; pictureBoxBulldozer.TabIndex = 0; pictureBoxBulldozer.TabStop = false; @@ -42,24 +52,24 @@ namespace Bulldozer // buttonCreateBulldozer // buttonCreateBulldozer.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateBulldozer.Location = new Point(11, 332); + buttonCreateBulldozer.Location = new Point(20, 514); buttonCreateBulldozer.Margin = new Padding(2); buttonCreateBulldozer.Name = "buttonCreateBulldozer"; - buttonCreateBulldozer.Size = new Size(95, 48); + buttonCreateBulldozer.Size = new Size(88, 48); buttonCreateBulldozer.TabIndex = 1; - buttonCreateBulldozer.Text = "Создать булльдозер"; + buttonCreateBulldozer.Text = "Создать бульдозер"; buttonCreateBulldozer.UseVisualStyleBackColor = true; buttonCreateBulldozer.Click += buttonCreateBulldozer_Click; // // buttonLeft // buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonLeft.BackgroundImage = ProjectBulldozer.Properties.Resources.left1; + buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; - buttonLeft.Location = new Point(767, 353); + buttonLeft.Location = new Point(732, 522); buttonLeft.Margin = new Padding(2); buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(30, 27); + buttonLeft.Size = new Size(40, 33); buttonLeft.TabIndex = 2; buttonLeft.UseVisualStyleBackColor = true; buttonLeft.Click += buttonMove_Click; @@ -67,12 +77,12 @@ namespace Bulldozer // buttonUp // buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonUp.BackgroundImage = ProjectBulldozer.Properties.Resources.up1; + buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); buttonUp.BackgroundImageLayout = ImageLayout.Zoom; - buttonUp.Location = new Point(801, 320); + buttonUp.Location = new Point(776, 485); buttonUp.Margin = new Padding(2); buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(34, 28); + buttonUp.Size = new Size(40, 33); buttonUp.TabIndex = 3; buttonUp.UseVisualStyleBackColor = true; buttonUp.Click += buttonMove_Click; @@ -80,12 +90,12 @@ namespace Bulldozer // buttonRight // buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonRight.BackgroundImage = ProjectBulldozer.Properties.Resources.right1; + buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); buttonRight.BackgroundImageLayout = ImageLayout.Zoom; - buttonRight.Location = new Point(837, 353); + buttonRight.Location = new Point(819, 522); buttonRight.Margin = new Padding(2); buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(28, 26); + buttonRight.Size = new Size(40, 33); buttonRight.TabIndex = 4; buttonRight.UseVisualStyleBackColor = true; buttonRight.Click += buttonMove_Click; @@ -93,12 +103,12 @@ namespace Bulldozer // buttonDown // buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonDown.BackgroundImage = ProjectBulldozer.Properties.Resources.down1; + buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); buttonDown.BackgroundImageLayout = ImageLayout.Zoom; - buttonDown.Location = new Point(801, 353); + buttonDown.Location = new Point(776, 522); buttonDown.Margin = new Padding(2); buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(32, 27); + buttonDown.Size = new Size(40, 33); buttonDown.TabIndex = 5; buttonDown.UseVisualStyleBackColor = true; buttonDown.Click += buttonMove_Click; @@ -108,7 +118,7 @@ namespace Bulldozer comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right; comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxStrategy.FormattingEnabled = true; - comboBoxStrategy.Items.AddRange(new object[] { "К центру", "В угол" }); + comboBoxStrategy.Items.AddRange(new object[] { "В центр", "В угол" }); comboBoxStrategy.Location = new Point(740, 8); comboBoxStrategy.Margin = new Padding(2); comboBoxStrategy.Name = "comboBoxStrategy"; @@ -119,10 +129,10 @@ namespace Bulldozer // buttonCreateTractor // buttonCreateTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateTractor.Location = new Point(122, 332); + buttonCreateTractor.Location = new Point(122, 514); buttonCreateTractor.Margin = new Padding(2); buttonCreateTractor.Name = "buttonCreateTractor"; - buttonCreateTractor.Size = new Size(81, 47); + buttonCreateTractor.Size = new Size(88, 48); buttonCreateTractor.TabIndex = 7; buttonCreateTractor.Text = "Создать трактор"; buttonCreateTractor.UseVisualStyleBackColor = true; @@ -134,7 +144,7 @@ namespace Bulldozer buttonStep.Location = new Point(755, 39); buttonStep.Margin = new Padding(2); buttonStep.Name = "buttonStep"; - buttonStep.Size = new Size(88, 20); + buttonStep.Size = new Size(88, 28); buttonStep.TabIndex = 8; buttonStep.Text = "Шаг"; buttonStep.UseVisualStyleBackColor = true; @@ -143,10 +153,10 @@ namespace Bulldozer // ButtonSelect_Tractor // ButtonSelect_Tractor.Anchor = AnchorStyles.Top | AnchorStyles.Right; - ButtonSelect_Tractor.Location = new Point(755, 63); + ButtonSelect_Tractor.Location = new Point(755, 71); ButtonSelect_Tractor.Margin = new Padding(2); ButtonSelect_Tractor.Name = "ButtonSelect_Tractor"; - ButtonSelect_Tractor.Size = new Size(88, 23); + ButtonSelect_Tractor.Size = new Size(88, 28); ButtonSelect_Tractor.TabIndex = 9; ButtonSelect_Tractor.Text = "Выбрать"; ButtonSelect_Tractor.UseVisualStyleBackColor = true; @@ -156,7 +166,7 @@ namespace Bulldozer // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(870, 390); + ClientSize = new Size(870, 572); Controls.Add(ButtonSelect_Tractor); Controls.Add(buttonStep); Controls.Add(buttonCreateTractor); @@ -175,11 +185,6 @@ namespace Bulldozer ResumeLayout(false); PerformLayout(); } - private void comboBoxStrategy_SelectedIndexChanged(object sender, EventArgs e) - { - throw new NotImplementedException(); - } - #endregion private PictureBox pictureBoxBulldozer; private Button buttonCreateBulldozer; @@ -191,5 +196,6 @@ namespace Bulldozer private Button buttonCreateTractor; private Button buttonStep; private Button ButtonSelect_Tractor; + private EventHandler comboBoxStrategy_SelectedIndexChanged; } } \ No newline at end of file diff --git a/ProjectBulldozer/FormBulldozer.cs b/ProjectBulldozer/FormBulldozer.cs index c3156d6..ba2a569 100644 --- a/ProjectBulldozer/FormBulldozer.cs +++ b/ProjectBulldozer/FormBulldozer.cs @@ -1,7 +1,9 @@ using ProjectBulldozer; using ProjectBulldozer.Drawning; -using ProjectBulldozer.Generics; using ProjectBulldozer.MovementStrategy; +using System; +using System.Windows.Forms; + namespace Bulldozer { public partial class FormBulldozer : Form @@ -30,7 +32,9 @@ namespace Bulldozer { Random random = new Random(); Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + ColorDialog colorDialog = new ColorDialog(); + if (colorDialog.ShowDialog() == DialogResult.OK) { color = colorDialog.Color; diff --git a/ProjectBulldozer/FormBulldozerCollections.Designer.cs b/ProjectBulldozer/FormBulldozerCollections.Designer.cs index 2390fee..2c66f61 100644 --- a/ProjectBulldozer/FormBulldozerCollections.Designer.cs +++ b/ProjectBulldozer/FormBulldozerCollections.Designer.cs @@ -1,8 +1,16 @@ -namespace ProjectBulldozer + +namespace ProjectBulldozer { partial class FormTractorCollections { + /// + /// 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)) @@ -11,8 +19,11 @@ } 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() { components = new System.ComponentModel.Container(); @@ -194,5 +205,6 @@ private Button ButtonAddObject; private Button ButtonRemoveObject; private GroupBox Instruments; + private EventHandler textBoxStorageName_TextChanged; } } \ No newline at end of file diff --git a/ProjectBulldozer/FormBulldozerCollections.cs b/ProjectBulldozer/FormBulldozerCollections.cs index f82e027..00c2fd7 100644 --- a/ProjectBulldozer/FormBulldozerCollections.cs +++ b/ProjectBulldozer/FormBulldozerCollections.cs @@ -115,9 +115,5 @@ namespace ProjectBulldozer } pictureBoxCollections.Image = obj.ShowTractors(); } - private void textBoxStorageName_TextChanged(object sender, EventArgs e) - { - - } } } diff --git a/ProjectBulldozer/Generics/BulldozerGenericCollection.cs b/ProjectBulldozer/Generics/BulldozerGenericCollection.cs index 7756c53..1aa774d 100644 --- a/ProjectBulldozer/Generics/BulldozerGenericCollection.cs +++ b/ProjectBulldozer/Generics/BulldozerGenericCollection.cs @@ -1,5 +1,6 @@ using ProjectBulldozer.Drawning; using ProjectBulldozer.MovementStrategy; + namespace ProjectBulldozer.Generics { internal class TractorGenericCollection where T : DrawingTractor where U : IMoveableObject @@ -14,6 +15,7 @@ namespace ProjectBulldozer.Generics private readonly SetGeneric _collection; public TractorGenericCollection(int picWidth, int picHeight) { + // высчитываем размер массива для setgeneric int width = picWidth / _placeSizeWidth; int height = picHeight / _placeSizeHeight; @@ -67,6 +69,7 @@ namespace ProjectBulldozer.Generics g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight); } } + private void DrawObjects(Graphics g) { int width = _pictureWidth / _placeSizeWidth; @@ -85,7 +88,8 @@ namespace ProjectBulldozer.Generics } } } -} + } + diff --git a/ProjectBulldozer/Generics/SetGeneric.cs b/ProjectBulldozer/Generics/SetGeneric.cs index d8a115b..85feb5c 100644 --- a/ProjectBulldozer/Generics/SetGeneric.cs +++ b/ProjectBulldozer/Generics/SetGeneric.cs @@ -2,7 +2,6 @@ { internal class SetGeneric where T : class { - private readonly List _places; public int Count => _places.Count; /// Максимальное количество объектов в списке @@ -12,6 +11,7 @@ _maxCount = count; _places = new List(count); } + /// Добавление объекта в набор public int Insert(T tract) { return Insert(tract, 0); diff --git a/ProjectBulldozer/Generics/Status.cs b/ProjectBulldozer/Generics/Status.cs index 9bdd170..f7a5668 100644 --- a/ProjectBulldozer/Generics/Status.cs +++ b/ProjectBulldozer/Generics/Status.cs @@ -1,4 +1,4 @@ -namespace ProjectBulldozer.Generics +namespace ProjectBulldozer.MovementStrategy { public enum Status { diff --git a/ProjectBulldozer/Generics/TractorGenericStorage.cs b/ProjectBulldozer/Generics/TractorGenericStorage.cs index 1ad1526..873d9bf 100644 --- a/ProjectBulldozer/Generics/TractorGenericStorage.cs +++ b/ProjectBulldozer/Generics/TractorGenericStorage.cs @@ -1,14 +1,13 @@ using ProjectBulldozer.Drawning; +using ProjectBulldozer.MovementStrategy; namespace ProjectBulldozer.Generics { internal class TractorGenericStorage { readonly Dictionary> _TractorsStorage; public List Keys => _TractorsStorage.Keys.ToList(); - private readonly int _pictureWidth; + private readonly int _pictureWidth; private readonly int _pictureHeight; - /// - /// public TractorGenericStorage(int pictureWidth, int pictureHeight) { _TractorsStorage = new Dictionary>(); @@ -29,17 +28,16 @@ namespace ProjectBulldozer.Generics _TractorsStorage.Remove(name); } } - /// - /// Доступ к набору - /// - /// - /// public TractorGenericCollection? this[string ind] { get { - + if (_TractorsStorage.ContainsKey(ind)) + { + return _TractorsStorage[ind]; + } + return null; } } } diff --git a/ProjectBulldozer/MovementStrategy/AbstractStrategy.cs b/ProjectBulldozer/MovementStrategy/AbstractStrategy.cs index d965778..621fce6 100644 --- a/ProjectBulldozer/MovementStrategy/AbstractStrategy.cs +++ b/ProjectBulldozer/MovementStrategy/AbstractStrategy.cs @@ -1,6 +1,4 @@ -using ProjectBulldozer.Generics; - -namespace ProjectBulldozer.MovementStrategy +namespace ProjectBulldozer.MovementStrategy { public abstract class AbstractStrategy { @@ -10,6 +8,7 @@ namespace ProjectBulldozer.MovementStrategy protected int FieldWidth { get; private set; } protected int FieldHeight { get; private set; } public Status GetStatus() { return _state; } + public void SetData(IMoveableObject moveableObject, int width, int height) { if (moveableObject == null) @@ -22,7 +21,6 @@ namespace ProjectBulldozer.MovementStrategy FieldWidth = width; FieldHeight = height; } - public void MakeStep() { if (_state != Status.InProgress) diff --git a/ProjectBulldozer/MovementStrategy/DrawingObjectTractor.cs b/ProjectBulldozer/MovementStrategy/DrawingObjectTractor.cs index 58193b2..f3eae94 100644 --- a/ProjectBulldozer/MovementStrategy/DrawingObjectTractor.cs +++ b/ProjectBulldozer/MovementStrategy/DrawingObjectTractor.cs @@ -1,9 +1,11 @@ -using ProjectBulldozer.Drawning; -namespace ProjectBulldozer.MovementStrategy +using Bulldozer; +using ProjectBulldozer.MovementStrategy; +namespace ProjectBulldozer.Drawning { public class DrawingObjectTractor : IMoveableObject { private readonly DrawingTractor? _drawningTractor = null; + public DrawingObjectTractor(DrawingTractor drawningTractor) { _drawningTractor = drawningTractor; diff --git a/ProjectBulldozer/MovementStrategy/IMoveableObject.cs b/ProjectBulldozer/MovementStrategy/IMoveableObject.cs index 139c7de..93b1c98 100644 --- a/ProjectBulldozer/MovementStrategy/IMoveableObject.cs +++ b/ProjectBulldozer/MovementStrategy/IMoveableObject.cs @@ -1,4 +1,5 @@ -namespace ProjectBulldozer.MovementStrategy +using Bulldozer; +namespace ProjectBulldozer.MovementStrategy { public interface IMoveableObject { -- 2.25.1