Реализация добавления объектов в хранилище.

This commit is contained in:
Nikolaeva_Y.A 2022-11-21 22:22:00 +04:00
parent ecc1650192
commit a71b990a51
7 changed files with 184 additions and 44 deletions

View File

@ -100,7 +100,7 @@ namespace Airbus
return; return;
} }
Pen pen = new Pen(Color.Black); Pen pen = new Pen(Color.Black);
Brush brBlack = new SolidBrush(Color.Black); Brush selectedBrush = new SolidBrush(Airbus.CorpusColor);
Brush br = new SolidBrush(Airbus?.CorpusColor ?? Color.Black); Brush br = new SolidBrush(Airbus?.CorpusColor ?? Color.Black);
//хвостовое крыло //хвостовое крыло
@ -110,7 +110,7 @@ namespace Airbus
PointF point3 = new PointF(_startPosX + 30, _startPosY + 30); PointF point3 = new PointF(_startPosX + 30, _startPosY + 30);
PointF[] nose = { point1, point2, point3 }; PointF[] nose = { point1, point2, point3 };
g.DrawPolygon(pen, nose); g.DrawPolygon(pen, nose);
g.FillPolygon(brBlack, nose); g.FillPolygon(selectedBrush, nose);
//корпус //корпус
@ -120,7 +120,7 @@ namespace Airbus
PointF point7 = new PointF(_startPosX, _startPosY + 50); PointF point7 = new PointF(_startPosX, _startPosY + 50);
PointF[] rwing = { point4, point5, point6, point7 }; PointF[] rwing = { point4, point5, point6, point7 };
g.DrawPolygon(pen, rwing); g.DrawPolygon(pen, rwing);
g.FillPolygon(brBlack, rwing); g.FillPolygon(selectedBrush, rwing);
// нос самолёта // нос самолёта
@ -129,7 +129,7 @@ namespace Airbus
PointF point10 = new PointF(_startPosX + 100, _startPosY + 40); PointF point10 = new PointF(_startPosX + 100, _startPosY + 40);
PointF[] lwing = { point8, point9, point10 }; PointF[] lwing = { point8, point9, point10 };
g.DrawPolygon(pen, lwing); g.DrawPolygon(pen, lwing);
g.FillPolygon(brBlack, lwing); g.FillPolygon(selectedBrush, lwing);
//задние шасси //задние шасси
@ -149,12 +149,12 @@ namespace Airbus
//задние шасси //задние шасси
g.FillEllipse(brBlack, _startPosX + 10, _startPosY + 55, 10, 10); g.FillEllipse(selectedBrush, _startPosX + 10, _startPosY + 55, 10, 10);
g.FillEllipse(brBlack, _startPosX + 45, _startPosY + 55, 10, 10); g.FillEllipse(selectedBrush, _startPosX + 45, _startPosY + 55, 10, 10);
//переднее шасси //переднее шасси
g.FillEllipse(brBlack, _startPosX, _startPosY + 55, 10, 10); g.FillEllipse(selectedBrush, _startPosX, _startPosY + 55, 10, 10);
g.FillPolygon(br, lwing); g.FillPolygon(br, lwing);
@ -166,11 +166,11 @@ namespace Airbus
//заднее поперечное крыло //заднее поперечное крыло
g.FillEllipse(brBlack, _startPosX, _startPosY + 25, 25, 10); g.FillEllipse(selectedBrush, _startPosX, _startPosY + 25, 25, 10);
//крыло //крыло
g.FillEllipse(brBlack, _startPosX + 20, _startPosY + 35, 50, 10); g.FillEllipse(selectedBrush, _startPosX + 20, _startPosY + 35, 50, 10);
} }
//смена границ формы отрисовки //смена границ формы отрисовки

View File

@ -165,6 +165,7 @@
this.buttonSelectPlane.TabIndex = 8; this.buttonSelectPlane.TabIndex = 8;
this.buttonSelectPlane.Text = "Выбрать"; this.buttonSelectPlane.Text = "Выбрать";
this.buttonSelectPlane.UseVisualStyleBackColor = true; this.buttonSelectPlane.UseVisualStyleBackColor = true;
this.buttonSelectPlane.Click += new System.EventHandler(this.buttonSelectPlane_Click);
// //
// FormAirbus // FormAirbus
// //

View File

