Compare commits
10 Commits
main
...
ISEbd-21.G
Author | SHA1 | Date | |
---|---|---|---|
ac2f899de2 | |||
66b1a27476 | |||
3394c1cf58 | |||
|
660f9be57c | ||
|
4120e4751f | ||
|
06859bbd85 | ||
b8e8988f4d | |||
05ea4c6edb | |||
53d159876e | |||
|
35cc4284cb |
@ -8,4 +8,19 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
21
Bulldoser/Bulldoser/Direction.cs
Normal file
21
Bulldoser/Bulldoser/Direction.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser
|
||||
{
|
||||
public enum Direction
|
||||
{
|
||||
|
||||
Up = 1,
|
||||
|
||||
Down = 2,
|
||||
|
||||
Left = 3,
|
||||
|
||||
Right = 4
|
||||
|
||||
}
|
||||
}
|
50
Bulldoser/Bulldoser/Drawings/DrawingBulldoser.cs
Normal file
50
Bulldoser/Bulldoser/Drawings/DrawingBulldoser.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Bulldoser.Entities;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace Bulldoser.Drawings
|
||||
{
|
||||
public class DrawingBulldoser : DrawingTractor
|
||||
{
|
||||
public DrawingBulldoser(int speed, double weight, Color bodyColor, Color additionalColor,
|
||||
bool otval, bool seifBatteries, int width, int height) : base(speed, weight, bodyColor, width, height, 180, 120)
|
||||
{
|
||||
if (EntityTractor != null)
|
||||
{
|
||||
EntityTractor = new EntityBulldoser(speed, width, bodyColor, additionalColor, otval, seifBatteries);
|
||||
}
|
||||
}
|
||||
public override void DrawTransport(Graphics g)
|
||||
{
|
||||
if (EntityTractor is not EntityBulldoser Bulldoser)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pen pen = new(Color.Black);
|
||||
Brush blackBrush = new SolidBrush(Color.Black);
|
||||
Brush windows = new SolidBrush(Color.LightBlue);
|
||||
Brush bodyColor = new SolidBrush(Bulldoser.BodyColor);
|
||||
Brush additionalBrush = new SolidBrush(Bulldoser.AdditionalColor);
|
||||
Brush grayBrush = new SolidBrush(Color.Gray);
|
||||
if (Bulldoser.Otval)
|
||||
{
|
||||
g.FillRectangle(additionalBrush, _startPosX + 20, _startPosY + 55, 15, 5);
|
||||
g.FillRectangle(additionalBrush, _startPosX + 10, _startPosY + 35, 10, 70);
|
||||
g.FillRectangle(additionalBrush, _startPosX + 0, _startPosY + 100, 10, 5);
|
||||
}
|
||||
if (Bulldoser.SeifBatteries)
|
||||
{
|
||||
g.FillRectangle(additionalBrush, _startPosX + 155, _startPosY + 65, 40, 10);
|
||||
g.FillRectangle(additionalBrush, _startPosX + 185, _startPosY + 75, 5, 30);
|
||||
g.FillRectangle(additionalBrush, _startPosX + 175, _startPosY + 75, 5, 30);
|
||||
}
|
||||
|
||||
base.DrawTransport(g);
|
||||
}
|
||||
}
|
||||
}
|
164
Bulldoser/Bulldoser/Drawings/DrawingTractor.cs
Normal file
164
Bulldoser/Bulldoser/Drawings/DrawingTractor.cs
Normal file
@ -0,0 +1,164 @@
|
||||
using Bulldoser.Entities;
|
||||
using Bulldoser.MovementStrategy;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.Drawings
|
||||
{
|
||||
public class DrawingTractor
|
||||
{
|
||||
public EntityTractor? EntityTractor { get; set; }
|
||||
|
||||
protected int _pictureWidth;
|
||||
|
||||
protected int _pictureHeight;
|
||||
|
||||
protected int _startPosX;
|
||||
|
||||
protected int _startPosY;
|
||||
|
||||
private int tractWidth;
|
||||
protected readonly int _tractWidth = 140;
|
||||
|
||||
protected readonly int _tractHeight = 123;
|
||||
public int GetPosX => _startPosX;
|
||||
public int GetPosY => _startPosY;
|
||||
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)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = heigth;
|
||||
EntityTractor = new EntityTractor(speed, weight, bodyColor);
|
||||
}
|
||||
|
||||
protected DrawingTractor(int speed, double weight, Color bodyColor, int width,
|
||||
int height, int tractWidth, int tractHeight)
|
||||
{
|
||||
if (width < _tractWidth || height < _tractHeight)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
_tractWidth = tractWidth;
|
||||
_tractHeight = tractHeight;
|
||||
EntityTractor = new EntityTractor(speed, weight, bodyColor);
|
||||
}
|
||||
|
||||
//Установка позиции
|
||||
public void SetPosition(int x, int y)
|
||||
{
|
||||
if (x < 0 || x + _tractWidth > _pictureWidth)
|
||||
{
|
||||
x = _pictureWidth - tractWidth;
|
||||
}
|
||||
if (y < 0 || y + _tractHeight > _pictureHeight)
|
||||
{
|
||||
y = _pictureHeight - _tractHeight;
|
||||
}
|
||||
_startPosX = x;
|
||||
_startPosY = y;
|
||||
}
|
||||
|
||||
public void MoveTransport(Direction direction)
|
||||
{
|
||||
if (EntityTractor == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
switch (direction)
|
||||
{
|
||||
case Direction.Left:
|
||||
if (_startPosX - EntityTractor.Step > 0)
|
||||
{
|
||||
_startPosX -= (int)EntityTractor.Step;
|
||||
}
|
||||
break;
|
||||
case Direction.Up:
|
||||
if (_startPosY - EntityTractor.Step > 0)
|
||||
{
|
||||
_startPosY -= (int)EntityTractor.Step;
|
||||
}
|
||||
break;
|
||||
case Direction.Right:
|
||||
if (_startPosX + EntityTractor.Step + _tractWidth < _pictureWidth)
|
||||
{
|
||||
_startPosX += (int)EntityTractor.Step;
|
||||
}
|
||||
break;
|
||||
case Direction.Down:
|
||||
if (_startPosY + EntityTractor.Step + _tractHeight < _pictureHeight)
|
||||
{
|
||||
_startPosY += (int)EntityTractor.Step;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void DrawTransport(Graphics g)
|
||||
{
|
||||
{
|
||||
if (EntityTractor == null) return;
|
||||
}
|
||||
|
||||
Pen pen = new(Color.Black);
|
||||
Brush brownBrush = new SolidBrush(Color.Brown);
|
||||
Brush windows = new SolidBrush(Color.LightYellow);
|
||||
Brush bodyColor = new SolidBrush(EntityTractor.BodyColor);
|
||||
Brush blackBrush = new SolidBrush(Color.Black);
|
||||
Brush grayBrush = new SolidBrush(Color.Gray);
|
||||
|
||||
//кузов
|
||||
g.FillRectangle(bodyColor, _startPosX + 35, _startPosY + 35, 120, 40);
|
||||
g.FillRectangle(bodyColor, _startPosX + 95, _startPosY + 0, 5, 35);
|
||||
g.FillRectangle(bodyColor, _startPosX + 150, _startPosY + 0, 5, 35);
|
||||
g.FillRectangle(bodyColor, _startPosX + 95, _startPosY + 0, 60, 5);
|
||||
//труба
|
||||
g.FillRectangle(bodyColor, _startPosX + 55, _startPosY + 5, 10, 30);
|
||||
//кабина
|
||||
g.FillRectangle(windows, _startPosX + 100, _startPosY + 5, 50, 30);
|
||||
//гусеницы
|
||||
g.FillEllipse(blackBrush, _startPosX + 25, _startPosY + 75, 30, 30);
|
||||
g.FillEllipse(blackBrush, _startPosX + 135, _startPosY + 75, 30, 30);
|
||||
g.FillRectangle(blackBrush, _startPosX + 35, _startPosY + 75, 120, 30);
|
||||
g.FillEllipse(grayBrush, _startPosX + 28, _startPosY + 78, 25, 25);
|
||||
g.FillEllipse(grayBrush, _startPosX + 138, _startPosY + 78, 25, 25);
|
||||
g.FillEllipse(grayBrush, _startPosX + 58, _startPosY + 90, 15, 15);
|
||||
g.FillEllipse(grayBrush, _startPosX + 88, _startPosY + 90, 15, 15);
|
||||
g.FillEllipse(grayBrush, _startPosX + 118, _startPosY + 90, 15, 15);
|
||||
g.FillEllipse(grayBrush, _startPosX + 78, _startPosY + 78, 10, 10);
|
||||
g.FillEllipse(grayBrush, _startPosX + 105, _startPosY + 78, 10, 10);
|
||||
|
||||
}
|
||||
|
||||
public bool CanMove(Direction direction)
|
||||
{
|
||||
if (EntityTractor == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return direction switch
|
||||
{
|
||||
//влево
|
||||
Direction.Left => _startPosX - EntityTractor.Step > 0,
|
||||
//вверх
|
||||
Direction.Up => _startPosY - EntityTractor.Step > 0,
|
||||
// вправо
|
||||
Direction.Right => _startPosX + EntityTractor.Step < _pictureWidth,
|
||||
//вниз
|
||||
Direction.Down => _startPosY + EntityTractor.Step < _pictureHeight,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
23
Bulldoser/Bulldoser/Entities/EntityBulldoser.cs
Normal file
23
Bulldoser/Bulldoser/Entities/EntityBulldoser.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.Entities
|
||||
{
|
||||
public class EntityBulldoser : EntityTractor
|
||||
{
|
||||
public Color AdditionalColor { get; set; }
|
||||
public bool Otval { get; private set; }
|
||||
public bool SeifBatteries { get; private set; }
|
||||
public EntityBulldoser(int speed, double weight, Color bodyColor, Color additionalColor, bool otval,
|
||||
bool seifBatteries) : base(speed, weight, bodyColor)
|
||||
{
|
||||
AdditionalColor = additionalColor;
|
||||
Otval = otval;
|
||||
SeifBatteries = seifBatteries;
|
||||
}
|
||||
}
|
||||
}
|
23
Bulldoser/Bulldoser/Entities/EntityTractor.cs
Normal file
23
Bulldoser/Bulldoser/Entities/EntityTractor.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.Entities
|
||||
{
|
||||
public class EntityTractor
|
||||
{
|
||||
public int Speed { get; private set; }
|
||||
public double Weight { get; private set; }
|
||||
public Color BodyColor { get; set; }
|
||||
public double Step => (double)Speed * 100 / Weight;
|
||||
public EntityTractor(int speed, double weight, Color bodyColor)
|
||||
{
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
BodyColor = bodyColor;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
187
Bulldoser/Bulldoser/Form1.Designer.cs
generated
187
Bulldoser/Bulldoser/Form1.Designer.cs
generated
@ -1,6 +1,6 @@
|
||||
namespace Bulldoser
|
||||
{
|
||||
partial class Form1
|
||||
partial class FormBulldoser
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
@ -28,12 +28,189 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Text = "Form1";
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBulldoser));
|
||||
pictureBoxBulldoser = new PictureBox();
|
||||
buttonCreateBulldoser = new Button();
|
||||
buttonRight = new Button();
|
||||
buttonLeft = new Button();
|
||||
buttonUp = new Button();
|
||||
buttonDown = new Button();
|
||||
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
|
||||
//
|
||||
pictureBoxBulldoser.Dock = DockStyle.Fill;
|
||||
pictureBoxBulldoser.Location = new Point(0, 0);
|
||||
pictureBoxBulldoser.Margin = new Padding(2);
|
||||
pictureBoxBulldoser.Name = "pictureBoxBulldoser";
|
||||
pictureBoxBulldoser.Size = new Size(884, 461);
|
||||
pictureBoxBulldoser.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
pictureBoxBulldoser.TabIndex = 0;
|
||||
pictureBoxBulldoser.TabStop = false;
|
||||
//
|
||||
// buttonCreateBulldoser
|
||||
//
|
||||
buttonCreateBulldoser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
buttonCreateBulldoser.Font = new Font("Times New Roman", 11.25F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonCreateBulldoser.Location = new Point(121, 403);
|
||||
buttonCreateBulldoser.Margin = new Padding(2);
|
||||
buttonCreateBulldoser.Name = "buttonCreateBulldoser";
|
||||
buttonCreateBulldoser.Size = new Size(100, 47);
|
||||
buttonCreateBulldoser.TabIndex = 1;
|
||||
buttonCreateBulldoser.Text = "Создать бульдозер";
|
||||
buttonCreateBulldoser.UseVisualStyleBackColor = true;
|
||||
buttonCreateBulldoser.Click += buttonCreateBulldozer_Click;
|
||||
//
|
||||
// buttonRight
|
||||
//
|
||||
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
|
||||
buttonRight.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonRight.Location = new Point(826, 425);
|
||||
buttonRight.Margin = new Padding(2);
|
||||
buttonRight.Name = "buttonRight";
|
||||
buttonRight.Size = new Size(27, 25);
|
||||
buttonRight.TabIndex = 4;
|
||||
buttonRight.UseVisualStyleBackColor = true;
|
||||
buttonRight.Click += buttonMove_Click;
|
||||
//
|
||||
// buttonLeft
|
||||
//
|
||||
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
|
||||
buttonLeft.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonLeft.Location = new Point(762, 425);
|
||||
buttonLeft.Margin = new Padding(2);
|
||||
buttonLeft.Name = "buttonLeft";
|
||||
buttonLeft.Size = new Size(26, 25);
|
||||
buttonLeft.TabIndex = 3;
|
||||
buttonLeft.UseVisualStyleBackColor = true;
|
||||
buttonLeft.Click += buttonMove_Click;
|
||||
//
|
||||
// buttonUp
|
||||
//
|
||||
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
|
||||
buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonUp.Location = new Point(792, 394);
|
||||
buttonUp.Margin = new Padding(2);
|
||||
buttonUp.Name = "buttonUp";
|
||||
buttonUp.Size = new Size(30, 27);
|
||||
buttonUp.TabIndex = 3;
|
||||
buttonUp.UseVisualStyleBackColor = true;
|
||||
buttonUp.Click += buttonMove_Click;
|
||||
//
|
||||
// buttonDown
|
||||
//
|
||||
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
|
||||
buttonDown.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonDown.Location = new Point(792, 425);
|
||||
buttonDown.Margin = new Padding(2);
|
||||
buttonDown.Name = "buttonDown";
|
||||
buttonDown.Size = new Size(30, 25);
|
||||
buttonDown.TabIndex = 5;
|
||||
buttonDown.UseVisualStyleBackColor = true;
|
||||
buttonDown.Click += buttonMove_Click;
|
||||
//
|
||||
// comboBoxStrategy
|
||||
//
|
||||
comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoxStrategy.DropDownWidth = 150;
|
||||
comboBoxStrategy.Font = new Font("Times New Roman", 11.25F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboBoxStrategy.FormattingEnabled = true;
|
||||
comboBoxStrategy.Items.AddRange(new object[] { "К центру", "В угол" });
|
||||
comboBoxStrategy.Location = new Point(723, 10);
|
||||
comboBoxStrategy.Margin = new Padding(2);
|
||||
comboBoxStrategy.Name = "comboBoxStrategy";
|
||||
comboBoxStrategy.Size = new Size(150, 25);
|
||||
comboBoxStrategy.TabIndex = 6;
|
||||
//
|
||||
// buttonCreateTractor
|
||||
//
|
||||
buttonCreateTractor.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
buttonCreateTractor.Font = new Font("Times New Roman", 11.25F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonCreateTractor.Location = new Point(11, 403);
|
||||
buttonCreateTractor.Margin = new Padding(2);
|
||||
buttonCreateTractor.Name = "buttonCreateTractor";
|
||||
buttonCreateTractor.Size = new Size(106, 47);
|
||||
buttonCreateTractor.TabIndex = 7;
|
||||
buttonCreateTractor.Text = "Создать трактор";
|
||||
buttonCreateTractor.UseVisualStyleBackColor = true;
|
||||
buttonCreateTractor.Click += buttonCreateTractor_Click;
|
||||
//
|
||||
// buttonStep
|
||||
//
|
||||
buttonStep.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
buttonStep.Font = new Font("Times New Roman", 11.25F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonStep.Location = new Point(785, 39);
|
||||
buttonStep.Margin = new Padding(2);
|
||||
buttonStep.Name = "buttonStep";
|
||||
buttonStep.Size = new Size(88, 34);
|
||||
buttonStep.TabIndex = 8;
|
||||
buttonStep.Text = "Шаг";
|
||||
buttonStep.UseVisualStyleBackColor = true;
|
||||
buttonStep.Click += buttonStep_Click;
|
||||
//
|
||||
// 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);
|
||||
Controls.Add(buttonDown);
|
||||
Controls.Add(buttonUp);
|
||||
Controls.Add(buttonLeft);
|
||||
Controls.Add(buttonRight);
|
||||
Controls.Add(buttonCreateBulldoser);
|
||||
Controls.Add(pictureBoxBulldoser);
|
||||
Name = "FormBulldoser";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "Создать транспорт";
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxBulldoser).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)fileSystemWatcher1).EndInit();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private PictureBox pictureBoxBulldoser;
|
||||
private Button buttonCreateBulldoser;
|
||||
private Button buttonRight;
|
||||
private Button buttonLeft;
|
||||
private Button buttonUp;
|
||||
private Button buttonDown;
|
||||
private ComboBox comboBoxStrategy;
|
||||
private Button buttonCreateTractor;
|
||||
private Button buttonStep;
|
||||
private FileSystemWatcher fileSystemWatcher1;
|
||||
private Button buttonSelectTransport;
|
||||
}
|
||||
}
|
@ -1,10 +1,127 @@
|
||||
using Bulldoser.Drawings;
|
||||
using Bulldoser.MovementStrategy;
|
||||
|
||||
namespace Bulldoser
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
public partial class FormBulldoser : Form
|
||||
{
|
||||
public Form1()
|
||||
|
||||
private DrawingTractor? _drawingTractor;
|
||||
private AbstractStrategy? _abstractStrategy;
|
||||
public DrawingTractor? SelectedTractor { get; private set; }
|
||||
public FormBulldoser()
|
||||
{
|
||||
InitializeComponent();
|
||||
_abstractStrategy = null;
|
||||
SelectedTractor = null;
|
||||
}
|
||||
private void Draw()
|
||||
{
|
||||
if (_drawingTractor == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Bitmap bmp = new(pictureBoxBulldoser.Width, pictureBoxBulldoser.Height);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
_drawingTractor.DrawTransport(gr);
|
||||
pictureBoxBulldoser.Image = bmp;
|
||||
}
|
||||
private void buttonCreateBulldozer_Click(object sender, EventArgs e)
|
||||
{
|
||||
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;
|
||||
}
|
||||
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();
|
||||
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)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string name = ((Button)sender)?.Name ?? string.Empty;
|
||||
switch (name)
|
||||
{
|
||||
case "buttonUp":
|
||||
_drawingTractor.MoveTransport(Direction.Up);
|
||||
break;
|
||||
case "buttonDown":
|
||||
_drawingTractor.MoveTransport(Direction.Down);
|
||||
break;
|
||||
case "buttonLeft":
|
||||
_drawingTractor.MoveTransport(Direction.Left);
|
||||
break;
|
||||
case "buttonRight":
|
||||
_drawingTractor.MoveTransport(Direction.Right);
|
||||
break;
|
||||
}
|
||||
Draw();
|
||||
}
|
||||
private void buttonStep_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_drawingTractor == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (comboBoxStrategy.Enabled)
|
||||
{
|
||||
_abstractStrategy = comboBoxStrategy.SelectedIndex switch
|
||||
{
|
||||
0 => new MoveToCenter(),
|
||||
1 => new MoveToRightCorner(),
|
||||
_ => null,
|
||||
};
|
||||
if (_abstractStrategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_abstractStrategy.SetData(_drawingTractor.GetMoveableObject, pictureBoxBulldoser.Width,
|
||||
pictureBoxBulldoser.Height);
|
||||
}
|
||||
if (_abstractStrategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
comboBoxStrategy.Enabled = false;
|
||||
_abstractStrategy.MakeStep();
|
||||
Draw();
|
||||
if (_abstractStrategy.GetStatus() == Status.Finish)
|
||||
{
|
||||
comboBoxStrategy.Enabled = true;
|
||||
_abstractStrategy = null;
|
||||
}
|
||||
}
|
||||
private void ButtonSelect_Tractor_Click(object sender, EventArgs e)
|
||||
{
|
||||
SelectedTractor = _drawingTractor;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
@ -26,36 +26,36 @@
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
@ -117,4 +117,296 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="buttonRight.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
AbKnmE6OL2IbAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
YII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonUp.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
A8BIf/75P6f0psd4DXc2AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonDown.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAekAAAIDCAYAAAAg+ebuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
vAAADrwBlbxySQAAEHBJREFUeF7t2dlylMcWhFHb4fd/XwJjDtjexwMSqNX/kJW1VkQS3Gv4tKt/+gwA
|
||||
xPn9999/E2kACCTSABBKpAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBKpAEglEgDQCiRBoBQ
|
||||
Ig0AoUQaAEKJNACEEmkACCXSABBKpAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBKpAEglEgD
|
||||
QCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBKpAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBK
|
||||
pAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBKpAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkA
|
||||
CCXSABBKpAEglEgDQCiRBoBQIg0AoUQaAEKJNACEEmkACCXSABBKpAEglEhT48s38+ePHz9+/u2332zD
|
||||
zdcemog0NT58+PD5p59+so33yy+/fP706dNf3xGwPpGmwtcL6qVf2rbfvoYaWog0FUTaZiJNE5Gmgkjb
|
||||
TKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTa
|
||||
ZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDS
|
||||
NhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWR
|
||||
tplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqI
|
||||
tM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNB
|
||||
pG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoK
|
||||
Im0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJU
|
||||
EGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5Gm
|
||||
gkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0
|
||||
FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00Sk
|
||||
qSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYi
|
||||
TQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQR
|
||||
aSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJ
|
||||
SFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRN
|
||||
RJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRp
|
||||
ItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJN
|
||||
E5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI00SkqSDSNhNp
|
||||
mog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1EmiYiTQWRtplI
|
||||
00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m0jQRaSqItM1E
|
||||
miYiTQWRtplI00SkqSDSNhNpmog0FUTaZiJNE5GmgkjbTKRpItJUEGmbiTRNRJoKIm0zkaaJSFNBpG0m
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="fileSystemWatcher1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
191
Bulldoser/Bulldoser/Form2.Designer.cs
generated
Normal file
191
Bulldoser/Bulldoser/Form2.Designer.cs
generated
Normal file
@ -0,0 +1,191 @@
|
||||
namespace Bulldoser
|
||||
{
|
||||
partial class FormTractorCollection
|
||||
{
|
||||
/// <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))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
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()
|
||||
{
|
||||
pictureBoxCollections = new PictureBox();
|
||||
groupBoxTools = new GroupBox();
|
||||
groupBox1 = new GroupBox();
|
||||
listBoxStorage = new ListBox();
|
||||
DelNabor = new Button();
|
||||
AddNabor = new Button();
|
||||
InputNabor = new MaskedTextBox();
|
||||
maskedTextBoxNumbers = new MaskedTextBox();
|
||||
buttonUpdateCollection = new Button();
|
||||
buttonRemoveTransport = new Button();
|
||||
buttonAddTransport = new Button();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxCollections).BeginInit();
|
||||
groupBoxTools.SuspendLayout();
|
||||
groupBox1.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(groupBox1);
|
||||
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 = "Инструменты";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
groupBox1.Controls.Add(listBoxStorage);
|
||||
groupBox1.Controls.Add(DelNabor);
|
||||
groupBox1.Controls.Add(AddNabor);
|
||||
groupBox1.Controls.Add(InputNabor);
|
||||
groupBox1.Location = new Point(6, 22);
|
||||
groupBox1.Name = "groupBox1";
|
||||
groupBox1.Size = new Size(188, 223);
|
||||
groupBox1.TabIndex = 6;
|
||||
groupBox1.TabStop = false;
|
||||
groupBox1.Text = "Наборы";
|
||||
//
|
||||
// listBoxStorage
|
||||
//
|
||||
listBoxStorage.FormattingEnabled = true;
|
||||
listBoxStorage.ItemHeight = 15;
|
||||
listBoxStorage.Location = new Point(6, 85);
|
||||
listBoxStorage.Name = "listBoxStorage";
|
||||
listBoxStorage.Size = new Size(176, 94);
|
||||
listBoxStorage.TabIndex = 10;
|
||||
listBoxStorage.SelectedIndexChanged += listBoxStorage_SelectedIndexChanged;
|
||||
//
|
||||
// DelNabor
|
||||
//
|
||||
DelNabor.Location = new Point(6, 187);
|
||||
DelNabor.Name = "DelNabor";
|
||||
DelNabor.Size = new Size(176, 30);
|
||||
DelNabor.TabIndex = 9;
|
||||
DelNabor.Text = "Удалить набор";
|
||||
DelNabor.UseVisualStyleBackColor = true;
|
||||
DelNabor.Click += ButtonRemoveObject_Click;
|
||||
//
|
||||
// AddNabor
|
||||
//
|
||||
AddNabor.Location = new Point(6, 49);
|
||||
AddNabor.Name = "AddNabor";
|
||||
AddNabor.Size = new Size(176, 30);
|
||||
AddNabor.TabIndex = 8;
|
||||
AddNabor.Text = "Добавить набор";
|
||||
AddNabor.UseVisualStyleBackColor = true;
|
||||
AddNabor.Click += ButtonAddObject_Click;
|
||||
//
|
||||
// InputNabor
|
||||
//
|
||||
InputNabor.Location = new Point(6, 21);
|
||||
InputNabor.Margin = new Padding(3, 2, 3, 2);
|
||||
InputNabor.Mask = "0";
|
||||
InputNabor.Name = "InputNabor";
|
||||
InputNabor.Size = new Size(176, 23);
|
||||
InputNabor.TabIndex = 7;
|
||||
//
|
||||
// maskedTextBoxNumbers
|
||||
//
|
||||
maskedTextBoxNumbers.Location = new Point(6, 312);
|
||||
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, 386);
|
||||
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, 340);
|
||||
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, 260);
|
||||
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();
|
||||
groupBox1.ResumeLayout(false);
|
||||
groupBox1.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private PictureBox pictureBoxCollections;
|
||||
private GroupBox groupBoxTools;
|
||||
private Button buttonUpdateCollection;
|
||||
private Button buttonRemoveTransport;
|
||||
private Button buttonAddTransport;
|
||||
private MaskedTextBox maskedTextBoxNumbers;
|
||||
private GroupBox groupBox1;
|
||||
private ListBox listBoxStorage;
|
||||
private Button DelNabor;
|
||||
private Button AddNabor;
|
||||
private MaskedTextBox InputNabor;
|
||||
}
|
||||
}
|
135
Bulldoser/Bulldoser/Form2.cs
Normal file
135
Bulldoser/Bulldoser/Form2.cs
Normal file
@ -0,0 +1,135 @@
|
||||
using Bulldoser.Drawings;
|
||||
using Bulldoser.Generic;
|
||||
using Bulldoser.MovementStrategy;
|
||||
using Bulldozer.Generics;
|
||||
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 TractorGenericStorage _storage;
|
||||
public FormTractorCollection()
|
||||
{
|
||||
InitializeComponent();
|
||||
_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(InputNabor.Text))
|
||||
{
|
||||
MessageBox.Show("Не всё заполнено", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
_storage.AddSet(InputNabor.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 (listBoxStorage.SelectedIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var formBulldozerConfig = new FormBulldoserConfig();
|
||||
formBulldozerConfig.AddEvent(usta =>
|
||||
{
|
||||
if (listBoxStorage.SelectedIndex != -1)
|
||||
{
|
||||
var obj = _storage[listBoxStorage.SelectedItem?.ToString() ?? string.Empty];
|
||||
if (obj != null)
|
||||
{
|
||||
if (obj + usta != 1)
|
||||
{
|
||||
MessageBox.Show("Объект добавлен");
|
||||
pictureBoxCollections.Image = obj.ShowTractors();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Не удалось добавить объект");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
formBulldozerConfig.Show();
|
||||
}
|
||||
|
||||
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(maskedTextBoxNumbers.Text);
|
||||
if (obj - pos != null)
|
||||
{
|
||||
MessageBox.Show("Объект удален");
|
||||
pictureBoxCollections.Image = obj.ShowTractors();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Не удалось удалить объект");
|
||||
}
|
||||
}
|
||||
private void ButtonRefreshCollection_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (listBoxStorage.SelectedIndex == -1) return;
|
||||
var obj = _storage[listBoxStorage.SelectedItem.ToString() ?? string.Empty];
|
||||
if (obj == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pictureBoxCollections.Image = obj.ShowTractors();
|
||||
}
|
||||
}
|
||||
}
|
120
Bulldoser/Bulldoser/Form2.resx
Normal file
120
Bulldoser/Bulldoser/Form2.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
362
Bulldoser/Bulldoser/FormBulldoserConfig.Designer.cs
generated
Normal file
362
Bulldoser/Bulldoser/FormBulldoserConfig.Designer.cs
generated
Normal file
@ -0,0 +1,362 @@
|
||||
namespace Bulldoser
|
||||
{
|
||||
partial class FormBulldoserConfig
|
||||
{
|
||||
/// <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))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
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()
|
||||
{
|
||||
groupBox1 = new GroupBox();
|
||||
labelModifiedObject = new Label();
|
||||
labelSimpleObject = new Label();
|
||||
groupBox2 = new GroupBox();
|
||||
panelPurple = new Panel();
|
||||
panelYellow = new Panel();
|
||||
panelBlack = new Panel();
|
||||
panelBlue = new Panel();
|
||||
panelGray = new Panel();
|
||||
panelGreen = new Panel();
|
||||
panelWhite = new Panel();
|
||||
panelRed = new Panel();
|
||||
checkBoxSeifBatteries = new CheckBox();
|
||||
checkBoxOtval = new CheckBox();
|
||||
numericUpDownWeight = new NumericUpDown();
|
||||
numericUpDownSpeed = new NumericUpDown();
|
||||
label2 = new Label();
|
||||
label1 = new Label();
|
||||
panelColor = new Panel();
|
||||
labelDopColor = new Label();
|
||||
labelBaseColor = new Label();
|
||||
pictureBoxObject = new PictureBox();
|
||||
ButtonOk = new Button();
|
||||
buttonCancel = new Button();
|
||||
groupBox1.SuspendLayout();
|
||||
groupBox2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
|
||||
panelColor.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
groupBox1.Controls.Add(labelModifiedObject);
|
||||
groupBox1.Controls.Add(labelSimpleObject);
|
||||
groupBox1.Controls.Add(groupBox2);
|
||||
groupBox1.Controls.Add(checkBoxSeifBatteries);
|
||||
groupBox1.Controls.Add(checkBoxOtval);
|
||||
groupBox1.Controls.Add(numericUpDownWeight);
|
||||
groupBox1.Controls.Add(numericUpDownSpeed);
|
||||
groupBox1.Controls.Add(label2);
|
||||
groupBox1.Controls.Add(label1);
|
||||
groupBox1.Location = new Point(12, 12);
|
||||
groupBox1.Name = "groupBox1";
|
||||
groupBox1.Size = new Size(454, 228);
|
||||
groupBox1.TabIndex = 1;
|
||||
groupBox1.TabStop = false;
|
||||
groupBox1.Text = "Параметры";
|
||||
//
|
||||
// labelModifiedObject
|
||||
//
|
||||
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelModifiedObject.Location = new Point(345, 146);
|
||||
labelModifiedObject.Name = "labelModifiedObject";
|
||||
labelModifiedObject.Size = new Size(87, 27);
|
||||
labelModifiedObject.TabIndex = 8;
|
||||
labelModifiedObject.Text = "Продвинутый";
|
||||
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelModifiedObject.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// labelSimpleObject
|
||||
//
|
||||
labelSimpleObject.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelSimpleObject.Location = new Point(247, 146);
|
||||
labelSimpleObject.Name = "labelSimpleObject";
|
||||
labelSimpleObject.Size = new Size(87, 27);
|
||||
labelSimpleObject.TabIndex = 7;
|
||||
labelSimpleObject.Text = "Простой";
|
||||
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelSimpleObject.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
groupBox2.Controls.Add(panelPurple);
|
||||
groupBox2.Controls.Add(panelYellow);
|
||||
groupBox2.Controls.Add(panelBlack);
|
||||
groupBox2.Controls.Add(panelBlue);
|
||||
groupBox2.Controls.Add(panelGray);
|
||||
groupBox2.Controls.Add(panelGreen);
|
||||
groupBox2.Controls.Add(panelWhite);
|
||||
groupBox2.Controls.Add(panelRed);
|
||||
groupBox2.Location = new Point(247, 31);
|
||||
groupBox2.Name = "groupBox2";
|
||||
groupBox2.Size = new Size(185, 106);
|
||||
groupBox2.TabIndex = 6;
|
||||
groupBox2.TabStop = false;
|
||||
groupBox2.Text = "Цвета";
|
||||
//
|
||||
// panelPurple
|
||||
//
|
||||
panelPurple.BackColor = Color.Purple;
|
||||
panelPurple.Location = new Point(139, 63);
|
||||
panelPurple.Name = "panelPurple";
|
||||
panelPurple.Size = new Size(35, 30);
|
||||
panelPurple.TabIndex = 7;
|
||||
panelPurple.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelYellow
|
||||
//
|
||||
panelYellow.BackColor = Color.Yellow;
|
||||
panelYellow.Location = new Point(139, 22);
|
||||
panelYellow.Name = "panelYellow";
|
||||
panelYellow.Size = new Size(35, 30);
|
||||
panelYellow.TabIndex = 3;
|
||||
panelYellow.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelBlack
|
||||
//
|
||||
panelBlack.BackColor = Color.Black;
|
||||
panelBlack.Location = new Point(98, 63);
|
||||
panelBlack.Name = "panelBlack";
|
||||
panelBlack.Size = new Size(35, 30);
|
||||
panelBlack.TabIndex = 6;
|
||||
panelBlack.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelBlue
|
||||
//
|
||||
panelBlue.BackColor = Color.Blue;
|
||||
panelBlue.Location = new Point(98, 22);
|
||||
panelBlue.Name = "panelBlue";
|
||||
panelBlue.Size = new Size(35, 30);
|
||||
panelBlue.TabIndex = 2;
|
||||
panelBlue.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelGray
|
||||
//
|
||||
panelGray.BackColor = Color.Gray;
|
||||
panelGray.Location = new Point(57, 63);
|
||||
panelGray.Name = "panelGray";
|
||||
panelGray.Size = new Size(35, 30);
|
||||
panelGray.TabIndex = 5;
|
||||
panelGray.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelGreen
|
||||
//
|
||||
panelGreen.BackColor = Color.Green;
|
||||
panelGreen.Location = new Point(57, 22);
|
||||
panelGreen.Name = "panelGreen";
|
||||
panelGreen.Size = new Size(35, 30);
|
||||
panelGreen.TabIndex = 1;
|
||||
panelGreen.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelWhite
|
||||
//
|
||||
panelWhite.BackColor = Color.White;
|
||||
panelWhite.Location = new Point(16, 63);
|
||||
panelWhite.Name = "panelWhite";
|
||||
panelWhite.Size = new Size(35, 30);
|
||||
panelWhite.TabIndex = 4;
|
||||
panelWhite.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// panelRed
|
||||
//
|
||||
panelRed.BackColor = Color.Red;
|
||||
panelRed.Location = new Point(16, 22);
|
||||
panelRed.Name = "panelRed";
|
||||
panelRed.Size = new Size(35, 30);
|
||||
panelRed.TabIndex = 0;
|
||||
panelRed.MouseDown += panelColor_MouseDown;
|
||||
//
|
||||
// checkBoxSeifBatteries
|
||||
//
|
||||
checkBoxSeifBatteries.AutoSize = true;
|
||||
checkBoxSeifBatteries.Location = new Point(10, 154);
|
||||
checkBoxSeifBatteries.Name = "checkBoxSeifBatteries";
|
||||
checkBoxSeifBatteries.Size = new Size(208, 19);
|
||||
checkBoxSeifBatteries.TabIndex = 5;
|
||||
checkBoxSeifBatteries.Text = "Признак наличия заднего отвала";
|
||||
checkBoxSeifBatteries.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxOtval
|
||||
//
|
||||
checkBoxOtval.AutoSize = true;
|
||||
checkBoxOtval.Location = new Point(10, 119);
|
||||
checkBoxOtval.Name = "checkBoxOtval";
|
||||
checkBoxOtval.Size = new Size(163, 19);
|
||||
checkBoxOtval.TabIndex = 4;
|
||||
checkBoxOtval.Text = "Признак наличия отвала";
|
||||
checkBoxOtval.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// numericUpDownWeight
|
||||
//
|
||||
numericUpDownWeight.Location = new Point(76, 60);
|
||||
numericUpDownWeight.Name = "numericUpDownWeight";
|
||||
numericUpDownWeight.Size = new Size(73, 23);
|
||||
numericUpDownWeight.TabIndex = 3;
|
||||
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||
//
|
||||
// numericUpDownSpeed
|
||||
//
|
||||
numericUpDownSpeed.Location = new Point(76, 31);
|
||||
numericUpDownSpeed.Name = "numericUpDownSpeed";
|
||||
numericUpDownSpeed.Size = new Size(73, 23);
|
||||
numericUpDownSpeed.TabIndex = 2;
|
||||
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Location = new Point(10, 62);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(29, 15);
|
||||
label2.TabIndex = 1;
|
||||
label2.Text = "Вес:";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Location = new Point(10, 33);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(62, 15);
|
||||
label1.TabIndex = 0;
|
||||
label1.Text = "Скорость:";
|
||||
//
|
||||
// panelColor
|
||||
//
|
||||
panelColor.AllowDrop = true;
|
||||
panelColor.Controls.Add(labelDopColor);
|
||||
panelColor.Controls.Add(labelBaseColor);
|
||||
panelColor.Controls.Add(pictureBoxObject);
|
||||
panelColor.Location = new Point(492, 12);
|
||||
panelColor.Name = "panelColor";
|
||||
panelColor.Size = new Size(276, 184);
|
||||
panelColor.TabIndex = 2;
|
||||
panelColor.DragDrop += PanelObject_DragDrop;
|
||||
panelColor.DragEnter += PanelObject_DragEnter;
|
||||
//
|
||||
// labelDopColor
|
||||
//
|
||||
labelDopColor.AllowDrop = true;
|
||||
labelDopColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelDopColor.Location = new Point(164, 10);
|
||||
labelDopColor.Name = "labelDopColor";
|
||||
labelDopColor.Size = new Size(100, 29);
|
||||
labelDopColor.TabIndex = 2;
|
||||
labelDopColor.Text = "Доп. цвет";
|
||||
labelDopColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelDopColor.DragDrop += LabelDopColor_DragDrop;
|
||||
labelDopColor.DragEnter += LabelColor_DragEnter;
|
||||
labelDopColor.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// labelBaseColor
|
||||
//
|
||||
labelBaseColor.AllowDrop = true;
|
||||
labelBaseColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelBaseColor.Location = new Point(12, 10);
|
||||
labelBaseColor.Name = "labelBaseColor";
|
||||
labelBaseColor.Size = new Size(100, 29);
|
||||
labelBaseColor.TabIndex = 2;
|
||||
labelBaseColor.Text = "Цвет";
|
||||
labelBaseColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelBaseColor.DragDrop += LabelBaseColor_DragDrop;
|
||||
labelBaseColor.DragEnter += LabelColor_DragEnter;
|
||||
labelBaseColor.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// pictureBoxObject
|
||||
//
|
||||
pictureBoxObject.Location = new Point(12, 46);
|
||||
pictureBoxObject.Name = "pictureBoxObject";
|
||||
pictureBoxObject.Size = new Size(252, 127);
|
||||
pictureBoxObject.TabIndex = 0;
|
||||
pictureBoxObject.TabStop = false;
|
||||
//
|
||||
// ButtonOk
|
||||
//
|
||||
ButtonOk.Location = new Point(492, 202);
|
||||
ButtonOk.Name = "ButtonOk";
|
||||
ButtonOk.Size = new Size(100, 32);
|
||||
ButtonOk.TabIndex = 3;
|
||||
ButtonOk.Text = "Добавить";
|
||||
ButtonOk.UseVisualStyleBackColor = true;
|
||||
ButtonOk.Click += ButtonOk_Click;
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
buttonCancel.Location = new Point(668, 202);
|
||||
buttonCancel.Name = "buttonCancel";
|
||||
buttonCancel.Size = new Size(100, 32);
|
||||
buttonCancel.TabIndex = 4;
|
||||
buttonCancel.Text = "Отмена";
|
||||
buttonCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// FormBulldoserConfig
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(800, 247);
|
||||
Controls.Add(buttonCancel);
|
||||
Controls.Add(ButtonOk);
|
||||
Controls.Add(panelColor);
|
||||
Controls.Add(groupBox1);
|
||||
Name = "FormBulldoserConfig";
|
||||
Text = "FormBulldoserConfig";
|
||||
groupBox1.ResumeLayout(false);
|
||||
groupBox1.PerformLayout();
|
||||
groupBox2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
|
||||
panelColor.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private GroupBox groupBox1;
|
||||
private Label labelModifiedObject;
|
||||
private Label labelSimpleObject;
|
||||
private GroupBox groupBox2;
|
||||
private Panel panelPurple;
|
||||
private Panel panelYellow;
|
||||
private Panel panelBlack;
|
||||
private Panel panelBlue;
|
||||
private Panel panelGray;
|
||||
private Panel panelGreen;
|
||||
private Panel panelWhite;
|
||||
private Panel panelRed;
|
||||
private CheckBox checkBoxSeifBatteries;
|
||||
private CheckBox checkBoxOtval;
|
||||
private NumericUpDown numericUpDownWeight;
|
||||
private NumericUpDown numericUpDownSpeed;
|
||||
private Label label2;
|
||||
private Label label1;
|
||||
private Panel panelColor;
|
||||
private Label labelDopColor;
|
||||
private Label labelBaseColor;
|
||||
private PictureBox pictureBoxObject;
|
||||
private Button ButtonOk;
|
||||
private Button buttonCancel;
|
||||
}
|
||||
}
|
144
Bulldoser/Bulldoser/FormBulldoserConfig.cs
Normal file
144
Bulldoser/Bulldoser/FormBulldoserConfig.cs
Normal file
@ -0,0 +1,144 @@
|
||||
using Bulldoser.Drawings;
|
||||
using Bulldoser.Entities;
|
||||
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 FormBulldoserConfig : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Переменная-выбранная установка
|
||||
/// </summary>
|
||||
DrawingTractor? _bulldozer = null;
|
||||
/// <summary>
|
||||
/// Событие
|
||||
/// </summary>
|
||||
private event Action<DrawingTractor> EventAddBulldozer;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public FormBulldoserConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
panelBlack.MouseDown += panelColor_MouseDown;
|
||||
panelPurple.MouseDown += panelColor_MouseDown;
|
||||
panelGray.MouseDown += panelColor_MouseDown;
|
||||
panelGreen.MouseDown += panelColor_MouseDown;
|
||||
panelRed.MouseDown += panelColor_MouseDown;
|
||||
panelWhite.MouseDown += panelColor_MouseDown;
|
||||
panelYellow.MouseDown += panelColor_MouseDown;
|
||||
panelBlue.MouseDown += panelColor_MouseDown;
|
||||
// TODO buttonCancel.Click with lambda
|
||||
buttonCancel.Click += (sender, e) => Close();
|
||||
}
|
||||
private void DrawBulldozer()
|
||||
{
|
||||
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
_bulldozer?.SetPosition(5, 5);
|
||||
_bulldozer?.DrawTransport(gr);
|
||||
pictureBoxObject.Image = bmp;
|
||||
}
|
||||
public void AddEvent(Action<DrawingTractor> ev)
|
||||
{
|
||||
if (EventAddBulldozer == null)
|
||||
{
|
||||
EventAddBulldozer = new Action<DrawingTractor>(ev);
|
||||
}
|
||||
else
|
||||
{
|
||||
EventAddBulldozer += ev;
|
||||
}
|
||||
}
|
||||
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
(sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
}
|
||||
private void PanelObject_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
private void panelColor_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
(sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
}
|
||||
private void PanelObject_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
switch (e.Data?.GetData(DataFormats.Text).ToString())
|
||||
{
|
||||
case "labelModifiedObject":
|
||||
_bulldozer = new DrawingBulldoser((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, Color.Black, checkBoxSeifBatteries.Checked,
|
||||
checkBoxOtval.Checked, pictureBoxObject.Width, pictureBoxObject.Height);
|
||||
break;
|
||||
case "labelSimpleObject":
|
||||
_bulldozer = new DrawingTractor((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width,
|
||||
pictureBoxObject.Height);
|
||||
break;
|
||||
}
|
||||
DrawBulldozer();
|
||||
}
|
||||
private void LabelBaseColor_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_bulldozer != null)
|
||||
{
|
||||
if (e.Data.GetDataPresent(typeof(Color)))
|
||||
{
|
||||
_bulldozer.EntityTractor.BodyColor = (Color)e.Data.GetData(typeof(Color));
|
||||
|
||||
}
|
||||
DrawBulldozer();
|
||||
}
|
||||
}
|
||||
private void LabelColor_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_bulldozer != null && _bulldozer.EntityTractor is EntityBulldoser entitybulldoser)
|
||||
{
|
||||
labelDopColor.AllowDrop = true;
|
||||
}
|
||||
else
|
||||
labelDopColor.AllowDrop = false;
|
||||
|
||||
if (e.Data.GetDataPresent(typeof(Color)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
|
||||
private void LabelDopColor_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_bulldozer != null && _bulldozer.EntityTractor is EntityBulldoser entitybulldoser)
|
||||
{
|
||||
if (e.Data.GetDataPresent(typeof(Color)))
|
||||
{
|
||||
entitybulldoser.AdditionalColor = (Color)e.Data.GetData(typeof(Color));
|
||||
|
||||
}
|
||||
DrawBulldozer();
|
||||
}
|
||||
}
|
||||
private void ButtonOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
EventAddBulldozer?.Invoke(_bulldozer);
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
120
Bulldoser/Bulldoser/FormBulldoserConfig.resx
Normal file
120
Bulldoser/Bulldoser/FormBulldoserConfig.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
95
Bulldoser/Bulldoser/Generic/BulldoserGenericCollection.cs
Normal file
95
Bulldoser/Bulldoser/Generic/BulldoserGenericCollection.cs
Normal file
@ -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<T, U> 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<T> _collection;
|
||||
public TractorGenericCollection(int picWidth, int picHeight)
|
||||
{
|
||||
|
||||
// высчитываем размер массива для setgeneric
|
||||
int width = picWidth / _placeSizeWidth;
|
||||
int height = picHeight / _placeSizeHeight;
|
||||
_pictureWidth = picWidth;
|
||||
_pictureHeight = picHeight;
|
||||
_collection = new SetGeneric<T>(width * height);
|
||||
}
|
||||
/// Перегрузка оператора сложения
|
||||
public static int operator +(TractorGenericCollection<T, U> collect, T tract)
|
||||
{
|
||||
if (tract == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return collect._collection.Insert(tract);
|
||||
}
|
||||
public static T? operator -(TractorGenericCollection<T, U> collect, int
|
||||
pos)
|
||||
{
|
||||
T obj = collect._collection[pos];
|
||||
if (obj != null)
|
||||
{
|
||||
return collect._collection.Remove(pos);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
// получение объекта imoveableObj
|
||||
public U? GetU(int pos)
|
||||
{
|
||||
return (U?)_collection[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 width = _pictureWidth / _placeSizeWidth;
|
||||
int height = _pictureHeight / _placeSizeHeight;
|
||||
for (int i = 0; i < _collection.Count; i++)
|
||||
{
|
||||
// Получение объекта
|
||||
var obj = _collection[i];
|
||||
// Установка позиции
|
||||
obj?.SetPosition(
|
||||
(int)((width - 1) * _placeSizeWidth - (i % width * _placeSizeWidth)),
|
||||
(int)((height - 1) * _placeSizeHeight - (i / width * _placeSizeHeight))
|
||||
);
|
||||
// Прорисовка объекта
|
||||
obj?.DrawTransport(g);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
67
Bulldoser/Bulldoser/Generic/SetGeneric.cs
Normal file
67
Bulldoser/Bulldoser/Generic/SetGeneric.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.Generic
|
||||
{
|
||||
internal class SetGeneric<T> where T : class
|
||||
{
|
||||
private readonly List<T?> _places;
|
||||
public int Count => _places.Count;
|
||||
private readonly int _maxCount;
|
||||
public SetGeneric(int count)
|
||||
{
|
||||
_places = new List<T?>(count);
|
||||
_maxCount = count;
|
||||
}
|
||||
public int Insert(T tract)
|
||||
{
|
||||
return Insert(tract, 0);
|
||||
}
|
||||
public int Insert(T tract, int position)
|
||||
{
|
||||
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];
|
||||
_places[position] = null;
|
||||
return tmp;
|
||||
}
|
||||
//Получение объекта из набора по позиции
|
||||
public T? this[int 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
Bulldoser/Bulldoser/Generic/TractorGenericStorage.cs
Normal file
47
Bulldoser/Bulldoser/Generic/TractorGenericStorage.cs
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
using Bulldoser.Drawings;
|
||||
using Bulldoser.Generic;
|
||||
using Bulldoser.MovementStrategy;
|
||||
|
||||
namespace Bulldozer.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
137
Bulldoser/Bulldoser/MovementStrategy/AbstractStrategy.cs
Normal file
137
Bulldoser/Bulldoser/MovementStrategy/AbstractStrategy.cs
Normal file
@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public abstract class AbstractStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Перемещаемый объект
|
||||
/// </summary>
|
||||
private IMoveableObject? _moveableObject;
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
private Status _state = Status.NotInit;
|
||||
/// <summary>
|
||||
/// Ширина поля
|
||||
/// </summary>
|
||||
protected int FieldWidth { get; private set; }
|
||||
/// <summary>
|
||||
/// Высота поля
|
||||
/// </summary>
|
||||
protected int FieldHeight { get; private set; }
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
public Status GetStatus() { return _state; }
|
||||
/// <summary>
|
||||
/// Установка данных
|
||||
/// </summary>
|
||||
/// <param name="moveableObject">Перемещаемый объект</param>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
public void SetData(IMoveableObject moveableObject, int width, int
|
||||
height)
|
||||
{
|
||||
if (moveableObject == null)
|
||||
{
|
||||
_state = Status.NotInit;
|
||||
return;
|
||||
}
|
||||
_state = Status.InProgress;
|
||||
_moveableObject = moveableObject;
|
||||
FieldWidth = width;
|
||||
FieldHeight = height;
|
||||
}
|
||||
/// <summary>
|
||||
/// Шаг перемещения
|
||||
/// </summary>
|
||||
public void MakeStep()
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (IsTargetDestinaion())
|
||||
{
|
||||
_state = Status.Finish;
|
||||
return;
|
||||
}
|
||||
MoveToTarget();
|
||||
}
|
||||
/// <summary>
|
||||
/// Перемещение влево
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться, false -
|
||||
///неудача)</returns>
|
||||
protected bool MoveLeft() => MoveTo(Direction.Left);
|
||||
/// <summary>
|
||||
/// Перемещение вправо
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться,
|
||||
///false - неудача)</returns>
|
||||
protected bool MoveRight() => MoveTo(Direction.Right);
|
||||
/// <summary>
|
||||
/// Перемещение вверх
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться,
|
||||
///false - неудача)</returns>
|
||||
protected bool MoveUp() => MoveTo(Direction.Up);
|
||||
/// <summary>
|
||||
/// Перемещение вниз
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться,
|
||||
///false - неудача)</returns>
|
||||
protected bool MoveDown() => MoveTo(Direction.Down);
|
||||
/// <summary>
|
||||
/// Параметры объекта
|
||||
/// </summary>
|
||||
protected ObjectParameters? GetObjectParameters =>
|
||||
_moveableObject?.GetObjectPosition;
|
||||
/// <summary>
|
||||
/// Шаг объекта
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected int? GetStep()
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _moveableObject?.GetStep;
|
||||
}
|
||||
/// <summary>
|
||||
/// Перемещение к цели
|
||||
/// </summary>
|
||||
protected abstract void MoveToTarget();
|
||||
/// <summary>
|
||||
/// Достигнута ли цель
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected abstract bool IsTargetDestinaion();
|
||||
/// <summary>
|
||||
/// Попытка перемещения в требуемом направлении
|
||||
/// </summary>
|
||||
/// <param name="Direction">Направление</param>
|
||||
/// <returns>Результат попытки (true - удалось переместиться, false -
|
||||
///неудача)</returns>
|
||||
private bool MoveTo(Direction Direction)
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (_moveableObject?.CheckCanMove(Direction) ?? false)
|
||||
{
|
||||
_moveableObject.MoveObject(Direction);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
34
Bulldoser/Bulldoser/MovementStrategy/DrawingObjectTractor.cs
Normal file
34
Bulldoser/Bulldoser/MovementStrategy/DrawingObjectTractor.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using Bulldoser.Drawings;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public class DrawingObjectTractor : IMoveableObject
|
||||
{
|
||||
private readonly DrawingTractor? _drawningTractor = null;
|
||||
|
||||
public DrawingObjectTractor(DrawingTractor drawningTractor)
|
||||
{
|
||||
_drawningTractor = drawningTractor;
|
||||
}
|
||||
public ObjectParameters? GetObjectPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_drawningTractor == null || _drawningTractor.EntityTractor == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new ObjectParameters(_drawningTractor.GetPosX,
|
||||
_drawningTractor.GetPosY, _drawningTractor.GetWidth, _drawningTractor.GetHeight);
|
||||
}
|
||||
}
|
||||
public int GetStep => (int)(_drawningTractor?.EntityTractor?.Step ?? 0);
|
||||
public bool CheckCanMove(Direction direction) => _drawningTractor?.CanMove(direction) ?? false;
|
||||
public void MoveObject(Direction direction) => _drawningTractor?.MoveTransport(direction);
|
||||
}
|
||||
}
|
18
Bulldoser/Bulldoser/MovementStrategy/IMovebleObject.cs
Normal file
18
Bulldoser/Bulldoser/MovementStrategy/IMovebleObject.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public interface IMoveableObject
|
||||
{
|
||||
ObjectParameters? GetObjectPosition { get; }
|
||||
|
||||
int GetStep { get; }
|
||||
|
||||
bool CheckCanMove(Direction direction);
|
||||
void MoveObject(Direction direction);
|
||||
}
|
||||
}
|
51
Bulldoser/Bulldoser/MovementStrategy/MoveToCenter.cs
Normal file
51
Bulldoser/Bulldoser/MovementStrategy/MoveToCenter.cs
Normal file
@ -0,0 +1,51 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public class MoveToCenter : AbstractStrategy
|
||||
{
|
||||
protected override bool IsTargetDestinaion()
|
||||
{
|
||||
var objParams = GetObjectParameters;
|
||||
if (objParams == null) return false;
|
||||
|
||||
return objParams.ObjectMiddleHorizontal <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal
|
||||
+ GetStep() >= FieldWidth / 2 && objParams.ObjectMiddleVertical <= FieldHeight / 2 &&
|
||||
objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2;
|
||||
}
|
||||
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
var objParams = GetObjectParameters;
|
||||
if (objParams == null) return;
|
||||
var diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2;
|
||||
if (Math.Abs(diffX) > GetStep())
|
||||
{
|
||||
if (diffX > 0)
|
||||
{
|
||||
MoveLeft();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveRight();
|
||||
}
|
||||
}
|
||||
var diffY = objParams.ObjectMiddleVertical - FieldHeight / 2;
|
||||
if (Math.Abs(diffY) > GetStep())
|
||||
{
|
||||
if (diffY > 0)
|
||||
{
|
||||
MoveUp();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
29
Bulldoser/Bulldoser/MovementStrategy/MoveToRightCorner.cs
Normal file
29
Bulldoser/Bulldoser/MovementStrategy/MoveToRightCorner.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public class MoveToRightCorner : AbstractStrategy
|
||||
{
|
||||
protected override bool IsTargetDestinaion()
|
||||
{
|
||||
var objParams = GetObjectParameters;
|
||||
if (objParams == null) return false;
|
||||
|
||||
return objParams.RightBorder >= FieldWidth - GetStep() && objParams.DownBorder >= FieldHeight - GetStep();
|
||||
}
|
||||
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
var objParams = GetObjectParameters;
|
||||
if (objParams == null) return;
|
||||
|
||||
if (objParams.RightBorder < FieldWidth - GetStep()) MoveRight();
|
||||
if (objParams.DownBorder < FieldHeight - GetStep()) MoveDown();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
55
Bulldoser/Bulldoser/MovementStrategy/ObjectParametres.cs
Normal file
55
Bulldoser/Bulldoser/MovementStrategy/ObjectParametres.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
public class ObjectParameters
|
||||
{
|
||||
private readonly int _x;
|
||||
private readonly int _y;
|
||||
private readonly int _width;
|
||||
private readonly int _height;
|
||||
/// <summary>
|
||||
/// Левая граница
|
||||
/// </summary>
|
||||
public int LeftBorder => _x;
|
||||
/// <summary>
|
||||
/// Верхняя граница
|
||||
/// </summary>
|
||||
public int TopBorder => _y;
|
||||
/// <summary>
|
||||
/// Правая граница
|
||||
/// </summary>
|
||||
public int RightBorder => _x + _width;
|
||||
/// <summary>
|
||||
/// Нижняя граница
|
||||
/// </summary>
|
||||
public int DownBorder => _y + _height;
|
||||
/// <summary>
|
||||
/// Середина объекта
|
||||
/// </summary>
|
||||
public int ObjectMiddleHorizontal => _x + _width / 2;
|
||||
/// <summary>
|
||||
/// Середина объекта
|
||||
/// </summary>
|
||||
public int ObjectMiddleVertical => _y + _height / 2;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X</param>
|
||||
/// <param name="y">Координата Y</param>
|
||||
/// <param name="width">Ширина</param>
|
||||
/// <param name="height">Высота</param>
|
||||
public ObjectParameters(int x, int y, int width, int height)
|
||||
{
|
||||
_x = x;
|
||||
_y = y;
|
||||
_width = width;
|
||||
_height = height;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
63
Bulldoser/Bulldoser/Properties/Resources.Designer.cs
generated
Normal file
63
Bulldoser/Bulldoser/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Bulldoser.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||
/// </summary>
|
||||
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||
// с помощью такого средства, как ResGen или Visual Studio.
|
||||
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||
// с параметром /str или перестройте свой проект VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Bulldoser.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
120
Bulldoser/Bulldoser/Properties/Resources.resx
Normal file
120
Bulldoser/Bulldoser/Properties/Resources.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
19
Bulldoser/Bulldoser/Status.cs
Normal file
19
Bulldoser/Bulldoser/Status.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bulldoser.MovementStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Статус выполнения операции перемещения
|
||||
/// </summary>
|
||||
public enum Status
|
||||
{
|
||||
NotInit,
|
||||
InProgress,
|
||||
Finish
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user