diff --git a/ProjectPlane/ProjectPlane/AbstractMap.cs b/ProjectPlane/ProjectPlane/AbstractMap.cs
index 9d4b84e..a864d09 100644
--- a/ProjectPlane/ProjectPlane/AbstractMap.cs
+++ b/ProjectPlane/ProjectPlane/AbstractMap.cs
@@ -18,6 +18,35 @@ namespace ProjectPlane
protected readonly int _freeRoad = 0;
protected readonly int _barrier = 1;
+ public bool IsMoveable(float x, float y)
+ {
+ var getPos = _drawingObject.GetCurrentPosition();
+ int Right = Convert.ToInt32((getPos.Right + x) / _size_x) > 0
+
+ ? Convert.ToInt32((getPos.Right + x) / _size_x) : 0;
+
+ int Left = Convert.ToInt32((getPos.Left + x) / _size_x) > 0
+
+ ? Convert.ToInt32((getPos.Left + x) / _size_x) : 0;
+
+ int Top = Convert.ToInt32((getPos.Top + y) / _size_y) > 0
+
+ ? Convert.ToInt32((getPos.Top + y) / _size_y) : 0;
+
+ int Bottom = Convert.ToInt32((getPos.Bottom + y) / _size_y) > 0
+
+ ? Convert.ToInt32((getPos.Bottom + y) / _size_y) : 0;
+
+ for (int i = Left; i <= Right; i++)
+ {
+ for (int j = Top; j <= Bottom; j++)
+ {
+ if (_map[i, j] == _barrier) return false;
+ }
+ }
+ return true;
+ }
+
public Bitmap CreateMap(int width, int height, IDrawingObject drawingObject)
{
_width = width;
@@ -32,8 +61,24 @@ namespace ProjectPlane
}
public Bitmap MoveObject(Direction direction)
{
- // TODO проверка, что объект может переместится в требуемом направлении
- if (true)
+ bool isMoveable = false;
+ switch (direction)
+ {
+ case Direction.Right:
+ isMoveable = IsMoveable(_drawingObject.Step, 0);
+ break;
+ case Direction.Left:
+ isMoveable = IsMoveable(-_drawingObject.Step, 0);
+ break;
+ case Direction.Up:
+ isMoveable = IsMoveable(0, -_drawingObject.Step);
+ break;
+ case Direction.Down:
+ isMoveable = IsMoveable(0, _drawingObject.Step);
+ break;
+ }
+
+ if (isMoveable)
{
_drawingObject.MoveObject(direction);
}
@@ -48,7 +93,19 @@ namespace ProjectPlane
int x = _random.Next(0, 10);
int y = _random.Next(0, 10);
_drawingObject.SetObject(x, y, _width, _height);
- // TODO првоерка, что объект не "накладывается" на закрытые участки
+
+ while (!IsMoveable(0, 0))
+ {
+ x += 5;
+
+ if (x < _width)
+ {
+ x = 0;
+ y += 5;
+ }
+ _drawingObject.SetObject(x, y, _width, _height);
+ }
+
return true;
}
private Bitmap DrawMapWithObject()
diff --git a/ProjectPlane/ProjectPlane/Direction.cs b/ProjectPlane/ProjectPlane/Direction.cs
index ae7d03e..45ee136 100644
--- a/ProjectPlane/ProjectPlane/Direction.cs
+++ b/ProjectPlane/ProjectPlane/Direction.cs
@@ -8,6 +8,7 @@ namespace ProjectPlane
{
internal enum Direction
{
+ None = 0,
Up = 1,
Down = 2,
Left = 3,
diff --git a/ProjectPlane/ProjectPlane/DrawingObject.cs b/ProjectPlane/ProjectPlane/DrawingObject.cs
index dea2b94..18e6766 100644
--- a/ProjectPlane/ProjectPlane/DrawingObject.cs
+++ b/ProjectPlane/ProjectPlane/DrawingObject.cs
@@ -34,7 +34,7 @@ namespace ProjectPlane
void IDrawingObject.DrawingObject(Graphics g)
{
- // TODO
+ _plane.DrawTransport(g);
}
}
}
diff --git a/ProjectPlane/ProjectPlane/DrawingPlane.cs b/ProjectPlane/ProjectPlane/DrawingPlane.cs
index 67e6e3f..99ac952 100644
--- a/ProjectPlane/ProjectPlane/DrawingPlane.cs
+++ b/ProjectPlane/ProjectPlane/DrawingPlane.cs
@@ -38,14 +38,6 @@ namespace ProjectPlane
///
private readonly int _planeHeight = 50;
///
- /// Левый край
- ///
- private readonly int _minX = 5;
- ///
- /// Верхний край
- ///
- private readonly int _minY = 40;
- ///
/// Инициализация свойств
///
/// Скорость
@@ -80,14 +72,18 @@ namespace ProjectPlane
public void SetPosition(int x, int y, int width, int height)
{
- if (x >= _minX && x <= width && y >= _minY && y <= height)
+ if (x < 0 || x + _planeWidth >= width)
{
- _startPosX = x;
- _startPosY = y;
- _pictureWidth = width;
- _pictureHeight = height;
+ return;
}
- else SetPosition(_minX, _minY, width, height);
+ if (y < 0 || y + _planeHeight >= height)
+ {
+ return;
+ }
+ _startPosX = x;
+ _startPosY = y;
+ _pictureWidth = width;
+ _pictureHeight = height;
}
///
/// Изменение направления пермещения
@@ -117,12 +113,11 @@ namespace ProjectPlane
break;
//вверх
case Direction.Up:
- if (_startPosY - Plane.Step > 35)
+ if (_startPosY - Plane.Step > 0)
{
_startPosY -= Plane.Step;
}
break;
- break;
//вниз
case Direction.Down:
if (_startPosY + _planeHeight + Plane.Step < _pictureHeight)
@@ -146,74 +141,72 @@ namespace ProjectPlane
//границы самолета
Pen pen = new(Color.Black);
- g.DrawEllipse(pen, _startPosX, _startPosY, 20, 20);
+ g.DrawEllipse(pen, _startPosX, _startPosY + 20, 20, 20);
- g.DrawRectangle(pen, _startPosX + 8, _startPosY, 100, 20);
+ g.DrawRectangle(pen, _startPosX + 8, _startPosY + 20, 100, 20);
Point[] Triangle0 = new Point[3];
- Triangle0[0].X = Convert.ToInt32(_startPosX + 108); Triangle0[0].Y = Convert.ToInt32(_startPosY - 2);
- Triangle0[1].X = Convert.ToInt32(_startPosX + 125); Triangle0[1].Y = Convert.ToInt32(_startPosY + 10);
- Triangle0[2].X = Convert.ToInt32(_startPosX + 108); Triangle0[2].Y = Convert.ToInt32(_startPosY + 10);
+ Triangle0[0].X = Convert.ToInt32(_startPosX + 108); Triangle0[0].Y = Convert.ToInt32(_startPosY + 18);
+ Triangle0[1].X = Convert.ToInt32(_startPosX + 125); Triangle0[1].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle0[2].X = Convert.ToInt32(_startPosX + 108); Triangle0[2].Y = Convert.ToInt32(_startPosY + 30);
g.DrawPolygon(pen, Triangle0);
Point[] Triangle1 = new Point[3];
- Triangle1[0].X = Convert.ToInt32(_startPosX + 108); Triangle1[0].Y = Convert.ToInt32(_startPosY + 10);
- Triangle1[1].X = Convert.ToInt32(_startPosX + 125); Triangle1[1].Y = Convert.ToInt32(_startPosY + 10);
- Triangle1[2].X = Convert.ToInt32(_startPosX + 108); Triangle1[2].Y = Convert.ToInt32(_startPosY + 22);
+ Triangle1[0].X = Convert.ToInt32(_startPosX + 108); Triangle1[0].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle1[1].X = Convert.ToInt32(_startPosX + 125); Triangle1[1].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle1[2].X = Convert.ToInt32(_startPosX + 108); Triangle1[2].Y = Convert.ToInt32(_startPosY + 42);
g.DrawPolygon(pen, Triangle1);
Point[] Triangle = new Point[3];
- Triangle[0].X = Convert.ToInt32(_startPosX + 5); Triangle[0].Y = Convert.ToInt32(_startPosY);
- Triangle[1].X = Convert.ToInt32(_startPosX + 5); Triangle[1].Y = Convert.ToInt32(_startPosY - 20);
- Triangle[2].X = Convert.ToInt32(_startPosX + 35); Triangle[2].Y = Convert.ToInt32(_startPosY);
+ Triangle[0].X = Convert.ToInt32(_startPosX + 5); Triangle[0].Y = Convert.ToInt32(_startPosY + 20);
+ Triangle[1].X = Convert.ToInt32(_startPosX + 5); Triangle[1].Y = Convert.ToInt32(_startPosY);
+ Triangle[2].X = Convert.ToInt32(_startPosX + 35); Triangle[2].Y = Convert.ToInt32(_startPosY + 20);
g.DrawPolygon(pen, Triangle);
////корпус
-
Brush br = new SolidBrush(Plane?.BodyColor ?? Color.Black);
- g.FillEllipse(br, _startPosX, _startPosY, 20, 20);
+ g.FillEllipse(br, _startPosX, _startPosY + 20, 20, 20);
- g.FillRectangle(br, _startPosX + 8, _startPosY, 100, 20);
+ g.FillRectangle(br, _startPosX + 8, _startPosY + 20, 100, 20);
Point[] Triangle2 = new Point[3];
- Triangle2[0].X = Convert.ToInt32(_startPosX + 5); Triangle2[0].Y = Convert.ToInt32(_startPosY);
- Triangle2[1].X = Convert.ToInt32(_startPosX + 5); Triangle2[1].Y = Convert.ToInt32(_startPosY - 20);
- Triangle2[2].X = Convert.ToInt32(_startPosX + 35); Triangle2[2].Y = Convert.ToInt32(_startPosY);
+ Triangle2[0].X = Convert.ToInt32(_startPosX + 5); Triangle2[0].Y = Convert.ToInt32(_startPosY + 20);
+ Triangle2[1].X = Convert.ToInt32(_startPosX + 5); Triangle2[1].Y = Convert.ToInt32(_startPosY); //the highest point
+ Triangle2[2].X = Convert.ToInt32(_startPosX + 35); Triangle2[2].Y = Convert.ToInt32(_startPosY + 20);
g.FillPolygon(br, Triangle2);
Point[] Triangle4 = new Point[3];
- Triangle4[0].X = Convert.ToInt32(_startPosX + 108); Triangle4[0].Y = Convert.ToInt32(_startPosY + 10);
- Triangle4[1].X = Convert.ToInt32(_startPosX + 125); Triangle4[1].Y = Convert.ToInt32(_startPosY + 10);
- Triangle4[2].X = Convert.ToInt32(_startPosX + 108); Triangle4[2].Y = Convert.ToInt32(_startPosY + 22);
+ Triangle4[0].X = Convert.ToInt32(_startPosX + 108); Triangle4[0].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle4[1].X = Convert.ToInt32(_startPosX + 125); Triangle4[1].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle4[2].X = Convert.ToInt32(_startPosX + 108); Triangle4[2].Y = Convert.ToInt32(_startPosY + 42);
g.FillPolygon(br, Triangle4);
// window
-
Brush brBlue = new SolidBrush(Color.LightBlue);
Brush brBlack = new SolidBrush(Color.Black);
Point[] Triangle3 = new Point[3];
- Triangle3[0].X = Convert.ToInt32(_startPosX + 108); Triangle3[0].Y = Convert.ToInt32(_startPosY - 2);
- Triangle3[1].X = Convert.ToInt32(_startPosX + 125); Triangle3[1].Y = Convert.ToInt32(_startPosY + 10);
- Triangle3[2].X = Convert.ToInt32(_startPosX + 108); Triangle3[2].Y = Convert.ToInt32(_startPosY + 10);
+ Triangle3[0].X = Convert.ToInt32(_startPosX + 108); Triangle3[0].Y = Convert.ToInt32(_startPosY + 18);
+ Triangle3[1].X = Convert.ToInt32(_startPosX + 125); Triangle3[1].Y = Convert.ToInt32(_startPosY + 30);
+ Triangle3[2].X = Convert.ToInt32(_startPosX + 108); Triangle3[2].Y = Convert.ToInt32(_startPosY + 30);
g.FillPolygon(brBlue, Triangle3);
- g.DrawLine(pen, _startPosX + 37, _startPosY + 20, _startPosX + 37, _startPosY + 25);
- g.DrawLine(pen, _startPosX + 32, _startPosY + 25, _startPosX + 40, _startPosY + 25);
- g.FillRectangle(brBlack, _startPosX + 32, _startPosY + 25, 3, 3);
- g.FillRectangle(brBlack, _startPosX + 39, _startPosY + 25, 3, 3);
+ g.DrawLine(pen, _startPosX + 37, _startPosY + 40, _startPosX + 37, _startPosY + 45);
+ g.DrawLine(pen, _startPosX + 32, _startPosY + 45, _startPosX + 40, _startPosY + 45);
+ g.FillRectangle(brBlack, _startPosX + 32, _startPosY + 45, 3, 3);
+ g.FillRectangle(brBlack, _startPosX + 39, _startPosY + 45, 3, 3);
- g.DrawLine(pen, _startPosX + 102, _startPosY + 20, _startPosX + 102, _startPosY + 25);
- g.FillRectangle(brBlack, _startPosX + 101, _startPosY + 25, 3, 3);
+ g.DrawLine(pen, _startPosX + 102, _startPosY + 40, _startPosX + 102, _startPosY + 45);
+ g.FillRectangle(brBlack, _startPosX + 101, _startPosY + 45, 3, 3);
- g.FillRectangle(brBlack, _startPosX + 5, _startPosY - 2, 18, 7);
- g.FillEllipse(brBlack, _startPosX, _startPosY - 2, 7, 7);
- g.FillEllipse(brBlack, _startPosX + 20, _startPosY - 2, 7, 7);
+ g.FillRectangle(brBlack, _startPosX + 5, _startPosY + 18, 18, 7);
+ g.FillEllipse(brBlack, _startPosX, _startPosY + 18, 7, 7);
+ g.FillEllipse(brBlack, _startPosX + 20, _startPosY + 18, 7, 7);
- g.FillRectangle(brBlack, _startPosX + 41, _startPosY + 8, 42, 4);
- g.FillEllipse(brBlack, _startPosX + 39, _startPosY + 8, 4, 4);
- g.FillEllipse(brBlack, _startPosX + 81, _startPosY + 8, 4, 4);
+ g.FillRectangle(brBlack, _startPosX + 41, _startPosY + 28, 42, 4);
+ g.FillEllipse(brBlack, _startPosX + 39, _startPosY + 28, 4, 4);
+ g.FillEllipse(brBlack, _startPosX + 81, _startPosY + 28, 4, 4);
}
///
/// Смена границ формы отрисовки
diff --git a/ProjectPlane/ProjectPlane/DrawingWarPlane.cs b/ProjectPlane/ProjectPlane/DrawingWarPlane.cs
index 2353084..4e53212 100644
--- a/ProjectPlane/ProjectPlane/DrawingWarPlane.cs
+++ b/ProjectPlane/ProjectPlane/DrawingWarPlane.cs
@@ -41,9 +41,9 @@ namespace ProjectPlane
if (warplane.SuperTurbine)
{
- g.FillRectangle(Brush, _startPosX, _startPosY, 30, 22);
- g.DrawLine(pen, _startPosX, _startPosY + 22, _startPosX + 30, _startPosY + 22);
- g.DrawLine(pen, _startPosX, _startPosY, _startPosX + 30, _startPosY);
+ g.FillRectangle(dopBrush, _startPosX, _startPosY + 20, 30, 22);
+ g.DrawLine(pen, _startPosX, _startPosY + 42, _startPosX + 30, _startPosY + 42);
+ g.DrawLine(pen, _startPosX, _startPosY + 20, _startPosX + 30, _startPosY + 20);
}
_startPosX += 10;
@@ -54,8 +54,8 @@ namespace ProjectPlane
if (warplane.IsBomber)
{
- g.FillEllipse(brBlack, _startPosX + 88, _startPosY, 4, 4);
- g.FillRectangle(Brush, _startPosX + 60, _startPosY, 30, 12);
+ g.FillEllipse(brBlack, _startPosX + 88, _startPosY + 20, 4, 4);
+ g.FillRectangle(Brush, _startPosX + 60, _startPosY + 20, 30, 12);
}
@@ -64,16 +64,16 @@ namespace ProjectPlane
if (warplane.IsFighter)
{
Point[] Nose = new Point[4];
- Nose[0].X = Convert.ToInt32(_startPosX + 118); Nose[0].Y = Convert.ToInt32(_startPosY + 2);
- Nose[1].X = Convert.ToInt32(_startPosX + 155); Nose[1].Y = Convert.ToInt32(_startPosY + 2);
- Nose[2].X = Convert.ToInt32(_startPosX + 118); Nose[2].Y = Convert.ToInt32(_startPosY + 25);
- Nose[3].X = Convert.ToInt32(_startPosX + 98); Nose[3].Y = Convert.ToInt32(_startPosY + 25);
+ Nose[0].X = Convert.ToInt32(_startPosX + 118); Nose[0].Y = Convert.ToInt32(_startPosY + 22);
+ Nose[1].X = Convert.ToInt32(_startPosX + 155); Nose[1].Y = Convert.ToInt32(_startPosY + 22);
+ Nose[2].X = Convert.ToInt32(_startPosX + 118); Nose[2].Y = Convert.ToInt32(_startPosY + 45);
+ Nose[3].X = Convert.ToInt32(_startPosX + 98); Nose[3].Y = Convert.ToInt32(_startPosY + 45);
g.FillPolygon(Brush, Nose);
Point[] NoseWin = new Point[3];
- NoseWin[0].X = Convert.ToInt32(_startPosX + 120); NoseWin[0].Y = Convert.ToInt32(_startPosY + 4);
- NoseWin[1].X = Convert.ToInt32(_startPosX + 148); NoseWin[1].Y = Convert.ToInt32(_startPosY + 4);
- NoseWin[2].X = Convert.ToInt32(_startPosX + 132); NoseWin[2].Y = Convert.ToInt32(_startPosY + 14);
+ NoseWin[0].X = Convert.ToInt32(_startPosX + 120); NoseWin[0].Y = Convert.ToInt32(_startPosY + 24);
+ NoseWin[1].X = Convert.ToInt32(_startPosX + 148); NoseWin[1].Y = Convert.ToInt32(_startPosY + 24);
+ NoseWin[2].X = Convert.ToInt32(_startPosX + 132); NoseWin[2].Y = Convert.ToInt32(_startPosY + 34);
g.FillPolygon(brBlue, NoseWin);
}
diff --git a/ProjectPlane/ProjectPlane/FormMap.Designer.cs b/ProjectPlane/ProjectPlane/FormMap.Designer.cs
index 77e026f..ebc5468 100644
--- a/ProjectPlane/ProjectPlane/FormMap.Designer.cs
+++ b/ProjectPlane/ProjectPlane/FormMap.Designer.cs
@@ -20,6 +20,10 @@
base.Dispose(disposing);
}
+ private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+ {
+
+ }
#region Windows Form Designer generated code
///
diff --git a/ProjectPlane/ProjectPlane/FormMap.cs b/ProjectPlane/ProjectPlane/FormMap.cs
index 680c02b..4a39c0e 100644
--- a/ProjectPlane/ProjectPlane/FormMap.cs
+++ b/ProjectPlane/ProjectPlane/FormMap.cs
@@ -16,13 +16,14 @@ namespace ProjectPlane
public FormMap()
{
InitializeComponent();
+ _abstractMap = new SimpleMap();
}
-
- private void SetData()
+ ///
+ private void SetData(DrawingPlane plane)
{
- toolStripStatusLabelSpeed.Text = $"Скорость: {plane.Plane.Speed}";
- toolStripStatusLabelWeight.Text = $"Вес: {plane.Plane.Weight}";
- toolStripStatusLabelBodyColor.Text = $"Цвет: {plane.Plane.BodyColor.Name}";
+ toolStripStatusLabelSpeed.Text = $"Speed: {plane.Plane.Speed}";
+ toolStripStatusLabelWeight.Text = $"Weight: {plane.Plane.Weight}";
+ toolStripStatusLabelBodyColor.Text = $"Color: {plane.Plane.BodyColor.Name}";
pictureBoxPlane.Image = _abstractMap.CreateMap(pictureBoxPlane.Width, pictureBoxPlane.Height,
new DrawingObject(plane));
}
@@ -61,11 +62,7 @@ namespace ProjectPlane
SetData(plane);
}
- private void PictureBoxPlane_Resize(object sender, EventArgs e)
- {
- _plane?.ChangeBorders(pictureBoxPlane.Width, pictureBoxPlane.Height);
- Draw();
- }
+
///
/// Обработка нажатия кнопки "Модификация"
///
@@ -74,15 +71,14 @@ namespace ProjectPlane
private void buttonCreateModif_Click(object sender, EventArgs e)
{
Random rnd = new();
- _plane = new DrawingWarPlane(rnd.Next(100, 300), rnd.Next(1000, 2000),
+ var _plane = new DrawingWarPlane(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)), Convert.ToBoolean(rnd.Next(0, 2)));
- SetData();
- Draw();
+ SetData(_plane);
}
}
}
-}
+
diff --git a/ProjectPlane/ProjectPlane/FormPlane.Designer.cs b/ProjectPlane/ProjectPlane/FormPlane.Designer.cs
index 3c1cd77..06e5038 100644
--- a/ProjectPlane/ProjectPlane/FormPlane.Designer.cs
+++ b/ProjectPlane/ProjectPlane/FormPlane.Designer.cs
@@ -19,7 +19,10 @@
}
base.Dispose(disposing);
}
+ private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+ {
+ }
#region Windows Form Designer generated code
///
@@ -114,6 +117,7 @@
this.statusStrip1.Size = new System.Drawing.Size(800, 22);
this.statusStrip1.TabIndex = 9;
this.statusStrip1.Text = "statusStrip1";
+ this.statusStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.statusStrip1_ItemClicked);
//
// toolStripStatusLabelSpeed
//
diff --git a/ProjectPlane/ProjectPlane/FormPlane.cs b/ProjectPlane/ProjectPlane/FormPlane.cs
index 795d7a1..35aa65e 100644
--- a/ProjectPlane/ProjectPlane/FormPlane.cs
+++ b/ProjectPlane/ProjectPlane/FormPlane.cs
@@ -82,5 +82,7 @@
SetData();
Draw();
}
+
+
}
}
\ No newline at end of file
diff --git a/ProjectPlane/ProjectPlane/Program.cs b/ProjectPlane/ProjectPlane/Program.cs
index 23d8582..bce2d5a 100644
--- a/ProjectPlane/ProjectPlane/Program.cs
+++ b/ProjectPlane/ProjectPlane/Program.cs
@@ -9,7 +9,7 @@ namespace ProjectPlane
static void Main()
{
ApplicationConfiguration.Initialize();
- Application.Run(new FormPlane());
+ Application.Run(new FormMap());
}
}
}
\ No newline at end of file