From a1e7d192d88721f508ea794c1cb5bf0d33f8a1f1 Mon Sep 17 00:00:00 2001 From: ShuryginDima Date: Mon, 26 Feb 2024 22:32:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectSeaplane/DrawningSeaplane.cs | 482 ++++++++---------- .../ProjectSeaplane/EntitySeaplane.cs | 30 +- .../ProjectSeaplane/FormSeaplane.Designer.cs | 40 +- .../ProjectSeaplane/FormSeaplane.cs | 111 ++-- 4 files changed, 327 insertions(+), 336 deletions(-) diff --git a/ProjectSeaplane/ProjectSeaplane/DrawningSeaplane.cs b/ProjectSeaplane/ProjectSeaplane/DrawningSeaplane.cs index d1bd771..72eba68 100644 --- a/ProjectSeaplane/ProjectSeaplane/DrawningSeaplane.cs +++ b/ProjectSeaplane/ProjectSeaplane/DrawningSeaplane.cs @@ -1,268 +1,214 @@ -namespace ProjectSeaplane; -/// -/// Класс, отвечающий за прорисовку и перемещение объекта-сущности -/// -public class DrawningSeaplane -{ - /// - /// Класс-сущность - /// - public EntitySeaplane? EntitySportCar { get; private set; } - /// - /// Ширина окна - /// - private int? _pictureWidth; - /// - /// Высота окна - /// - private int? _pictureHeight; - /// - /// Левая координата прорисовки автомобиля - /// - private int? _startPosX; - /// - /// Верхняя кооридната прорисовки автомобиля - /// - private int? _startPosY; - /// - /// Ширина прорисовки автомобиля - /// - private readonly int _drawningCarWidth = 110; - /// - /// Высота прорисовки автомобиля - /// - private readonly int _drawningCarHeight = 60; - /// - /// Инициализация свойств - /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия антикрыла - /// Признак наличия гоночной полосы - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) - { - EntitySportCar = new EntitySeaplane(); - EntitySportCar.Init(speed, weight, bodyColor, additionalColor, - bodyKit, wing, sportLine); - _pictureWidth = null; - _pictureHeight = null; - _startPosX = null; - _startPosY = null; - } - /// - /// Установка границ поля - /// - /// Ширина поля - /// Высота поля - /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах - public bool SetPictureSize(int width, int height) - { - // TODO проверка, что объект "влезает" в размеры поля - // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена - _pictureWidth = width; - _pictureHeight = height; - return true; - } - /// - /// Установка позиции - /// - /// Координата X - /// Координата Y - public void SetPosition(int x, int y) - { - if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) - { - return; - } - // TODO если при установке объекта в эти координаты, он будет - "выходить" за границы формы - // то надо изменить координаты, чтобы он оставался в этих границах -12 - _startPosX = x; - _startPosY = y; - } - /// - /// Изменение направления перемещения - /// - /// Направление - /// true - перемещене выполнено, false - перемещение - невозможно -public bool MoveTransport(DirectionType direction) - { - if (EntitySportCar == null || !_startPosX.HasValue || - !_startPosY.HasValue) - { - return false; - } - switch (direction) - { - //влево - case DirectionType.Left: - if (_startPosX.Value - EntitySportCar.Step > 0) - { - _startPosX -= (int)EntitySportCar.Step; - } - return true; - //вверх - case DirectionType.Up: - if (_startPosY.Value - EntitySportCar.Step > 0) - { - _startPosY -= (int)EntitySportCar.Step; - } - return true; - // вправо - case DirectionType.Right: - //TODO прописать логику сдвига в право - return true; - //вниз - case DirectionType.Down: - //TODO прописать логику сдвига в вниз - return true; - default: - return false; - } - } - /// - /// Прорисовка объекта - /// - /// - public void DrawTransport(Graphics g) - { - if (EntitySportCar == null || !_startPosX.HasValue || - !_startPosY.HasValue) - { - return; - } - Pen pen = new(Color.Black); - Brush additionalBrush = new - SolidBrush(EntitySportCar.AdditionalColor); - // обвесы - 13 - if (EntitySportCar.BodyKit) - { - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value, - 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + - 40, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + - 10, 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value, - 15, 15); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + - 45, 15, 15); - g.FillEllipse(additionalBrush, _startPosX.Value + 90, - _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value + 90, - _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, - _startPosY.Value + 10, 20, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, - _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, - _startPosY.Value + 45, 15, 15); - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, - 20); - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 40, - 20, 20); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, - 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, - 14, 15); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + - 45, 14, 15); - g.FillEllipse(additionalBrush, _startPosX.Value, - _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value, - _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 1, - _startPosY.Value + 10, 25, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, - _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, - _startPosY.Value + 45, 15, 15); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value, - 39, 15); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + - 45, 39, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, - _startPosY.Value + 1, 40, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, - _startPosY.Value + 45, 40, 15); - } - //границы автомобиля - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, - 20); - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, - 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, - 20); - 14 - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, - 20); - g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, - 30); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, - 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, - 52); - //задние фары - Brush brRed = new SolidBrush(Color.Red); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 5, 20, - 20); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 35, - 20, 20); - //передние фары - Brush brYellow = new SolidBrush(Color.Yellow); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 5, - 20, 20); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 35, - 20, 20); - //кузов - Brush br = new SolidBrush(EntitySportCar.BodyColor); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, - 30); - g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, - 30); - g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, - 50); - //стекла - Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX.Value + 70, _startPosY.Value + 10, - 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 30, _startPosY.Value + 10, - 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 8, - 35, 2); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 51, - 35, 2); - //выделяем рамкой крышу - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, - 35, 40); - g.DrawRectangle(pen, _startPosX.Value + 75, _startPosY.Value + 15, - 25, 30); - g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 15, - 15, 30); - // спортивная линия - if (EntitySportCar.SportLine) - { - g.FillRectangle(additionalBrush, _startPosX.Value + 75, - _startPosY.Value + 23, 25, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, - _startPosY.Value + 23, 35, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 10, - _startPosY.Value + 23, 20, 15); - } - // крыло - if (EntitySportCar.Wing) - 15 - { - g.FillRectangle(additionalBrush, _startPosX.Value, - _startPosY.Value + 5, 10, 50); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, - 10, 50); - } - } -} \ No newline at end of file +namespace ProjectSeaplane; +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// +public class DrawningSeaplane +{ + /// + /// Класс-сущность + /// + public EntitySeaplane? EntitySeaplane { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки гидросамолёта + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки гидросамолёта + /// + private int? _startPosY; + + /// + /// Ширина прорисовки гидросамолёта + /// + private readonly int _drawningSeaplaneWidth = 130; + + /// + /// Высота прорисовки гидросамолёта + /// + private readonly int _drawningSeaplaneHeight = 50; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия поплавков + /// Признак наличия лодки + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool boat) + { + EntitySeaplane = new EntitySeaplane(); + EntitySeaplane.Init(speed, weight, bodyColor, additionalColor, floats, boat); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + _pictureWidth = width; + _pictureHeight = height; + return true; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + + _startPosX = x; + _startPosY = y; + } + + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно + public bool MoveTransport(DirectionType direction) + { + if (EntitySeaplane == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntitySeaplane.Step > 0) + { + _startPosX -= (int)EntitySeaplane.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntitySeaplane.Step > 0) + { + _startPosY -= (int)EntitySeaplane.Step; + } + return true; + // вправо + case DirectionType.Right: + if (_startPosX.Value + _drawningSeaplaneWidth + EntitySeaplane.Step < _pictureWidth) + { + _startPosX += (int)EntitySeaplane.Step; + } + return true; + //вниз + case DirectionType.Down: + + if (_startPosY.Value + _drawningSeaplaneHeight + EntitySeaplane.Step < _pictureHeight) + { + _startPosY += (int)EntitySeaplane.Step; + } + return true; + default: + return false; + } + } + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntitySeaplane == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + Pen pen = new(Color.Black, 2); + Brush additionalBrush = new SolidBrush(EntitySeaplane.AdditionalColor); + + + + //Отрисовка основных частей самолёта + Brush br = new SolidBrush(EntitySeaplane.BodyColor); + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 20, 20, 20); + g.FillEllipse(br, _startPosX.Value, _startPosY.Value + 20, 20, 20); + Point point1 = new Point(_startPosX.Value + 10, _startPosY.Value); + Point point2 = new Point(_startPosX.Value + 40, _startPosY.Value + 20); + Point point3 = new Point(_startPosX.Value + 100, _startPosY.Value + 20); + Point point4 = new Point(_startPosX.Value + 130, _startPosY.Value + 30); + Point point5 = new Point(_startPosX.Value + 100, _startPosY.Value + 40); + Point point6 = new Point(_startPosX.Value + 10, _startPosY.Value + 40); + Point[] points = { point1, point2, point3, point4, point5, point6 }; + g.FillPolygon(br, points); + g.DrawPolygon(pen, points); + g.DrawLine(pen, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 40, _startPosY.Value + 20); + g.DrawLine(pen, _startPosX.Value + 100, _startPosY.Value + 20, _startPosX.Value + 100, _startPosY.Value + 40); + g.DrawLine(pen, _startPosX.Value + 100, _startPosY.Value + 30, _startPosX.Value + 130, _startPosY.Value + 30); + + //Крылья + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 20, 25, 5); + g.FillEllipse(br, _startPosX.Value, _startPosY.Value + 20, 25, 5); + g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 25, 40, 10); + g.FillEllipse(br, _startPosX.Value + 30, _startPosY.Value + 25, 40, 10); + + + //Шасси + g.DrawRectangle(pen, _startPosX.Value + 38, _startPosY.Value + 40, 4, 5); + g.DrawRectangle(pen, _startPosX.Value + 88, _startPosY.Value + 40, 4, 5); + g.DrawEllipse(pen, _startPosX.Value + 35, _startPosY.Value + 45, 5, 5); + g.DrawEllipse(pen, _startPosX.Value + 42, _startPosY.Value + 45, 5, 5); + g.DrawEllipse(pen, _startPosX.Value + 87, _startPosY.Value + 45, 5, 5); + + g.FillRectangle(br, _startPosX.Value + 38, _startPosY.Value + 40, 4, 5); + g.FillRectangle(br, _startPosX.Value + 88, _startPosY.Value + 40, 4, 5); + g.FillEllipse(br, _startPosX.Value + 35, _startPosY.Value + 45, 5, 5); + g.FillEllipse(br, _startPosX.Value + 42, _startPosY.Value + 45, 5, 5); + g.FillEllipse(br, _startPosX.Value + 87, _startPosY.Value + 45, 5, 5); + + + //Надувнвя лодка + if (EntitySeaplane.Boat) + { + g.DrawEllipse(pen, _startPosX.Value + 50, _startPosY.Value + 15, 30, 10); + g.FillEllipse(additionalBrush, _startPosX.Value + 50, _startPosY.Value + 15, 30, 10); + + } + + //Поплавки + if (EntitySeaplane.Floats) + { + g.DrawRectangle(pen, _startPosX.Value + 30, _startPosY.Value + 30, 4, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 30, _startPosY.Value + 30, 4, 15); + g.DrawRectangle(pen, _startPosX.Value + 66, _startPosY.Value + 30, 4, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 66, _startPosY.Value + 30, 4, 15); + g.DrawEllipse(pen, _startPosX.Value + 20, _startPosY.Value + 40, 70, 10); + g.FillEllipse(additionalBrush, _startPosX.Value + 20, _startPosY.Value + 40, 70, 10); + + } + } +} diff --git a/ProjectSeaplane/ProjectSeaplane/EntitySeaplane.cs b/ProjectSeaplane/ProjectSeaplane/EntitySeaplane.cs index 3503966..625ccfc 100644 --- a/ProjectSeaplane/ProjectSeaplane/EntitySeaplane.cs +++ b/ProjectSeaplane/ProjectSeaplane/EntitySeaplane.cs @@ -1,6 +1,6 @@ namespace ProjectSeaplane; /// -/// Класс-сущность "Спортивный автомобиль" +/// Класс-сущность "Гидросамолёт" /// public class EntitySeaplane { @@ -24,45 +24,39 @@ public class EntitySeaplane /// public Color AdditionalColor { get; private set; } - /// - /// Признак (опция) наличия обвеса - /// - public bool BodyKit { get; private set; } /// - /// Признак (опция) наличия антикрыла + /// Признак (опция) наличия поплавков /// - public bool Wing { get; private set; } + public bool Floats { get; private set; } /// - /// Признак (опция) наличия гоночной полосы + /// Признак (опция) наличия лодки /// - public bool SportLine { get; private set; } + public bool Boat { get; private set; } /// - /// Шаг перемещения автомобиля + /// Шаг перемещения гидросамолёта /// public double Step => Speed * 100 / Weight; /// - /// Инициализация полей объекта-класса спортивного автомобиля + /// Инициализация полей объекта-класса гидросамолёта /// /// Скорость /// Вес автомобиля /// Основной цвет /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия антикрыла - /// Признак наличия гоночной полосы + /// Признак наличия поплавков + /// Признак наличия лодки public void Init(int speed, double weight, Color bodyColor, Color - additionalColor, bool bodyKit, bool wing, bool sportLine) + additionalColor, bool floats, bool boat) { Speed = speed; Weight = weight; BodyColor = bodyColor; AdditionalColor = additionalColor; - BodyKit = bodyKit; - Wing = wing; - SportLine = sportLine; + Floats = floats; + Boat = boat; } } diff --git a/ProjectSeaplane/ProjectSeaplane/FormSeaplane.Designer.cs b/ProjectSeaplane/ProjectSeaplane/FormSeaplane.Designer.cs index 7ef955e..fde1660 100644 --- a/ProjectSeaplane/ProjectSeaplane/FormSeaplane.Designer.cs +++ b/ProjectSeaplane/ProjectSeaplane/FormSeaplane.Designer.cs @@ -29,7 +29,7 @@ private void InitializeComponent() { pictureBoxSeaplane = new PictureBox(); - buttonCreate = new Button(); + buttonCreateSeaplane = new Button(); buttonLeft = new Button(); buttonUp = new Button(); buttonDown = new Button(); @@ -42,75 +42,79 @@ pictureBoxSeaplane.Dock = DockStyle.Fill; pictureBoxSeaplane.Location = new Point(0, 0); pictureBoxSeaplane.Name = "pictureBoxSeaplane"; - pictureBoxSeaplane.Size = new Size(850, 539); + pictureBoxSeaplane.Size = new Size(900, 500); pictureBoxSeaplane.TabIndex = 0; pictureBoxSeaplane.TabStop = false; // - // buttonCreate + // buttonCreateSeaplane // - buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreate.Location = new Point(12, 504); - buttonCreate.Name = "buttonCreate"; - buttonCreate.Size = new Size(75, 23); - buttonCreate.TabIndex = 1; - buttonCreate.Text = "Создать"; - buttonCreate.UseVisualStyleBackColor = true; - buttonCreate.Click += buttonCreate_Click; + buttonCreateSeaplane.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateSeaplane.Location = new Point(12, 465); + buttonCreateSeaplane.Name = "buttonCreateSeaplane"; + buttonCreateSeaplane.Size = new Size(75, 23); + buttonCreateSeaplane.TabIndex = 1; + buttonCreateSeaplane.Text = "Создать"; + buttonCreateSeaplane.UseVisualStyleBackColor = true; + buttonCreateSeaplane.Click += ButtonCreateSeaplane_Click; // // buttonLeft // buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonLeft.BackgroundImage = Properties.Resources.arrow_left; buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; - buttonLeft.Location = new Point(718, 490); + buttonLeft.Location = new Point(768, 451); buttonLeft.Name = "buttonLeft"; buttonLeft.Size = new Size(35, 35); buttonLeft.TabIndex = 2; buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; // // buttonUp // buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonUp.BackgroundImage = Properties.Resources.arrow_up; buttonUp.BackgroundImageLayout = ImageLayout.Stretch; - buttonUp.Location = new Point(758, 450); + buttonUp.Location = new Point(808, 411); buttonUp.Name = "buttonUp"; buttonUp.Size = new Size(35, 35); buttonUp.TabIndex = 3; buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; // // buttonDown // buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonDown.BackgroundImage = Properties.Resources.arrow_down; buttonDown.BackgroundImageLayout = ImageLayout.Stretch; - buttonDown.Location = new Point(758, 490); + buttonDown.Location = new Point(808, 451); buttonDown.Name = "buttonDown"; buttonDown.Size = new Size(35, 35); buttonDown.TabIndex = 4; buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; // // buttonRight // buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonRight.BackgroundImage = Properties.Resources.arrow_right; buttonRight.BackgroundImageLayout = ImageLayout.Stretch; - buttonRight.Location = new Point(799, 490); + buttonRight.Location = new Point(849, 451); buttonRight.Name = "buttonRight"; buttonRight.Size = new Size(35, 35); buttonRight.TabIndex = 5; buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; // // FormSeaplane // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(850, 539); + ClientSize = new Size(900, 500); Controls.Add(buttonRight); Controls.Add(buttonDown); Controls.Add(buttonUp); Controls.Add(buttonLeft); - Controls.Add(buttonCreate); + Controls.Add(buttonCreateSeaplane); Controls.Add(pictureBoxSeaplane); Name = "FormSeaplane"; Text = "Гидросамолёт"; @@ -121,7 +125,7 @@ #endregion private PictureBox pictureBoxSeaplane; - private Button buttonCreate; + private Button buttonCreateSeaplane; private Button buttonLeft; private Button buttonUp; private Button buttonDown; diff --git a/ProjectSeaplane/ProjectSeaplane/FormSeaplane.cs b/ProjectSeaplane/ProjectSeaplane/FormSeaplane.cs index 86c3f21..8781929 100644 --- a/ProjectSeaplane/ProjectSeaplane/FormSeaplane.cs +++ b/ProjectSeaplane/ProjectSeaplane/FormSeaplane.cs @@ -1,40 +1,87 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace ProjectSeaplane +namespace ProjectSeaplane; +/// +/// Форма работы с объектом "Спортивный автомобиль" +/// +public partial class FormSeaplane : Form { - public partial class FormSeaplane : Form + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningSeaplane? _drawningSeaplane; + /// + /// Конструктор формы + /// + public FormSeaplane() { - private DrawningSeaplane? _drawningSeaplane; - - public FormSeaplane() + InitializeComponent(); + } + /// + /// Метод прорисовки машины + /// + private void Draw() + { + if (_drawningSeaplane == null) { - InitializeComponent(); + return; } - - private void ButtonCreate_Click(object sender, EventArgs e) + Bitmap bmp = new(pictureBoxSeaplane.Width, pictureBoxSeaplane.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningSeaplane.DrawTransport(gr); + pictureBoxSeaplane.Image = bmp; + } + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreateSeaplane_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningSeaplane = new DrawningSeaplane(); + + _drawningSeaplane.Init(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawningSeaplane.SetPictureSize(pictureBoxSeaplane.Width, pictureBoxSeaplane.Height); + _drawningSeaplane.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningSeaplane == null) { - Random random = new(); - _drawningSeaplane = new DrawningSeaplane(); - _drawningSeaplane.Init(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); - _drawningSeaplane.SetPictureSize(pictureBoxSeaplane.Width, pictureBoxSeaplane.Height); - _drawningSeaplane.SetPosition(random.Next(10, 100), random.Next(10, 100)); - - Bitmap bmp = new(pictureBoxSeaplane.Width, pictureBoxSeaplane.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawningSeaplane.DrawTransport(gr); - pictureBoxSeaplane.Image = bmp; - + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = + _drawningSeaplane.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = + _drawningSeaplane.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = + _drawningSeaplane.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = + _drawningSeaplane.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); } } }