diff --git a/Bulldoser/Bulldoser/Drawings/DrawingTractor.cs b/Bulldoser/Bulldoser/Drawings/DrawingTractor.cs index 7277bd4..c306959 100644 --- a/Bulldoser/Bulldoser/Drawings/DrawingTractor.cs +++ b/Bulldoser/Bulldoser/Drawings/DrawingTractor.cs @@ -1,4 +1,5 @@ using Bulldoser.Entities; +using Bulldoser.MovementStrategy; using System; using System.Collections.Generic; using System.Linq; @@ -28,6 +29,8 @@ namespace Bulldoser.Drawings public int GetWidth => _tractWidth; public int GetHeight => _tractHeight; + public IMoveableObject GetMoveableObject => new DrawingObjectTractor(this); + public DrawingTractor(int speed, double weight, Color bodyColor, int width, int heigth) { if (width < _tractWidth || heigth < _tractHeight) diff --git a/Bulldoser/Bulldoser/Form1.Designer.cs b/Bulldoser/Bulldoser/Form1.Designer.cs index 5e25e28..471b0aa 100644 --- a/Bulldoser/Bulldoser/Form1.Designer.cs +++ b/Bulldoser/Bulldoser/Form1.Designer.cs @@ -1,6 +1,6 @@ namespace Bulldoser { - partial class Form1 + partial class FormBulldoser { /// /// Required designer variable. @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBulldoser)); pictureBoxBulldoser = new PictureBox(); buttonCreateBulldoser = new Button(); buttonRight = new Button(); @@ -38,7 +38,10 @@ comboBoxStrategy = new ComboBox(); buttonCreateTractor = new Button(); buttonStep = new Button(); + fileSystemWatcher1 = new FileSystemWatcher(); + buttonSelectTransport = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxBulldoser).BeginInit(); + ((System.ComponentModel.ISupportInitialize)fileSystemWatcher1).BeginInit(); SuspendLayout(); // // pictureBoxBulldoser @@ -63,7 +66,7 @@ buttonCreateBulldoser.TabIndex = 1; buttonCreateBulldoser.Text = "Создать бульдозер"; buttonCreateBulldoser.UseVisualStyleBackColor = true; - buttonCreateBulldoser.Click += buttonCreateBulldoser_Click; + buttonCreateBulldoser.Click += buttonCreateBulldozer_Click; // // buttonRight // @@ -157,11 +160,27 @@ buttonStep.UseVisualStyleBackColor = true; buttonStep.Click += buttonStep_Click; // - // Form1 + // fileSystemWatcher1 + // + fileSystemWatcher1.EnableRaisingEvents = true; + fileSystemWatcher1.SynchronizingObject = this; + // + // buttonSelectTransport + // + buttonSelectTransport.Location = new Point(785, 78); + buttonSelectTransport.Name = "buttonSelectTransport"; + buttonSelectTransport.Size = new Size(88, 34); + buttonSelectTransport.TabIndex = 9; + buttonSelectTransport.Text = "Выбор"; + buttonSelectTransport.UseVisualStyleBackColor = true; + buttonSelectTransport.Click += ButtonSelect_Tractor_Click; + // + // FormBulldoser // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(884, 461); + Controls.Add(buttonSelectTransport); Controls.Add(buttonStep); Controls.Add(buttonCreateTractor); Controls.Add(comboBoxStrategy); @@ -171,10 +190,11 @@ Controls.Add(buttonRight); Controls.Add(buttonCreateBulldoser); Controls.Add(pictureBoxBulldoser); - Name = "Form1"; + Name = "FormBulldoser"; StartPosition = FormStartPosition.CenterScreen; - Text = "Form1"; + Text = "Создать транспорт"; ((System.ComponentModel.ISupportInitialize)pictureBoxBulldoser).EndInit(); + ((System.ComponentModel.ISupportInitialize)fileSystemWatcher1).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -190,5 +210,7 @@ private ComboBox comboBoxStrategy; private Button buttonCreateTractor; private Button buttonStep; + private FileSystemWatcher fileSystemWatcher1; + private Button buttonSelectTransport; } } \ No newline at end of file diff --git a/Bulldoser/Bulldoser/Form1.cs b/Bulldoser/Bulldoser/Form1.cs index 3eb6caf..9a95dfc 100644 --- a/Bulldoser/Bulldoser/Form1.cs +++ b/Bulldoser/Bulldoser/Form1.cs @@ -3,18 +3,18 @@ using Bulldoser.MovementStrategy; namespace Bulldoser { - public partial class Form1 : Form + public partial class FormBulldoser : Form { private DrawingTractor? _drawingTractor; - private AbstractStrategy? _abstractStrategy; - - public Form1() + public DrawingTractor? SelectedTractor { get; private set; } + public FormBulldoser() { InitializeComponent(); + _abstractStrategy = null; + SelectedTractor = null; } - private void Draw() { if (_drawingTractor == null) @@ -26,29 +26,40 @@ namespace Bulldoser _drawingTractor.DrawTransport(gr); pictureBoxBulldoser.Image = bmp; } - - private void buttonCreateBulldoser_Click(object sender, EventArgs e) + private void buttonCreateBulldozer_Click(object sender, EventArgs e) { Random random = new Random(); - _drawingTractor = new DrawingBulldoser(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color 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; + } + Color dopColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + if (colorDialog.ShowDialog() == DialogResult.OK) + { + dopColor = colorDialog.Color; + } + _drawingTractor = new DrawingBulldoser(random.Next(100, 300), random.Next(1000, 3000), color, dopColor, Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), pictureBoxBulldoser.Width, pictureBoxBulldoser.Height); _drawingTractor.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } - private void buttonCreateTractor_Click(object sender, EventArgs e) { Random rnd = new Random(); - _drawingTractor = new DrawingTractor(rnd.Next(100, 300), rnd.Next(1000, 3000), - Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), + Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)); + ColorDialog colorDialog = new ColorDialog(); + if (colorDialog.ShowDialog() == DialogResult.OK) + { + color = colorDialog.Color; + } + _drawingTractor = new DrawingTractor(rnd.Next(100, 300), rnd.Next(1000, 3000), color, pictureBoxBulldoser.Width, pictureBoxBulldoser.Height); _drawingTractor.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100)); Draw(); } - private void buttonMove_Click(object sender, EventArgs e) { if (_drawingTractor == null) @@ -73,7 +84,6 @@ namespace Bulldoser } Draw(); } - private void buttonStep_Click(object sender, EventArgs e) { if (_drawingTractor == null) @@ -92,15 +102,14 @@ namespace Bulldoser { return; } - _abstractStrategy.SetData(new - DrawingObjectTractor(_drawingTractor), pictureBoxBulldoser.Width, + _abstractStrategy.SetData(_drawingTractor.GetMoveableObject, pictureBoxBulldoser.Width, pictureBoxBulldoser.Height); - comboBoxStrategy.Enabled = false; } if (_abstractStrategy == null) { return; } + comboBoxStrategy.Enabled = false; _abstractStrategy.MakeStep(); Draw(); if (_abstractStrategy.GetStatus() == Status.Finish) @@ -109,7 +118,10 @@ namespace Bulldoser _abstractStrategy = null; } } - - + private void ButtonSelect_Tractor_Click(object sender, EventArgs e) + { + SelectedTractor = _drawingTractor; + DialogResult = DialogResult.OK; + } } } \ No newline at end of file diff --git a/Bulldoser/Bulldoser/Form1.resx b/Bulldoser/Bulldoser/Form1.resx index f1d9bd4..a1aba31 100644 --- a/Bulldoser/Bulldoser/Form1.resx +++ b/Bulldoser/Bulldoser/Form1.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] @@ -406,4 +406,7 @@ SqQBINQfkf7yz6ev/zEzM7Ok/f7hf5jEhMkgDZ7VAAAAAElFTkSuQmCC + + 17, 17 + \ No newline at end of file diff --git a/Bulldoser/Bulldoser/Form2.Designer.cs b/Bulldoser/Bulldoser/Form2.Designer.cs new file mode 100644 index 0000000..397ad1f --- /dev/null +++ b/Bulldoser/Bulldoser/Form2.Designer.cs @@ -0,0 +1,125 @@ +namespace Bulldoser +{ + partial class FormTractorCollection + { + /// + /// 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() + { + pictureBoxCollections = new PictureBox(); + groupBoxTools = new GroupBox(); + maskedTextBoxNumbers = new MaskedTextBox(); + buttonUpdateCollection = new Button(); + buttonRemoveTransport = new Button(); + buttonAddTransport = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxCollections).BeginInit(); + groupBoxTools.SuspendLayout(); + SuspendLayout(); + // + // pictureBoxCollections + // + pictureBoxCollections.Location = new Point(12, 6); + pictureBoxCollections.Name = "pictureBoxCollections"; + pictureBoxCollections.Size = new Size(570, 432); + pictureBoxCollections.TabIndex = 1; + pictureBoxCollections.TabStop = false; + // + // groupBoxTools + // + groupBoxTools.Controls.Add(maskedTextBoxNumbers); + groupBoxTools.Controls.Add(buttonUpdateCollection); + groupBoxTools.Controls.Add(buttonRemoveTransport); + groupBoxTools.Controls.Add(buttonAddTransport); + groupBoxTools.Location = new Point(588, 6); + groupBoxTools.Name = "groupBoxTools"; + groupBoxTools.Size = new Size(200, 432); + groupBoxTools.TabIndex = 2; + groupBoxTools.TabStop = false; + groupBoxTools.Text = "Инструменты"; + // + // maskedTextBoxNumbers + // + maskedTextBoxNumbers.Location = new Point(6, 106); + maskedTextBoxNumbers.Margin = new Padding(3, 2, 3, 2); + maskedTextBoxNumbers.Mask = "0"; + maskedTextBoxNumbers.Name = "maskedTextBoxNumbers"; + maskedTextBoxNumbers.Size = new Size(188, 23); + maskedTextBoxNumbers.TabIndex = 5; + // + // buttonUpdateCollection + // + buttonUpdateCollection.Location = new Point(6, 220); + buttonUpdateCollection.Name = "buttonUpdateCollection"; + buttonUpdateCollection.Size = new Size(188, 40); + buttonUpdateCollection.TabIndex = 3; + buttonUpdateCollection.Text = "Обновление коллекции"; + buttonUpdateCollection.UseVisualStyleBackColor = true; + buttonUpdateCollection.Click += ButtonRefreshCollection_Click; + // + // buttonRemoveTransport + // + buttonRemoveTransport.Location = new Point(6, 152); + buttonRemoveTransport.Name = "buttonRemoveTransport"; + buttonRemoveTransport.Size = new Size(188, 40); + buttonRemoveTransport.TabIndex = 2; + buttonRemoveTransport.Text = "Удалить транспорт"; + buttonRemoveTransport.UseVisualStyleBackColor = true; + buttonRemoveTransport.Click += ButtonRemoveTractor_Click; + // + // buttonAddTransport + // + buttonAddTransport.Location = new Point(6, 39); + buttonAddTransport.Name = "buttonAddTransport"; + buttonAddTransport.Size = new Size(188, 47); + buttonAddTransport.TabIndex = 0; + buttonAddTransport.Text = "Добавить транспорт"; + buttonAddTransport.UseVisualStyleBackColor = true; + buttonAddTransport.Click += ButtonAddTractor_Click; + // + // FormTractorCollection + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(groupBoxTools); + Controls.Add(pictureBoxCollections); + Name = "FormTractorCollection"; + Text = "Набор автомобилей"; + ((System.ComponentModel.ISupportInitialize)pictureBoxCollections).EndInit(); + groupBoxTools.ResumeLayout(false); + groupBoxTools.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxCollections; + private GroupBox groupBoxTools; + private Button buttonUpdateCollection; + private Button buttonRemoveTransport; + private Button buttonAddTransport; + private MaskedTextBox maskedTextBoxNumbers; + } +} \ No newline at end of file diff --git a/Bulldoser/Bulldoser/Form2.cs b/Bulldoser/Bulldoser/Form2.cs new file mode 100644 index 0000000..7163f12 --- /dev/null +++ b/Bulldoser/Bulldoser/Form2.cs @@ -0,0 +1,65 @@ +using Bulldoser.Drawings; +using Bulldoser.Generic; +using Bulldoser.MovementStrategy; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Bulldoser +{ + public partial class FormTractorCollection : Form + { + private readonly TractorGenericCollection _Tractors; + public FormTractorCollection() + { + InitializeComponent(); + _Tractors = new TractorGenericCollection(pictureBoxCollections.Width, + pictureBoxCollections.Height); + } + private void ButtonAddTractor_Click(object sender, EventArgs e) + { + if (_Tractors == null) return; + FormBulldoser form = new(); + if (form.ShowDialog() == DialogResult.OK) + { + //проверяем, удалось ли нам загрузить объект + if (_Tractors + form.SelectedTractor != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBoxCollections.Image = _Tractors.ShowTractors(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + } + private void ButtonRemoveTractor_Click(object sender, EventArgs e) + { + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + int pos = Convert.ToInt32(maskedTextBoxNumbers.Text); + if (_Tractors - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBoxCollections.Image = _Tractors.ShowTractors(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + private void ButtonRefreshCollection_Click(object sender, EventArgs e) + { + pictureBoxCollections.Image = _Tractors.ShowTractors(); + } + } +} diff --git a/Bulldoser/Bulldoser/Form2.resx b/Bulldoser/Bulldoser/Form2.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/Bulldoser/Bulldoser/Form2.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/Bulldoser/Bulldoser/Generic/BulldoserGenericCollection.cs b/Bulldoser/Bulldoser/Generic/BulldoserGenericCollection.cs new file mode 100644 index 0000000..c62bfa5 --- /dev/null +++ b/Bulldoser/Bulldoser/Generic/BulldoserGenericCollection.cs @@ -0,0 +1,95 @@ +using Bulldoser.Drawings; +using Bulldoser.MovementStrategy; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bulldoser.Generic +{ + public class TractorGenericCollection where T : DrawingTractor where U : IMoveableObject + { + //ширина /высота окна + private readonly int _pictureWidth; + private readonly int _pictureHeight; + //ширина /высота занимаемого места + private readonly int _placeSizeWidth = 170; + private readonly int _placeSizeHeight = 130; + /// Набор объектов + private readonly SetGeneric _collection; + public TractorGenericCollection(int picWidth, int picHeight) + { + + // высчитываем размер массива для setgeneric + int width = picWidth / _placeSizeWidth; + int height = picHeight / _placeSizeHeight; + _pictureWidth = picWidth; + _pictureHeight = picHeight; + _collection = new SetGeneric(width * height); + } + /// Перегрузка оператора сложения + public static int operator +(TractorGenericCollection collect, T tract) + { + if (tract == null) + { + return -1; + } + return collect._collection.Insert(tract); + } + public static T? operator -(TractorGenericCollection collect, int + pos) + { + T obj = collect._collection.Get(pos); + if (obj != null) + { + return collect._collection.Remove(pos); + } + return obj; + } + // получение объекта imoveableObj + public U? GetU(int pos) + { + return (U?)_collection.Get(pos)?.GetMoveableObject; + } + /// Вывод всего набора объектов + public Bitmap ShowTractors() + { + Bitmap bmp = new(_pictureWidth, _pictureHeight); + Graphics gr = Graphics.FromImage(bmp); + DrawBackground(gr); + DrawObjects(gr); + return bmp; + } + private void DrawBackground(Graphics g) + { + Pen pen = new(Color.Black, 3); + for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++) + { + for (int j = 0; j < _pictureHeight / _placeSizeHeight + 1; ++j) + { + //линия рамзетки места + g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 3, j * _placeSizeHeight); + } + g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight); + } + } + private void DrawObjects(Graphics g) + { + int HeightObjCount = _pictureHeight / _placeSizeHeight; + int WidthObjCount = _pictureWidth / _placeSizeWidth; + 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); + } + } + } + } + } +} diff --git a/Bulldoser/Bulldoser/Generic/SetGeneric.cs b/Bulldoser/Bulldoser/Generic/SetGeneric.cs new file mode 100644 index 0000000..22ea4f6 --- /dev/null +++ b/Bulldoser/Bulldoser/Generic/SetGeneric.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bulldoser.Generic +{ + public class SetGeneric where T : class + { + private readonly T[] _places; + public int Count => _places.Length; + public SetGeneric(int count) + { + _places = new T[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; + } + + public T? Remove(int position) + { + if (position >= Count || position < 0) + return null; + + T tmp = _places[position]; + _places[position] = null; + return tmp; + } + //Получение объекта из набора по позиции + public T? Get(int position) + { + if (position < 0 || position >= Count) return null; + return _places[position]; + } + } +} diff --git a/Bulldoser/Bulldoser/Program.cs b/Bulldoser/Bulldoser/Program.cs index 0666f96..63fac9b 100644 --- a/Bulldoser/Bulldoser/Program.cs +++ b/Bulldoser/Bulldoser/Program.cs @@ -11,7 +11,7 @@ namespace Bulldoser // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormTractorCollection()); } } } \ No newline at end of file