4 Commits
Laba2 ... Laba6

Author SHA1 Message Date
1778910e97 laba6 2023-12-02 19:33:16 +04:00
9c6850737b laba5 2023-12-02 19:04:07 +04:00
fc2676cfef laba4 2023-12-02 18:19:14 +04:00
5a00ca2c70 laba3 2023-12-02 16:43:36 +04:00
22 changed files with 1771 additions and 95 deletions

View File

@@ -0,0 +1,99 @@
using RPP.DrawningObjects;
using RPP.MovementStrategy;
namespace RPP.Generics
{
public class AirbusGenericCollection<T, U>
where T : DrawningAirbus
where U : IMoveableObject
{
private readonly int _pictureWidth;
private readonly int _pictureHeight;
private readonly int _placeSizeWidth = 220;
private readonly int _placeSizeHeight = 120;
private readonly SetGeneric<T> _collection;
public IEnumerable<T?> GetAirbus => _collection.GetAirbus();
public AirbusGenericCollection(int picWidth, int picHeight)
{
int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight;
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_collection = new SetGeneric<T>(width * height);
}
public static bool operator +(AirbusGenericCollection<T, U> collect, T? obj)
{
if (obj == null)
{
return false;
}
return (bool)collect?._collection.Insert(obj);
}
public static T? operator -(AirbusGenericCollection<T, U> collect, int
pos)
{
T? obj = collect._collection[pos];
if (obj != null)
{
collect._collection.Remove(pos);
}
return obj;
}
public U? GetU(int pos)
{
return (U?)_collection[pos]?.GetMoveableObject;
}
public Bitmap ShowCars()
{
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 / 2, 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;
int i = 0;
foreach (var airbus in _collection.GetAirbus())
{
if (airbus != null)
{
airbus.SetPosition((width - 1 - (i % width)) * _placeSizeWidth + 12, (height - 1 - (i / width)) * _placeSizeHeight + 10);
airbus.DrawTransport(g);
}
i++;
}
}
}
}

View File

@@ -0,0 +1,132 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RPP.MovementStrategy;
using RPP.DrawningObjects;
namespace RPP.Generics
{
internal class AirbusGenericStorage
{
readonly Dictionary<string, AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus>> _airbusStorages;
public List<string> Keys => _airbusStorages.Keys.ToList();
private readonly int _pictureWidth;
private readonly int _pictureHeight;
private static readonly char _separatorForKeyValue = '|';
private readonly char _separatorRecords = ';';
private static readonly char _separatorForObject = ':';
public AirbusGenericStorage(int pictureWidth, int pictureHeight)
{
_airbusStorages = new Dictionary<string,
AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
public void AddSet(string name)
{
// TODO Прописать логику для добавления
if (_airbusStorages.ContainsKey(name)) return;
_airbusStorages[name] = new AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus>(_pictureWidth, _pictureHeight);
}
public void DelSet(string name)
{
// TODO Прописать логику для удаления
if (!_airbusStorages.ContainsKey(name)) return;
_airbusStorages.Remove(name);
}
public AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus>?
this[string ind]
{
get
{
// TODO Продумать логику получения набора
if(_airbusStorages.ContainsKey(ind)) return _airbusStorages[ind];
return null;
}
}
public bool SaveData(string filename)
{
if (File.Exists(filename))
{
File.Delete(filename);
}
StringBuilder data = new();
foreach (KeyValuePair<string, AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus>> record in _airbusStorages)
{
StringBuilder records = new();
foreach (DrawningAirbus? elem in record.Value.GetAirbus)
{
records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
}
data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
}
if (data.Length == 0)
{
return false;
}
using (StreamWriter writer = new StreamWriter(filename))
{
writer.WriteLine("AirbusStorage");
writer.Write(data.ToString());
return true;
}
}
public bool LoadData(string filename)
{
if (!File.Exists(filename))
{
return false;
}
using (StreamReader reader = new StreamReader(filename))
{
string checker = reader.ReadLine();
if (checker == null)
return false;
if (!checker.StartsWith("AirbusStorage"))
return false;
_airbusStorages.Clear();
string strs;
bool firstinit = true;
while ((strs = reader.ReadLine()) != null)
{
if (strs == null && firstinit)
return false;
if (strs == null)
break;
firstinit = false;
string name = strs.Split('|')[0];
AirbusGenericCollection<DrawningAirbus, DrawningObjectAirbus> collection = new(_pictureWidth, _pictureHeight);
foreach (string data in strs.Split('|')[1].Split(';'))
{
DrawningAirbus? car =
data?.CreateDrawningAirbus(_separatorForObject, _pictureWidth, _pictureHeight);
if (car != null)
{
if (!(collection + car))
{
return false;
}
}
}
_airbusStorages.Add(name, collection);
}
return true;
}
}
}
}

View File

@@ -1,16 +1,14 @@
using System; using RPP.Entities;
using System.Collections.Generic; using RPP.MovementStrategy;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RPP.Entities;
namespace RPP.DrawningObjects namespace RPP.DrawningObjects
{ {
public class DrawningAirbus public class DrawningAirbus
{ {
public EntityAirbus? EntityAirbus { get; protected set; } public EntityAirbus? _EntityAirbus { get; protected set; }
private int _pictureWidth; private int _pictureWidth;
@@ -23,6 +21,7 @@ namespace RPP.DrawningObjects
private readonly int _AirbusWidth = 200; private readonly int _AirbusWidth = 200;
private readonly int _AirbusHeight = 100; private readonly int _AirbusHeight = 100;
public int GetPosX => _startPosX; public int GetPosX => _startPosX;
public int GetPosY => _startPosY; public int GetPosY => _startPosY;
@@ -31,31 +30,30 @@ namespace RPP.DrawningObjects
public int GetHeight => _AirbusHeight; public int GetHeight => _AirbusHeight;
public virtual bool CanMove(Direction direction) public bool CanMove(Direction direction)
{ {
if (EntityAirbus == null) if (_EntityAirbus == null)
{ {
return false; return false;
} }
return direction switch return direction switch
{ {
Direction.Left => _startPosX - EntityAirbus.Step > 5, //влево
Direction.Up => _startPosY - EntityAirbus.Step > 0, Direction.Left => _startPosX - _EntityAirbus.Step > 5,
Direction.Right => _startPosX + EntityAirbus.Step + _AirbusWidth < _pictureWidth, //вверх
Direction.Down => _startPosY + EntityAirbus.Step + _AirbusHeight < _pictureHeight, Direction.Up => _startPosY - _EntityAirbus.Step > 0,
_ => false // вправо
Direction.Right => _startPosX + _EntityAirbus.Step + _AirbusWidth < _pictureWidth,
Direction.Down => _startPosY + _EntityAirbus.Step + _AirbusHeight < _pictureHeight
}; };
} }
public DrawningAirbus(int speed, double weight, Color bodyColor, int width, int height) public DrawningAirbus(int speed, double weight, Color bodyColor, int width, int height)
{ {
if (width < _AirbusWidth || height < _AirbusHeight)
{
return;
}
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = height; _pictureHeight = height;
EntityAirbus = new EntityAirbus(speed, weight, bodyColor); _EntityAirbus = new EntityAirbus(speed, weight, bodyColor);
} }
@@ -67,24 +65,23 @@ namespace RPP.DrawningObjects
_pictureHeight = height; _pictureHeight = height;
_AirbusWidth = airbusWidth; _AirbusWidth = airbusWidth;
_AirbusHeight = airbusHeight; _AirbusHeight = airbusHeight;
EntityAirbus = new EntityAirbus(speed, weight, bodyColor); _EntityAirbus = new EntityAirbus(speed, weight, bodyColor);
}
public void SetBodyColor(Color bodyColor)
{
_EntityAirbus.ChangeColor(bodyColor);
} }
public void SetPosition(int x, int y) public void SetPosition(int x, int y)
{ {
if (x > _pictureWidth || y > _pictureHeight || x < 0 || y < 0)
{
_startPosX = 0;
_startPosY = 0;
}
_startPosX = x; _startPosX = x;
_startPosY = y; _startPosY = y;
} }
public IMoveableObject GetMoveableObject => new DrawningObjectAirbus(this);
public void MoveTransport(Direction direction) public void MoveTransport(Direction direction)
{ {
if (!CanMove(direction) || EntityAirbus == null) if (!CanMove(direction) || _EntityAirbus == null)
{ {
return; return;
} }
@@ -92,43 +89,44 @@ namespace RPP.DrawningObjects
{ {
//влево //влево
case Direction.Left: case Direction.Left:
if (_startPosX - EntityAirbus.Step > 5) if (_startPosX - _EntityAirbus.Step > 5)
{ {
_startPosX -= (int)EntityAirbus.Step; _startPosX -= (int)_EntityAirbus.Step;
} }
break; break;
//вверх //вверх
case Direction.Up: case Direction.Up:
if (_startPosY - EntityAirbus.Step > 0) if (_startPosY - _EntityAirbus.Step > 0)
{ {
_startPosY -= (int)EntityAirbus.Step; _startPosY -= (int)_EntityAirbus.Step;
} }
break; break;
//вправо //вправо
case Direction.Right: case Direction.Right:
if (_startPosX + EntityAirbus.Step + _AirbusWidth < _pictureWidth) if (_startPosX + _EntityAirbus.Step + _AirbusWidth < _pictureWidth)
{ {
_startPosX += (int)EntityAirbus.Step; _startPosX += (int)_EntityAirbus.Step;
} }
break; break;
//вниз //вниз
case Direction.Down: case Direction.Down:
if (_startPosY + EntityAirbus.Step + _AirbusHeight < _pictureHeight) if (_startPosY + _EntityAirbus.Step + _AirbusHeight < _pictureHeight)
{ {
_startPosY += (int)EntityAirbus.Step; _startPosY += (int)_EntityAirbus.Step;
} }
break; break;
} }
} }
public virtual void DrawTransport(Graphics g) public virtual void DrawTransport(Graphics g)
{ {
if (EntityAirbus == null) if (_EntityAirbus == null)
{ {
return; return;
} }
Pen pen = new(Color.Black, 3); Pen pen = new(_EntityAirbus.BodyColor, 3);
Brush brush = new SolidBrush(Color.Black);
//Тело //Тело
g.DrawRectangle(pen, _startPosX + 5, _startPosY + 50, 170, 30); g.DrawRectangle(pen, _startPosX + 5, _startPosY + 50, 170, 30);
g.DrawPie(pen, _startPosX - 5, _startPosY + 50, 20, 30, 90, 180); g.DrawPie(pen, _startPosX - 5, _startPosY + 50, 20, 30, 90, 180);
@@ -139,7 +137,7 @@ namespace RPP.DrawningObjects
g.DrawLine(pen, _startPosX, _startPosY, _startPosX, _startPosY + 52); g.DrawLine(pen, _startPosX, _startPosY, _startPosX, _startPosY + 52);
//Заднее боковые крылья //Заднее боковые крылья
Pen bigPen = new Pen(Color.Black, 8); Pen bigPen = new Pen(_EntityAirbus.BodyColor, 8);
g.DrawPie(pen, _startPosX - 7, _startPosY + 45, 5, 10, 90, 180); g.DrawPie(pen, _startPosX - 7, _startPosY + 45, 5, 10, 90, 180);
g.DrawLine(bigPen, _startPosX - 6, _startPosY + 48, _startPosX + 30, _startPosY + 48); g.DrawLine(bigPen, _startPosX - 6, _startPosY + 48, _startPosX + 30, _startPosY + 48);
g.DrawLine(bigPen, _startPosX - 6, _startPosY + 52, _startPosX + 30, _startPosY + 52); g.DrawLine(bigPen, _startPosX - 6, _startPosY + 52, _startPosX + 30, _startPosY + 52);
@@ -155,7 +153,6 @@ namespace RPP.DrawningObjects
g.DrawPie(pen, _startPosX + 139, _startPosY + 62, 5, 5, 180, 270); g.DrawPie(pen, _startPosX + 139, _startPosY + 62, 5, 5, 180, 270);
//Задние шасси //Задние шасси
g.DrawLine(pen, _startPosX + 55, _startPosY + 80, _startPosX + 55, _startPosY + 90); g.DrawLine(pen, _startPosX + 55, _startPosY + 80, _startPosX + 55, _startPosY + 90);
Pen tallpen = new(Color.Black, 2);
g.DrawEllipse(pen, _startPosX + 47, _startPosY + 90, 5, 5); g.DrawEllipse(pen, _startPosX + 47, _startPosY + 90, 5, 5);
g.DrawEllipse(pen, _startPosX + 57, _startPosY + 90, 5, 5); g.DrawEllipse(pen, _startPosX + 57, _startPosY + 90, 5, 5);
//Передние шасси //Передние шасси
@@ -163,6 +160,7 @@ namespace RPP.DrawningObjects
g.DrawEllipse(pen, _startPosX + 163, _startPosY + 91, 5, 5); g.DrawEllipse(pen, _startPosX + 163, _startPosY + 91, 5, 5);
} }
} }
} }

