E.E. Eliseev Lab Work 03 #4

Merged
eegov merged 5 commits from LabWork03 into LabWork02 2022-10-14 08:56:47 +04:00
4 changed files with 172 additions and 26 deletions
Showing only changes of commit 9bba0b1a34 - Show all commits

View File

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

View File

@ -30,6 +30,12 @@ namespace Airbus
case "Простая карта":
map = new SimpleMap();
break;
case "Буря в пустыне":
map = new DesertStormMap();
break;
case "Звёздные войны":
map = new StarWarsMap();
break;
}
if(map != null)
@ -69,6 +75,7 @@ namespace Airbus
}
}
//удаление объекта
private void ButtonRemovePlane_Click(object sender, EventArgs e)
{
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)
{
@ -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)
{

View File

@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Runtime.Intrinsics.Arm;
using System.Text;
using System.Threading.Tasks;
@ -43,13 +45,30 @@ namespace Airbus
//пеергрузка оператора сложения
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)
{
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)
{
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)
{
int width = _pictureWidth / _placeSizeWidth;
int height = _pictureHeight / _placeSizeHeight;
int currentWidth = 0;
int currentHeight = 0;
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);
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 true;
return Insert(plane, 0);
}
//добавление объекта в набор на конкретную позицию
public bool Insert(T plane, int position)
public int Insert(T plane, int position)
{
//TODO проверка позиции
//TODO проверка, что элемент массива на этой позиции пустой, если нет, то
// проверка, что после вставляемого элемента в массиве есть пустой элемент
// сдвиг всех элементов, находящихся справа от позиции до первого пустого элемента
//TODO втсавка по позиции
// проверка позиции
if (position >= _places.Length || position < 0)
{
return -1;
}
//проверка, что элемент массива по этой позиции пустой, если нет, то
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;
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)
{
//TODO проверка позиции
if (position >= _places.Length || position < 0)
{
return null;
}
return _places[position];
}