From cd590393beb8f35dfe5ac59d96351a4a6b1c0149 Mon Sep 17 00:00:00 2001 From: zw1st <144824777+zw1st@users.noreply.github.com> Date: Sun, 18 Feb 2024 14:39:04 +0400 Subject: [PATCH 1/2] =?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 --- Cruiser/Cruiser/DirectionType.cs | 33 +++ Cruiser/Cruiser/DrawingCruiser.cs | 199 ++++++++++++++++++ Cruiser/Cruiser/EntityCruiser.cs | 68 ++++++ Cruiser/Cruiser/Form1.Designer.cs | 39 ---- Cruiser/Cruiser/Form1.cs | 10 - Cruiser/Cruiser/FormCruiser.Designer.cs | 134 ++++++++++++ Cruiser/Cruiser/FormCruiser.cs | 67 ++++++ .../Cruiser/{Form1.resx => FormCruiser.resx} | 50 ++--- Cruiser/Cruiser/Program.cs | 2 +- .../Cruiser/Properties/Resources.Designer.cs | 103 +++++++++ Cruiser/Cruiser/Properties/Resources.resx | 133 ++++++++++++ Cruiser/Cruiser/Resources/arrowDown.png | Bin 0 -> 7461 bytes Cruiser/Cruiser/Resources/arrowLeft.png | Bin 0 -> 6753 bytes Cruiser/Cruiser/Resources/arrowRight.png | Bin 0 -> 6667 bytes Cruiser/Cruiser/Resources/arrowUp.png | Bin 0 -> 7501 bytes 15 files changed, 763 insertions(+), 75 deletions(-) create mode 100644 Cruiser/Cruiser/DirectionType.cs create mode 100644 Cruiser/Cruiser/DrawingCruiser.cs create mode 100644 Cruiser/Cruiser/EntityCruiser.cs delete mode 100644 Cruiser/Cruiser/Form1.Designer.cs delete mode 100644 Cruiser/Cruiser/Form1.cs create mode 100644 Cruiser/Cruiser/FormCruiser.Designer.cs create mode 100644 Cruiser/Cruiser/FormCruiser.cs rename Cruiser/Cruiser/{Form1.resx => FormCruiser.resx} (93%) create mode 100644 Cruiser/Cruiser/Properties/Resources.Designer.cs create mode 100644 Cruiser/Cruiser/Properties/Resources.resx create mode 100644 Cruiser/Cruiser/Resources/arrowDown.png create mode 100644 Cruiser/Cruiser/Resources/arrowLeft.png create mode 100644 Cruiser/Cruiser/Resources/arrowRight.png create mode 100644 Cruiser/Cruiser/Resources/arrowUp.png diff --git a/Cruiser/Cruiser/DirectionType.cs b/Cruiser/Cruiser/DirectionType.cs new file mode 100644 index 0000000..787e046 --- /dev/null +++ b/Cruiser/Cruiser/DirectionType.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Cruiser; + +/// +/// Перечисление направлений +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4, +} diff --git a/Cruiser/Cruiser/DrawingCruiser.cs b/Cruiser/Cruiser/DrawingCruiser.cs new file mode 100644 index 0000000..9bf2a50 --- /dev/null +++ b/Cruiser/Cruiser/DrawingCruiser.cs @@ -0,0 +1,199 @@ +using System.Drawing; + +namespace Cruiser; + +public class DrawingCruiser +{ + /// + /// Класс-сущность + /// + public EntityCruiser? EntityCruiser { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата корабля + /// + private int? _startPosX; + + /// + /// Верхняя координата корабля + /// + private int? _startPosY; + + /// + /// Ширина прорисовки корабля + /// + private readonly int _drawingCruiserWidth = 150; + + /// + /// Высота прорисовки корабля + /// + private readonly int _drawingCruiserHeight = 50; + + /// + /// Инициализация + /// + /// <скорость/param> + /// <вес/param> + /// <основной_цвет/param> + /// <дополнительный_цвет/param> + /// <наличие_надстроек/param> + /// <наличие_вооружения/param> + /// <наличие_якоря/param> + public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, bool bodykit, bool arms, bool anchor) + { + EntityCruiser = new EntityCruiser(); + EntityCruiser.Init(speed, weight, bodycolor, additionalcolor, bodykit, arms, anchor); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка размеров окна + /// + /// <Ширина/param> + /// <Высота/param> + /// + public bool SetPictureSize(int width, int height) + { + //TODO проверка, что объект влезает в границы поля + _pictureHeight = height; + _pictureWidth = width; + return true; + } + + /// + /// Установка позиции + /// + /// + /// + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + + } + //TODO если при установке объекта в эти координаты, он будет выходить за границы поля, + //то нужно изменить координаты, чтобы он остался в нужных размерах + _startPosX = x; + _startPosY = y; + } + + /// + /// Движение объекта + /// + /// + /// + public bool MoveTransport(DirectionType direction) + { + if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + case DirectionType.Left: + if (_startPosX.Value - EntityCruiser.Step > 0) + { + _startPosX -= (int)EntityCruiser.Step; + } + return true; + case DirectionType.Up: + if (_startPosY.Value - EntityCruiser.Step > 0) + { + _startPosY -= (int)EntityCruiser.Step; + } + return true; + case DirectionType.Right: + if (_startPosX.Value + EntityCruiser.Step + _drawingCruiserWidth < _pictureWidth) + { + _startPosX += (int)EntityCruiser.Step; + } + return true; + case DirectionType.Down: + if (_startPosY.Value + EntityCruiser.Step + _drawingCruiserHeight < _pictureHeight) + { + _startPosY += (int)EntityCruiser.Step; + } + return true; + default: return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Brush bodybrush = new SolidBrush(EntityCruiser.BodyColor); + + //Массив точек + Pen pen = new(Color.Black); + Point p1 = new Point(_startPosX.Value + 5, _startPosY.Value); + Point p2 = new Point(_startPosX.Value + 100, _startPosY.Value); + Point p3 = new Point(_startPosX.Value + 150, _startPosY.Value + 25); + Point p4 = new Point(_startPosX.Value + 100, _startPosY.Value + 50); + Point p5 = new Point(_startPosX.Value + 5, _startPosY.Value + 50); + Point p6 = new Point(_startPosX.Value + 5, _startPosY.Value); + Point[] bodypoints = {p1, p2, p3, p4, p5, p6}; + g.FillPolygon(bodybrush, bodypoints); + g.DrawPolygon(pen, bodypoints); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, 5, 10); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 10); + + Brush additionalbrush = new SolidBrush(EntityCruiser.AdditionalColor); + + if (EntityCruiser.Arms == true){ + g.FillEllipse(additionalbrush, _startPosX.Value + 100, _startPosY.Value + 15, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 100, _startPosY.Value + 15, 20, 20); + } + + if (EntityCruiser.Helicopter == true) + { + g.FillEllipse(additionalbrush, _startPosX.Value + 10, _startPosY.Value + 5, 40, 40); + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 40, 40); + Point ap1 = new Point(_startPosX.Value + 20, _startPosY.Value + 15); + Point ap2 = new Point(_startPosX.Value + 25, _startPosY.Value + 15); + Point ap3 = new Point(_startPosX.Value + 25, _startPosY.Value + 23); + Point ap4 = new Point(_startPosX.Value + 35, _startPosY.Value + 23); + Point ap5 = new Point(_startPosX.Value + 35, _startPosY.Value + 15); + Point ap6 = new Point(_startPosX.Value + 40, _startPosY.Value + 15); + Point ap7 = new Point(_startPosX.Value + 40, _startPosY.Value + 35); + Point ap8 = new Point(_startPosX.Value + 35, _startPosY.Value + 35); + Point ap9 = new Point(_startPosX.Value + 35, _startPosY.Value + 28); + Point ap10 = new Point(_startPosX.Value + 25, _startPosY.Value + 28); + Point ap11 = new Point(_startPosX.Value + 25, _startPosY.Value + 35); + Point ap12 = new Point(_startPosX.Value + 20, _startPosY.Value + 35); + Point[] abodypoints = { ap1, ap2, ap3, ap4, ap5, ap6, ap7, ap8, ap9, ap10, ap11, ap12}; + g.FillPolygon(new SolidBrush(Color.White), abodypoints ); + g.DrawPolygon(pen, abodypoints); + } + + if (EntityCruiser.BodyKit == true) + { + g.FillRectangle(additionalbrush, _startPosX.Value + 70, _startPosY.Value + 15, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 15, 20, 20); + g.FillRectangle(additionalbrush, _startPosX.Value + 60, _startPosY.Value + 20, 10, 10); + g.DrawRectangle(pen, _startPosX.Value + 60, _startPosY.Value + 20, 10, 10); + } + } +} diff --git a/Cruiser/Cruiser/EntityCruiser.cs b/Cruiser/Cruiser/EntityCruiser.cs new file mode 100644 index 0000000..3646076 --- /dev/null +++ b/Cruiser/Cruiser/EntityCruiser.cs @@ -0,0 +1,68 @@ +namespace Cruiser; + +/// +/// Класс-сущность Корабль Круизер +/// +public class EntityCruiser +{ + /// + /// Скорость сущности + /// + public int Speed { get; private set; } + + /// + /// Вес сущности + /// + public double Weight { get; private set; } + + /// + /// Основной цвет (контур) + /// + public Color BodyColor { get; private set; } + + /// + /// Дополнительный цвеь (детали) + /// + public Color AdditionalColor { get; private set; } + + /// + /// Наличие "надстроек" + /// + public bool BodyKit { get; private set; } + + /// + /// Наличие вооружения + /// + public bool Arms { get; private set; } + + /// + /// Наличие вертолетной площадки + /// + public bool Helicopter { get; private set; } + + /// + /// Шаг перемещения + /// + public double Step => Speed * 100 / Weight; + + /// + /// + /// + /// <Скорость/param> + /// <Вес/param> + /// <Основной_цвет/param> + /// <Дополнительный_цвет/param> + /// <Надстройки/param> + /// <Вооружение/param> + /// <Якорь/param> + public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, bool bodykit, bool arms, bool helicopter) + { + Speed = speed; + Weight = weight; + BodyColor = bodycolor; + AdditionalColor = additionalcolor; + BodyKit = bodykit; + Arms = arms; + Helicopter = helicopter; + } +} diff --git a/Cruiser/Cruiser/Form1.Designer.cs b/Cruiser/Cruiser/Form1.Designer.cs deleted file mode 100644 index 3f620dd..0000000 --- a/Cruiser/Cruiser/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace Cruiser -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/Cruiser/Cruiser/Form1.cs b/Cruiser/Cruiser/Form1.cs deleted file mode 100644 index 8db80b9..0000000 --- a/Cruiser/Cruiser/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Cruiser -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/Cruiser/Cruiser/FormCruiser.Designer.cs b/Cruiser/Cruiser/FormCruiser.Designer.cs new file mode 100644 index 0000000..0f7299c --- /dev/null +++ b/Cruiser/Cruiser/FormCruiser.Designer.cs @@ -0,0 +1,134 @@ +namespace Cruiser +{ + partial class FormCruiser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + pictureBoxCruiser = new PictureBox(); + buttonCreateCruiser = new Button(); + buttonRight = new Button(); + buttonDown = new Button(); + buttonUp = new Button(); + buttonLeft = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxCruiser).BeginInit(); + SuspendLayout(); + // + // pictureBoxCruiser + // + pictureBoxCruiser.Dock = DockStyle.Fill; + pictureBoxCruiser.Location = new Point(0, 0); + pictureBoxCruiser.Name = "pictureBoxCruiser"; + pictureBoxCruiser.Size = new Size(1002, 724); + pictureBoxCruiser.SizeMode = PictureBoxSizeMode.CenterImage; + pictureBoxCruiser.TabIndex = 9; + pictureBoxCruiser.TabStop = false; + // + // buttonCreateCruiser + // + buttonCreateCruiser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateCruiser.Location = new Point(12, 678); + buttonCreateCruiser.Name = "buttonCreateCruiser"; + buttonCreateCruiser.Size = new Size(80, 34); + buttonCreateCruiser.TabIndex = 8; + buttonCreateCruiser.Text = "Создать"; + buttonCreateCruiser.Click += buttonCreate_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(955, 678); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 4; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(914, 678); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 5; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(914, 637); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 6; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(873, 678); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 7; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // FormCruiser + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1002, 724); + Controls.Add(buttonLeft); + Controls.Add(buttonUp); + Controls.Add(buttonDown); + Controls.Add(buttonRight); + Controls.Add(buttonCreateCruiser); + Controls.Add(pictureBoxCruiser); + Name = "FormCruiser"; + Text = "Круизер"; + ((System.ComponentModel.ISupportInitialize)pictureBoxCruiser).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxCruiser; + private Button buttonCreateCruiser; + private Button buttonRight; + private Button buttonDown; + private Button buttonUp; + private Button buttonLeft; + } +} \ No newline at end of file diff --git a/Cruiser/Cruiser/FormCruiser.cs b/Cruiser/Cruiser/FormCruiser.cs new file mode 100644 index 0000000..40f03cf --- /dev/null +++ b/Cruiser/Cruiser/FormCruiser.cs @@ -0,0 +1,67 @@ +namespace Cruiser; + +public partial class FormCruiser : Form +{ + private DrawingCruiser? _drawingCruiser; + + public FormCruiser() + { + InitializeComponent(); + } + + private void Draw() + { + if (_drawingCruiser == null) + { + return; + } + Bitmap bmp = new(pictureBoxCruiser.Width, pictureBoxCruiser.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawingCruiser.DrawTransport(gr); + pictureBoxCruiser.Image = bmp; + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + Random random = new(); + _drawingCruiser = new DrawingCruiser(); + _drawingCruiser.Init(random.Next(100, 300), random.Next(200, 400), + 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))); + _drawingCruiser.SetPictureSize(pictureBoxCruiser.Width, pictureBoxCruiser.Height); + _drawingCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawingCruiser == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + + switch (name) + { + case "buttonUp": + result = _drawingCruiser.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawingCruiser.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawingCruiser.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawingCruiser.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } +} diff --git a/Cruiser/Cruiser/Form1.resx b/Cruiser/Cruiser/FormCruiser.resx similarity index 93% rename from Cruiser/Cruiser/Form1.resx rename to Cruiser/Cruiser/FormCruiser.resx index 1af7de1..af32865 100644 --- a/Cruiser/Cruiser/Form1.resx +++ b/Cruiser/Cruiser/FormCruiser.resx @@ -1,17 +1,17 @@  - diff --git a/Cruiser/Cruiser/Program.cs b/Cruiser/Cruiser/Program.cs index d0f2665..626bc14 100644 --- a/Cruiser/Cruiser/Program.cs +++ b/Cruiser/Cruiser/Program.cs @@ -11,7 +11,7 @@ namespace Cruiser // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormCruiser()); } } } \ No newline at end of file diff --git a/Cruiser/Cruiser/Properties/Resources.Designer.cs b/Cruiser/Cruiser/Properties/Resources.Designer.cs new file mode 100644 index 0000000..de11520 --- /dev/null +++ b/Cruiser/Cruiser/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace Cruiser.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Cruiser.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowDown { + get { + object obj = ResourceManager.GetObject("arrowDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowLeft { + get { + object obj = ResourceManager.GetObject("arrowLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowRight { + get { + object obj = ResourceManager.GetObject("arrowRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowUp { + get { + object obj = ResourceManager.GetObject("arrowUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Cruiser/Cruiser/Properties/Resources.resx b/Cruiser/Cruiser/Properties/Resources.resx new file mode 100644 index 0000000..254c492 --- /dev/null +++ b/Cruiser/Cruiser/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\arrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Cruiser/Cruiser/Resources/arrowDown.png b/Cruiser/Cruiser/Resources/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..56484836c6bd719da8d4fbda4802c25786b94372 GIT binary patch literal 7461 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 literal 0 HcmV?d00001 diff --git a/Cruiser/Cruiser/Resources/arrowLeft.png b/Cruiser/Cruiser/Resources/arrowLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8b71079136c3b4c8dbc798afbc6e1046e1e37f GIT binary patch literal 6753 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 literal 0 HcmV?d00001 diff --git a/Cruiser/Cruiser/Resources/arrowRight.png b/Cruiser/Cruiser/Resources/arrowRight.png new file mode 100644 index 0000000000000000000000000000000000000000..7a325558a4e9845ba7f62a130549ea8aaa8beb84 GIT binary patch literal 6667 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 HL6`mqhYxr{ literal 0 HcmV?d00001 diff --git a/Cruiser/Cruiser/Resources/arrowUp.png b/Cruiser/Cruiser/Resources/arrowUp.png new file mode 100644 index 0000000000000000000000000000000000000000..17322c628438acbfc1866aed1ab18b7560bb582c GIT binary patch literal 7501 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 Bx3K^K literal 0 HcmV?d00001 -- 2.25.1 From d7b2497caa3fbe179823c053bc66ff45d997e383 Mon Sep 17 00:00:00 2001 From: zw1st <144824777+zw1st@users.noreply.github.com> Date: Wed, 21 Feb 2024 16:36:38 +0400 Subject: [PATCH 2/2] =?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 --- Cruiser/Cruiser/DrawingCruiser.cs | 36 +++++++++++++++++++++++++++---- Cruiser/Cruiser/FormCruiser.cs | 2 +- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Cruiser/Cruiser/DrawingCruiser.cs b/Cruiser/Cruiser/DrawingCruiser.cs index 9bf2a50..393ef09 100644 --- a/Cruiser/Cruiser/DrawingCruiser.cs +++ b/Cruiser/Cruiser/DrawingCruiser.cs @@ -67,7 +67,19 @@ public class DrawingCruiser /// public bool SetPictureSize(int width, int height) { - //TODO проверка, что объект влезает в границы поля + if (_pictureWidth < _drawingCruiserWidth || _pictureHeight < _drawingCruiserHeight) + { + if (_startPosX != null && _startPosY != null) + { + if (width < 0) width = 0; + else if (_startPosX + _drawingCruiserWidth > width) _startPosX = width - _drawingCruiserWidth; + if (height < 0) height = 0; + else if (_startPosY + _drawingCruiserHeight > height) _startPosY = height - _drawingCruiserHeight; + } + } + + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена _pictureHeight = height; _pictureWidth = width; return true; @@ -80,15 +92,31 @@ public class DrawingCruiser /// public void SetPosition(int x, int y) { + _startPosX = x; + _startPosY = y; if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) { return; - + } + if (_startPosX + _drawingCruiserWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _drawingCruiserWidth; + } + else if (_startPosX < 0) + { + _startPosX = 0; + } + if (_startPosY + _drawingCruiserHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawingCruiserHeight; + } + + else if (_startPosY < 0) + { + _startPosY = 0; } //TODO если при установке объекта в эти координаты, он будет выходить за границы поля, //то нужно изменить координаты, чтобы он остался в нужных размерах - _startPosX = x; - _startPosY = y; } /// diff --git a/Cruiser/Cruiser/FormCruiser.cs b/Cruiser/Cruiser/FormCruiser.cs index 40f03cf..fd1222b 100644 --- a/Cruiser/Cruiser/FormCruiser.cs +++ b/Cruiser/Cruiser/FormCruiser.cs @@ -30,7 +30,7 @@ public partial class FormCruiser : Form 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))); _drawingCruiser.SetPictureSize(pictureBoxCruiser.Width, pictureBoxCruiser.Height); - _drawingCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _drawingCruiser.SetPosition(random.Next(pictureBoxCruiser.Right - 200, pictureBoxCruiser.Right - 160), random.Next(pictureBoxCruiser.Bottom - 150, pictureBoxCruiser.Bottom - 100)); Draw(); } -- 2.25.1