View File

@@ -14,16 +14,19 @@ namespace RPP.DrawningObjects
additionalColor, bool compartment, bool engine, int width, int height) : additionalColor, bool compartment, bool engine, int width, int height) :
base(speed, weight, bodyColor, width, height, 200, 100) base(speed, weight, bodyColor, width, height, 200, 100)
{ {
if (EntityAirbus != null) if (_EntityAirbus != null)
{ {
EntityAirbus = new EntityFlyAirbus(speed, weight, bodyColor, _EntityAirbus = new EntityFlyAirbus(speed, weight, bodyColor,
additionalColor, compartment, engine); additionalColor, compartment, engine);
} }
} }
public void SetAdditionalColor(Color additionalColor)
{
(_EntityAirbus as EntityFlyAirbus).ChangedAddColor(additionalColor);
}
public override void DrawTransport(Graphics g) public override void DrawTransport(Graphics g)
{ {
if (EntityAirbus is not EntityFlyAirbus FlyAirbus) if (_EntityAirbus is not EntityFlyAirbus FlyAirbus)
{ {
return; return;
} }

View File

@@ -18,7 +18,7 @@ namespace RPP.MovementStrategy
{ {
get get
{ {
if (_drawningAirbus == null || _drawningAirbus.EntityAirbus == null) if (_drawningAirbus == null || _drawningAirbus._EntityAirbus == null)
{ {
return null; return null;
} }
@@ -26,7 +26,7 @@ namespace RPP.MovementStrategy
_drawningAirbus.GetPosY, _drawningAirbus.GetWidth, _drawningAirbus.GetHeight); _drawningAirbus.GetPosY, _drawningAirbus.GetWidth, _drawningAirbus.GetHeight);
} }
} }
public int GetStep => (int)(_drawningAirbus?.EntityAirbus?.Step ?? 0); public int GetStep => (int)(_drawningAirbus?._EntityAirbus?.Step ?? 0);
public bool CheckCanMove(Direction direction) => public bool CheckCanMove(Direction direction) =>
_drawningAirbus?.CanMove(direction) ?? false; _drawningAirbus?.CanMove(direction) ?? false;
public void MoveObject(Direction direction) => public void MoveObject(Direction direction) =>

