diff --git a/AirplaneWithRadar/AirplaneWithRadar/AbstractMap.cs b/AirplaneWithRadar/AirplaneWithRadar/AbstractMap.cs
index cbe5959..1934d8f 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/AbstractMap.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/AbstractMap.cs
@@ -32,7 +32,61 @@ namespace AirplaneWithRadar
public Bitmap MoveObject(Direction direction)
{
// TODO проверка, что объект может переместится в требуемом направлении
- if (true)
+
+ if (direction == Direction.Right)
+ {
+ for (int i = (int)(_drawingObject.GetCurrentPosition().Right / _size_x + 1); i < _drawingObject.GetCurrentPosition().Right + _drawingObject.Step / _size_x + 1; i++)
+ {
+ for (int j = (int)(_drawingObject.GetCurrentPosition().Top / _size_y + 1 ); j < _drawingObject.GetCurrentPosition().Bottom / _size_y + 1; j++)
+ {
+ if (_map[i, j] == _barrier)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (direction == Direction.Up)
+ {
+ for (int i = (int)(_drawingObject.GetCurrentPosition().Top - _drawingObject.Step / _size_y); i < _drawingObject.GetCurrentPosition().Top / _size_y; i++)
+ {
+ for (int j = (int)(_drawingObject.GetCurrentPosition().Left / _size_x); j < _drawingObject.GetCurrentPosition().Right / _size_x; j++)
+ {
+ if (_map[i, j] == _barrier)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (direction == Direction.Left)
+ {
+ for (int i = (int)(_drawingObject.GetCurrentPosition().Left - _drawingObject.Step / _size_x); i < _drawingObject.GetCurrentPosition().Left / _size_x; i++)
+ {
+ for (int j = (int)(_drawingObject.GetCurrentPosition().Top / _size_y); j < _drawingObject.GetCurrentPosition().Bottom / _size_y; j++)
+ {
+ if (_map[i, j] == _barrier)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (direction == Direction.Down)
+ {
+
+ for (int i = (int)(_drawingObject.GetCurrentPosition().Bottom / _size_y); i < _drawingObject.GetCurrentPosition().Bottom + _drawingObject.Step / _size_y; i++)
+ {
+ for (int j = (int)(_drawingObject.GetCurrentPosition().Left / _size_x); j < _drawingObject.GetCurrentPosition().Right / _size_x; j++)
+ {
+ if (_map[i, j] == _barrier)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (true)
{
_drawingObject.MoveObject(direction);
}
@@ -47,6 +101,16 @@ namespace AirplaneWithRadar
int x = _random.Next(0, 10);
int y = _random.Next(0, 10);
_drawingObject.SetObject(x, y, _width, _height);
+ for (int i = (int)(_drawingObject.GetCurrentPosition().Left/_size_x); i < _drawingObject.GetCurrentPosition().Right/_size_x; i++)
+ {
+ for (int j = (int)(_drawingObject.GetCurrentPosition().Top/_size_y); j < _drawingObject.GetCurrentPosition().Bottom/_size_y; j++)
+ {
+ if (_map[i,j] == _barrier)
+ {
+ return false;
+ }
+ }
+ }
// TODO проверка, что объект не "накладывается" на закрытые участки
return true;
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs
index bc174ff..ffadaa1 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplane.cs
@@ -14,13 +14,13 @@ namespace AirplaneWithRadar
///
/// Класс-сущность
///
- public EntityAirplane Airplane { protected set; get; }
+ public EntityAirplane Airplane { get; protected set; }
///
- /// Левая координата отрисовки самолета
+ /// Левая координата отрисовки автомобиля
///
protected float _startPosX;
///
- /// Верхняя кооридната отрисовки самолета
+ /// Верхняя кооридната отрисовки автомобиля
///
protected float _startPosY;
///
@@ -32,18 +32,18 @@ namespace AirplaneWithRadar
///
private int? _pictureHeight = null;
///
- /// Ширина отрисовки самолета
+ /// Ширина отрисовки автомобиля
///
private readonly int _airplaneWidth = 303;
///
- /// Высота отрисовки самолета
+ /// Высота отрисовки автомобиля
///
- private readonly int _airplaneHeight = 102;
+ private readonly int _airplaneHeight = 107;
///
/// Инициализация свойств
///
/// Скорость
- /// Вес самолета
+ /// Вес автомобиля
/// Цвет кузова
public DrawingAirplane(int speed, float weight, Color bodyColor)
{
@@ -55,16 +55,16 @@ namespace AirplaneWithRadar
/// Скорость
/// Вес автомобиля
/// Цвет кузова
- /// Ширина отрисовки автомобиля
- /// Высота отрисовки автомобиля
- protected DrawingAirplane(int speed, float weight, Color bodyColor, int airplaneWidth, int airplaneHeight) : this(speed, weight, bodyColor)
+ /// Ширина отрисовки автомобиля
+ /// Высота отрисовки автомобиля
+ protected DrawingAirplane(int speed, float weight, Color bodyColor, int airplaneWidth, int airplaneHeight) :
+ this(speed, weight, bodyColor)
{
_airplaneWidth = airplaneWidth;
_airplaneHeight = airplaneHeight;
}
-
///
- /// Установка позиции самолета
+ /// Установка позиции автомобиля
///
/// Координата X
/// Координата Y
@@ -72,28 +72,32 @@ namespace AirplaneWithRadar
/// Высота картинки
public void SetPosition(int x, int y, int width, int height)
{
- // TODO проверки
- if (x > 0 && x < width)
+ // TODO checks
+ if (x > 0 && x < width)
{
_startPosX = x;
}
- if (y > 0 && y < height)
+ if (y > 0 && y < height)
{
_startPosY = y;
- }
+ }
if (width > 0)
{
_pictureWidth = width;
}
- if (height > 0)
+ if (height > 0)
{
_pictureHeight = height;
- }
-
-
+ }
+
+
+ //_startPosX = x;
+ //_startPosY = y;
+ //_pictureWidth = width;
+ //_pictureHeight = height;
}
///
- /// Изменение направления перемещения
+ /// Изменение направления пермещения
///
/// Направление
public void MoveTransport(Direction direction)
@@ -141,7 +145,7 @@ namespace AirplaneWithRadar
public virtual void DrawTransport(Graphics g)
{
if (_startPosX < 0 || _startPosY < 0
- || !_pictureHeight.HasValue || !_pictureWidth.HasValue)
+ || !_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
@@ -181,7 +185,6 @@ namespace AirplaneWithRadar
g.FillRectangle(brBlack, _startPosX + 90, _startPosY + 67, 90, 8);
g.FillEllipse(brBlack, _startPosX + 83, _startPosY + 66, 9, 9);
g.FillEllipse(brBlack, _startPosX + 175, _startPosY + 66, 9, 9);
-
}
///
/// Смена границ формы отрисовки
@@ -213,7 +216,7 @@ namespace AirplaneWithRadar
///
public (float Left, float Right, float Top, float Bottom) GetCurrentPosition()
{
- return (_startPosX, _startPosY, _startPosX + _airplaneWidth, _startPosY + _airplaneHeight);
+ return (_startPosX, _startPosX + _airplaneWidth, _startPosY, _startPosY + _airplaneHeight);
}
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplaneWithRadar.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplaneWithRadar.cs
index 3af778f..ea5724a 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplaneWithRadar.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/DrawingAirplaneWithRadar.cs
@@ -12,15 +12,16 @@ namespace AirplaneWithRadar
/// Инициализация свойств
///
/// Скорость
- /// Вес самолета
- /// Цвет самолета
+ /// Вес автомобиля
+ /// Цвет кузова
/// Дополнительный цвет
- /// Признак наличия радара
- /// Признак наличия дополнительных топливных баков
- public DrawingAirplaneWithRadar(int speed, float weight, Color bodyColor, Color dopColor, bool radar, bool extraFuelTank) : base(speed, weight, bodyColor, 110, 60)
+ /// Признак наличия обвеса
+ /// Признак наличия антикрыла
+ public DrawingAirplaneWithRadar(int speed, float weight, Color bodyColor, Color dopColor, bool radar, bool extraFuelTank) : base(speed, weight, bodyColor, 303, 102)
{
Airplane = new EntityAirplaneWithRadar(speed, weight, bodyColor, dopColor, radar, extraFuelTank);
}
+
public override void DrawTransport(Graphics g)
{
if (Airplane is not EntityAirplaneWithRadar airplaneWithRadar)
diff --git a/AirplaneWithRadar/AirplaneWithRadar/DrawingObjectAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/DrawingObjectAirplane.cs
index 787cb3e..08ac4fd 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/DrawingObjectAirplane.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/DrawingObjectAirplane.cs
@@ -28,7 +28,7 @@ namespace AirplaneWithRadar
}
public void DrawingObject(Graphics g)
{
- // TODO
+ _airplane.DrawTransport(g);
}
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs
index 167e6dc..eeb5690 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplane.cs
@@ -42,6 +42,8 @@ namespace AirplaneWithRadar
Weight = weight <= 0 ? rnd.Next(40, 70) : weight;
BodyColor = bodyColor;
}
+
+
}
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplaneWithRadar.cs b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplaneWithRadar.cs
index b5ca4bc..9026595 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/EntityAirplaneWithRadar.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/EntityAirplaneWithRadar.cs
@@ -13,11 +13,11 @@ namespace AirplaneWithRadar
///
public Color DopColor { get; private set; }
///
- /// Признак наличия радара
+ /// Признак наличия обвеса
///
public bool Radar { get; private set; }
///
- /// Признак наличия дополнительных топливных баков
+ /// Признак наличия антикрыла
///
public bool ExtraFuelTank { get; private set; }
///
@@ -27,8 +27,8 @@ namespace AirplaneWithRadar
/// Вес автомобиля
/// Цвет кузова
/// Дополнительный цвет
- /// Признак наличия радара
- /// Признак наличия дополнительных топливных баков
+ /// Признак наличия обвеса
+ /// Признак наличия антикрыла
public EntityAirplaneWithRadar(int speed, float weight, Color bodyColor, Color dopColor, bool radar, bool extraFuelTank) : base(speed, weight, bodyColor)
{
DopColor = dopColor;
@@ -36,5 +36,6 @@ namespace AirplaneWithRadar
ExtraFuelTank = extraFuelTank;
}
+
}
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneWithRadar.cs b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneWithRadar.cs
index b5c0eb3..f93bb8a 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneWithRadar.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/FormAirplaneWithRadar.cs
@@ -25,6 +25,7 @@ namespace AirplaneWithRadar
private void SetData()
{
Random rnd = new();
+
_airplane.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
toolStripStatusLabelSpeed.Text = $": {_airplane.Airplane.Speed}";
toolStripStatusLabelWeight.Text = $": {_airplane.Airplane.Weight}";
@@ -37,6 +38,7 @@ namespace AirplaneWithRadar
///
private void ButtonCreate_Click(object sender, EventArgs e)
{
+
Random rnd = new();
_airplane = new DrawingAirplane(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256)));
SetData();
diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormMap.Designer.cs b/AirplaneWithRadar/AirplaneWithRadar/FormMap.Designer.cs
index d55abcb..977ebcf 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/FormMap.Designer.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/FormMap.Designer.cs
@@ -158,7 +158,8 @@
this.comboBoxSelectorMap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxSelectorMap.FormattingEnabled = true;
this.comboBoxSelectorMap.Items.AddRange(new object[] {
- "Простая карта"});
+ "Простая карта",
+ "Собственная карта"});
this.comboBoxSelectorMap.Location = new System.Drawing.Point(12, 12);
this.comboBoxSelectorMap.Name = "comboBoxSelectorMap";
this.comboBoxSelectorMap.Size = new System.Drawing.Size(182, 33);
diff --git a/AirplaneWithRadar/AirplaneWithRadar/FormMap.cs b/AirplaneWithRadar/AirplaneWithRadar/FormMap.cs
index 5f87b94..9313a2d 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/FormMap.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/FormMap.cs
@@ -74,8 +74,8 @@ namespace AirplaneWithRadar
private void ButtonCreateModif_Click(object sender, EventArgs e)
{
Random rnd = new();
- var airplane = new DrawingAirplaneWithRadar(rnd.Next(100, 300), rnd.Next(1000, 2000), 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)),Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0,2)));
+ var airplane = new DrawingAirplaneWithRadar(rnd.Next(100, 300), rnd.Next(1000, 2000), 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)), Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2)));
SetData(airplane);
}
@@ -93,6 +93,9 @@ namespace AirplaneWithRadar
case "Простая карта":
_abstractMap = new SimpleMap();
break;
+ case "Собственная карта":
+ _abstractMap = new MyMap();
+ break;
}
}
}
diff --git a/AirplaneWithRadar/AirplaneWithRadar/MyMap.cs b/AirplaneWithRadar/AirplaneWithRadar/MyMap.cs
new file mode 100644
index 0000000..a789586
--- /dev/null
+++ b/AirplaneWithRadar/AirplaneWithRadar/MyMap.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AirplaneWithRadar
+{
+ ///
+ /// Собственная реализация абсрактного класса AbstractMap
+ ///
+ internal class MyMap : AbstractMap
+ {
+ ///
+ /// Цвет участка закрытого
+ ///
+ private readonly Brush barrierColor = new SolidBrush(Color.White);
+ ///
+ /// Цвет участка открытого
+ ///
+ private readonly Brush roadColor = new SolidBrush(Color.Blue);
+ protected override void DrawBarrierPart(Graphics g, int i, int j)
+ {
+ g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1));
+ }
+ protected override void DrawRoadPart(Graphics g, int i, int j)
+ {
+ g.FillRectangle(roadColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1));
+ }
+ protected override void GenerateMap()
+ {
+ _map = new int[100, 100];
+ _size_x = (float)_width / _map.GetLength(0);
+ _size_y = (float)_height / _map.GetLength(1);
+ //int counter = 0;
+ for (int i = 0; i < _map.GetLength(0); ++i)
+ {
+ for (int j = 0; j < _map.GetLength(1); ++j)
+ {
+ _map[i, j] = _freeRoad;
+ }
+ }
+
+
+ int counter = 0;
+
+ for (int j = 0; j < _map.GetLength(1); j++)
+ {
+ int startX = _random.Next(0, 80);
+ int x = _random.Next(0, 20);
+ counter = 0;
+ while (counter < x)
+ {
+ for (int i = startX; i < startX + x; i++)
+ {
+ _map[i, j] = _barrier;
+ counter++;
+ }
+ }
+ j++;
+ }
+ //for (int i = 0; i < _map.GetLength(0); ++i)
+ //{
+ // int startX = _random.Next(0, 90);
+ // int x = _random.Next(0, 100 - startX - 10);
+ // counter = x;
+ // while (counter > 0)
+ // {
+ // for (int j = 0; j < _map.GetLength(1); ++j)
+ // {
+ // _map[i, j] = _barrier;
+ // counter--;
+ // }
+ // }
+
+ //}
+ //while (counter < 50)
+ //{
+ // int x = _random.Next(0, 100);
+ // int y = _random.Next(0, 100);
+ // if (_map[x, y] == _freeRoad)
+ // {
+ // _map[x, y] = _barrier;
+ // counter++;
+ // }
+ //}
+
+ }
+ }
+}
+
diff --git a/AirplaneWithRadar/AirplaneWithRadar/SimpleMap.cs b/AirplaneWithRadar/AirplaneWithRadar/SimpleMap.cs
index 582db27..6117e5e 100644
--- a/AirplaneWithRadar/AirplaneWithRadar/SimpleMap.cs
+++ b/AirplaneWithRadar/AirplaneWithRadar/SimpleMap.cs
@@ -21,13 +21,11 @@ namespace AirplaneWithRadar
private readonly Brush roadColor = new SolidBrush(Color.Gray);
protected override void DrawBarrierPart(Graphics g, int i, int j)
{
- g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x +
- 1), j * (_size_y + 1));
+ g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1));
}
protected override void DrawRoadPart(Graphics g, int i, int j)
{
- g.FillRectangle(roadColor, i * _size_x, j * _size_y, i * (_size_x +
- 1), j * (_size_y + 1));
+ g.FillRectangle(roadColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1));
}
protected override void GenerateMap()
{