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 class DrawingBulldozer : DrawingTractor
{ {
public DrawingBulldozer(int speed, double weight, Color bodyColor, Color additionalColor, 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) if (EntityTractor != null)
{ {
@ -18,22 +18,23 @@ namespace ProjectBulldozer.Drawning
{ {
return; return;
} }
Pen pen = new(Color.Black); Pen pen = new(Color.Black);
Brush blackBrush = new SolidBrush(Color.Black); Brush blackBrush = new SolidBrush(Color.Black);
Brush windows = new SolidBrush(Color.LightBlue); Brush windows = new SolidBrush(Color.LightBlue);
Brush bodyColor = new SolidBrush(Bulldozer.BodyColor); Brush bodyColor = new SolidBrush(Bulldozer.BodyColor);
Brush additionalColor = new SolidBrush(Bulldozer.AdditionalColor); Brush additionalColor = new SolidBrush(Bulldozer.AdditionalColor);
Brush grayBrush = new SolidBrush(Color.Gray); Brush grayBrush = new SolidBrush(Color.Gray);
//otval //otval
Point[] Otval = Point[] Otval =
{ {
new Point(_startPosX + 118, _startPosY + 50), new Point(_startPosX + 118, _startPosY + 50),
new Point(_startPosX + 148, _startPosY + 111), new Point(_startPosX + 148, _startPosY + 111),
new Point(_startPosX+ 118, _startPosY + 111), new Point(_startPosX+ 118, _startPosY + 111),
}; };
g.FillPolygon(additionalColor, Otval); g.FillPolygon(additionalColor, Otval);
g.DrawPolygon(pen, Otval); g.DrawPolygon(pen, Otval);
//гусеницы //гусеницы
Brush gg = new SolidBrush(Color.LightGray); Brush gg = new SolidBrush(Color.LightGray);
g.FillEllipse(gg, _startPosX + 16, _startPosY + 65, 101, 63); 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 class EntityBulldozer : EntityTractor
{ {
public Color AdditionalColor { get; private set; } 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 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) bool seifBatteries) : base(speed, weight, bodyColor)
{ {
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
Otval = otval; Horns = horns;
SeifBatteries = seifBatteries; SeifBatteries = seifBatteries;
} }
} }

View File

@ -4,6 +4,11 @@ namespace Bulldozer
partial class FormBulldozer partial class FormBulldozer
{ {
private System.ComponentModel.IContainer components = null; 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) protected override void Dispose(bool disposing)
{ {
if (disposing && (components != null)) if (disposing && (components != null))
@ -13,8 +18,13 @@ namespace Bulldozer
base.Dispose(disposing); base.Dispose(disposing);
} }
#region Windows Form Designer generated code #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() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBulldozer));
pictureBoxBulldozer = new PictureBox(); pictureBoxBulldozer = new PictureBox();
buttonCreateBulldozer = new Button(); buttonCreateBulldozer = new Button();
buttonLeft = new Button(); buttonLeft = new Button();
@ -34,7 +44,7 @@ namespace Bulldozer
pictureBoxBulldozer.Location = new Point(0, 0); pictureBoxBulldozer.Location = new Point(0, 0);
pictureBoxBulldozer.Margin = new Padding(2); pictureBoxBulldozer.Margin = new Padding(2);
pictureBoxBulldozer.Name = "pictureBoxBulldozer"; pictureBoxBulldozer.Name = "pictureBoxBulldozer";
pictureBoxBulldozer.Size = new Size(870, 390); pictureBoxBulldozer.Size = new Size(870, 572);
pictureBoxBulldozer.SizeMode = PictureBoxSizeMode.AutoSize; pictureBoxBulldozer.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBoxBulldozer.TabIndex = 0; pictureBoxBulldozer.TabIndex = 0;
pictureBoxBulldozer.TabStop = false; pictureBoxBulldozer.TabStop = false;
@ -42,24 +52,24 @@ namespace Bulldozer
// buttonCreateBulldozer // buttonCreateBulldozer
// //
buttonCreateBulldozer.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateBulldozer.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateBulldozer.Location = new Point(11, 332); buttonCreateBulldozer.Location = new Point(20, 514);
buttonCreateBulldozer.Margin = new Padding(2); buttonCreateBulldozer.Margin = new Padding(2);
buttonCreateBulldozer.Name = "buttonCreateBulldozer"; buttonCreateBulldozer.Name = "buttonCreateBulldozer";
buttonCreateBulldozer.Size = new Size(95, 48); buttonCreateBulldozer.Size = new Size(88, 48);
buttonCreateBulldozer.TabIndex = 1; buttonCreateBulldozer.TabIndex = 1;
buttonCreateBulldozer.Text = "Создать булльдозер"; buttonCreateBulldozer.Text = "Создать бульдозер";
buttonCreateBulldozer.UseVisualStyleBackColor = true; buttonCreateBulldozer.UseVisualStyleBackColor = true;
buttonCreateBulldozer.Click += buttonCreateBulldozer_Click; buttonCreateBulldozer.Click += buttonCreateBulldozer_Click;
// //
// buttonLeft // buttonLeft
// //
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonLeft.BackgroundImage = ProjectBulldozer.Properties.Resources.left1; buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; buttonLeft.BackgroundImageLayout = ImageLayout.Zoom;
buttonLeft.Location = new Point(767, 353); buttonLeft.Location = new Point(732, 522);
buttonLeft.Margin = new Padding(2); buttonLeft.Margin = new Padding(2);
buttonLeft.Name = "buttonLeft"; buttonLeft.Name = "buttonLeft";
buttonLeft.Size = new Size(30, 27); buttonLeft.Size = new Size(40, 33);
buttonLeft.TabIndex = 2; buttonLeft.TabIndex = 2;
buttonLeft.UseVisualStyleBackColor = true; buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click; buttonLeft.Click += buttonMove_Click;
@ -67,12 +77,12 @@ namespace Bulldozer
// buttonUp // buttonUp
// //
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = ProjectBulldozer.Properties.Resources.up1; buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
buttonUp.BackgroundImageLayout = ImageLayout.Zoom; buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
buttonUp.Location = new Point(801, 320); buttonUp.Location = new Point(776, 485);
buttonUp.Margin = new Padding(2); buttonUp.Margin = new Padding(2);
buttonUp.Name = "buttonUp"; buttonUp.Name = "buttonUp";
buttonUp.Size = new Size(34, 28); buttonUp.Size = new Size(40, 33);
buttonUp.TabIndex = 3; buttonUp.TabIndex = 3;
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += buttonMove_Click; buttonUp.Click += buttonMove_Click;
@ -80,12 +90,12 @@ namespace Bulldozer
// buttonRight // buttonRight
// //
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonRight.BackgroundImage = ProjectBulldozer.Properties.Resources.right1; buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
buttonRight.BackgroundImageLayout = ImageLayout.Zoom; buttonRight.BackgroundImageLayout = ImageLayout.Zoom;
buttonRight.Location = new Point(837, 353); buttonRight.Location = new Point(819, 522);
buttonRight.Margin = new Padding(2); buttonRight.Margin = new Padding(2);
buttonRight.Name = "buttonRight"; buttonRight.Name = "buttonRight";
buttonRight.Size = new Size(28, 26); buttonRight.Size = new Size(40, 33);
buttonRight.TabIndex = 4; buttonRight.TabIndex = 4;
buttonRight.UseVisualStyleBackColor = true; buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += buttonMove_Click; buttonRight.Click += buttonMove_Click;
@ -93,12 +103,12 @@ namespace Bulldozer
// buttonDown // buttonDown
// //
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonDown.BackgroundImage = ProjectBulldozer.Properties.Resources.down1; buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
buttonDown.BackgroundImageLayout = ImageLayout.Zoom; buttonDown.BackgroundImageLayout = ImageLayout.Zoom;
buttonDown.Location = new Point(801, 353); buttonDown.Location = new Point(776, 522);
buttonDown.Margin = new Padding(2); buttonDown.Margin = new Padding(2);
buttonDown.Name = "buttonDown"; buttonDown.Name = "buttonDown";
buttonDown.Size = new Size(32, 27); buttonDown.Size = new Size(40, 33);
buttonDown.TabIndex = 5; buttonDown.TabIndex = 5;
buttonDown.UseVisualStyleBackColor = true; buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += buttonMove_Click; buttonDown.Click += buttonMove_Click;
@ -108,7 +118,7 @@ namespace Bulldozer
comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right; comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right;
comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxStrategy.FormattingEnabled = true; comboBoxStrategy.FormattingEnabled = true;
comboBoxStrategy.Items.AddRange(new object[] { "К центру", "В угол" }); comboBoxStrategy.Items.AddRange(new object[] { "В центр", "В угол" });
comboBoxStrategy.Location = new Point(740, 8); comboBoxStrategy.Location = new Point(740, 8);
comboBoxStrategy.Margin = new Padding(2); comboBoxStrategy.Margin = new Padding(2);
comboBoxStrategy.Name = "comboBoxStrategy"; comboBoxStrategy.Name = "comboBoxStrategy";
@ -119,10 +129,10 @@ namespace Bulldozer
// buttonCreateTractor // buttonCreateTractor
// //
buttonCreateTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateTractor.Location = new Point(122, 332); buttonCreateTractor.Location = new Point(122, 514);
buttonCreateTractor.Margin = new Padding(2); buttonCreateTractor.Margin = new Padding(2);
buttonCreateTractor.Name = "buttonCreateTractor"; buttonCreateTractor.Name = "buttonCreateTractor";
buttonCreateTractor.Size = new Size(81, 47); buttonCreateTractor.Size = new Size(88, 48);
buttonCreateTractor.TabIndex = 7; buttonCreateTractor.TabIndex = 7;
buttonCreateTractor.Text = "Создать трактор"; buttonCreateTractor.Text = "Создать трактор";
buttonCreateTractor.UseVisualStyleBackColor = true; buttonCreateTractor.UseVisualStyleBackColor = true;
@ -134,7 +144,7 @@ namespace Bulldozer
buttonStep.Location = new Point(755, 39); buttonStep.Location = new Point(755, 39);
buttonStep.Margin = new Padding(2); buttonStep.Margin = new Padding(2);
buttonStep.Name = "buttonStep"; buttonStep.Name = "buttonStep";
buttonStep.Size = new Size(88, 20); buttonStep.Size = new Size(88, 28);
buttonStep.TabIndex = 8; buttonStep.TabIndex = 8;
buttonStep.Text = "Шаг"; buttonStep.Text = "Шаг";
buttonStep.UseVisualStyleBackColor = true; buttonStep.UseVisualStyleBackColor = true;
@ -143,10 +153,10 @@ namespace Bulldozer
// ButtonSelect_Tractor // ButtonSelect_Tractor
// //
ButtonSelect_Tractor.Anchor = AnchorStyles.Top | AnchorStyles.Right; 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.Margin = new Padding(2);
ButtonSelect_Tractor.Name = "ButtonSelect_Tractor"; 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.TabIndex = 9;
ButtonSelect_Tractor.Text = "Выбрать"; ButtonSelect_Tractor.Text = "Выбрать";
ButtonSelect_Tractor.UseVisualStyleBackColor = true; ButtonSelect_Tractor.UseVisualStyleBackColor = true;
@ -156,7 +166,7 @@ namespace Bulldozer
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(870, 390); ClientSize = new Size(870, 572);
Controls.Add(ButtonSelect_Tractor); Controls.Add(ButtonSelect_Tractor);
Controls.Add(buttonStep); Controls.Add(buttonStep);
Controls.Add(buttonCreateTractor); Controls.Add(buttonCreateTractor);
@ -175,11 +185,6 @@ namespace Bulldozer
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
private void comboBoxStrategy_SelectedIndexChanged(object sender, EventArgs e)
{
throw new NotImplementedException();
}
#endregion #endregion
private PictureBox pictureBoxBulldozer; private PictureBox pictureBoxBulldozer;
private Button buttonCreateBulldozer; private Button buttonCreateBulldozer;
@ -191,5 +196,6 @@ namespace Bulldozer
private Button buttonCreateTractor; private Button buttonCreateTractor;
private Button buttonStep; private Button buttonStep;
private Button ButtonSelect_Tractor; private Button ButtonSelect_Tractor;
private EventHandler comboBoxStrategy_SelectedIndexChanged;
} }
} }

