Всё готово

This commit is contained in:
foxkerik6 2022-11-15 02:15:02 +04:00
parent 5172ab0e40
commit e28f874853
5 changed files with 114 additions and 35 deletions

View File

@ -103,9 +103,9 @@ namespace Cars
break; break;
} }
for (int i = left; i < right; i++) for (int i = left; i < right && i < _map.GetLength(0); i++)
{ {
for (int j = top; j < bottom; j++) for (int j = top; j < bottom && j < _map.GetLength(1); j++)
{ {
if (_map[i, j] == _barrier) if (_map[i, j] == _barrier)
{ {

View File

@ -32,6 +32,12 @@ namespace Stormtrooper
case "Простая карта": case "Простая карта":
map = new SimpleMap(); map = new SimpleMap();
break; break;
case "Опасная карта":
map = new DangerMap();
break;
case "Облачная карта":
map = new CloudMap();
break;
} }
if (map != null) if (map != null)
{ {
@ -56,9 +62,11 @@ namespace Stormtrooper
} }
MainForm form = new(); MainForm form = new();
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{
if(form.SelectedAirplane != null)
{ {
DrawningObject airplane = new (form.SelectedAirplane); DrawningObject airplane = new (form.SelectedAirplane);
if (_mapAirsCollectionGeneric + airplane) if (_mapAirsCollectionGeneric + airplane != -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBox.Image = _mapAirsCollectionGeneric.ShowSet(); pictureBox.Image = _mapAirsCollectionGeneric.ShowSet();
@ -68,6 +76,12 @@ namespace Stormtrooper
MessageBox.Show("Не удалось добавить объект"); MessageBox.Show("Не удалось добавить объект");
} }
} }
else
{
MessageBox.Show("Объект не создан");
}
}
} }
/// <summary> /// <summary>
/// Удаление объекта /// Удаление объекта
@ -85,7 +99,7 @@ namespace Stormtrooper
return; return;
} }
int pos = Convert.ToInt32(maskedTextBoxPosition.Text); int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
if (_mapAirsCollectionGeneric - pos) if (_mapAirsCollectionGeneric - pos != null)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
pictureBox.Image = _mapAirsCollectionGeneric.ShowSet(); pictureBox.Image = _mapAirsCollectionGeneric.ShowSet();

View File