View File

@@ -23,6 +23,9 @@ namespace RPP.Entities
Weight = weight; Weight = weight;
BodyColor = bodyColor; BodyColor = bodyColor;
} }
public void ChangeColor(Color color)
{
BodyColor = color;
}
} }
} }

View File

@@ -22,5 +22,9 @@ namespace RPP.Entities
Compartment = compartment; Compartment = compartment;
Engine = engine; Engine = engine;
} }
public void ChangedAddColor(Color color)
{
AdditionalColor = color;
}
} }
} }

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RPP.Entities;
namespace RPP.DrawningObjects
{
public static class ExtentionDrawningAirbus
{
public static DrawningAirbus? CreateDrawningAirbus(this string info, char
separatorForObject, int width, int height)
{
string[] strs = info.Split(separatorForObject);
if (strs.Length == 3)
{
return new DrawningAirbus(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]), width, height);
}
if (strs.Length == 6)
{
return new DrawningFlyAirbus(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]),
Color.FromName(strs[2]),
Color.FromName(strs[3]),
Convert.ToBoolean(strs[4]),
Convert.ToBoolean(strs[5]), width, height);
}
return null;
}
public static string GetDataForSave(this DrawningAirbus drawningAirbus,
char separatorForObject)
{
var plane = drawningAirbus._EntityAirbus;
if (plane == null)
{
return string.Empty;
}
var str =
$"{plane.Speed}{separatorForObject}{plane.Weight}{separatorForObject}{plane.BodyColor.Name}";
if (plane is not EntityFlyAirbus FlyAirbus)
{
return str;
}
return
$"{str}{separatorForObject}{FlyAirbus.AdditionalColor.Name}{separatorForObject}{FlyAirbus.Compartment}{separatorForObject}{FlyAirbus.Engine}";
}
}
}

View File

@@ -37,6 +37,7 @@
comboBoxStrategy = new ComboBox(); comboBoxStrategy = new ComboBox();
buttonCreateFlyAirbus = new Button(); buttonCreateFlyAirbus = new Button();
ButtonStep = new Button(); ButtonStep = new Button();
ButtonSelectAirbus = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirbus).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirbus).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@@ -45,9 +46,8 @@
pictureBoxAirbus.BackColor = SystemColors.Window; pictureBoxAirbus.BackColor = SystemColors.Window;
pictureBoxAirbus.Dock = DockStyle.Fill; pictureBoxAirbus.Dock = DockStyle.Fill;
pictureBoxAirbus.Location = new Point(0, 0); pictureBoxAirbus.Location = new Point(0, 0);
pictureBoxAirbus.Margin = new Padding(3, 4, 3, 4);
pictureBoxAirbus.Name = "pictureBoxAirbus"; pictureBoxAirbus.Name = "pictureBoxAirbus";
pictureBoxAirbus.Size = new Size(982, 553); pictureBoxAirbus.Size = new Size(859, 415);
pictureBoxAirbus.SizeMode = PictureBoxSizeMode.AutoSize; pictureBoxAirbus.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBoxAirbus.TabIndex = 0; pictureBoxAirbus.TabIndex = 0;
pictureBoxAirbus.TabStop = false; pictureBoxAirbus.TabStop = false;
@@ -56,10 +56,9 @@
// buttonCreateAirbus // buttonCreateAirbus
// //
buttonCreateAirbus.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateAirbus.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreateAirbus.Location = new Point(224, 456); buttonCreateAirbus.Location = new Point(196, 342);
buttonCreateAirbus.Margin = new Padding(3, 4, 3, 4);
buttonCreateAirbus.Name = "buttonCreateAirbus"; buttonCreateAirbus.Name = "buttonCreateAirbus";
buttonCreateAirbus.Size = new Size(166, 80); buttonCreateAirbus.Size = new Size(145, 60);
buttonCreateAirbus.TabIndex = 1; buttonCreateAirbus.TabIndex = 1;
buttonCreateAirbus.Text = "Создать аэробус"; buttonCreateAirbus.Text = "Создать аэробус";
buttonCreateAirbus.UseVisualStyleBackColor = true; buttonCreateAirbus.UseVisualStyleBackColor = true;
@@ -70,10 +69,9 @@
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonDown.BackgroundImage = Properties.Resources.buttonDown; buttonDown.BackgroundImage = Properties.Resources.buttonDown;
buttonDown.BackgroundImageLayout = ImageLayout.Zoom; buttonDown.BackgroundImageLayout = ImageLayout.Zoom;
buttonDown.Location = new Point(883, 493); buttonDown.Location = new Point(773, 370);
buttonDown.Margin = new Padding(3, 4, 3, 4);
buttonDown.Name = "buttonDown"; buttonDown.Name = "buttonDown";
buttonDown.Size = new Size(30, 29); buttonDown.Size = new Size(26, 22);
buttonDown.TabIndex = 2; buttonDown.TabIndex = 2;
buttonDown.UseVisualStyleBackColor = true; buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += buttonMove_Click; buttonDown.Click += buttonMove_Click;
@@ -83,10 +81,9 @@
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonLeft.BackgroundImage = Properties.Resources.buttonLeft; buttonLeft.BackgroundImage = Properties.Resources.buttonLeft;
buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; buttonLeft.BackgroundImageLayout = ImageLayout.Zoom;
buttonLeft.Location = new Point(847, 493); buttonLeft.Location = new Point(741, 370);
buttonLeft.Margin = new Padding(3, 4, 3, 4);
buttonLeft.Name = "buttonLeft"; buttonLeft.Name = "buttonLeft";
buttonLeft.Size = new Size(30, 29); buttonLeft.Size = new Size(26, 22);
buttonLeft.TabIndex = 3; buttonLeft.TabIndex = 3;
buttonLeft.UseVisualStyleBackColor = true; buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click; buttonLeft.Click += buttonMove_Click;
@@ -96,10 +93,9 @@
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = Properties.Resources.buttonUp; buttonUp.BackgroundImage = Properties.Resources.buttonUp;
buttonUp.BackgroundImageLayout = ImageLayout.Zoom; buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
buttonUp.Location = new Point(883, 456); buttonUp.Location = new Point(773, 342);
buttonUp.Margin = new Padding(3, 4, 3, 4);
buttonUp.Name = "buttonUp"; buttonUp.Name = "buttonUp";
buttonUp.Size = new Size(30, 29); buttonUp.Size = new Size(26, 22);
buttonUp.TabIndex = 4; buttonUp.TabIndex = 4;
buttonUp.UseVisualStyleBackColor = true; buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += buttonMove_Click; buttonUp.Click += buttonMove_Click;
@@ -109,10 +105,9 @@
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonRight.BackgroundImage = Properties.Resources.buttonRight; buttonRight.BackgroundImage = Properties.Resources.buttonRight;
buttonRight.BackgroundImageLayout = ImageLayout.Zoom; buttonRight.BackgroundImageLayout = ImageLayout.Zoom;
buttonRight.Location = new Point(919, 493); buttonRight.Location = new Point(804, 370);
buttonRight.Margin = new Padding(3, 4, 3, 4);
buttonRight.Name = "buttonRight"; buttonRight.Name = "buttonRight";
buttonRight.Size = new Size(30, 29); buttonRight.Size = new Size(26, 22);
buttonRight.TabIndex = 5; buttonRight.TabIndex = 5;
buttonRight.UseVisualStyleBackColor = true; buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += buttonMove_Click; buttonRight.Click += buttonMove_Click;
@@ -121,19 +116,17 @@
// //
comboBoxStrategy.FormattingEnabled = true; comboBoxStrategy.FormattingEnabled = true;
comboBoxStrategy.Items.AddRange(new object[] { "0", "1" }); comboBoxStrategy.Items.AddRange(new object[] { "0", "1" });
comboBoxStrategy.Location = new Point(830, 28); comboBoxStrategy.Location = new Point(726, 21);
comboBoxStrategy.Margin = new Padding(3, 4, 3, 4);
comboBoxStrategy.Name = "comboBoxStrategy"; comboBoxStrategy.Name = "comboBoxStrategy";
comboBoxStrategy.Size = new Size(138, 28); comboBoxStrategy.Size = new Size(121, 23);
comboBoxStrategy.TabIndex = 6; comboBoxStrategy.TabIndex = 6;
comboBoxStrategy.SelectedIndexChanged += comboBoxStrategy_SelectedIndexChanged; comboBoxStrategy.SelectedIndexChanged += comboBoxStrategy_SelectedIndexChanged;
// //
// buttonCreateFlyAirbus // buttonCreateFlyAirbus
// //
buttonCreateFlyAirbus.Location = new Point(38, 456); buttonCreateFlyAirbus.Location = new Point(33, 342);
buttonCreateFlyAirbus.Margin = new Padding(3, 4, 3, 4);
buttonCreateFlyAirbus.Name = "buttonCreateFlyAirbus"; buttonCreateFlyAirbus.Name = "buttonCreateFlyAirbus";
buttonCreateFlyAirbus.Size = new Size(166, 80); buttonCreateFlyAirbus.Size = new Size(145, 60);
buttonCreateFlyAirbus.TabIndex = 7; buttonCreateFlyAirbus.TabIndex = 7;
buttonCreateFlyAirbus.Text = "Создать пассажирский аэробус"; buttonCreateFlyAirbus.Text = "Создать пассажирский аэробус";
buttonCreateFlyAirbus.UseVisualStyleBackColor = true; buttonCreateFlyAirbus.UseVisualStyleBackColor = true;
@@ -141,20 +134,30 @@
// //
// ButtonStep // ButtonStep
// //
ButtonStep.Location = new Point(882, 79); ButtonStep.Location = new Point(772, 59);
ButtonStep.Margin = new Padding(3, 4, 3, 4);
ButtonStep.Name = "ButtonStep"; ButtonStep.Name = "ButtonStep";
ButtonStep.Size = new Size(86, 31); ButtonStep.Size = new Size(75, 23);
ButtonStep.TabIndex = 8; ButtonStep.TabIndex = 8;
ButtonStep.Text = "Шаг"; ButtonStep.Text = "Шаг";
ButtonStep.UseVisualStyleBackColor = true; ButtonStep.UseVisualStyleBackColor = true;
ButtonStep.Click += ButtonStep_Click; ButtonStep.Click += ButtonStep_Click;
// //
// ButtonSelectAirbus
//
ButtonSelectAirbus.Location = new Point(357, 342);
ButtonSelectAirbus.Name = "ButtonSelectAirbus";
ButtonSelectAirbus.Size = new Size(145, 61);
ButtonSelectAirbus.TabIndex = 9;
ButtonSelectAirbus.Text = "Смена самолета";
ButtonSelectAirbus.UseVisualStyleBackColor = true;
ButtonSelectAirbus.Click += ButtonSelectAirbus_Click;
//
// FormAirbus // FormAirbus
// //
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(982, 553); ClientSize = new Size(859, 415);
Controls.Add(ButtonSelectAirbus);
Controls.Add(ButtonStep); Controls.Add(ButtonStep);
Controls.Add(buttonCreateFlyAirbus); Controls.Add(buttonCreateFlyAirbus);
Controls.Add(comboBoxStrategy); Controls.Add(comboBoxStrategy);
@@ -164,7 +167,6 @@
Controls.Add(buttonDown); Controls.Add(buttonDown);
Controls.Add(buttonCreateAirbus); Controls.Add(buttonCreateAirbus);
Controls.Add(pictureBoxAirbus); Controls.Add(pictureBoxAirbus);
Margin = new Padding(3, 4, 3, 4);
Name = "FormAirbus"; Name = "FormAirbus";
Text = "Airbus"; Text = "Airbus";
Load += FormAirbus_Load; Load += FormAirbus_Load;
@@ -184,5 +186,6 @@
private ComboBox comboBoxStrategy; private ComboBox comboBoxStrategy;
private Button buttonCreateFlyAirbus; private Button buttonCreateFlyAirbus;
private Button ButtonStep; private Button ButtonStep;
private Button ButtonSelectAirbus;
} }
} }