View File

@ -1,7 +1,9 @@
using ProjectBulldozer; using ProjectBulldozer;
using ProjectBulldozer.Drawning; using ProjectBulldozer.Drawning;
using ProjectBulldozer.Generics;
using ProjectBulldozer.MovementStrategy; using ProjectBulldozer.MovementStrategy;
using System;
using System.Windows.Forms;
namespace Bulldozer namespace Bulldozer
{ {
public partial class FormBulldozer : Form public partial class FormBulldozer : Form
@ -30,7 +32,9 @@ namespace Bulldozer
{ {
Random random = new Random(); Random random = new Random();
Color color = 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(); ColorDialog colorDialog = new ColorDialog();
if (colorDialog.ShowDialog() == DialogResult.OK) if (colorDialog.ShowDialog() == DialogResult.OK)
{ {
color = colorDialog.Color; color = colorDialog.Color;

View File

@ -1,8 +1,16 @@
namespace ProjectBulldozer 
namespace ProjectBulldozer
{ {
partial class FormTractorCollections partial class FormTractorCollections
{ {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null; 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) protected override void Dispose(bool disposing)
{ {
if (disposing && (components != null)) if (disposing && (components != null))
@ -11,62 +19,62 @@
} }
base.Dispose(disposing); base.Dispose(disposing);
} }
#region Windows Form Designer generated code #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() private void InitializeComponent()
{ {
Instruments = new Panel(); components = new System.ComponentModel.Container();
maskedTextBoxNumber = new MaskedTextBox(); maskedTextBoxNumber = new MaskedTextBox();
ButtonRefreshCollection = new Button(); ButtonRefreshCollection = new Button();
ButtonRemoveTractor = new Button(); ButtonRemoveTractor = new Button();
ButtonAddTractor = new Button(); ButtonAddTractor = new Button();
pictureBoxCollections = new PictureBox(); 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)pictureBoxCollections).BeginInit();
((System.ComponentModel.ISupportInitialize)bindingSource1).BeginInit();
((System.ComponentModel.ISupportInitialize)bindingSource2).BeginInit();
groupBox1.SuspendLayout();
Instruments.SuspendLayout();
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
// //
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.Margin = new Padding(3, 2, 3, 2);
maskedTextBoxNumber.Mask = "0"; maskedTextBoxNumber.Mask = "0";
maskedTextBoxNumber.Name = "maskedTextBoxNumber"; maskedTextBoxNumber.Name = "maskedTextBoxNumber";
maskedTextBoxNumber.Size = new Size(119, 23); maskedTextBoxNumber.Size = new Size(131, 23);
maskedTextBoxNumber.TabIndex = 4; maskedTextBoxNumber.TabIndex = 4;
// //
// ButtonRefreshCollection // ButtonRefreshCollection
// //
ButtonRefreshCollection.Anchor = AnchorStyles.Right; ButtonRefreshCollection.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
ButtonRefreshCollection.Location = new Point(3, 175); ButtonRefreshCollection.Location = new Point(33, 499);
ButtonRefreshCollection.Margin = new Padding(3, 2, 3, 2); ButtonRefreshCollection.Margin = new Padding(3, 2, 3, 2);
ButtonRefreshCollection.Name = "ButtonRefreshCollection"; ButtonRefreshCollection.Name = "ButtonRefreshCollection";
ButtonRefreshCollection.Size = new Size(131, 27); ButtonRefreshCollection.Size = new Size(131, 31);
ButtonRefreshCollection.TabIndex = 2; ButtonRefreshCollection.TabIndex = 2;
ButtonRefreshCollection.Text = "Обновить "; ButtonRefreshCollection.Text = "Обновить все";
ButtonRefreshCollection.UseVisualStyleBackColor = true; ButtonRefreshCollection.UseVisualStyleBackColor = true;
ButtonRefreshCollection.Click += ButtonRefreshCollection_Click;
// //
// ButtonRemoveTractor // ButtonRemoveTractor
// //
ButtonRemoveTractor.Anchor = AnchorStyles.Right; ButtonRemoveTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
ButtonRemoveTractor.Location = new Point(3, 133); ButtonRemoveTractor.Location = new Point(33, 444);
ButtonRemoveTractor.Margin = new Padding(3, 2, 3, 2); ButtonRemoveTractor.Margin = new Padding(3, 2, 3, 2);
ButtonRemoveTractor.Name = "ButtonRemoveTractor"; ButtonRemoveTractor.Name = "ButtonRemoveTractor";
ButtonRemoveTractor.Size = new Size(131, 27); ButtonRemoveTractor.Size = new Size(131, 33);
ButtonRemoveTractor.TabIndex = 1; ButtonRemoveTractor.TabIndex = 1;
ButtonRemoveTractor.Text = "Удалить объект"; ButtonRemoveTractor.Text = "Удалить объект";
ButtonRemoveTractor.UseVisualStyleBackColor = true; ButtonRemoveTractor.UseVisualStyleBackColor = true;
@ -74,11 +82,11 @@
// //
// ButtonAddTractor // ButtonAddTractor
// //
ButtonAddTractor.Anchor = AnchorStyles.Top | AnchorStyles.Right; ButtonAddTractor.Anchor = AnchorStyles.Top;
ButtonAddTractor.Location = new Point(6, 20); ButtonAddTractor.Location = new Point(33, 346);
ButtonAddTractor.Margin = new Padding(3, 2, 3, 2); ButtonAddTractor.Margin = new Padding(3, 2, 3, 2);
ButtonAddTractor.Name = "ButtonAddTractor"; ButtonAddTractor.Name = "ButtonAddTractor";
ButtonAddTractor.Size = new Size(128, 27); ButtonAddTractor.Size = new Size(131, 29);
ButtonAddTractor.TabIndex = 0; ButtonAddTractor.TabIndex = 0;
ButtonAddTractor.Text = "Добавить объект"; ButtonAddTractor.Text = "Добавить объект";
ButtonAddTractor.UseVisualStyleBackColor = true; ButtonAddTractor.UseVisualStyleBackColor = true;
@ -86,41 +94,117 @@
// //
// pictureBoxCollections // pictureBoxCollections
// //
pictureBoxCollections.Anchor = AnchorStyles.Left; pictureBoxCollections.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
pictureBoxCollections.Location = new Point(12, 11); pictureBoxCollections.Location = new Point(4, 4);
pictureBoxCollections.Margin = new Padding(3, 2, 3, 2); pictureBoxCollections.Margin = new Padding(3, 2, 3, 2);
pictureBoxCollections.Name = "pictureBoxCollections"; pictureBoxCollections.Name = "pictureBoxCollections";
pictureBoxCollections.Size = new Size(570, 456); pictureBoxCollections.Size = new Size(693, 541);
pictureBoxCollections.TabIndex = 1; pictureBoxCollections.TabIndex = 1;
pictureBoxCollections.TabStop = false; 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 // FormTractorCollections
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(748, 478); ClientSize = new Size(904, 543);
Controls.Add(pictureBoxCollections);
Controls.Add(Instruments); Controls.Add(Instruments);
Controls.Add(pictureBoxCollections);
Margin = new Padding(3, 2, 3, 2); Margin = new Padding(3, 2, 3, 2);
Name = "FormTractorCollections"; 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.ResumeLayout(false);
Instruments.PerformLayout(); Instruments.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCollections).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout();
}
private void pictureBoxCollections_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
} }
#endregion #endregion
private Panel Instruments;
private Button ButtonRefreshCollection; private Button ButtonRefreshCollection;
private Button ButtonRemoveTractor; private Button ButtonRemoveTractor;
private Button ButtonAddTractor; private Button ButtonAddTractor;
private PictureBox pictureBoxCollections; private PictureBox pictureBoxCollections;
private MaskedTextBox maskedTextBoxNumber; 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 Bulldozer;
using ProjectBulldozer.Drawning;
using ProjectBulldozer.Generics; using ProjectBulldozer.Generics;
using ProjectBulldozer.MovementStrategy;
namespace ProjectBulldozer namespace ProjectBulldozer
{ {
public partial class FormTractorCollections : Form public partial class FormTractorCollections : Form
{ {
private readonly TractorGenericCollection<DrawingTractor, DrawingObjectTractor> _Tractors; private readonly TractorGenericStorage _storage;
//private readonly TractorGenericCollection<DrawingTractor, DrawingObjectTractor> _Tractors;
public FormTractorCollections() public FormTractorCollections()
{ {
InitializeComponent(); InitializeComponent();
_Tractors = new TractorGenericCollection<DrawingTractor, DrawingObjectTractor>(pictureBoxCollections.Width, _storage = new TractorGenericStorage(pictureBoxCollections.Width, pictureBoxCollections.Height);
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) 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(); FormBulldozer form = new();
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
//проверяем, удалось ли нам загрузить объект //проверяем, удалось ли нам загрузить объект
if (_Tractors + form.SelectedTractor != -1) if (obj + form.SelectedTractor > -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBoxCollections.Image = _Tractors.ShowTractors(); pictureBoxCollections.Image = obj.ShowTractors();
} }
else else
{ {
@ -33,15 +83,22 @@ namespace ProjectBulldozer
} }
private void ButtonRemoveTractor_Click(object sender, EventArgs e) 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) if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{ {
return; return;
} }
int pos = Convert.ToInt32(maskedTextBoxNumber.Text); int pos = Convert.ToInt32(maskedTextBoxNumber.Text);
if (_Tractors - pos != null) if (obj - pos != null)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
pictureBoxCollections.Image = _Tractors.ShowTractors(); pictureBoxCollections.Image = obj.ShowTractors();
} }
else else
{ {
@ -50,7 +107,13 @@ namespace ProjectBulldozer
} }
private void ButtonRefreshCollection_Click(object sender, EventArgs e) 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 namespace ProjectBulldozer.Generics
{ {
internal class TractorGenericCollection<T, U> where T : DrawingTractor where U : IMoveableObject internal class TractorGenericCollection<T, U> where T : DrawingTractor where U : IMoveableObject
{ {
//ширина /высота окна //ширина/высота окна
private readonly int _pictureWidth; private readonly int _pictureWidth;
private readonly int _pictureHeight; private readonly int _pictureHeight;
//ширина /высота занимаемого места //ширина/высота занимаемого места
private readonly int _placeSizeWidth = 170; private readonly int _placeSizeWidth = 150;
private readonly int _placeSizeHeight = 130; private readonly int _placeSizeHeight = 130;
/// Набор объектов /// Набор объектов
private readonly SetGeneric<T> _collection; private readonly SetGeneric<T> _collection;
@ -23,7 +24,7 @@ namespace ProjectBulldozer.Generics
_collection = new SetGeneric<T>(width * height); _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) if (tract == null)
{ {
@ -31,24 +32,20 @@ namespace ProjectBulldozer.Generics
} }
return collect._collection.Insert(tract); 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) if (obj != null)
{ {
return collect.Remove(pos); collect._collection.Remove(pos);
} }
return false; return obj;
}
private bool Remove(int pos)
{
throw new NotImplementedException();
} }
// получение объекта imoveableObj // получение объекта imoveableObj
public U? GetU(int pos) public U? GetU(int pos)
{ {
return (U?)_collection.Get(pos)?.GetMoveableObject; return (U?)_collection[pos]?.GetMoveableObject;
} }
/// Вывод всего набора объектов /// Вывод всего набора объектов
public Bitmap ShowTractors() public Bitmap ShowTractors()
@ -72,21 +69,29 @@ namespace ProjectBulldozer.Generics
g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight); g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, _pictureHeight / _placeSizeHeight * _placeSizeHeight);
} }
} }
private void DrawObjects(Graphics g) private void DrawObjects(Graphics g)
{ {
int HeightObjCount = _pictureHeight / _placeSizeHeight; int width = _pictureWidth / _placeSizeWidth;
int WidthObjCount = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight;
for (int i = 0; i < _collection.Count; i++) for (int i = 0; i < _collection.Count; i++)
{ {
T t = _collection.Get(i); // Получение объекта
if (t != null) var obj = _collection[i];
{ // Установка позиции
{ obj?.SetPosition(
t.SetPosition(((_collection.Count - i - 1) % (_pictureWidth / _placeSizeWidth)) * _placeSizeWidth, (_collection.Count - i - 1) / (_pictureWidth / _placeSizeWidth) * _placeSizeHeight); (int)((width - 1) * _placeSizeWidth - (i % width * _placeSizeWidth)),
t.DrawTransport(g); (int)((height - 1) * _placeSizeHeight - (i / width * _placeSizeHeight))
} );
} // Прорисовка объекта
obj?.DrawTransport(g);
} }
} }
} }
} }