@ -29,9 +29,10 @@ namespace Stormtrooper
} }
private void buttonCreate_Click(object sender, EventArgs e) private void buttonCreate_Click(object sender, EventArgs e)
{ {
Random random = new Random(); Random rnd = new Random();
_airplane = new DrawningMilitaryAirplane(10, 50); _airplane = new DrawningMilitaryAirplane(10, 50);
_airplane.SetPosition(random.Next(100,150), random.Next(100,150), pictureBoxAirplane.Width, pictureBoxAirplane.Height); _airplane.SetPosition(rnd.Next(100,150), rnd.Next(100,150), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
SetData(); SetData();
Draw(); Draw();
} }
@ -74,8 +75,14 @@ namespace Stormtrooper
{ {
Random random = new Random(); Random random = new Random();
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;
}
_airplane = new DrawningStormtrooper(random.Next(10,100),random.Next(50,250),random.Next(1,100), _airplane = new DrawningStormtrooper(random.Next(10,100),random.Next(50,250),random.Next(1,100),
Color.FromArgb(random.Next(0,256), random.Next(0, 256), random.Next(0, 256)), color,
Convert.ToBoolean(random.Next(0,2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); Convert.ToBoolean(random.Next(0,2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_airplane.SetPosition(random.Next(100, 150), random.Next(100, 150), pictureBoxAirplane.Width, pictureBoxAirplane.Height); _airplane.SetPosition(random.Next(100, 150), random.Next(100, 150), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
SetData(); SetData();

View File

@ -26,7 +26,7 @@ namespace Stormtrooper
/// <summary> /// <summary>
/// Размер занимаемого объектом места (высота) /// Размер занимаемого объектом места (высота)
/// </summary> /// </summary>
private readonly int _placeSizeHeight = 90; private readonly int _placeSizeHeight = 110;
/// <summary> /// <summary>
/// Набор объектов /// Набор объектов
/// </summary> /// </summary>
@ -56,9 +56,9 @@ namespace Stormtrooper
/// <param name="map"></param> /// <param name="map"></param>
/// <param name="car"></param> /// <param name="car"></param>
/// <returns></returns> /// <returns></returns>
public static bool operator +(MapWithSetAirplaneGeneric<T, U> map, T car) public static int operator +(MapWithSetAirplaneGeneric<T, U> map, T air)
{ {
return map._setAirs.Insert(car); return map._setAirs.Insert(air);
} }
/// <summary> /// <summary>
/// Перегрузка оператора вычитания /// Перегрузка оператора вычитания
@ -66,7 +66,7 @@ namespace Stormtrooper
/// <param name="map"></param> /// <param name="map"></param>
/// <param name="position"></param> /// <param name="position"></param>
/// <returns></returns> /// <returns></returns>
public static bool operator -(MapWithSetAirplaneGeneric<T, U> map, int position) public static T operator -(MapWithSetAirplaneGeneric<T, U> map, int position)
{ {
return map._setAirs.Remove(position); return map._setAirs.Remove(position);
} }
@ -147,10 +147,14 @@ namespace Stormtrooper
private void DrawBackground(Graphics g) private void DrawBackground(Graphics g)
{ {
Pen pen = new(Color.Black, 3); Pen pen = new(Color.Black, 3);
g.FillRectangle(new SolidBrush(Color.DarkGray),0,0,_pictureWidth, _pictureHeight);
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++) for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
{ {
g.FillRectangle(new SolidBrush(Color.Gray), i * _placeSizeWidth, 0, _placeSizeWidth / 2, _placeSizeHeight * (_pictureHeight / _placeSizeHeight));
for (int j = 0; j < _pictureHeight / _placeSizeHeight+1; ++j) 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, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight);
} }
g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight); g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight);
@ -162,10 +166,28 @@ namespace Stormtrooper
/// <param name="g"></param> /// <param name="g"></param>
private void DrawAirs(Graphics g) private void DrawAirs(Graphics g)
{ {
int width = _pictureWidth / _placeSizeWidth;
int height = _pictureHeight / _placeSizeHeight;
int currentWidth = width - 1;
int currentHeight = 0;
for (int i = 0; i < _setAirs.Count; i++) for (int i = 0; i < _setAirs.Count; i++)
{ {
// TODO установка позиции
_setAirs.Get(i)?.SetObject(currentWidth * _placeSizeWidth,
currentHeight * _placeSizeHeight,
_pictureWidth, _pictureHeight);
_setAirs.Get(i)?.DrawningObject(g); _setAirs.Get(i)?.DrawningObject(g);
if (currentWidth > 0)
currentWidth--;
else
{
currentWidth = width - 1;
currentHeight++;
}
if (currentHeight > height) return;
} }
} }
} }

View File

@ -30,11 +30,10 @@ namespace Stormtrooper
/// </summary> /// </summary>
/// <param name="airplane">Добавляемый самолёт</param> /// <param name="airplane">Добавляемый самолёт</param>
/// <returns></returns> /// <returns></returns>
public bool Insert(T airplane) public int Insert(T airplane)
{ {
_places[0] = airplane; Insert(airplane, 0);
// TODO вставка в начало набора return 0;
return true;
} }
/// <summary> /// <summary>
/// Добавление объекта в набор на конкретную позицию /// Добавление объекта в набор на конкретную позицию
@ -42,26 +41,60 @@ namespace Stormtrooper
/// <param name="airplane">Добавляемый самолёт</param> /// <param name="airplane">Добавляемый самолёт</param>
/// <param name="position">Позиция</param> /// <param name="position">Позиция</param>
/// <returns></returns> /// <returns></returns>
public bool Insert(T airplane, int position) public int Insert(T airplane, int position)
{
if (position < 0 || position >= Count)
{
return -1;
}
if (_places[position] == null || _places[position] == default(T))
{ {
// TODO проверка позиции
// TODO проверка, что элемент массива по этой позиции пустой, если нет, то
// проверка, что после вставляемого элемента в массиве есть пустой элемент
// сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
// TODO вставка по позиции
_places[position] = airplane; _places[position] = airplane;
return true; return position;
}
else
{
bool hasEmptySpace = false;
int indexOfEmptyPlace = 0;
for (int i = position + 1; i < Count; ++i)
{
if (_places[i] == null || _places[i] == default(T))
{
hasEmptySpace = true;
indexOfEmptyPlace = i;
break;
}
}
if (hasEmptySpace)
{
for (int i = indexOfEmptyPlace; i > position; --i)
{
_places[i] = _places[i - 1];
}
_places[position] = airplane;
return position;
}
else
{
return -1;
}
}
} }
/// <summary> /// <summary>
/// Удаление объекта из набора с конкретной позиции /// Удаление объекта из набора с конкретной позиции
/// </summary> /// </summary>
/// <param name="position"></param> /// <param name="position"></param>
/// <returns></returns> /// <returns></returns>
public bool Remove(int position) public T Remove(int position)
{ {
// TODO проверка позиции if (position < 0 || position >= Count)
// TODO удаление объекта из массива, присовив элементу массива значение null {
return true; return null;
}
T memoryObj = _places[position];
_places[position] = null;
return memoryObj;
} }
/// <summary> /// <summary>
/// Получение объекта из набора по позиции /// Получение объекта из набора по позиции
@ -70,7 +103,10 @@ namespace Stormtrooper
/// <returns></returns> /// <returns></returns>
public T Get(int position) public T Get(int position)
{ {
// TODO проверка позиции if (position < 0 || position >= Count)
{
return null;
}
return _places[position]; return _places[position];
} }
} }