View File

@@ -8,9 +8,12 @@ namespace RPP
{ {
private DrawningAirbus? _drawningAirbus; private DrawningAirbus? _drawningAirbus;
private AbstractStrategy? _abstractStrategy; private AbstractStrategy? _abstractStrategy;
public DrawningAirbus? SelectedAirbus { get; private set; }
public FormAirbus() public FormAirbus()
{ {
InitializeComponent(); InitializeComponent();
_abstractStrategy = null;
SelectedAirbus = null;
} }
private void Draw() private void Draw()
@@ -29,28 +32,38 @@ namespace RPP
private void buttonCreateFlyAirbus_Click(object sender, EventArgs e) private void buttonCreateFlyAirbus_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
Color MainColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
Color AdditionColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
MainColor = dialog.Color;
}
if (dialog.ShowDialog() == DialogResult.OK)
{
AdditionColor = dialog.Color;
}
_drawningAirbus = new DrawningFlyAirbus(random.Next(100, 300), _drawningAirbus = new DrawningFlyAirbus(random.Next(100, 300),
random.Next(1000, 3000), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), MainColor, AdditionColor,
random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256),
random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)),
pictureBoxAirbus.Width, pictureBoxAirbus.Height); pictureBoxAirbus.Width, pictureBoxAirbus.Height);
_drawningAirbus.SetPosition(random.Next(10, 100), random.Next(10, _drawningAirbus.SetPosition(random.Next(10, 100), random.Next(10,
100)); 100));
Draw(); Draw();
} }
private void ButtonCreateAirbus_Click(object sender, EventArgs e) private void ButtonCreateAirbus_Click(object sender, EventArgs e)
{ {
Random random = new(); Random random = new();
Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
_drawningAirbus = new DrawningAirbus(random.Next(100, 300), _drawningAirbus = new DrawningAirbus(random.Next(100, 300),
random.Next(1000, 3000), random.Next(1000, 3000), color,
Color.FromArgb(random.Next(0, 256), random.Next(0, 256),
random.Next(0, 256)),
pictureBoxAirbus.Width, pictureBoxAirbus.Height); pictureBoxAirbus.Width, pictureBoxAirbus.Height);
_drawningAirbus.SetPosition(random.Next(10, 100), random.Next(10, _drawningAirbus.SetPosition(random.Next(10, 100), random.Next(10,
100)); 100));
@@ -105,8 +118,7 @@ namespace RPP
{ {
return; return;
} }
_abstractStrategy.SetData(new _abstractStrategy.SetData(_drawningAirbus.GetMoveableObject, pictureBoxAirbus.Width,
DrawningObjectAirbus(_drawningAirbus), pictureBoxAirbus.Width,
pictureBoxAirbus.Height); pictureBoxAirbus.Height);
comboBoxStrategy.Enabled = false; comboBoxStrategy.Enabled = false;
} }
@@ -123,6 +135,12 @@ namespace RPP
} }
} }
private void ButtonSelectAirbus_Click(object sender, EventArgs e)
{
SelectedAirbus = _drawningAirbus;
DialogResult = DialogResult.OK;
}
private void pictureBoxAirbus_Click(object sender, EventArgs e) private void pictureBoxAirbus_Click(object sender, EventArgs e)
{ {

120
RPP/RPP/FormAirbus.resx Normal file
View 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>

281
RPP/RPP/FormAirbusCollection.Designer.cs generated Normal file
View File

@@ -0,0 +1,281 @@
namespace RPP
{
partial class FormAirbusCollection
{
/// <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()
{
panel1 = new Panel();
panel2 = new Panel();
buttonDelObject = new Button();
listBoxStorages = new ListBox();
buttonAddObject = new Button();
textBoxStorageName = new TextBox();
label2 = new Label();
label1 = new Label();
ButtonRefreshCollection = new Button();
ButtonRemoveAirbus = new Button();
maskedTextBoxNumber = new TextBox();
AddAirbusButton = new Button();
menuStrip = new MenuStrip();
menuToolStripMenuItem = new ToolStripMenuItem();
SaveToolStripMenuItem = new ToolStripMenuItem();
LoadToolStripMenuItem = new ToolStripMenuItem();
pictureBoxCollection = new PictureBox();
saveFileDialog = new SaveFileDialog();
openFileDialog = new OpenFileDialog();
panel1.SuspendLayout();
panel2.SuspendLayout();
menuStrip.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(panel2);
panel1.Controls.Add(ButtonRefreshCollection);
panel1.Controls.Add(ButtonRemoveAirbus);
panel1.Controls.Add(maskedTextBoxNumber);
panel1.Controls.Add(AddAirbusButton);
panel1.Controls.Add(menuStrip);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(682, 0);
panel1.Margin = new Padding(3, 4, 3, 4);
panel1.Name = "panel1";
panel1.Size = new Size(232, 600);
panel1.TabIndex = 0;
panel1.Paint += panel1_Paint;
//
// panel2
//
panel2.Controls.Add(buttonDelObject);
panel2.Controls.Add(listBoxStorages);
panel2.Controls.Add(buttonAddObject);
panel2.Controls.Add(textBoxStorageName);
panel2.Controls.Add(label2);
panel2.Controls.Add(label1);
panel2.Location = new Point(3, 36);
panel2.Margin = new Padding(3, 4, 3, 4);
panel2.Name = "panel2";
panel2.Size = new Size(219, 292);
panel2.TabIndex = 5;
panel2.Paint += panel2_Paint;
//
// buttonDelObject
//
buttonDelObject.Location = new Point(15, 240);
buttonDelObject.Margin = new Padding(3, 4, 3, 4);
buttonDelObject.Name = "buttonDelObject";
buttonDelObject.Size = new Size(197, 48);
buttonDelObject.TabIndex = 4;
buttonDelObject.Text = "Удалить набор";
buttonDelObject.UseVisualStyleBackColor = true;
buttonDelObject.Click += ButtonDelObject_Click;
//
// listBoxStorages
//
listBoxStorages.FormattingEnabled = true;
listBoxStorages.ItemHeight = 20;
listBoxStorages.Location = new Point(15, 127);
listBoxStorages.Margin = new Padding(3, 4, 3, 4);
listBoxStorages.Name = "listBoxStorages";
listBoxStorages.Size = new Size(196, 104);
listBoxStorages.TabIndex = 3;
listBoxStorages.SelectedIndexChanged += ListBoxObjects_SelectedIndexChanged;
//
// buttonAddObject
//
buttonAddObject.Location = new Point(15, 64);
buttonAddObject.Margin = new Padding(3, 4, 3, 4);
buttonAddObject.Name = "buttonAddObject";
buttonAddObject.Size = new Size(197, 55);
buttonAddObject.TabIndex = 2;
buttonAddObject.Text = "Добавить набор";
buttonAddObject.UseVisualStyleBackColor = true;
buttonAddObject.Click += ButtonAddObject_Click;
//
// textBoxStorageName
//
textBoxStorageName.Location = new Point(15, 25);
textBoxStorageName.Margin = new Padding(3, 4, 3, 4);
textBoxStorageName.Name = "textBoxStorageName";
textBoxStorageName.Size = new Size(196, 27);
textBoxStorageName.TabIndex = 1;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(17, 0);
label2.Name = "label2";
label2.Size = new Size(66, 20);
label2.TabIndex = 0;
label2.Text = "Наборы";
label2.Click += label2_Click;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(117, 1);
label1.Name = "label1";
label1.Size = new Size(0, 20);
label1.TabIndex = 0;
//
// ButtonRefreshCollection
//
ButtonRefreshCollection.Location = new Point(8, 531);
ButtonRefreshCollection.Margin = new Padding(3, 4, 3, 4);
ButtonRefreshCollection.Name = "ButtonRefreshCollection";
ButtonRefreshCollection.Size = new Size(217, 53);
ButtonRefreshCollection.TabIndex = 4;
ButtonRefreshCollection.Text = "Обновить коллекцию";
ButtonRefreshCollection.UseVisualStyleBackColor = true;
ButtonRefreshCollection.Click += ButtonRefreshCollection_Click;
//
// ButtonRemoveAirbus
//
ButtonRemoveAirbus.Location = new Point(6, 436);
ButtonRemoveAirbus.Margin = new Padding(3, 4, 3, 4);
ButtonRemoveAirbus.Name = "ButtonRemoveAirbus";
ButtonRemoveAirbus.Size = new Size(217, 53);
ButtonRemoveAirbus.TabIndex = 3;
ButtonRemoveAirbus.Text = "Удалить аэробус";
ButtonRemoveAirbus.UseVisualStyleBackColor = true;
ButtonRemoveAirbus.Click += ButtonRemoveAirbus_Click;
//
// maskedTextBoxNumber
//
maskedTextBoxNumber.Location = new Point(46, 397);
maskedTextBoxNumber.Margin = new Padding(3, 4, 3, 4);
maskedTextBoxNumber.Name = "maskedTextBoxNumber";
maskedTextBoxNumber.Size = new Size(111, 27);
maskedTextBoxNumber.TabIndex = 2;
//
// AddAirbusButton
//
AddAirbusButton.Location = new Point(6, 336);
AddAirbusButton.Margin = new Padding(3, 4, 3, 4);
AddAirbusButton.Name = "AddAirbusButton";
AddAirbusButton.Size = new Size(217, 53);
AddAirbusButton.TabIndex = 1;
AddAirbusButton.Text = "Добавить аэробус";
AddAirbusButton.UseVisualStyleBackColor = true;
AddAirbusButton.Click += AddAirbusButton_Click;
//
// menuStrip
//
menuStrip.ImageScalingSize = new Size(20, 20);
menuStrip.Items.AddRange(new ToolStripItem[] { menuToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Padding = new Padding(7, 3, 0, 3);
menuStrip.Size = new Size(232, 30);
menuStrip.TabIndex = 6;
menuStrip.Text = "menuStrip1";
//
// menuToolStripMenuItem
//
menuToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { SaveToolStripMenuItem, LoadToolStripMenuItem });
menuToolStripMenuItem.Name = "menuToolStripMenuItem";
menuToolStripMenuItem.Size = new Size(65, 24);
menuToolStripMenuItem.Text = "Меню";
//
// SaveToolStripMenuItem
//
SaveToolStripMenuItem.Name = "SaveToolStripMenuItem";
SaveToolStripMenuItem.Size = new Size(224, 26);
SaveToolStripMenuItem.Text = "Сохранить";
SaveToolStripMenuItem.Click += SaveToolStripMenuItem_Click;
//
// LoadToolStripMenuItem
//
LoadToolStripMenuItem.Name = "LoadToolStripMenuItem";
LoadToolStripMenuItem.Size = new Size(224, 26);
LoadToolStripMenuItem.Text = "Загрузить";
LoadToolStripMenuItem.Click += LoadToolStripMenuItem_Click;
//
// pictureBoxCollection
//
pictureBoxCollection.Dock = DockStyle.Fill;
pictureBoxCollection.Location = new Point(0, 0);
pictureBoxCollection.Margin = new Padding(3, 4, 3, 4);
pictureBoxCollection.Name = "pictureBoxCollection";
pictureBoxCollection.Size = new Size(682, 600);
pictureBoxCollection.TabIndex = 1;
pictureBoxCollection.TabStop = false;
//
// saveFileDialog
//
saveFileDialog.Filter = "txt file | *.txt";
//
// openFileDialog
//
openFileDialog.FileName = "openFileDialog1";
//
// FormAirbusCollection
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(914, 600);
Controls.Add(pictureBoxCollection);
Controls.Add(panel1);
MainMenuStrip = menuStrip;
Margin = new Padding(3, 4, 3, 4);
Name = "FormAirbusCollection";
Text = "FormFlyAirbus";
Load += FormFlyAirbus_Load;
panel1.ResumeLayout(false);
panel1.PerformLayout();
panel2.ResumeLayout(false);
panel2.PerformLayout();
menuStrip.ResumeLayout(false);
menuStrip.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
ResumeLayout(false);
}
#endregion
private Panel panel1;
private Button AddAirbusButton;
private Label label1;
private PictureBox pictureBoxCollection;
private Button ButtonRefreshCollection;
private Button ButtonRemoveAirbus;
private TextBox maskedTextBoxNumber;
private Panel panel2;
private Label label2;
private TextBox textBoxStorageName;
private ListBox listBoxStorages;
private Button buttonAddObject;
private Button buttonDelObject;
private MenuStrip menuStrip;
private SaveFileDialog saveFileDialog;
private OpenFileDialog openFileDialog;
private ToolStripMenuItem menuToolStripMenuItem;
private ToolStripMenuItem SaveToolStripMenuItem;
private ToolStripMenuItem LoadToolStripMenuItem;
}
}

View File

@@ -0,0 +1,195 @@
using RPP.DrawningObjects;
using RPP.Generics;
using System.Windows.Forms;
namespace RPP
{
public partial class FormAirbusCollection : Form
{
private readonly AirbusGenericStorage _storage;
public FormAirbusCollection()
{
InitializeComponent();
_storage = new AirbusGenericStorage(pictureBoxCollection.Width, pictureBoxCollection.Height);
}
private void FormFlyAirbus_Load(object sender, EventArgs e)
{
}
private void AddAirbus(DrawningAirbus Airbus)
{
if (listBoxStorages.SelectedIndex == -1)
{
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
return;
}
if (obj + Airbus)
{
MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = obj.ShowCars();
}
else
{
MessageBox.Show("Не удалось добавить объект");
}
}
private void AddAirbusButton_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
return;
}
var formAirbusConfig = new FormAirbusConfig();
formAirbusConfig.Show();
formAirbusConfig.AddEvent(AddAirbus);
}
private void ReloadObjects()
{
int index = listBoxStorages.SelectedIndex;
listBoxStorages.Items.Clear();
foreach (var key in _storage.Keys)
{
listBoxStorages.Items.Add(key);
}
if (listBoxStorages.Items.Count > 0 && (index == -1 || index
>= listBoxStorages.Items.Count))
{
listBoxStorages.SelectedIndex = 0;
}
else if (listBoxStorages.Items.Count > 0 && index > -1 &&
index < listBoxStorages.Items.Count)
{
listBoxStorages.SelectedIndex = index;
}
}
private void ButtonAddObject_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxStorageName.Text))
{
MessageBox.Show("Не все данные заполнены", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_storage.AddSet(textBoxStorageName.Text);
ReloadObjects();
}
private void ListBoxObjects_SelectedIndexChanged(object sender, EventArgs e)
{
pictureBoxCollection.Image = _storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowCars();
}
private void ButtonDelObject_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
return;
}
if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
_storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty);
ReloadObjects();
}
}
private void ButtonRemoveAirbus_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
return;
}
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
int pos = Convert.ToInt32(maskedTextBoxNumber.Text);
if (obj - pos != null)
{
MessageBox.Show("Объект удален");
pictureBoxCollection.Image = obj.ShowCars();
}
else
{
MessageBox.Show("Не удалось удалить объект");
}
}
private void ButtonRefreshCollection_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
return;
}
pictureBoxCollection.Image = obj.ShowCars();
}
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
if (_storage.SaveData(saveFileDialog.FileName))
{
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (_storage.LoadData(openFileDialog.FileName))
{
ReloadObjects();
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}

View File

@@ -0,0 +1,129 @@
<?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>
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>291, 17</value>
</metadata>
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>152, 17</value>
</metadata>
</root>

378
RPP/RPP/FormAirbusConfig.Designer.cs generated Normal file
View File

@@ -0,0 +1,378 @@
namespace RPP
{
partial class FormAirbusConfig
{
/// <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()
{
groupBoxParameters = new GroupBox();
labelFly = new Label();
labelBase = new Label();
groupBoxColor = new GroupBox();
panelPurple = new Panel();
panelBlack = new Panel();
panelGray = new Panel();
panelWhite = new Panel();
panelYellow = new Panel();
panelBlue = new Panel();
panelGreen = new Panel();
panelRed = new Panel();
checkBoxEngine = new CheckBox();
checkBoxCompartment = new CheckBox();
numericUpDownWeight = new NumericUpDown();
label2 = new Label();
numericUpDownSpeed = new NumericUpDown();
label1 = new Label();
panel9 = new Panel();
pictureBoxObject = new PictureBox();
labelAdditionalColor = new Label();
labelColor = new Label();
buttonAdd = new Button();
buttonCancel = new Button();
groupBoxParameters.SuspendLayout();
groupBoxColor.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
panel9.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
SuspendLayout();
//
// groupBoxParameters
//
groupBoxParameters.Controls.Add(labelFly);
groupBoxParameters.Controls.Add(labelBase);
groupBoxParameters.Controls.Add(groupBoxColor);
groupBoxParameters.Controls.Add(checkBoxEngine);
groupBoxParameters.Controls.Add(checkBoxCompartment);
groupBoxParameters.Controls.Add(numericUpDownWeight);
groupBoxParameters.Controls.Add(label2);
groupBoxParameters.Controls.Add(numericUpDownSpeed);
groupBoxParameters.Controls.Add(label1);
groupBoxParameters.Location = new Point(14, 16);
groupBoxParameters.Margin = new Padding(3, 4, 3, 4);
groupBoxParameters.Name = "groupBoxParameters";
groupBoxParameters.Padding = new Padding(3, 4, 3, 4);
groupBoxParameters.Size = new Size(627, 368);
groupBoxParameters.TabIndex = 0;
groupBoxParameters.TabStop = false;
groupBoxParameters.Text = "Параметры";
//
// labelFly
//
labelFly.BorderStyle = BorderStyle.FixedSingle;
labelFly.Location = new Point(446, 292);
labelFly.Name = "labelFly";
labelFly.Size = new Size(135, 47);
labelFly.TabIndex = 8;
labelFly.Text = "Продвинутый";
labelFly.TextAlign = ContentAlignment.MiddleCenter;
labelFly.MouseDown += LabelObject_MouseDown;
//
// labelBase
//
labelBase.BorderStyle = BorderStyle.FixedSingle;
labelBase.Location = new Point(291, 292);
labelBase.Name = "labelBase";
labelBase.Size = new Size(129, 47);
labelBase.TabIndex = 7;
labelBase.Text = "Простой";
labelBase.TextAlign = ContentAlignment.MiddleCenter;
labelBase.MouseDown += LabelObject_MouseDown;
//
// groupBoxColor
//
groupBoxColor.Controls.Add(panelPurple);
groupBoxColor.Controls.Add(panelBlack);
groupBoxColor.Controls.Add(panelGray);
groupBoxColor.Controls.Add(panelWhite);
groupBoxColor.Controls.Add(panelYellow);
groupBoxColor.Controls.Add(panelBlue);
groupBoxColor.Controls.Add(panelGreen);
groupBoxColor.Controls.Add(panelRed);
groupBoxColor.Location = new Point(272, 40);
groupBoxColor.Margin = new Padding(3, 4, 3, 4);
groupBoxColor.Name = "groupBoxColor";
groupBoxColor.Padding = new Padding(3, 4, 3, 4);
groupBoxColor.Size = new Size(327, 223);
groupBoxColor.TabIndex = 6;
groupBoxColor.TabStop = false;
groupBoxColor.Text = "Цвета";
//
// panelPurple
//
panelPurple.BackColor = Color.Purple;
panelPurple.Location = new Point(255, 129);
panelPurple.Margin = new Padding(3, 4, 3, 4);
panelPurple.Name = "panelPurple";
panelPurple.Size = new Size(54, 59);
panelPurple.TabIndex = 7;
//
// panelBlack
//
panelBlack.BackColor = Color.Black;
panelBlack.Location = new Point(174, 129);
panelBlack.Margin = new Padding(3, 4, 3, 4);
panelBlack.Name = "panelBlack";
panelBlack.Size = new Size(54, 59);
panelBlack.TabIndex = 6;
//
// panelGray
//
panelGray.BackColor = Color.Gray;
panelGray.Location = new Point(95, 129);
panelGray.Margin = new Padding(3, 4, 3, 4);
panelGray.Name = "panelGray";
panelGray.Size = new Size(54, 59);
panelGray.TabIndex = 5;
//
// panelWhite
//
panelWhite.BackColor = Color.White;
panelWhite.Location = new Point(19, 129);
panelWhite.Margin = new Padding(3, 4, 3, 4);
panelWhite.Name = "panelWhite";
panelWhite.Size = new Size(54, 59);
panelWhite.TabIndex = 4;
//
// panelYellow
//
panelYellow.BackColor = Color.Yellow;
panelYellow.Location = new Point(255, 43);
panelYellow.Margin = new Padding(3, 4, 3, 4);
panelYellow.Name = "panelYellow";
panelYellow.Size = new Size(54, 60);
panelYellow.TabIndex = 3;
//
// panelBlue
//
panelBlue.BackColor = Color.Blue;
panelBlue.Location = new Point(174, 43);
panelBlue.Margin = new Padding(3, 4, 3, 4);
panelBlue.Name = "panelBlue";
panelBlue.Size = new Size(54, 60);
panelBlue.TabIndex = 2;
//
// panelGreen
//
panelGreen.BackColor = Color.Green;
panelGreen.Location = new Point(95, 43);
panelGreen.Margin = new Padding(3, 4, 3, 4);
panelGreen.Name = "panelGreen";
panelGreen.Size = new Size(54, 60);
panelGreen.TabIndex = 1;
//
// panelRed
//
panelRed.BackColor = Color.Red;
panelRed.Location = new Point(19, 43);
panelRed.Margin = new Padding(3, 4, 3, 4);
panelRed.Name = "panelRed";
panelRed.Size = new Size(54, 59);
panelRed.TabIndex = 0;
//
// checkBoxEngine
//
checkBoxEngine.AutoSize = true;
checkBoxEngine.Location = new Point(17, 264);
checkBoxEngine.Margin = new Padding(3, 4, 3, 4);
checkBoxEngine.Name = "checkBoxEngine";
checkBoxEngine.Size = new Size(269, 24);
checkBoxEngine.TabIndex = 5;
checkBoxEngine.Text = "Признак наличия доп. двигателей";
checkBoxEngine.UseVisualStyleBackColor = true;
//
// checkBoxCompartment
//
checkBoxCompartment.AutoSize = true;
checkBoxCompartment.Location = new Point(17, 203);
checkBoxCompartment.Margin = new Padding(3, 4, 3, 4);
checkBoxCompartment.Name = "checkBoxCompartment";
checkBoxCompartment.Size = new Size(236, 24);
checkBoxCompartment.TabIndex = 4;
checkBoxCompartment.Text = "Признак наличия доп. отсека";
checkBoxCompartment.UseVisualStyleBackColor = true;
//
// numericUpDownWeight
//
numericUpDownWeight.Location = new Point(95, 89);
numericUpDownWeight.Margin = new Padding(3, 4, 3, 4);
numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownWeight.Name = "numericUpDownWeight";
numericUpDownWeight.Size = new Size(79, 27);
numericUpDownWeight.TabIndex = 3;
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(17, 89);
label2.Name = "label2";
label2.Size = new Size(36, 20);
label2.TabIndex = 2;
label2.Text = "Вес:";
//
// numericUpDownSpeed
//
numericUpDownSpeed.Location = new Point(95, 36);
numericUpDownSpeed.Margin = new Padding(3, 4, 3, 4);
numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownSpeed.Name = "numericUpDownSpeed";
numericUpDownSpeed.Size = new Size(79, 27);
numericUpDownSpeed.TabIndex = 1;
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(17, 39);
label1.Name = "label1";
label1.Size = new Size(76, 20);
label1.TabIndex = 0;
label1.Text = "Скорость:";
//
// panel9
//
panel9.AllowDrop = true;
panel9.Controls.Add(pictureBoxObject);
panel9.Location = new Point(675, 87);
panel9.Margin = new Padding(3, 4, 3, 4);
panel9.Name = "panel9";
panel9.Size = new Size(354, 244);
panel9.TabIndex = 1;
panel9.DragDrop += PanelObject_DragDrop;
panel9.DragEnter += PanelObject_DragEnter;
//
// pictureBoxObject
//
pictureBoxObject.Location = new Point(27, 4);
pictureBoxObject.Margin = new Padding(3, 4, 3, 4);
pictureBoxObject.Name = "pictureBoxObject";
pictureBoxObject.Size = new Size(323, 236);
pictureBoxObject.TabIndex = 2;
pictureBoxObject.TabStop = false;
//
// labelAdditionalColor
//
labelAdditionalColor.AllowDrop = true;
labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
labelAdditionalColor.Location = new Point(870, 35);
labelAdditionalColor.Name = "labelAdditionalColor";
labelAdditionalColor.Size = new Size(133, 47);
labelAdditionalColor.TabIndex = 1;
labelAdditionalColor.Text = "Доп. цвет";
labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter;
labelAdditionalColor.DragDrop += labelColor_DragDrop;
labelAdditionalColor.DragEnter += labelColor_DragEnter;
//
// labelColor
//
labelColor.AllowDrop = true;
labelColor.BorderStyle = BorderStyle.FixedSingle;
labelColor.Location = new Point(703, 35);
labelColor.Name = "labelColor";
labelColor.Size = new Size(133, 47);
labelColor.TabIndex = 0;
labelColor.Text = "Цвет";
labelColor.TextAlign = ContentAlignment.MiddleCenter;
labelColor.DragDrop += labelColor_DragDrop;
labelColor.DragEnter += labelColor_DragEnter;
//
// buttonAdd
//
buttonAdd.Location = new Point(703, 339);
buttonAdd.Margin = new Padding(3, 4, 3, 4);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(134, 45);
buttonAdd.TabIndex = 2;
buttonAdd.Text = "Добавить";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonOk_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(870, 339);
buttonCancel.Margin = new Padding(3, 4, 3, 4);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(134, 45);
buttonCancel.TabIndex = 3;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
//
// FormAirbusConfig
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1057, 400);
Controls.Add(buttonCancel);
Controls.Add(labelAdditionalColor);
Controls.Add(labelColor);
Controls.Add(buttonAdd);
Controls.Add(panel9);
Controls.Add(groupBoxParameters);
Margin = new Padding(3, 4, 3, 4);
Name = "FormAirbusConfig";
Text = "FormAirbusConfig";
Load += FormAirbusConfig_Load;
groupBoxParameters.ResumeLayout(false);
groupBoxParameters.PerformLayout();
groupBoxColor.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
panel9.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
ResumeLayout(false);
}
#endregion
private GroupBox groupBoxParameters;
private NumericUpDown numericUpDownWeight;
private Label label2;
private NumericUpDown numericUpDownSpeed;
private Label label1;
private CheckBox checkBoxCompartment;
private GroupBox groupBoxColor;
private CheckBox checkBoxEngine;
private Panel panelBlack;
private Panel panelGray;
private Panel panelWhite;
private Panel panelYellow;
private Panel panelBlue;
private Panel panelGreen;
private Panel panelRed;
private Label labelFly;
private Label labelBase;
private Panel panelPurple;
private Panel panel9;
private Label labelAdditionalColor;
private Label labelColor;
private PictureBox pictureBoxObject;
private Button buttonAdd;
private Button buttonCancel;
}
}

