ISE_22.Aparyan.Bulldozer.Base Lab04 #4

Closed
LuizaAparyan wants to merge 5 commits from Laba04 into Laba03
13 changed files with 371 additions and 168 deletions

View File

@ -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);

View File

@ -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;
}
}

View File

@ -4,6 +4,11 @@ namespace Bulldozer
partial class FormBulldozer
{
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
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
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@ -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;

View File

@ -1,8 +1,16 @@
namespace ProjectBulldozer

namespace ProjectBulldozer
{
partial class FormTractorCollections
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
@ -11,62 +19,62 @@
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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 +82,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 +94,117 @@
//
// 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;
private EventHandler textBoxStorageName_TextChanged;
}
}

View File

@ -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<DrawingTractor, DrawingObjectTractor> _Tractors;
private readonly TractorGenericStorage _storage;
//private readonly TractorGenericCollection<DrawingTractor, DrawingObjectTractor> _Tractors;
public FormTractorCollections()
{
InitializeComponent();
_Tractors = new TractorGenericCollection<DrawingTractor, DrawingObjectTractor>(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,13 @@ 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();
}
}
}

View File

@ -1,14 +1,15 @@
using ProjectBulldozer.MovementStrategy;
using ProjectBulldozer.Drawning;
using ProjectBulldozer.Drawning;
using ProjectBulldozer.MovementStrategy;
namespace ProjectBulldozer.Generics
{
internal class TractorGenericCollection<T, U> 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<T> _collection;
@ -23,7 +24,7 @@ namespace ProjectBulldozer.Generics
_collection = new SetGeneric<T>(width * height);
}
/// Перегрузка оператора сложения
public static int operator +(TractorGenericCollection<T, U> collect, T tract)
public static int operator +(TractorGenericCollection<T, U> collect, T? tract)
{
if (tract == null)
{
@ -31,24 +32,20 @@ namespace ProjectBulldozer.Generics
}
return collect._collection.Insert(tract);
}
public static bool operator -(TractorGenericCollection<T, U> collect, int
pos)
/// Перегрузка оператора вычитания
public static T? operator -(TractorGenericCollection<T, U> 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()
@ -72,21 +69,29 @@ namespace ProjectBulldozer.Generics
g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight);
}
}
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);
}
}
}
}
}

View File

@ -2,11 +2,14 @@
{
internal class SetGeneric<T> where T : class
{
private readonly T[] _places;
public int Count => _places.Length;
private readonly List<T?> _places;
public int Count => _places.Count;
/// Максимальное количество объектов в списке
private readonly int _maxCount;
public SetGeneric(int count)
{
_places = new T[count];
_maxCount = count;
_places = new List<T?>(count);
}
/// Добавление объекта в набор
public int Insert(T tract)
@ -15,49 +18,42 @@
}
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<T?> GetTractors(int? maxTracts = null)
{
for (int i = 0; i < _places.Count; ++i)
{
yield return _places[i];
if (maxTracts.HasValue && i == maxTracts.Value)
{
yield break;
}
}
}
}
}

View File

@ -1,4 +1,4 @@
namespace ProjectBulldozer.Generics
namespace ProjectBulldozer.MovementStrategy
{
public enum Status
{

View File

@ -0,0 +1,44 @@
using ProjectBulldozer.Drawning;
using ProjectBulldozer.MovementStrategy;
namespace ProjectBulldozer.Generics
{
internal class TractorGenericStorage
{
readonly Dictionary<string, TractorGenericCollection<DrawingTractor, DrawingObjectTractor>> _TractorsStorage;
public List<string> Keys => _TractorsStorage.Keys.ToList();
private readonly int _pictureWidth;
private readonly int _pictureHeight;
public TractorGenericStorage(int pictureWidth, int pictureHeight)
{
_TractorsStorage = new Dictionary<string, TractorGenericCollection<DrawingTractor, DrawingObjectTractor>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
public void AddSet(string name)
{
if (!_TractorsStorage.ContainsKey(name))
{
_TractorsStorage.Add(name, new TractorGenericCollection<DrawingTractor, DrawingObjectTractor>(_pictureWidth, _pictureHeight));
}
}
public void DelSet(string name)
{
if (_TractorsStorage.ContainsKey(name))
{
_TractorsStorage.Remove(name);
}
}
public TractorGenericCollection<DrawingTractor, DrawingObjectTractor>?
this[string ind]
{
get
{
if (_TractorsStorage.ContainsKey(ind))
{
return _TractorsStorage[ind];
}
return null;
}
}
}
}

View File

@ -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)

View File

@ -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;

View File

@ -1,4 +1,5 @@
namespace ProjectBulldozer.MovementStrategy
using Bulldozer;
namespace ProjectBulldozer.MovementStrategy
{
public interface IMoveableObject
{