Всё готово

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;
}
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)
{

View File

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

View File

@ -29,9 +29,10 @@ namespace Stormtrooper
}
private void buttonCreate_Click(object sender, EventArgs e)
{
Random random = new Random();
Random rnd = new Random();
_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();
Draw();
}
@ -74,8 +75,14 @@ namespace Stormtrooper
{
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),
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)));
_airplane.SetPosition(random.Next(100, 150), random.Next(100, 150), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
SetData();

View File

@ -26,7 +26,7 @@ namespace Stormtrooper
/// <summary>
/// Размер занимаемого объектом места (высота)
/// </summary>
private readonly int _placeSizeHeight = 90;
private readonly int _placeSizeHeight = 110;
/// <summary>
/// Набор объектов
/// </summary>
@ -56,9 +56,9 @@ namespace Stormtrooper
/// <param name="map"></param>
/// <param name="car"></param>
/// <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>
/// Перегрузка оператора вычитания
@ -66,7 +66,7 @@ namespace Stormtrooper
/// <param name="map"></param>
/// <param name="position"></param>
/// <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);
}
@ -147,10 +147,14 @@ namespace Stormtrooper
private void DrawBackground(Graphics g)
{
Pen pen = new(Color.Black, 3);
g.FillRectangle(new SolidBrush(Color.DarkGray),0,0,_pictureWidth, _pictureHeight);
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)
{//линия рамзетки места
{
g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight);
}
g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight);
@ -162,10 +166,28 @@ namespace Stormtrooper
/// <param name="g"></param>
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++)
{
// TODO установка позиции
_setAirs.Get(i)?.SetObject(currentWidth * _placeSizeWidth,
currentHeight * _placeSizeHeight,
_pictureWidth, _pictureHeight);
_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>
/// <param name="airplane">Добавляемый самолёт</param>
/// <returns></returns>
public bool Insert(T airplane)
public int Insert(T airplane)
{
_places[0] = airplane;
// TODO вставка в начало набора
return true;
Insert(airplane, 0);
return 0;
}
/// <summary>
/// Добавление объекта в набор на конкретную позицию
@ -42,26 +41,60 @@ namespace Stormtrooper
/// <param name="airplane">Добавляемый самолёт</param>
/// <param name="position">Позиция</param>
/// <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;
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>
/// <param name="position"></param>
/// <returns></returns>
public bool Remove(int position)
public T Remove(int position)
{
// TODO проверка позиции
// TODO удаление объекта из массива, присовив элементу массива значение null
return true;
if (position < 0 || position >= Count)
{
return null;
}
T memoryObj = _places[position];
_places[position] = null;
return memoryObj;
}
/// <summary>
/// Получение объекта из набора по позиции
@ -70,7 +103,10 @@ namespace Stormtrooper
/// <returns></returns>
public T Get(int position)
{
// TODO проверка позиции
if (position < 0 || position >= Count)
{
return null;
}
return _places[position];
}
}