170
RPP/RPP/FormAirbusConfig.cs Normal file
View File

@@ -0,0 +1,170 @@
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;
using RPP.DrawningObjects;
using RPP.Entities;
namespace RPP
{
public delegate void AirbusDelegate(DrawningAirbus Airbus);
public partial class FormAirbusConfig : Form
{
DrawningAirbus? _airbus = null;
/// <summary>
/// Событие
/// </summary>
private event Action<DrawningAirbus>? EventAddAirbus;
public FormAirbusConfig()
{
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;
buttonCancel.Click += (s, e) => Close();
}
private void FormAirbusConfig_Load(object sender, EventArgs e)
{
}
/// <summary>
/// Отрисовать машину
/// </summary>
private void DrawAirbus()
{
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
Graphics gr = Graphics.FromImage(bmp);
_airbus?.SetPosition(15, 5);
if (_airbus is DrawningFlyAirbus drawningFlyAirbus)
drawningFlyAirbus.DrawTransport(gr);
else
_airbus?.DrawTransport(gr);
pictureBoxObject.Image = bmp;
}
/// <summary>
/// Передаем информацию при нажатии на Label
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
{
(sender as Label)?.DoDragDrop((sender as Label)?.Name,
DragDropEffects.Move | DragDropEffects.Copy);
}
/// <summary>
/// Проверка получаемой информации (ее типа на соответствие требуемому)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PanelObject_DragEnter(object sender, DragEventArgs e)
{
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
/// <summary>
/// Действия при приеме перетаскиваемой информации
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PanelObject_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data?.GetData(DataFormats.Text).ToString())
{
case "labelBase":
_airbus = new DrawningAirbus((int)numericUpDownSpeed.Value,
(int)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width,
pictureBoxObject.Height);
break;
case "labelFly":
_airbus = new DrawningFlyAirbus((int)numericUpDownSpeed.Value,
(int)numericUpDownWeight.Value, Color.White, Color.Black,
checkBoxCompartment.Checked, checkBoxEngine.Checked, pictureBoxObject.Width,
pictureBoxObject.Height);
break;
}
DrawAirbus();
}
/// Добавление события
/// </summary>
/// <param name="ev">Привязанный метод</param>
public void AddEvent(Action<DrawningAirbus> ev)
{
if (EventAddAirbus == null)
{
EventAddAirbus = ev;
}
else
{
EventAddAirbus += ev;
}
}
/// <summary>
/// Добавление машины
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonOk_Click(object sender, EventArgs e)
{
EventAddAirbus?.Invoke(_airbus);
Close();
}
private void panelColor_MouseDown(object sender, MouseEventArgs e)
{
(sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Move | DragDropEffects.Copy);
}
private void labelColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data?.GetDataPresent(typeof(Color)) ?? false)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void labelColor_DragDrop(object sender, DragEventArgs e)
{
if (_airbus == null)
return;
((Label)sender).BackColor = (Color)e.Data.GetData(typeof(Color));
switch (((Label)sender).Name)
{
case "labelColor":
_airbus.SetBodyColor((Color)e.Data.GetData(typeof(Color)));
break;
case "labelAdditionalColor":
if (!(_airbus is DrawningFlyAirbus))
return;
(_airbus as DrawningFlyAirbus).SetAdditionalColor((Color)e.Data.GetData(typeof(Color)));
break;
}
DrawAirbus();
}
}
}

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace RPP.MovementStrategy namespace RPP.MovementStrategy
{ {
interface IMoveableObject public interface IMoveableObject
{ {
ObjectParameters? GetObjectPosition { get; } ObjectParameters? GetObjectPosition { get; }

View File

@@ -3,8 +3,9 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using RPP.MovementStrategy;
namespace RPP.MovementStrategy namespace RPP
{ {
internal class MoveToBorder : AbstractStrategy internal class MoveToBorder : AbstractStrategy
{ {

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace RPP.MovementStrategy namespace RPP.MovementStrategy
{ {
internal class ObjectParameters public class ObjectParameters
{ {
private readonly int _x; private readonly int _x;
private readonly int _y; private readonly int _y;

View File

@@ -1,3 +1,4 @@
namespace RPP namespace RPP
{ {
internal static class Program internal static class Program
@@ -11,7 +12,7 @@ namespace RPP
// To customize application configuration such as set high DPI settings or default font, // To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration. // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
Application.Run(new FormAirbus()); Application.Run(new FormAirbusCollection());
} }
} }
} }

91
RPP/RPP/SetGeneric.cs Normal file
View File

@@ -0,0 +1,91 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace RPP.Generics
{
public class SetGeneric<T> where T : class
{
private readonly List<T?> _places;
public int Count => _places.Count;
private readonly int _maxCount;
public SetGeneric(int count)
{
_maxCount = count;
_places = new List<T?>(_maxCount);
}
public bool Insert(T airbus)
{
return Insert(airbus, 0);
}
public bool Insert(T airbus, int position)
{
if (position < 0 || position >= _maxCount)
{
return false;
}
if (Count >= _maxCount)
{
return false;
}
_places.Insert(0, airbus);
return true;
}
public bool Remove(int position)
{
if (position < 0 || position > _maxCount)
{
return false;
}
if (position >= Count)
{
return false;
}
_places.RemoveAt(position);
return true;
}
public T? this[int position]
{
get
{
if (position < 0 || position > _maxCount)
return null;
if (_places.Count <= position)
return null;
return _places[position];
}
set
{
if (position < 0 || position > _maxCount)
return;
if (_places.Count <= position)
return;
_places[position] = value;
}
}
public IEnumerable<T?> GetAirbus(int? maxAirbus = null)
{
for (int i = 0; i < _places.Count; ++i)
{
yield return _places[i];
if (maxAirbus.HasValue && i == maxAirbus.Value)
{
yield break;
}
}
}
}
}