@ -42,7 +42,15 @@ namespace Airbus
private void ButtonCreate_Click(object sender, EventArgs e) private void ButtonCreate_Click(object sender, EventArgs e)
{ {
Random rnd = new(); Random rnd = new();
_airbus = new DrawningAirbus(rnd.Next(100, 300), rnd.Next(1000, 2000),Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
_airbus = new DrawningAirbus(rnd.Next(100, 300), rnd.Next(1000, 2000), color);
SetData(); SetData();
Draw(); Draw();
} }
@ -80,9 +88,23 @@ namespace Airbus
private void ButtonCreateModif_Click(object sender, EventArgs e) private void ButtonCreateModif_Click(object sender, EventArgs e)
{ {
Random rnd = new(); Random rnd = new();
_airbus = new DrawningSuperAirbus(rnd.Next(100, 300), rnd.Next(1000, 2000), Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)), ColorDialog dialog = new();
Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)),
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
Color addColor = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
ColorDialog dialogAdd = new();
if (dialogAdd.ShowDialog() == DialogResult.OK)
{
addColor = dialogAdd.Color;
}
_airbus = new DrawningSuperAirbus(rnd.Next(100, 300), rnd.Next(1000, 2000), color, addColor,
Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2)));
SetData(); SetData();
Draw(); Draw();

View File

@ -81,7 +81,7 @@
// //
// maskedTextBoxPosition // maskedTextBoxPosition
// //
this.maskedTextBoxPosition.Location = new System.Drawing.Point(21, 203); this.maskedTextBoxPosition.Location = new System.Drawing.Point(21, 141);
this.maskedTextBoxPosition.Name = "maskedTextBoxPosition"; this.maskedTextBoxPosition.Name = "maskedTextBoxPosition";
this.maskedTextBoxPosition.Size = new System.Drawing.Size(167, 23); this.maskedTextBoxPosition.Size = new System.Drawing.Size(167, 23);
this.maskedTextBoxPosition.TabIndex = 8; this.maskedTextBoxPosition.TabIndex = 8;
@ -98,7 +98,7 @@
// //
// buttonRemovePlane // buttonRemovePlane
// //
this.buttonRemovePlane.Location = new System.Drawing.Point(21, 151); this.buttonRemovePlane.Location = new System.Drawing.Point(21, 181);
this.buttonRemovePlane.Name = "buttonRemovePlane"; this.buttonRemovePlane.Name = "buttonRemovePlane";
this.buttonRemovePlane.Size = new System.Drawing.Size(167, 25); this.buttonRemovePlane.Size = new System.Drawing.Size(167, 25);
this.buttonRemovePlane.TabIndex = 6; this.buttonRemovePlane.TabIndex = 6;
@ -114,7 +114,7 @@
this.buttonShowStorage.TabIndex = 5; this.buttonShowStorage.TabIndex = 5;
this.buttonShowStorage.Text = "Посмотреть хранилище"; this.buttonShowStorage.Text = "Посмотреть хранилище";
this.buttonShowStorage.UseVisualStyleBackColor = true; this.buttonShowStorage.UseVisualStyleBackColor = true;
this.buttonShowStorage.Click += new System.EventHandler(this.buttonShowStorage_Click); this.buttonShowStorage.Click += new System.EventHandler(this.ButtonShowStorage_Click);
// //
// buttonShowOnMap // buttonShowOnMap
// //
@ -124,7 +124,7 @@
this.buttonShowOnMap.TabIndex = 4; this.buttonShowOnMap.TabIndex = 4;
this.buttonShowOnMap.Text = "Посмотреть карту"; this.buttonShowOnMap.Text = "Посмотреть карту";
this.buttonShowOnMap.UseVisualStyleBackColor = true; this.buttonShowOnMap.UseVisualStyleBackColor = true;
this.buttonShowOnMap.Click += new System.EventHandler(this.buttonShowOnMap_Click); this.buttonShowOnMap.Click += new System.EventHandler(this.ButtonShowOnMap_Click);
// //
// buttonLeft // buttonLeft
// //

View File