View File

@ -2,11 +2,14 @@
{ {
internal class SetGeneric<T> where T : class internal class SetGeneric<T> where T : class
{ {
private readonly T[] _places; private readonly List<T?> _places;
public int Count => _places.Length; public int Count => _places.Count;
/// Максимальное количество объектов в списке
private readonly int _maxCount;
public SetGeneric(int count) public SetGeneric(int count)
{ {
_places = new T[count]; _maxCount = count;
_places = new List<T?>(count);
} }
/// Добавление объекта в набор /// Добавление объекта в набор
public int Insert(T tract) public int Insert(T tract)
@ -15,49 +18,42 @@
} }
public int Insert(T tract, int position) public int Insert(T tract, int position)
{ {
int NoEmpty = 0, temp = 0; if (position < 0 || position >= _maxCount) return -1;
for (int i = position; i < Count; i++) _places.Insert(position, tract);
{ return position;
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) public T? Remove(int position)
{ {
if (position >= Count || position < 0) if (position >= Count || position < 0)
return null; return null;
T tmp = _places[position]; T? tmp = _places[position];
_places[position] = null; _places[position] = null;
return tmp; return tmp;
} }
//Получение объекта из набора по позиции public T? this[int position]
public T? Get(int position)
{ {
// TODO проверка позиции get
if (position < 0 || position >= Count) return null; {
return _places[position]; 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 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 public abstract class AbstractStrategy
{ {
@ -10,6 +8,7 @@ namespace ProjectBulldozer.MovementStrategy
protected int FieldWidth { get; private set; } protected int FieldWidth { get; private set; }
protected int FieldHeight { get; private set; } protected int FieldHeight { get; private set; }
public Status GetStatus() { return _state; } public Status GetStatus() { return _state; }
public void SetData(IMoveableObject moveableObject, int width, int height) public void SetData(IMoveableObject moveableObject, int width, int height)
{ {
if (moveableObject == null) if (moveableObject == null)
@ -22,7 +21,6 @@ namespace ProjectBulldozer.MovementStrategy
FieldWidth = width; FieldWidth = width;
FieldHeight = height; FieldHeight = height;
} }
public void MakeStep() public void MakeStep()
{ {
if (_state != Status.InProgress) if (_state != Status.InProgress)

View File

@ -1,9 +1,11 @@
using ProjectBulldozer.Drawning; using Bulldozer;
namespace ProjectBulldozer.MovementStrategy using ProjectBulldozer.MovementStrategy;
namespace ProjectBulldozer.Drawning
{ {
public class DrawingObjectTractor : IMoveableObject public class DrawingObjectTractor : IMoveableObject
{ {
private readonly DrawingTractor? _drawningTractor = null; private readonly DrawingTractor? _drawningTractor = null;
public DrawingObjectTractor(DrawingTractor drawningTractor) public DrawingObjectTractor(DrawingTractor drawningTractor)
{ {
_drawningTractor = drawningTractor; _drawningTractor = drawningTractor;

View File

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