Добавление отображения карты на FormMapWithSetPlannes и начало размещения объектов.

This commit is contained in:
Programmist73 2022-10-06 14:36:55 +04:00
parent a62a94f1d1
commit 9bba0b1a34
4 changed files with 172 additions and 26 deletions

View File

@ -73,6 +73,7 @@
this.buttonRight.Size = new System.Drawing.Size(45, 45); this.buttonRight.Size = new System.Drawing.Size(45, 45);
this.buttonRight.TabIndex = 9; this.buttonRight.TabIndex = 9;
this.buttonRight.UseVisualStyleBackColor = true; this.buttonRight.UseVisualStyleBackColor = true;
this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click);
// //
// buttonDown // buttonDown
// //
@ -83,6 +84,7 @@
this.buttonDown.Size = new System.Drawing.Size(45, 45); this.buttonDown.Size = new System.Drawing.Size(45, 45);
this.buttonDown.TabIndex = 8; this.buttonDown.TabIndex = 8;
this.buttonDown.UseVisualStyleBackColor = true; this.buttonDown.UseVisualStyleBackColor = true;
this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click);
// //
// buttonLeft // buttonLeft
// //
@ -93,6 +95,7 @@
this.buttonLeft.Size = new System.Drawing.Size(45, 45); this.buttonLeft.Size = new System.Drawing.Size(45, 45);
this.buttonLeft.TabIndex = 7; this.buttonLeft.TabIndex = 7;
this.buttonLeft.UseVisualStyleBackColor = true; this.buttonLeft.UseVisualStyleBackColor = true;
this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click);
// //
// buttonUp // buttonUp
// //
@ -113,7 +116,7 @@
this.buttonShowOnMap.TabIndex = 5; this.buttonShowOnMap.TabIndex = 5;
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);
// //
// buttonShowStorage // buttonShowStorage
// //
@ -123,7 +126,7 @@
this.buttonShowStorage.TabIndex = 4; this.buttonShowStorage.TabIndex = 4;
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);
// //
// buttonRemovePlane // buttonRemovePlane
// //
@ -156,6 +159,10 @@
// comboBoxSelectorMap // comboBoxSelectorMap
// //
this.comboBoxSelectorMap.FormattingEnabled = true; this.comboBoxSelectorMap.FormattingEnabled = true;
this.comboBoxSelectorMap.Items.AddRange(new object[] {
"Простая карта",
"Буря в пустыне",
"Звёздные войны"});
this.comboBoxSelectorMap.Location = new System.Drawing.Point(20, 37); this.comboBoxSelectorMap.Location = new System.Drawing.Point(20, 37);
this.comboBoxSelectorMap.Name = "comboBoxSelectorMap"; this.comboBoxSelectorMap.Name = "comboBoxSelectorMap";
this.comboBoxSelectorMap.Size = new System.Drawing.Size(218, 28); this.comboBoxSelectorMap.Size = new System.Drawing.Size(218, 28);

View File

@ -30,6 +30,12 @@ namespace Airbus
case "Простая карта": case "Простая карта":
map = new SimpleMap(); map = new SimpleMap();
break; break;
case "Буря в пустыне":
map = new DesertStormMap();
break;
case "Звёздные войны":
map = new StarWarsMap();
break;
} }
if(map != null) if(map != null)
@ -69,6 +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))
@ -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;
@ -43,13 +45,30 @@ namespace Airbus
//пеергрузка оператора сложения //пеергрузка оператора сложения
public static bool operator +(MapWithSetPlanesGeneric<T, U> map, T plane) public static bool operator +(MapWithSetPlanesGeneric<T, U> map, T plane)
{ {
return map._setPlanes.Insert(plane); if (map._setPlanes.Insert(plane) != -1)
{
return true;
}
else
{
return false;
}
//return map._setPlanes.Insert(plane);
} }
//перегрузка оператора вычитания //перегрузка оператора вычитания
public static bool operator -(MapWithSetPlanesGeneric<T, U> map, int position) public static bool operator -(MapWithSetPlanesGeneric<T, U> map, int position)
{ {
return map._setPlanes.Remove(position); if (map._setPlanes.Remove(position) != null)
{
return true;
}
else
{
return false;
}
//return map._setPlanes.Remove(position);
} }
//вывод всего набора объектов //вывод всего набора объектов
@ -124,25 +143,97 @@ 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 currentWidth = 0;
int currentHeight = 0;
for(int i = 0; i < _setPlanes.Count; i++) for(int i = 0; i < _setPlanes.Count; i++)
{ {
//TODO установка позиции int bias = 0; //величина смещения
if (currentWidth > 0 && currentHeight > 0)
{
bias = width;
}
_setPlanes.Get(i)?.SetObject(_pictureWidth - currentWidth, _pictureHeight - height * currentHeight, _pictureWidth, _pictureHeight);
_setPlanes.Get(i)?.DrawningObject(g); _setPlanes.Get(i)?.DrawningObject(g);
if (currentWidth < width - 1)
{
currentWidth++;
}
else
{
currentWidth = 0;
currentHeight++;
}
if (currentHeight > height)
{
return;
}
} }
} }
} }

View File

@ -22,38 +22,79 @@ 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;
}
return _places[position]; return _places[position];
} }