@ -30,6 +30,12 @@ namespace Airbus
case "Простая карта": case "Простая карта":
map = new SimpleMap(); map = new SimpleMap();
break; break;
case "Пустыня":
map = new DesertMap();
break;
case "Космос":
map = new SpaceMap();
break;
} }
if (map != null) if (map != null)
@ -40,6 +46,7 @@ namespace Airbus
else else
{ {
_mapPlanesCollectionGeneric = null; _mapPlanesCollectionGeneric = null;
} }
} }
@ -57,7 +64,7 @@ namespace Airbus
{ {
DrawningObjectPlane plane = new(form.SelectedPlane); DrawningObjectPlane plane = new(form.SelectedPlane);
if (_mapPlanesCollectionGeneric + plane) if (_mapPlanesCollectionGeneric + plane != -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBox.Image = _mapPlanesCollectionGeneric.ShowSet(); pictureBox.Image = _mapPlanesCollectionGeneric.ShowSet();
@ -68,7 +75,7 @@ namespace Airbus
} }
} }
} }
//удаление объекта
private void ButtonRemovePlane_Click(object sender, EventArgs e) private void ButtonRemovePlane_Click(object sender, EventArgs e)
{ {
if (string.IsNullOrEmpty(maskedTextBoxPosition.Text)) if (string.IsNullOrEmpty(maskedTextBoxPosition.Text))
@ -84,7 +91,7 @@ namespace Airbus
int pos = Convert.ToInt32(maskedTextBoxPosition.Text); int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
if (_mapPlanesCollectionGeneric - pos) if (_mapPlanesCollectionGeneric - pos != null)
{ {
MessageBox.Show("Объект удалён"); MessageBox.Show("Объект удалён");
pictureBox.Image = _mapPlanesCollectionGeneric.ShowSet(); pictureBox.Image = _mapPlanesCollectionGeneric.ShowSet();
@ -96,7 +103,7 @@ namespace Airbus
} }
//вывод набора //вывод набора
private void buttonShowStorage_Click(object sender, EventArgs e) private void ButtonShowStorage_Click(object sender, EventArgs e)
{ {
if (_mapPlanesCollectionGeneric == null) if (_mapPlanesCollectionGeneric == null)
{ {
@ -107,7 +114,7 @@ namespace Airbus
} }
//вывод карты //вывод карты
private void buttonShowOnMap_Click(object sender, EventArgs e) private void ButtonShowOnMap_Click(object sender, EventArgs e)
{ {
if (_mapPlanesCollectionGeneric == null) if (_mapPlanesCollectionGeneric == null)
{ {

View File

@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Numerics;
using System.Runtime.Intrinsics.Arm;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -36,13 +38,13 @@ namespace Airbus
} }
//пеергрузка оператора сложения //пеергрузка оператора сложения
public static bool operator +(MapWithSetPlanesGeneric<T, U> map, T plane) public static int operator +(MapWithSetPlanesGeneric<T, U> map, T plane)
{ {
return map._setPlanes.Insert(plane); return map._setPlanes.Insert(plane);
} }
//перегрузка оператора вычитания //перегрузка оператора вычитания
public static bool operator -(MapWithSetPlanesGeneric<T, U> map, int position) public static T operator -(MapWithSetPlanesGeneric<T, U> map, int position)
{ {
return map._setPlanes.Remove(position); return map._setPlanes.Remove(position);
} }
@ -119,25 +121,89 @@ namespace Airbus
public void DrawBackground(Graphics g) public void DrawBackground(Graphics g)
{ {
Pen pen = new(Color.Black, 3); Pen pen = new(Color.Black, 3);
Pen marcupPen = new(Color.White, 5);
Pen signalFirePen = new(Color.OrangeRed, 5);
Brush concreteBrush = new SolidBrush(Color.LightGray);
Brush asphaltBrush = new SolidBrush(Color.DarkGray);
Brush marcupBrush = new SolidBrush(Color.White);
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++) g.FillRectangle(concreteBrush, 0, 0, _pictureWidth, _pictureHeight); //заливаем область в цвет бетона
for (int i = 0; i < _pictureWidth / _placeSizeWidth - 1; i++)
{ {
for (int j = 0; j < _pictureHeight / _placeSizeHeight + 1; ++j) for (int j = 2; j < _pictureHeight / _placeSizeHeight + 1; ++j)
{//линия разметки места {//линия разметки места
g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight); g.DrawLine(pen, i * _placeSizeWidth + 5, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2 + 5, j * _placeSizeHeight);
} }
g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight); g.DrawLine(pen, i * _placeSizeWidth + 5, _placeSizeHeight * 2, i * _placeSizeWidth + 5, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight);
}
//отрисовка разметки взлётной полосы
g.FillRectangle(marcupBrush, _placeSizeWidth * 2 + 30, 0, 185, _pictureHeight);
g.FillRectangle(asphaltBrush, _placeSizeWidth * 2 + 35, 0, 175, _pictureHeight);
g.DrawLine(marcupPen, _placeSizeWidth * 2 + 210, 0, _placeSizeWidth * 2 + 210, _pictureHeight);
g.DrawLine(marcupPen, _placeSizeWidth * 2 + 35, 0, _placeSizeWidth * 2 + 35, _pictureHeight);
g.DrawLine(marcupPen, _placeSizeWidth * 2 + 215, 0, _placeSizeWidth * 2 + 215, _pictureHeight);
g.DrawLine(marcupPen, _placeSizeWidth * 2 + 30, 0, _placeSizeWidth * 2 + 30, _pictureHeight);
for (int i = 0; i < _pictureHeight / _placeSizeHeight; ++i)
{
g.DrawLine(marcupPen, _placeSizeWidth * 2 + 125, 20 + i * _placeSizeHeight, _placeSizeWidth * 2 + 125, (i + 1) * _placeSizeHeight - 20);
}
for (int i = 0; i < _pictureHeight / 20; i++)
{
g.DrawLine(signalFirePen, _placeSizeWidth * 2 + 15, 20 + i * _placeSizeHeight / 2, _placeSizeWidth * 2 + 15, (i + 1) * _placeSizeHeight / 2 - 20);
g.DrawLine(signalFirePen, _placeSizeWidth * 3 + 20, 20 + i * _placeSizeHeight / 2, _placeSizeWidth * 3 + 20, (i + 1) * _placeSizeHeight / 2 - 20);
}
//отрисовка сочков
Brush pinkBrush = new SolidBrush(Color.LightPink);
for (int i = 1; i < 6; i++)
{
Point[] point = new Point[]
{
new Point((i * 70 - 10) + 45, 30),
new Point(i * 70 - 10, 50),
new Point( i * 70 - 10 , 10)
};
g.FillPolygon(pinkBrush, point);
g.DrawLine(pen, i * 70 - 10, 10, i * 70 - 10, 80);
g.DrawLine(pen, i * 70 - 10, 10, (i * 70 - 10) + 45, 30);
g.DrawLine(pen, i * 70 - 10, 50, (i * 70 - 10) + 45, 30);
} }
} }
//метод прорисовки объеков //метод прорисовки объеков
public void DrawPlanes(Graphics g) public void DrawPlanes(Graphics g)
{ {
int width = _pictureWidth / _placeSizeWidth;
int height = _pictureHeight / _placeSizeHeight;
int position = 0;
int currentWidth = 1;
int currentHeight = 5;
for (int i = 0; i < _setPlanes.Count; i++) for (int i = 0; i < _setPlanes.Count; i++)
{ {
//TODO установка позиции _setPlanes.Get(i)?.SetObject(currentWidth * _placeSizeWidth + 20, currentHeight * _placeSizeHeight + 20, _pictureWidth, _pictureHeight);
_setPlanes.Get(i)?.DrawningObject(g); _setPlanes.Get(i)?.DrawningObject(g);
if (position % 2 == 0)
{
position++;
currentWidth--;
}
else
{
position = 0;
currentWidth = 1;
currentHeight--;
}
} }
} }
} }

View File

@ -22,38 +22,82 @@ namespace Airbus
} }
//добавление объекта в набор //добавление объекта в набор
public bool Insert(T plane) public int Insert(T plane)
{ {
//TODO вставка в начало набора return Insert(plane, 0);
return true;
} }
//добавление объекта в набор на конкретную позицию //добавление объекта в набор на конкретную позицию
public bool Insert(T plane, int position) public int Insert(T plane, int position)
{ {
//TODO проверка позиции // проверка позиции
//TODO проверка, что элемент массива на этой позиции пустой, если нет, то if (position >= _places.Length || position < 0)
// проверка, что после вставляемого элемента в массиве есть пустой элемент {
// сдвиг всех элементов, находящихся справа от позиции до первого пустого элемента return -1;
//TODO втсавка по позиции }
//проверка, что элемент массива по этой позиции пустой, если нет, то
if (_places[position] == null)
{
_places[position] = plane;
return position;
}
//проверка, что после вставляемого элемента в массиве есть пустой элемент
int findEmptyPos = -1;
for (int i = position + 1; i < Count; i++)
{
if (_places[i] == null)
{
findEmptyPos = i;
break;
}
}
if (findEmptyPos < 0)
{
return -1;
}
//сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
for (int i = findEmptyPos; i > position; i--)
{
_places[i] = _places[i - 1];
}
// вставка по позиции
_places[position] = plane; _places[position] = plane;
return true; return position;
} }
//удаление объекта из набора с конкретной позиции //удаление объекта из набора с конкретной позиции
public bool Remove(int position) public T Remove(int position)
{ {
//TODO проверка позиции // проверка позиции
//TODO удаление объекта из массива, присвоив элементу массива значение null if (position >= _places.Length || position < 0)
{
return null;
}
return true; // удаление объекта из массива, присовив элементу массива значение null
T temp = _places[position];
_places[position] = null;
return temp;
} }
//получение объекта из набора по позиции //получение объекта из набора по позиции
public T Get(int position) public T Get(int position)
{ {
//TODO проверка позиции if (position >= _places.Length || position < 0)
{
return null;
}
else if (_places[position] == null)
{
return null;
}
return _places[position]; return _places[position];
} }