From c95892c5c3b9288dfa1a629b44aec48bb7c129c9 Mon Sep 17 00:00:00 2001 From: just1valery Date: Mon, 19 Sep 2022 18:33:36 +0400 Subject: [PATCH 1/5] =?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=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarmlyShip/WarmlyShip/Direction.cs | 16 ++ WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs | 172 ++++++++++++++++ WarmlyShip/WarmlyShip/EntityWarmlyShip.cs | 42 ++++ WarmlyShip/WarmlyShip/Form1.Designer.cs | 39 ---- WarmlyShip/WarmlyShip/Form1.cs | 10 - WarmlyShip/WarmlyShip/FormShip.Designer.cs | 184 ++++++++++++++++++ WarmlyShip/WarmlyShip/FormShip.cs | 56 ++++++ WarmlyShip/WarmlyShip/FormShip.resx | 63 ++++++ WarmlyShip/WarmlyShip/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 103 ++++++++++ .../{Form1.resx => Properties/Resources.resx} | 13 ++ WarmlyShip/WarmlyShip/Resources/arrowDown.jpg | Bin 0 -> 62022 bytes WarmlyShip/WarmlyShip/Resources/arrowLeft.jpg | Bin 0 -> 61872 bytes .../WarmlyShip/Resources/arrowRight.jpg | Bin 0 -> 61715 bytes WarmlyShip/WarmlyShip/Resources/arrowUp.jpg | Bin 0 -> 62105 bytes WarmlyShip/WarmlyShip/WarmlyShip.csproj | 15 ++ 16 files changed, 665 insertions(+), 50 deletions(-) create mode 100644 WarmlyShip/WarmlyShip/Direction.cs create mode 100644 WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs create mode 100644 WarmlyShip/WarmlyShip/EntityWarmlyShip.cs delete mode 100644 WarmlyShip/WarmlyShip/Form1.Designer.cs delete mode 100644 WarmlyShip/WarmlyShip/Form1.cs create mode 100644 WarmlyShip/WarmlyShip/FormShip.Designer.cs create mode 100644 WarmlyShip/WarmlyShip/FormShip.cs create mode 100644 WarmlyShip/WarmlyShip/FormShip.resx create mode 100644 WarmlyShip/WarmlyShip/Properties/Resources.Designer.cs rename WarmlyShip/WarmlyShip/{Form1.resx => Properties/Resources.resx} (83%) create mode 100644 WarmlyShip/WarmlyShip/Resources/arrowDown.jpg create mode 100644 WarmlyShip/WarmlyShip/Resources/arrowLeft.jpg create mode 100644 WarmlyShip/WarmlyShip/Resources/arrowRight.jpg create mode 100644 WarmlyShip/WarmlyShip/Resources/arrowUp.jpg diff --git a/WarmlyShip/WarmlyShip/Direction.cs b/WarmlyShip/WarmlyShip/Direction.cs new file mode 100644 index 0000000..ed3b850 --- /dev/null +++ b/WarmlyShip/WarmlyShip/Direction.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal enum Direction + { + Up = 1, + Down = 2, + Left = 3, + Right = 4 + } +} diff --git a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs new file mode 100644 index 0000000..0b8c685 --- /dev/null +++ b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs @@ -0,0 +1,172 @@ +namespace WarmlyShip +{ + internal class DrawningWarmlyShip + { + /// + /// Класс-сущность + /// + public EntityWarmlyShip Ship { get; private set; } + /// + /// Левая координата отрисовки коробля + /// + private float _startPosX; + /// + /// Верхняя кооридната отрисовки коробля + /// + private float _startPosY; + /// + /// Ширина окна отрисовки + /// + private int? _pictureWidth = null; + /// + /// Высота окна отрисовки + /// + private int? _pictureHeight = null; + /// + /// Ширина отрисовки коробля + /// + private readonly int _shipWidth = 170; + /// + /// Высота отрисовки коробля + /// + private readonly int _shipHeight = 65; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес коробля + /// Цвет основной части + public void Init(int speed, float weight, Color bodyColor) + { + Ship = new EntityWarmlyShip(); + Ship.Init(speed, weight, bodyColor); + } + /// + /// Установка позиции коробля + /// + /// Координата X + /// Координата Y + /// Ширина картинки + /// Высота картинки + public void SetPosition(int x, int y, int width, int height) + { + if (x < 0 || y < 0 || width < x + _shipWidth || height < y + _shipHeight) + { + _pictureHeight = null; + _pictureWidth = null; + return; + } + _startPosX = x; + _startPosY = y; + _pictureWidth = width; + _pictureHeight = height; + } + /// + /// Изменение направления пермещения + /// + /// Направление + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _shipWidth + Ship.Step < _pictureWidth) + { + _startPosX += Ship.Step; + } + break; + //влево + case Direction.Left: + + if (_startPosX - Ship.Step > 0) + { + _startPosX -= Ship.Step; + } + break; + //вверх + case Direction.Up: + + if (_startPosY - Ship.Step > 0) + { + _startPosY -= Ship.Step; + } + break; + //вниз + case Direction.Down: + if (_startPosY + _shipHeight + Ship.Step < _pictureHeight) + { + _startPosY += Ship.Step; + } + break; + } + } + /// + /// Отрисовка корабля + /// + /// + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 + || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + + //заполнение коробля + + PointF[] P = + { + new Point((int)(_startPosX),(int) _startPosY + 45), + new Point((int)_startPosX + 170, (int)_startPosY + 45), + new Point( (int) _startPosX + 150,(int) _startPosY + 65), + new Point((int) _startPosX + 50, (int) _startPosY + 65), + new Point((int) _startPosX, (int) _startPosY + 45), + + }; + Brush br = new SolidBrush(Ship?.BodyColor ?? Color.Black); + g.FillPolygon(br, P); + + Brush brBlue = new SolidBrush(Color.LightBlue); + g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 20, 70, 25); + + Pen pen = new(Color.Black); + //границы коробля + g.DrawRectangle(pen, _startPosX + 70, _startPosY + 20 , 70, 25); + g.DrawLine(pen, _startPosX, _startPosY + 45, _startPosX + 170, _startPosY + 45); + g.DrawLine(pen, _startPosX, _startPosY + 45, _startPosX + 50, _startPosY + 65); + g.DrawLine(pen, _startPosX + 50, _startPosY + 65, _startPosX + 150, _startPosY + 65); + g.DrawLine(pen, _startPosX + 150, _startPosY + 65, _startPosX + 170, _startPosY + 45); + } + + /// + /// Смена границ формы отрисовки + /// + /// Ширина картинки + /// Высота картинки + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _shipWidth || _pictureHeight <= _shipHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _shipWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _shipWidth; + } + if (_startPosY + _shipHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _shipHeight; + } + } + } +} diff --git a/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs b/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs new file mode 100644 index 0000000..236dd56 --- /dev/null +++ b/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class EntityWarmlyShip + { + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public float Weight { get; private set; } + /// + /// Цвет кузова + /// + public Color BodyColor { get; private set; } + /// + /// Шаг перемещения автомобиля + /// + public float Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса автомобиля + /// + /// + /// + /// + /// + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new(); + Speed = speed <= 0 ? rnd.Next(50, 150) : speed; + Weight = weight <= 0 ? rnd.Next(40, 70) : weight; + BodyColor = bodyColor; + } + } +} diff --git a/WarmlyShip/WarmlyShip/Form1.Designer.cs b/WarmlyShip/WarmlyShip/Form1.Designer.cs deleted file mode 100644 index 3873b6f..0000000 --- a/WarmlyShip/WarmlyShip/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace WarmlyShip -{ - 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 - } -} \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/Form1.cs b/WarmlyShip/WarmlyShip/Form1.cs deleted file mode 100644 index bca3f86..0000000 --- a/WarmlyShip/WarmlyShip/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace WarmlyShip -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.Designer.cs b/WarmlyShip/WarmlyShip/FormShip.Designer.cs new file mode 100644 index 0000000..ec87a9a --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormShip.Designer.cs @@ -0,0 +1,184 @@ +namespace WarmlyShip +{ + partial class FormShip + { + /// + /// 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.pictureBoxShip = new System.Windows.Forms.PictureBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelBodyColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBoxShip + // + this.pictureBoxShip.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxShip.Location = new System.Drawing.Point(0, 0); + this.pictureBoxShip.Name = "pictureBoxShip"; + this.pictureBoxShip.Size = new System.Drawing.Size(800, 424); + this.pictureBoxShip.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxShip.TabIndex = 0; + this.pictureBoxShip.TabStop = false; + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelBodyColor}); + this.statusStrip1.Location = new System.Drawing.Point(0, 424); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(800, 26); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(80, 20); + this.toolStripStatusLabelSpeed.Text = "Скорость: "; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(40, 20); + this.toolStripStatusLabelWeight.Text = "Вес: "; + // + // toolStripStatusLabelBodyColor + // + this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(49, 20); + this.toolStripStatusLabelBodyColor.Text = "Цвет: "; + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreate.Location = new System.Drawing.Point(12, 367); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowDown; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(701, 367); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(30, 30); + this.buttonDown.TabIndex = 3; + this.buttonDown.Text = " "; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowUp; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(701, 331); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(30, 30); + this.buttonUp.TabIndex = 4; + this.buttonUp.Text = " "; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonRight + // + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowRight; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(737, 367); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(30, 30); + this.buttonRight.TabIndex = 5; + this.buttonRight.Text = " "; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonLeft + // + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowLeft; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(665, 368); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(30, 30); + this.buttonLeft.TabIndex = 6; + this.buttonLeft.Text = " "; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // FormShip + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.pictureBoxShip); + this.Controls.Add(this.statusStrip1); + this.Name = "FormShip"; + this.Text = "Корабль"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private PictureBox pictureBoxShip; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelBodyColor; + private Button buttonCreate; + private Button buttonDown; + private Button buttonUp; + private Button buttonRight; + private Button buttonLeft; + } +} \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.cs b/WarmlyShip/WarmlyShip/FormShip.cs new file mode 100644 index 0000000..14b3681 --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormShip.cs @@ -0,0 +1,56 @@ +namespace WarmlyShip +{ + public partial class FormShip : Form + { + private DrawningWarmlyShip _ship; + public FormShip() + { + InitializeComponent(); + } + private void Draw() + { + Bitmap bmp = new(pictureBoxShip.Width, pictureBoxShip.Height); + Graphics gr = Graphics.FromImage(bmp); + _ship?.DrawTransport(gr); + pictureBoxShip.Image = bmp; + } + /// + /// "" + /// + /// + /// + private void buttonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + _ship = new DrawningWarmlyShip(); + _ship.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); + toolStripStatusLabelSpeed.Text = $": {_ship.Ship.Speed}"; + toolStripStatusLabelWeight.Text = $": {_ship.Ship.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_ship.Ship.BodyColor.Name}"; + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "buttonUp": + _ship?.MoveTransport(Direction.Up); + break; + case "buttonDown": + _ship?.MoveTransport(Direction.Down); + break; + case "buttonLeft": + _ship?.MoveTransport(Direction.Left); + break; + case "buttonRight": + _ship?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + } +} \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.resx b/WarmlyShip/WarmlyShip/FormShip.resx new file mode 100644 index 0000000..5cb320f --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormShip.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/Program.cs b/WarmlyShip/WarmlyShip/Program.cs index 341c406..876d476 100644 --- a/WarmlyShip/WarmlyShip/Program.cs +++ b/WarmlyShip/WarmlyShip/Program.cs @@ -11,7 +11,7 @@ namespace WarmlyShip // 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 FormShip()); } } } \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/Properties/Resources.Designer.cs b/WarmlyShip/WarmlyShip/Properties/Resources.Designer.cs new file mode 100644 index 0000000..b783bc0 --- /dev/null +++ b/WarmlyShip/WarmlyShip/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace WarmlyShip.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("WarmlyShip.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/WarmlyShip/WarmlyShip/Form1.resx b/WarmlyShip/WarmlyShip/Properties/Resources.resx similarity index 83% rename from WarmlyShip/WarmlyShip/Form1.resx rename to WarmlyShip/WarmlyShip/Properties/Resources.resx index 1af7de1..293419e 100644 --- a/WarmlyShip/WarmlyShip/Form1.resx +++ b/WarmlyShip/WarmlyShip/Properties/Resources.resx @@ -117,4 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\arrowDown.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/Resources/arrowDown.jpg b/WarmlyShip/WarmlyShip/Resources/arrowDown.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f21002e9dce74a1a585cf193d689dabca519cdff GIT binary patch literal 62022 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 av7M8J~td~%> z=*_6wegNY<*+qGnM;gQ(UEq_kVNw&L;OV*}=;J z=XM}1il0_?s*HhZFYY`|8*B6N`*}ePfZ7nC2J<3=L=T}H7`(z1z^iM^P=WQ8=tqu@ z=}{8u^Timk0mDfJVM&DCe=}Z831b0UPcV;y7>%!bGVqpg+?<0&Z(xI%XVVad{#}zZ zq1@|6m|R8Z`<*wXKJr-HHa~L*q*vq1RJ{di7r1Oy)Q94R7inxj`pPgd2Xl&P6PuxTnniwe)hz-c#~=$*8!8=1JPBeE91!q^#VMzNfT0!< z$Kh8s?jPPzR21*3dAjp!iMbk{`f$JzWVv7uEq$>h`P4@5tHIdI%3y2dp0!u2=$~U8a6}&rg-?yP4ogO;Tn0X1Dk=scAQio@ zJ8^hp;m6Zqa(#P0TzBCdGu_OcLf$*XCI*pl1n#PIz%gJL(JI76{8?`YWH<%!z~H_| zSHXq(I}(kx1lkAn|5=L+0wY$!K!3}n`$HP!qn^zQn7F$ zs?=$dB%~u4wEbgG&d;iyl^uK~cZNFOny7ULc}0WT7yJfMsC5zN9rt#!ZjhZ4aI`lv z9PM$qOSmnAF-doqk@_Bec4bRN;~0HVsQ_QE1Y@Z<+)<=32Coegsv%brs%5(OK8QH3 zS6Xoy)ArfXL}17BcSb85noa$;AWw+C-u)-IzhAZo`uqTC12sX%o*W2*C^Wh}sqP)BKDq=(S@+G*?zwP_{6C`^0INxTwh{{NClvQ#eCDfkII&Il8SmtvNiuhb|DkNl4?ZZ zQ=&;2kx|&FiX&OnoFV4wrs2wNp~E_P$3MN#^CxlzDyg2idYDJbJjUup1TIhUH-m&< zHu3(PDty1^HO`@61?H(;E7b~;r&3p{6{yA-J%AJYgi0rQl6)jSb4{LWydeD{mXt^* z-hGz8xDQ#EK5ao(4=N>XrQSu`6B`;FygY(85YLnC26kIb{|$rYj6Ra^`U)rJ^cxt| zbYXS_o{Y57v9I)%F-pBFL}+pitUSRQVN%K`6|2X* zpz&)MPp1b{pNaf+h++f~Q?OCAi8d);N~0>AvkkJwOPWtdBpKF!IDT0yru^9uul;3+ z|DY4b1my7t*<{yMGEiiFdr=L&2Wp0A5q7D*OubHh)8|35E-!Ha)QPh&3ltr|XrHu_ zyG$KmjW-QHAiDAls;Y3q7DM3?NAC44eJRO&oa^W15QEcbeRo4tHub$z?X}BNd*Y)H zef~S&;`d2)`JZ7eTc7Jw2oT=}5{6tE9vIr=S0@z#N)`wn_G6I_<#s3lQe8=)QD3o1 zJwX}_=IQK{Dv{p3$cxJmpV)cl>NpW!l|2B&+tsTb;X7`Y6+oCKlh{{9S%$FFS7~f@ zzzCjtjUzln6U3I&#nr~!+b~6_H8znhH-E? zF|`)CMppq2!v`z3&-kPGgAUO^&4Pkk!SlUAw{o(l42=MhhGz)ngiiVYOUgn=3|Fv( z7e*M3xd+?UZ1))`9#-K+?YcjnB$Qp|)pzrj%t^_a7cZc3J;X6E^XM^zYsu+Et7WLq zp~37;-d9rXg+oKkth41K;*73A=+ko0m}=bIj0hK`8o#(53(D|TCSO#4jb zdLMN>=j9c2abI6;h@zBK$Rm)z3`oi@pj0tOqy+nc?z|w566nbc`#+3h zxTiNcZ$r$#oV12wFu?=TSC=6bh705pYzq>WHlpyGt&|G5AN(#&9L9(pa)fp3x^3nn z9xyj{iCOK{d40tyJmu)_Eypw^^lAkS8%Rz>a+L$J8b{|IEKHmZue>@0HZFTsL}i=Z znhT3VHLfTekh%Tv(xYuU8zG<7;r73W+i%n#baOb0Ff)zS=RR1aR^(|L-KsY?c=^uJ z*95y36P_FHHgEG}702AGxCm;3#`T-L6j<`(8IyGY`ZV*QSR?!)=}z_Y4$U9T-xTHC zRG#&oao*DErM}0~`1W45Cr=(r#)K-7KVm-w(zs^8=rBOg2bCdvQ>(Uv8qCMM+8Y3^ z=H-qFIC2^UduH=I2ejG-K&#!8GE<)dnbhw8k}dzdkG(s(FBN+^=~j20>zf=;9OxZj zP&L!Z$6NF2HMz<_kW5N8suV$VPp9x%QI5b^`RQ#Vu^VNGxC=AKo)DdiJN2*be-k=v z)}PC=!4rGw9rx$yXU6AF=^=6kiTXeZDvPD?<&YE#+5)_S#D^neInFl39?wW{VLcT# z`c^uBmy!3CeLOG3K+NX!3FdcJ|3)dx{-l77pWMm=DZGU%d0?-R#p+p}Ao=?3JMwWu zC;_{c`x7bWU!uz&%2?(;vlQLCjRTNsf|4Od0OT=Xx0+~;g5^<{k%VMi3FdO8@Z_Lp zd52HmG;Qsh%s9`$lOy zY~Mj|8hdqGD_>RkJ;$TFH+Ox_SY}I#CL_^IMBEgPXt5$H(-FR3lL6b}zpP{|^Ndn0 zs9zD4RT^yzJhh-*sK#fP0wZahSTIjP7VHv?a}ULQgi~b-C!(uhAV@1q=9zx_I*-Yr z&-}xf&Ax$SKvsq=n&G*NZ8u%@2!9i5>8Cwhr6qv2VTC}R7Dra4wK0<-h=IcCNGNRWrlns*OFB8 zzLqQCieZlV=X=tqJV1j*QuuU&-=-Il(H?X4S4vSF!TkM7JvFCzH+z*4=!W7RA1mRw z`m~9$BK&akjM73nNr{?JVNX6y>y-GKuPh+-&|vPR z3CVp>Y9CMW``$ik^HBDBJ3ZuD7}XuMoWHUF$jDwL+8YN-pH^ zy*hRHZm{*`$l1Fh`-?MUZFz(w5y}6*e}~E(B>JEze4D|_YO<2C%r-`Sun3KS?bWru z44cKNI6Pm8rKG>z2$W?#3@lfVD7fy@Lx5yuUnyN1iyj=w`Ra&8tU9R_PMAAeulXd@ zT4~eeyF&Iy!Y_==)+p{BxusaOIX7SFbN;H%{3rG1zqO7YD+q>5XmG6rKX{G`Zc5wu zO`--^2S?1k!OWc|pU%~4PtOc9#HDS6WY%cqf0FkqK4%SzAj{A|Nl&9_oO4_+e_c8U z`po^NEI0?h*y?*4T&e%_j5QaV?*n?_zI z??K0d(gwg7Uyb8ug`?8Mq(Kd=a9N*z3ArSPY z;aPX$3Z6CpAInf_#sZcEyJ1laG`1|VSI@XZab72eox*kW4aM!8*maw* zQ)e_4M?@0G+v5FLV&zXJ-avxHW$>9iiqjk|dI-faUV66sQiZ{JuGIT>4)@2g$6Ze( z)P|L-ZKlt{xFU##KqMlU77YgX6Y3>EJd?V#wXs5n6yE4KjNW z4w%~Rx|CeNc}VuF%1O9(gfcuyeB6Lvde33_=IFPgnQ@?)^tDt{&fHj1-c`+;#4qh* zYVk%hGsXK@8WyLAw;|_=wcP#1!89BBnn5~{@t=)Ce;0PFDLY@8u)>^;6FnT9fY2FEoNt74AA5$;oHjE@)d z%qMck6K$W};RKlvyvD}#FXx+-7nu>^MStA`pz|^T0rCBN2kPs)&b9P4Sq=<*WzJ$w zKazSVQ^*HFd={oOV2ThzLEJh!Y9(>Mty{)K*X#7CLz*i}v;GFf=Ij&nXEYTiuW#v- zesWBRQ~Jfk>8JGbzBJCYU|Jbss;A*X`DwM0R+SgT2NyQ=cH@&4uwqvp-xxesMEy9e zUw!NF%eTz_97RuMzA(u9hwe5HKv^{0#U3GKef2~1CFxx09Y~;B57>r$Rh6!1-VxDS8hUUnG|C$HMw!CH=2#~sGJ_PJaO>0XW5&^ zRQt{@l`a0}s;ZoCM%L(Q^M_kn>BNd16K1O5wJJR9X9012rg~uT#e-k7>oB~f#&y@y zHn;bJikWo^_i){OD>^e9=M|mVe^X$^VP_QF>1S2mE)wKH!ZerJPzho94B@%zM)~Ri z?vA_dpC+yLU%#SJzbMJszOAJ^Avy50caq$y((JcUoUQql^O<{W7me#RSfb2Ir|QVS zc&yQfze(17^j}>%8V*e1{HLlW(kq%Zg-P<8bnRV++#|)9)9J;wQw>9iJ~dL%oEumi zCG0Bi4q1rW6~}%$`PklhROgf-C{9o(C3C5k2P+1GKXLI0ke)?6cw^8x8rvP*le2Fd zv|{o#t`!z{Ui9u#9e-KrH<6idTS?=_c7O;j9ja3#Pd@6ZgdaUl& zcA?3kxaxCt=e8a{DmQqjdrf47M24RulUd~2(1D$gT>=HEMz+^zb(kkA7cob;--h9V zt$^lt-}p&|)ox>HiY>nZh>Qr?5<*fa$xikxnJi~ebzl__aUMRT ze+Z(Xp@B|-f6(eUWTS(2ISoOEhR}8hf*2usS{jHRyrKciVOrX?-_+O8G0q=eQ{Nop zg6P06@RGgx828^^Q}=^t!ZIMJBzAQOIsk2;p`rf&@rRb4min`ij*ga|VIuomb-SF-q<)Y2Y(?MU>j*;1$fo%r77)BrLsUtIW3T$||aA zyZ7upa8T!vuAcs3Q!{f5ODk&|$5T$HozJ+qdSCFl=!^Ed6mm5*Ec{wTWPHNS#H8d~ zDYx%uKFE5Qos*kaT2@|BS@pQOrm?9R*V5Y7-qHQKr?;kHeTl*Np$@4rC zJFhVE?vJ}y(!eCS%Y?}1;Pr}`UrKpgnnb;{wJZB|7Z&_4UD;nR>~GgK2(bde+`vW4 z1tFmo^8H8|Xnk29gLN5Lmw|N|SeJoy8CaKrbs1Qffpr;Jmw|N|SeJoy8CaKrbs1Qf zfpr;Jmw|N|SeJoy8CaKrbs6|SAOmIO0|a?w<6ipt!n`r-kC!ZxJ*7t`Cx<)Po;*;> z^^=Z2wD}mHw!F`nqDDcUWm_z_{VRP$;nr%fmC z*gVxoJV_R!sjG;)Sr}*v4zfq$XZIbzIhqj>pNd77j@~vHvJcSealbe+vQ_-9=Aia1 zv+D^*>Q9SYBb?ZTWeaebaCajZMfoUjqGK(4zRmbsJ@&6%F)*p|&+q(rXL2&hn#oTr zLaK~gf9eeFGzQ*oNfwZu@FeqDHYeD^nHHJ?urKR|>7?*qZE*?43=R zG>wlCly+NswQ^+@dW#EW!3>1oTZKN>GgAcJmeYQ=75bL9E~)=sNtNwdgnDJHU z(`90+F{!_~i{E7v8?h)Q^!6%bd^4~1#$lYWjDlPN@62@-=d+^QirT2 ze3WqZ6^yfTPrVQlgJ^h#ou@!4(0n zV4W49Wp7LHji5bK6A-)Lx#l_jtx{O$TaUbs_7ZefW*#eJX8tk$74`Y#IRSB+X%&>`%!c{EOI~Q?GS=S^S(#)yW8Pz`F z@TjG;ZbD1R}AAW+uIggUl;J=qK~q5}u{)gv$uiU0kkQlX7Q!7?o!vBx6Tx zZHu_2p9+b4da0?aJH;^yRsfk=HO=&V?ObYNeR=S7g;wE z?>s5Y{Xlc_2RH+TmS&KHKK+7V6gI}>bzRi6a6?^H#sy)~lTcroJaVcK)FmZAy zLcW4xHW9V5mB>`ibNQ$4A7ZkBUj*%qjar2S$=1tSb4Yvh^1Mom$DUoLp3(L?fC<=o8bYs%nwf!C`F?2b0=<`PE0dVtep=vrdf&s!g>LC z3w0F=e3iL)g*V6dlwVd*a6eC?HLk=>625LVs*J;&%PxP-v5T$w{LV0B7)6;>SwY&0 zt4Y45p_@N-Y5qxp-M$e@R<8ZN-pQ{oyyiOPuGU>|j<=4G`lgcbH(O7&_y4%8`=S3y zK7i%qESV2WVZRI?ScT}8-Ax;?9Dz+FPXex{j>E;tcNOBMx{hp<9nQ}#ob{->I;(Ci zhTpABvqZnFPkFrx0afETdv!4Udi@r3nI6$I^ujZ_{-vu~=EK1jGOx7#oK9q)J)f_B zV%!h|VjH4G7p#tIO)n3yNd`fbRRuCklO-bn2Yp&+Uv{Gy@4!w7F zu!5gJhL`G)Mx#1qVQ!i5RCgXU7zPe+KxxiM)nBfD8%r{11kAe%AFR2#d(?c@Z1Vv&hZ3n69T16}$I^E`G z*X7(PU&Hg>=SDVKN9?ABWS$xW?~~s9xBE<%3;UL7SE2SuGXE-6!U2rT>i|BoV*htG z^U_S4eaBz;i`1|G{<$ypKaYuBKh85sQwZiE&RURsV^mhQHc|v%o?Je3FVEFd*3<1w z3Nwp3=SHi%E4?W}P&_?!p@Q_D%*R1t@g^RiFj<|I+*Q=>Ojk>Hmnyhm0?L^7{djpXEP80g(Ld{hgQ`gK~9%$a7N> zdA`b4;j&70UIO+m(00ybvBHVjL2Vxe+Q1hjQyA6&?#~X%IEBqo%{6(^vBRaRa*k(1 z=J@Z-n7-3ZiVg}a!8BN}Liq8qU?8&wLn5>6t=@=cRFr|xTmXo%b__A>W50J!O+IIK za{Qrq?p$LfiQI*0&;^m%m@qgnXBFaf?9-G%Cp>%gN$PaBhRVZx6|c%q=p$>wrRvg^ zHo90(N;0Ed^I}trJx}-Sc=z~ml77(^Z>e}aT-u?n(h(Z*MpC!KeqREF@*aBvv#5j$ z9-H6%0kh;8j13e1*|wm4u8}es8`hWKF$S_N7PtpFHb=n>0e zYi%F<$?$Ix6^|#!vx}t~H&g){5B9bPGWG!r@c2yEQ6|`OC5xCmF5hI}G3|*=CU9^L zRjmQ?n`4sqR0U12Pt6^9+&Xy~^4Fbd0AETESAjJzT(&hjP##^g+RrrI-<*sXT71eN969^2uH%#Kfsy7c#l0ol5Z6^crJ5(MXsndpqkizwoPkO#rF`a z^=;or^8RsL%x4ugKPpQi5YCJT^X}A_d}J1*)$U*f(Y!DW_yX=Xz{i900{FoCWWXNE zD4b2mneqIba4}{4`R=S2wFN8Vx8x0S2bga--FR^LoKS-k!y?FX2A5+RnpYuV3_g27 zZB(S{al&|2qqX3Dw5?vv<)sIHZF^%{H@^Lp^V;6i2%Uo#xrwumrki0wM#9k7d;dUXx~j&*&HoaL3#pR7~`iX!ub=k&4xy} zQB@Lu389#K+Ei%PXW!9}pFKQ8Mg|gs6d_R=5DjgpzWoQ=S8Vm{0D^MF5?{4)?Gl2L ziZ31y``NY(4x4qR+izpK6*&|7aa}Crjqv$=bW=;3cz1xp_+@5}a#!JpSzeX%l@T{G z%1UUZBXh*8Q_ME#F%T5i0%;whC4~v&c6q$bBNL7#xj0HFFn<)#Gd-G6(z9dZWQ7>H z4gm3*Ru=5Y+Z?bA2%STIt#)!Vxb0<`LHRzY+bXB7s#Lq8iBC%CN{+Gfhw=@pwJg=F?_3b$R#kj{uB)g^-dv~C$Q?AIM?Nf97GkvLe zL#J1N4uj!mCVt)Qe>W-jkEZ+=-}5a3pq<_gsJVNZT!Bv&^3ZDI9Rp;0;4&7|4!t?f z@o68GztMjo<%<|Xq;Pz(-a+(fNuiX^^gjRcwjeEE-X3k8*2ii@F}7=g~&|@ z5D^tRLWt^9?v+ZF+KVhkbKAHNu^hrEW8G(A839}|ER&9VNJ_>P3miu$n8X~huo&R9 za#0cuoEjWa5;b_*PU{_4{pMDZrh*oa{Yd9!Z>cZ(Qm>CpzKt6wQ|AFhf_S4nDs11$ zVE*FZ{KkF1lk;59g#ODJU(33>u*Mg*Q4yJ8jK=L!*BeY!Xh9SU*dWR@4t1#cp_O_H zFQ!2wkXwI3A!^f(65@;7L)|SS5lPFIDO#F_g*B7!0xfroSf1O_QGIfe8lV7+9#R^( ziPG7g3yaMA11~ZQc#**vE&+w{k&VW$NiCCKa!G9(Y%68Hv4%8T6blfFqWj z$TmG1J|uPAU{!S8v0SB{$5DE!&DDSPA{`>k1vF&9W04Na_LIdpNS5;p2^K`l#&Qp!NR({J8Fx{y}ajUoxRf;G^aS zV()xK(bVn0s7#l0D$gfZRyu5L1`lS+OU3VDj%1L&6(mbspfG;~6eRRVP5R3QPcfx+ z7wg4)`xn#@oC-5lF7q(}fFJC@eq?8&{fh@F8^qD$3Cn~7xDj7W=Aj)QoKEMhGZm}9 zci~?77~99J9Tg*v(qShmc4T+b3kp5h#(jhL@o50T1HnU*MU6=L6z0nSf}a5pyeIMY z{$m>QnIrWxNB6y9Fn&BAov0?vLl&p}^Fn{-eSx=G0=wRXr%KFe^LK3z(uaaB^pd)O??_?sBN|Ycj*VMO zk}j64LQDd&MVp;p2MA>vh}JxKe@13OXm|OQD1}+4$*>9G!)AqnCREsnnq9JN$u=hn zd@2!Z3C}Ev?|a|66k2UN-Gkh=_i}kus*j`;)s1Z8YU~iCh{D-8o9ycWI+qLFY!WFY z`BMoM&nLfqYZ|s2>1d@sI&z=%+fPd+Xd!Gc4acx}ptnUZ_`Ff+B!r;rL=%={<~@(g zDC?^%^w&1#mG&*|BR;#Q-x=Isa*q;JcboX5Bcp$YV*V^j0+CaFGtrqWFf{)Z_QTI? zZCX-jRp4=1(hPTIPd|A!DM`mYBZBUH#un~#c^O{%gdk+uVObbZyst$f-HnzMMz^m* zPt_3=C0+8tW6Q3XSAir;3eCVOM2dtc?J~s^o)ih0l?vnsEINM`f<9qj9D>B9JCnN# z=`7<=FoWYN)FMN>EOj3ngN3hU&iAZB_g4tTWLj`jCwMW^#3&_yKKAqZKzey;1|x-J9j zGO#WK>oV})Dg*yw{{ENp`hT~*c;8AEK$AVgu_axNwzFaZM@b$Dcr5eBW~r+FIj(nl z+OoXIa&{WZ(mRy26wH*5A7#U+BiGoAx&(n4g)R5+#c#%z9mk!o43zJJquVFZ36^#% zAMSE2F>e~R6}nFIg-2S3_FDplxfetpTx0=|ayc<4YFEh~sf2c^FA2ske;+jU8_}2V zdc*&BK7(O_^ru__A7K@$9Gd~8gLDeh7%{QViR6as(-eCBU^Gd!br))CE{Cqk&7;~6 zmH1*~&oE1Akrm{x6KL}TbL<1^>e!>L^VuPqLaUJTS|*uQfj;ZS3d4cqd&~CEoEJ*B zP18wLnkSC(i&8*Umn}7o>=}ir8orbqOc7qG9Y-{#hDdQAaJpb=-#>n`yl}EZRWc%Z zPq64V?!9eaSRLmGLHknYM^>;Dc}&B>dinMVWR&KPCnVLJj8-T2EA(LrOs${Y3tuu4 zj&9TwxfAo^MRN)1f7{LfXJNqqfxmOi68`A3%pW~|;H0xWuK86Hoy;jvu$2o6wwlu* z+B>%wyC}?C0pxZ925Y(}L@AJ%P~f?yVlWV0g9=y1*%o?QLHI@0$(wX-lFt(}uW<$A z@rZXA3iB(VwYb-6P}7G|Xb+KaDvV*FlpR{`Up123TI+Rp|3rw_2$e~wnmgCY_LlZr z6oq*N9CaoDxsrmd)L>cOciNQbv8P&u9WSTc8h6L%9~#+kxxgs|I>I!ZhqrR+78z+D~l znFfFr5vbA5PPP{1o4Gd7QYWrnvAd3DJb%XRc(3w|z@hGOx75z%<(riiDzx#1#J=;TFv|i3Y6W+J^?o>JrJ8gARF$|~Oi->d3j3sH`=Lf=k6B8fe7XsSdy(gBZFIV+{2sAk>|G;i2 zS4hGoJT;6?O733l_*i6sc^>+Gv*ln*MJ{SuxIS0iZWM*G+lPBTT;SEMFB$)$`A(99 zzDnvZQ(pdOI`H~&KOG+o=BMv|`)gDZhG>a|_aer1Ke754(UX-Z&*2J^!nb zN^p2pQi}&Q=wNt|uVQr2F0k=a6j%SMwd# znZNpR(CyEkZKqSV-qzo8+gU;CIxc14PQ3oxc)#|XGyeuQ@PBEC6eKqCU%Ilqg{ns% z`@HS!48)#1sS%P+I>a28BP7>MglMJGZh|zd<@_kP+d%BuKoT}R|4v)}N#ZMeZ&YaiN!y{D zyY*6hPmlf(kFY%^*Zi5`|Np0-O`-f92=Z%2p`cg*Zq zD?YW>Iufk$#%A{w!5vJ{Dzpnjv_QeT6D9y7b;Hz`rV=}36Xxn1k1*O)w>DtPrS{z3 z(AJKA`PXl0Hj9{DTiEcPfQ&*41RNtx5cqQmUBc)POOkFxMQ-%MU|RNt1vNE=DPUY_ zf*7=@9$t~h@1y7cOV9ZKA6oXeXuu*AVF5SGLZ*S;3ec@BqvG9l3gh-0ILfC0Ywuj; zd|&R3Om8)z(@y5cI)6x^`tXr}wcJW!2_foIQ>eL{Nf$x?C8n*-EZ2lVhlopZuR8M% zU!)Zo{t~4pSW1~cZsno$AWO(?E}6nSz2>h`_PEp&qjA>UcQIIu; zp&*6oq!Fi_(YfZY(JsTkibq?wFrTuLr@4vJ0wl?^&WCgWH)s@0md$>ouTcC}^4Seg z=ALPM>b3iJ%Pmxn$EWuDxU%9}31Q7E!=}Uc+TFA-yGe>;=vwwJ^|Ec7WP(uKLV;v}{6rnvFv7&3Lo4x}V2tznpC78Z2@=+bJP>n(?SMYq8W3B~&~RHj7z!F9+fM z%*v)Ld{;Qq1J)rv#COsq&0FgDJP+JxAL{90JTBohl8Qd}IId6kj=SXCXDV1cw1U-? z17LCBj?M|AwXO`RIW&u@Ho0>XPI8*p4E6LhU>byjB*{)3x#I28KUhJeWD*-`rS_6!00bpDO z0As(sgPklkngL?57OHr$RfjZLpN1cms3(?;RNEHH-)(q*iQ~JwQ1o!yD{`d zbt+(-w%^f+`OJdnD#Rl-Qf*6RzNLmPD&B~RJm`PLi)INNLw^p4Y&n^JS*55Lk9so- zLJ;5UnHH7FI5q`P!6bYn$VQ@W?6F8mNfPJbsuUSEA&M`?1v8iovT(5^UlY=Mz|K1$uQ~mAzs&<%%BX*v_FXj|2@*&`nENKB4P~pvyrd_2K0xb z9BR3cW!S@T-0emdyE zSDxwsAmc0QMb5P8s&@FYvsOJb#j!cGnQ$)2xp_=XQ`|L8j+BJWM+3-sxP`F1*0pQu zW0#P#gZ@*9<|PC@g)H~1W5)lEj${9THCrl>{3jSfF~CxW)wD*}xf9rA8|(RAZvIP0 z1b5dIW;JzDr<6o^pxC&9D$HGLdYDeu19h311eYD<%lbBkvQ2#=gAciRgGT#t|{c~TyrNJry8{e!U&PUZ4*iyrgD&ro>|ZwT1)byG&CSnUeEhg3@jA$-I9R`lkSdXi zchmg)CWpTn3HUW=!TLTwYbN=ZasCVTQjLfyMGq=mtrzzUBcUxk#V*H%MW#t7p}&TB zlaVfNJ}vhw};A{A!P7NA;kY5NXCD1zxltREE?JKH7k)60SZXWGwmSrkZc>4jG`{c z1|31U7*_2K2#?)6=+k`T@LtcDn{kPIOtdNIK@3`mCAuc#I0ibGQLPC2>schn@t7R{ zl!8}$b-EdijH{3>GqmHC*DmRr&(JPqy}aYtoGBSvn89iLfCg6sLj~W83ur8i#1GDf z0F!TWx>w`mcxV-DOA7w*q-i>df4M;AO)T=`{L`Rk&+l|?dgFyleLl#Iy&XH$PhrX; zB~X|ONeZC9OVlQgC$B7~bnSOpUloZ#*qS%UyIt7Wt|(-%x%rxy?|p812rd0HKjRN7 zFIoTGUsY=I51!t6%qGB48l$E3AX&a4>B$F(^-&WXEUs-P(?@&dEzq~{LDOlDabAbp zLhadwto1h59+sh9d<>Kp=+4%VnI;EI`50{qeAex%sZM<0mp0LmZ1iq=@Z8kcsQ?;3 z!S{^kcZ+C!8Ingu2|rBmx##L@q1Ly+?_23rF2KLQb!#$MN7`DBxN~& zybA_Qeln*nDC6O?HK^{bh(f~q1Gh1Ds~ZV_S~Sd84Nf`oE;>~`|XK3Ogf!dGojm4Gam4amh}Pca&9n^ zF2|_}k$7eu=J@vjm*0m~Xn9((92XFgY3w~3>V&%-x}>e)-_S8n=9BZ@wE8*w3%z~t zs7*)=EvhIPNd~gJCWrT!C3`jembV`{)a##$4IjKas=r4nMs>>QtOHBfC*0{t$KtUL zpz$Q&aDW3N80*|~(at!V9l7IUTxZHE3MnbMHctviZf54`iv)Evy}bS{0yT&t^OjK< z#{e|VoQltt58RCQIZL*7^Kj@6u+O^US>WQl=NMMR`I?tTN=ODfZvP&3WJ)Z&eU{9r zHsMU>uCl4=t+3@MwKgtpReFQ&(yQ_;%S*Uw+ve5fyt#uonJG0c?Zpmhiu@{6^WSre z{#zf7?~C5r)#hDliE|^!Z<#jgk$0ah@I2}7pXzq4`O)w}e12x;1|e&GI-si}t978j zEg*k}#J`GVBs)i$korHh%xlt<9Q~5jjTXTkS!PPxM0+E)?l2KC z^d4AQBEXHUiB%LXOynqEh{f{WN3VTSP2|5_=IbI2*#%kqHOLHQdSzZxg)%q@{E;iv z)G}2?S6~E@_*D5^bW>x#56K9>f}KU#J*pVWIg=Y5ciA;7<=DBV8LrRQf>;)H8ZF;F z|5^LrpW;;Oum4!w@|SVHzl=2BA~jh6P`VJ)Ktal&fN*$>CX4<9@@6>h+>x?3a;)_t zeQ&o)XN9TAyKU~;sg-q<-Ql#ux21j^2*ZM@==x+yIxx=-mz~F_M~-szk`cxGS#J~$ z`&IQwuv&Iirg)2zxEaSpcE07*6TdR)v+^piA64SqxC#x`j!X9kYs#XL`lO2?=aV8l zOx=!tp9_~q730x`#@-Z%J`<-6VX3bLe6LyYPzUd#sPp%|fb9$`6+JpaWC>}wTS%Zl34n?CxI=Y*^-agCPzsdwPN)v5b6*Yz8v??;KG zos5OIC6l>n@l|9#-KWTta15A>tPH;2(lc~sRPMFX#*znYxW@dix5aP~Va6YqTetJI zohP?r8Z3Y=y@C}6>%^reeT8{eRo6B7%ipOh2z{8JnZICiF3NwS^{2Ocj)lt$IaYvp z09kT4yTFCNUZUHhd}V*%=u*qPKvi|+<7fl6=A+Ctdlfe)-n^kr$ElaWfj=5aiO1rL z5kwb`tM%#zdFbW&GwupcHFu_Rf$6d+(-}ro=cVUBT^o;x8El{*)4{ z|2suye?~#x?JW>e5@&F__S0RCAn>rQ$+{4 zO}pu=`>Q?Xqt`bMF605+229EjTtf{C5Y(U`+>8_+YB5bnZ)CB1HaHnmIdb4&tdPV~ zuffi|@$f;(5iVvSa(sjAm(y5mBsm!z3y4t-c_`*p$X&Xp&WY$$-gOnpQ-tVBdLy}Q z{I1Ij1EGu<>%vnGW{ZzD)Tw^3Pe(%(+YiNND@Ci2LwY3gQ7kShmOj9O=uwPcxhQ^| zuO?P?>8e)Zm%?njR*i$fYAw%pGVTVB=!Jhr_UXU%JO3f8_AgX(&`hE#T0hwnTjxK) z`aWx+M0cHS#_)z$@;&Isk8VW!{Uj_1Nt8mo-?c{2+xU=tcqQgUuf}=eA$wCof0OMg z|NKH^yD33_gJSc^`$rWV&9@(UwEgj7)c%~X11krQX(67fZ?kB?UuWExQ#@@+VSW$# zKlYQUGc4Z3xT3L5ZVYR#sLp4^@z*m|R?`WaFt2B>(4<`V*6?@gbgFxKPj)dM?0p5( zpi~cXfDJqAWvapgWziNBhG7I3$?k7MT3@bf$%WcM9`-%w%1+1*= zx!=)3=WqJ_cj&gC-T^yQt7niV^Gdd+;1q}qLf0Y#fj-VwpKRBQof`5DH2oS6qT($M zZhnc+rK7da0&d?JxZ}0}ltJ>5#rGy(N1ooMPP9lMedVd4l5g*_6ngi0*gZ#CZEtsP9vzjs$it<371zM&4UEOJrS()X zEW$Kw)C4N9!9v;puBlDQDs)wW5ES89Mk_lqbzEcR<~y#^{9$`CvS)Vp#TR<7iymm4j~yOXJKc=E zxOZjoeh@NP;aWOdoi;JHWhp%@!2JHys0fKaYELBy57a?;Q1(N3V4F?n%Ll;eSTb)b zg^32tHo}~VS8^nYG=Ve@NhhYH@>QMnL#~Y_nK8J=f?Kk3>QOwb4X+ojo5|joSWE)) zTMR^ZgQg0mLAD~Q(9xvSQQ#D5NXuWf9q@V%0P5IV}`a_Bs!<&{;5vlGeAZez3$C z$e#eyEKg6Qzd;d_GC_1u|6_CzRQCxn={l{9j>%GI)Z6~6Jswhkq zL@;ltF0r9bf#ldQe~Hi}8e-Uc66xGqt}p2LtfCrqmr>p7-U!c4;}27+FBwR*I)RA* zKgZ$+6{0}W`KUmz25MZT1}-Fq4J~vPy3E)5$n$G(>wL>ga?)woNZ9x4#72zFqr>Fh z^?LGu;d%KJ9~T~RM#!>Z?MFFtkwOVWk#y~2vcWMVQMQd z73+9U$T$YKeD_NwHhajUtZ!0-KpEf^yY+t8!#7@U9AyAR4aimvTHv@_=~R#!#VZ0p z>N;7~RJP`B-7L3C{~~33KT{!p+q)TR^j0n7(puB?%2Ldfk^C6=J&~aSbiQbkH)=@d z)KIt&H#IIb3VtphG3oW#9LUICJt<{3dCEkLo%x2AG7VYu6{-qFv>1bxO>rp3R5Oqs zY?7XhsZ$Vs^1L;;*qN=+rH$s|vS{HIbP#Q&WCUfZIPJX(oLTsxDowbz2w*=i-ZdGQ zBxY1sRs)QBluDBj+)%(M9!x`LOuzRx+=}lF-f!PloL9FM5Gwbt6l(a7+wZb_MWID6 z8+ZHU>lGJx+$%Q~d&ZrCersC$x%83bz)OaXa?5@caU3-yLWy}#*h-} zAQfl&!4ZJ6>#_>rj2YV2_go*PbqQI2I@UGAx>j7b2*27I&R_m1RQ6}RMsZSsE(|^d zK?mHXyg|bkxkXl(Mj_H32dfzkw+C9-vnN0Xwl)f6U?JXhh5%zpz=oEHe$%gkoYD&KJIb--_J|)k3jR80XGO#jJ=XRga38bDL_#XVrYwryWTGLA( z)SCsV;QE_Zj(*wxUMeozUJpG3aC*`hhbaA4lzyNwPY zK7R0}k*9`(UUtkC3tfvgC-EEFg5sc2`IWu0ONQX2YQa}L2;_w4ma1a0r?X!NBH;Rq z@l(?c{d5P$R}4#P-P1ttQ7Rgmf_9xtH$ffGbWPrmo0VTuB;_= zKWI1cs%LuTiHQZ;EJT8YE=X_%*I*jTF#=fp9r-*!@|5)<*^aXnoxXg!rQaj#zHYEy zeT7N01U}^arVqq>>FsjdSQWQrxVXJ*jX_mRES~Q-G;KjKh#0~LNSfo(-L|b{# zURGUnt~P^*c59xc^<=dX5~>Q~n9Pg(<~g_u&2ND-m+8sYkBLS&Pll;cu6{{Y;^l`w zf;RJOpv@t*mgWtNyH9A%-TtQo@O$*=y6*hrbmvcT0gbBpij`=JAY~ZzWc*C#AelA_ z8%5P2eUf5!OyF?Qx1Qb}b^4(cDe;k>RIoP18$;y{y6QH^4$SQ{YDLmM=+%@9P_448 zseT=hs44MMl8*Rl3;m}P?pyTC?VPIi^Rb36T?IgOP|8n%Hf$jv_ob6X+^CdiGZiBN zwBJb>MY{ApV5azE-%vqCd+cs(B^|@*ea^9G>n5Y`?YI152|&IL;8{2sa0;wXk&Qgr z$mYa?rOQv6OLeoR`%Z%VnvZGz;P8y`FrTBy)kNAIU-yGvS7{&qB=xi|m4A*@u1V-b z;2ttaea)y4J57ns%^WNr>J^FgkHXXo)yyhvuc3lzi~RHj_E__V9|(TH$#&7qnBfaB zQ}phDMtu;-MUo+y3A2nfIc*oQMs|1@y=DH~VBeh}e$SGQ0fB3fy2Dwc1@nM~J;lu{ zo(G>0UljX3oU-t>3A}f5SA)0PT4p$BEi-JbN5$hDu=O2qIE5Lcg6V{)eHiF1yLVI= zdK-b%uo}UuvE&W>T0iLWqpSA0V#C&Ewb!6b_Jfgmd{WV;I5{SgB9}l92RCr6BMew& zbS0#KIC#0K)b%*qmxlg$NN6NIMyo_^VCTrBzP~U8#}fF32*ZxbMxRq3ohNK zjz(}CkiMP4Bay%kzOn19$j$FS`b7wZp)3uj4QQRd}=xa2LAxTG6YCq{2Bd9whW$h8IC&|!-HiNwXMKSsB%>(f6~pZ=YmMI~T~7FbxtdE98GcvJ2KA_Vg$ zoslAAw+J-x9mOg?;C`ZD&rzd-#ujK`mMaz4dYdYE_oi)vq-w zJh?t7g=q*TY?xQ9HA-QQ*l2rUvvHdiQsPXuUJOfVX`<6^@n}w$^4~>LwOrV@OuGuT zM^YQXmv9_dg+UyTh+kdHN`~UTKAn4rNV2i~MVM9$5-xLS)EhwiGjXmKlh!!JwixEzM z*pD+}v2&SU;BMcPSUkv(eyBfj?~}q8FGVJ|x2Umf-w4X8uAqhr&tpY3X<>!=WY{Se zRwFQkenknuwpOv7wXb~)%pZpt9ij=d(0O6r6MhH+M|F||^oeQv zbX!rS=)dql*gccGWZFS~v* z>?zz)pdzN}Tvbz19dYmWpcyr9z0tyiQ9MXnFoXHRzbI1cR{wv=>VGd-2+*a5G$5|# z2;c$h{4-U;Nl&s@p+*Er$-(Lq*)8)a)_qaHRl3KIiOPHJ-`s0P7q4_@1r$kR1b}Z~ z+67CDwamiOMp1)Eu@9J`O)NDj4zB~8GFzpVRHk>!#i^Hu(6{hii8Ow2(<|&CO;_8u zm09@x(@TivF@~v42$E{d12{^%_nzv)phvcg*vQ>ax_Jh?L7BOq1-VdH!B<$M!^#`> zS=b+FMU>uoH8iYuq#w!g%?%%?&hy%+_GZvstdG}nAc;q2NDRUtc`X*2W5bS1!22c& zO&ck4FTZ)R!BIMQ3yZ%#KioUxQSesGeBzvtQO|{UkA8c9i0>hx>j3HR!TA1_V;4b> zLy!uf3!}~-L4SZ#t^Gl6o&?jBV2N}fFpZvVsRj-I2`e; zpUme>VOxL!lbr5xj|!XDv{3?qq4CzKXPb7uDim#U6FQMU57V43bFdcJVI%P(ue3~* zuvkW+J|=5$8DSZoc(yTHFyq5MWP4zPC4yieZbAA!Fh%j=Dv@8unNJlU1VWH zJZP@|+BI$8%I&ux6M*gjnSj|wHHLN~C8zbB#LK+&M{P&(Jhzx+))E1JtI!#RH=RHu zC*$@RG$6UivIVdj&PE?`=5>XvH}93B7u&)=w~IK+O7I^N&6T_j5q`^{t;1D+B3$)b z$XdiPDw%eO7)vG7-hh#W{!n?JY1{MLUMmnhB~4zwi`$=4=ppbfrZng9otAeh+>$v% z$0vcF-GZggZlUT+0L^oFZcL>q5?x0FEZ_s4De0Ca6+^in&VR#!C`X<5l*qNRO#
Xi+dgblcU*)~7d#V3vUb0{E%(3N7g+AQS2u6*vpyF;CPZ<;;O`-b2D8!W z#3SjEY~$F-H2%jW6^~OUx+|6yLH*ZMv1LW|Agw58iy9NvXRhX@`SSdG&d*P`tw;0! zd(r%_VYJwJwsHhfSXQzqLau>q@D)%XhNJNJfp*tl*J!y3uYyh{#(5|DYrwenku7ej`Yhwqp9q0)w#Lef*pd8*| z_49B-(Fe6r-o7I6u`i|#dkRjw`RCi_*a#IqFb&f^M3Z=hj#EoKlCm^SK*8IwWX=$L zGMUd(?{QC^cD7mwWs97Ih=TAL;+0FPMLh;NrQDyzH^h{l?6qW)I&lY7hbde3gX%Eg zBx9-7VW=qU0H1rS&{_0$f>V?sDJeSMDD(KPV3Vz0_X^)XJ>hV3o3!Y?ILLc$-!C@n zS&x_gjq%b?RmOK-3sQCyw}g|_8g0Tt2!;p)5_@R=e)ri6BZs@yYYp1E%;LAv=$d{2 zC1jxW4^{hR7*FqX-J}L;$gcNI?SE|t(^}Lsu@)RXpFPr{67A3rinrqkyqG&jkhDHk`JKWbXM4fY1O zZ$o{$2nL@leEnXLoy(U1E%+E~N=S>%zI;E6xFqKL6v(<@AW3H!cmK4HdEBiT2(j_i zcUmj2Tm1hti~o=3!)I#NJyS8Vlh83YD$=RmcAE)*TS>~a?d8HD0V2uc+d#ObLuW(NnJfz?ikKisj3pvF+U1O4y`(uX@}; z(GekXMG?p@wGBcU63}Mu(wdQygZsV^sv1S?o-Gw7R;n1X%bi-O>GirO^TI>o8QT8E z<~AF0*WcHjVXJ2c5R@a9_^Op_mk^XxeDQeL&$eZ7*!&ySAfZ532TS2u@2&BC9EEUtJ5>AE4Y}TL7VU-ZJStUY%jG_kk4&XfK_y$W%%VN`zhMudENb_!jag_Tr`ZVFE(KJE?=>V+qnuZhC8AC6s? zc$hU2du6932u5@qd z-uQw7MYHP}kxpwqz`DKv&$aj8BVZuzBB^uJtAcELE19=Z-WGRTLy5c#ZtyDH4o4XT zT~4q{{UIH2!Z7`oUz^E^!$~fDbk2*JKy_WkH0+@40{ty0Thzh>x1(*`L<}O*_Q^K$ zYl8wdAIp4OJ9p^r<29NS+lOktm1@h)q$)fr1ml7Xvq=vLxIBJW05>YoC#g6BI{xGh zYb#_zO_M$v`9(rj8vtPj!ffoZ{0t^qsG_j3lNcHwS15>4Iu`^eiZ30%?C_{#!^pVX zG%BhgN{%+O;1G(O^>2dAnfuvcM8w`zD15d~vgo)=O;+N&)LfS@`=0b>^~kf%m*#G7 z`|xyUDd=9bfiZ(wWu+_d=_)kmfThQNI`DE8`Z`9BVg24#=u+=@yr}Pu>iV`n`6&nh zlqPy}Ac9=vwM@W=gsDvuuTvY5+?iK(oF)u6(F;7?J}y}kyLkrzk{Q|}wtrkIb}RBM zXzPLlxD@Xf3S$YWmcnF7SQKd8i_Sj-oJ|=XA)UFzP$&NctJ(0~*la`kEp1#Z^ z>owZ+>D2!>%%#Q`_T)Z@6@L`ovXz(pNR{36N4)G|Ew}Gy?wY!!ylnbJxs@tGOnu9D zBsebr0c>OEH`FLDePLxgr>bu9qMJt(le5Ljq8)`e9`_cX6AfXU@5OL+v`QtuN*xWW z(Xbj#1EXnRG!2ZVfzdQDng&MGz-Ss6O#`E8U^ESkrh(BkFq#HN)4*sN7)=ACX<#%B OjHZEMlm?jp-vj_Aq!j}I literal 0 HcmV?d00001 diff --git a/WarmlyShip/WarmlyShip/Resources/arrowRight.jpg b/WarmlyShip/WarmlyShip/Resources/arrowRight.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b440197337637a3901527809017ac3875c61ab4d GIT binary patch literal 61715 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 literal 0 HcmV?d00001 diff --git a/WarmlyShip/WarmlyShip/Resources/arrowUp.jpg b/WarmlyShip/WarmlyShip/Resources/arrowUp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e630cea81778990ee584c30bf17b379509fe52d8 GIT binary patch literal 62105 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 a8enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file From 907be7656bbae31081aef6e928ddc41befcf1368 Mon Sep 17 00:00:00 2001 From: just1valery Date: Tue, 20 Sep 2022 16:22:26 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs index 0b8c685..29e8eb8 100644 --- a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs +++ b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs @@ -122,26 +122,26 @@ PointF[] P = { - new Point((int)(_startPosX),(int) _startPosY + 45), - new Point((int)_startPosX + 170, (int)_startPosY + 45), + new Point((int)(_startPosX),(int) _startPosY + 35), + new Point((int)_startPosX + 170, (int)_startPosY + 35), new Point( (int) _startPosX + 150,(int) _startPosY + 65), new Point((int) _startPosX + 50, (int) _startPosY + 65), - new Point((int) _startPosX, (int) _startPosY + 45), + new Point((int) _startPosX, (int) _startPosY + 35), }; Brush br = new SolidBrush(Ship?.BodyColor ?? Color.Black); g.FillPolygon(br, P); Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 20, 70, 25); + g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 1, 70, 34); Pen pen = new(Color.Black); //границы коробля - g.DrawRectangle(pen, _startPosX + 70, _startPosY + 20 , 70, 25); - g.DrawLine(pen, _startPosX, _startPosY + 45, _startPosX + 170, _startPosY + 45); - g.DrawLine(pen, _startPosX, _startPosY + 45, _startPosX + 50, _startPosY + 65); + g.DrawRectangle(pen, _startPosX + 70, _startPosY + 1 , 70, 34); + g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 170, _startPosY + 35); + g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 50, _startPosY + 65); g.DrawLine(pen, _startPosX + 50, _startPosY + 65, _startPosX + 150, _startPosY + 65); - g.DrawLine(pen, _startPosX + 150, _startPosY + 65, _startPosX + 170, _startPosY + 45); + g.DrawLine(pen, _startPosX + 150, _startPosY + 65, _startPosX + 170, _startPosY + 35); } /// From 2d821c9072509b70a763f75b073f4c5278d9d662 Mon Sep 17 00:00:00 2001 From: just1valery Date: Tue, 27 Sep 2022 12:59:43 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{DrawningWarmlyShip.cs => DrawningShip.cs} | 10 +++++----- .../WarmlyShip/{EntityWarmlyShip.cs => EntityShip.cs} | 2 +- WarmlyShip/WarmlyShip/FormShip.cs | 4 ++-- WarmlyShip/WarmlyShip/Properties/launchSettings.json | 7 +++++++ 4 files changed, 15 insertions(+), 8 deletions(-) rename WarmlyShip/WarmlyShip/{DrawningWarmlyShip.cs => DrawningShip.cs} (95%) rename WarmlyShip/WarmlyShip/{EntityWarmlyShip.cs => EntityShip.cs} (97%) create mode 100644 WarmlyShip/WarmlyShip/Properties/launchSettings.json diff --git a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs b/WarmlyShip/WarmlyShip/DrawningShip.cs similarity index 95% rename from WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs rename to WarmlyShip/WarmlyShip/DrawningShip.cs index 29e8eb8..591ed2f 100644 --- a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs +++ b/WarmlyShip/WarmlyShip/DrawningShip.cs @@ -1,11 +1,11 @@ namespace WarmlyShip { - internal class DrawningWarmlyShip + internal class DrawningShip { /// /// Класс-сущность /// - public EntityWarmlyShip Ship { get; private set; } + public EntityShip Ship { get; private set; } /// /// Левая координата отрисовки коробля /// @@ -38,7 +38,7 @@ /// Цвет основной части public void Init(int speed, float weight, Color bodyColor) { - Ship = new EntityWarmlyShip(); + Ship = new EntityShip(); Ship.Init(speed, weight, bodyColor); } /// @@ -133,11 +133,11 @@ g.FillPolygon(br, P); Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 1, 70, 34); + g.FillRectangle(brBlue, _startPosX + 50, _startPosY + 1, 100, 34); Pen pen = new(Color.Black); //границы коробля - g.DrawRectangle(pen, _startPosX + 70, _startPosY + 1 , 70, 34); + g.DrawRectangle(pen, _startPosX + 50, _startPosY + 1 , 100, 34); g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 170, _startPosY + 35); g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 50, _startPosY + 65); g.DrawLine(pen, _startPosX + 50, _startPosY + 65, _startPosX + 150, _startPosY + 65); diff --git a/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs b/WarmlyShip/WarmlyShip/EntityShip.cs similarity index 97% rename from WarmlyShip/WarmlyShip/EntityWarmlyShip.cs rename to WarmlyShip/WarmlyShip/EntityShip.cs index 236dd56..8d865cf 100644 --- a/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs +++ b/WarmlyShip/WarmlyShip/EntityShip.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace WarmlyShip { - internal class EntityWarmlyShip + internal class EntityShip { /// /// Скорость diff --git a/WarmlyShip/WarmlyShip/FormShip.cs b/WarmlyShip/WarmlyShip/FormShip.cs index 14b3681..886572f 100644 --- a/WarmlyShip/WarmlyShip/FormShip.cs +++ b/WarmlyShip/WarmlyShip/FormShip.cs @@ -2,7 +2,7 @@ namespace WarmlyShip { public partial class FormShip : Form { - private DrawningWarmlyShip _ship; + private DrawningShip _ship; public FormShip() { InitializeComponent(); @@ -22,7 +22,7 @@ namespace WarmlyShip private void buttonCreate_Click(object sender, EventArgs e) { Random rnd = new(); - _ship = new DrawningWarmlyShip(); + _ship = new DrawningShip(); _ship.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); toolStripStatusLabelSpeed.Text = $": {_ship.Ship.Speed}"; diff --git a/WarmlyShip/WarmlyShip/Properties/launchSettings.json b/WarmlyShip/WarmlyShip/Properties/launchSettings.json new file mode 100644 index 0000000..cff298c --- /dev/null +++ b/WarmlyShip/WarmlyShip/Properties/launchSettings.json @@ -0,0 +1,7 @@ +{ + "profiles": { + "WarmlyShip": { + "commandName": "Project" + } + } +} \ No newline at end of file From 6f265e72166ccc9ac546f98e2f60952c736e6dc3 Mon Sep 17 00:00:00 2001 From: just1valery Date: Thu, 29 Sep 2022 11:39:22 +0400 Subject: [PATCH 4/5] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarmlyShip/WarmlyShip/DrawningShip.cs | 13 ++++++------- WarmlyShip/WarmlyShip/EntityShip.cs | 6 +++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/WarmlyShip/WarmlyShip/DrawningShip.cs b/WarmlyShip/WarmlyShip/DrawningShip.cs index 591ed2f..6763f9e 100644 --- a/WarmlyShip/WarmlyShip/DrawningShip.cs +++ b/WarmlyShip/WarmlyShip/DrawningShip.cs @@ -73,14 +73,14 @@ } switch (direction) { - // вправо + /// вправо case Direction.Right: if (_startPosX + _shipWidth + Ship.Step < _pictureWidth) { _startPosX += Ship.Step; } break; - //влево + ///влево case Direction.Left: if (_startPosX - Ship.Step > 0) @@ -88,7 +88,7 @@ _startPosX -= Ship.Step; } break; - //вверх + ///вверх case Direction.Up: if (_startPosY - Ship.Step > 0) @@ -96,7 +96,7 @@ _startPosY -= Ship.Step; } break; - //вниз + ///вниз case Direction.Down: if (_startPosY + _shipHeight + Ship.Step < _pictureHeight) { @@ -118,8 +118,7 @@ } - //заполнение коробля - + ///заполнение коробля PointF[] P = { new Point((int)(_startPosX),(int) _startPosY + 35), @@ -136,7 +135,7 @@ g.FillRectangle(brBlue, _startPosX + 50, _startPosY + 1, 100, 34); Pen pen = new(Color.Black); - //границы коробля + ///границы коробля g.DrawRectangle(pen, _startPosX + 50, _startPosY + 1 , 100, 34); g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 170, _startPosY + 35); g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 50, _startPosY + 65); diff --git a/WarmlyShip/WarmlyShip/EntityShip.cs b/WarmlyShip/WarmlyShip/EntityShip.cs index 8d865cf..6ea770d 100644 --- a/WarmlyShip/WarmlyShip/EntityShip.cs +++ b/WarmlyShip/WarmlyShip/EntityShip.cs @@ -17,15 +17,15 @@ namespace WarmlyShip /// public float Weight { get; private set; } /// - /// Цвет кузова + /// Цвет коробля /// public Color BodyColor { get; private set; } /// - /// Шаг перемещения автомобиля + /// Шаг перемещения коробля /// public float Step => Speed * 100 / Weight; /// - /// Инициализация полей объекта-класса автомобиля + /// Инициализация полей объекта-класса коробля /// /// /// From cdbce59fc21d7241fbc6ba75937a2d80dc83bc96 Mon Sep 17 00:00:00 2001 From: just1valery Date: Fri, 30 Sep 2022 20:36:26 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarmlyShip/WarmlyShip/AbstractMap.cs | 145 +++++++++++++ WarmlyShip/WarmlyShip/Direction.cs | 1 + WarmlyShip/WarmlyShip/DrawningObjectShip.cs | 40 ++++ WarmlyShip/WarmlyShip/DrawningShip.cs | 38 +++- WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs | 57 ++++++ WarmlyShip/WarmlyShip/EntityShip.cs | 2 +- WarmlyShip/WarmlyShip/EntityWarmlyShip.cs | 40 ++++ WarmlyShip/WarmlyShip/FormMap.Designer.cs | 213 ++++++++++++++++++++ WarmlyShip/WarmlyShip/FormMap.cs | 103 ++++++++++ WarmlyShip/WarmlyShip/FormMap.resx | 120 +++++++++++ WarmlyShip/WarmlyShip/FormShip.Designer.cs | 14 ++ WarmlyShip/WarmlyShip/FormShip.cs | 33 ++- WarmlyShip/WarmlyShip/IDrawningObject.cs | 40 ++++ WarmlyShip/WarmlyShip/OceanMap.cs | 54 +++++ WarmlyShip/WarmlyShip/SimpleMap.cs | 53 +++++ 15 files changed, 939 insertions(+), 14 deletions(-) create mode 100644 WarmlyShip/WarmlyShip/AbstractMap.cs create mode 100644 WarmlyShip/WarmlyShip/DrawningObjectShip.cs create mode 100644 WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs create mode 100644 WarmlyShip/WarmlyShip/EntityWarmlyShip.cs create mode 100644 WarmlyShip/WarmlyShip/FormMap.Designer.cs create mode 100644 WarmlyShip/WarmlyShip/FormMap.cs create mode 100644 WarmlyShip/WarmlyShip/FormMap.resx create mode 100644 WarmlyShip/WarmlyShip/IDrawningObject.cs create mode 100644 WarmlyShip/WarmlyShip/OceanMap.cs create mode 100644 WarmlyShip/WarmlyShip/SimpleMap.cs diff --git a/WarmlyShip/WarmlyShip/AbstractMap.cs b/WarmlyShip/WarmlyShip/AbstractMap.cs new file mode 100644 index 0000000..c0e4cd5 --- /dev/null +++ b/WarmlyShip/WarmlyShip/AbstractMap.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal abstract class AbstractMap + { + private IDrawningObject _drawningObject = null; + protected int[,] _map = null; + protected int _width; + protected int _height; + protected float _size_x; + protected float _size_y; + protected readonly Random _random = new(); + protected readonly int _freeRoad = 0; + protected readonly int _barrier = 1; + + public Bitmap CreateMap(int width, int height, IDrawningObject drawningObject) + { + _width = width; + _height = height; + _drawningObject = drawningObject; + GenerateMap(); + while (!SetObjectOnMap()) + { + GenerateMap(); + } + return DrawMapWithObject(); + } + public bool CheckAround(float Left, float Right, float Top, float Bottom) + { + int startX = (int)(Left / _size_x); + int startY = (int)(Right / _size_y); + int endX = (int)(Top / _size_x); + int endY = (int)(Bottom / _size_y); + + for (int i = startX; i <= endX; i++) + { + for (int j = startY; j <= endY; j++) + { + if (_map[i, j] == _barrier) + { + return true; + } + } + } + return false; + } + public Bitmap MoveObject(Direction direction) + { + _drawningObject.MoveObject(direction); + (float Left, float Right, float Top, float Bottom) = _drawningObject.GetCurrentPosition(); + + if (CheckAround(Left, Right, Top, Bottom)) + { + _drawningObject.MoveObject(MoveObjectBack(direction)); + } + return DrawMapWithObject(); + + } + private Direction MoveObjectBack(Direction direction) + { + switch (direction) + { + case Direction.Up: + return Direction.Down; + case Direction.Down: + return Direction.Up; + case Direction.Left: + return Direction.Right; + case Direction.Right: + return Direction.Left; + } + return Direction.None; + } + private bool SetObjectOnMap() + { + if (_drawningObject == null || _map == null) + { + return false; + } + int x = _random.Next(0, 10); + int y = _random.Next(0, 10); + _drawningObject.SetObject(x, y, _width, _height); + (float Left, float Right, float Top, float Bottom) = _drawningObject.GetCurrentPosition(); + if (!CheckAround(Left, Right, Top, Bottom)) return true; + float startX = Left; + float startY = Right; + float lengthX = Top - Left; + float lengthY = Bottom - Right; + while (CheckAround(startX, startY, startX + lengthX, startY + lengthY)) + { + bool result; + do + { + result = CheckAround(startX, startY, startX + lengthX, startY + lengthY); + if (!result) + { + _drawningObject.SetObject((int)startX, (int)startY, _width, _height); + return true; + } + else + { + startX += _size_x; + } + } while (result); + startX = x; + startY += _size_y; + } + return false; + } + private Bitmap DrawMapWithObject() + { + Bitmap bmp = new(_width, _height); + if (_drawningObject == null || _map == null) + { + return bmp; + } + Graphics gr = Graphics.FromImage(bmp); + for (int i = 0; i < _map.GetLength(0); ++i) + { + for (int j = 0; j < _map.GetLength(1); ++j) + { + if (_map[i, j] == _freeRoad) + { + DrawRoadPart(gr, i, j); + } + else if (_map[i, j] == _barrier) + { + DrawBarrierPart(gr, i, j); + } + } + } + _drawningObject.DrawningObject(gr); + return bmp; + } + + protected abstract void GenerateMap(); + protected abstract void DrawRoadPart(Graphics g, int i, int j); + protected abstract void DrawBarrierPart(Graphics g, int i, int j); + } +} diff --git a/WarmlyShip/WarmlyShip/Direction.cs b/WarmlyShip/WarmlyShip/Direction.cs index ed3b850..12e38df 100644 --- a/WarmlyShip/WarmlyShip/Direction.cs +++ b/WarmlyShip/WarmlyShip/Direction.cs @@ -8,6 +8,7 @@ namespace WarmlyShip { internal enum Direction { + None = 0, Up = 1, Down = 2, Left = 3, diff --git a/WarmlyShip/WarmlyShip/DrawningObjectShip.cs b/WarmlyShip/WarmlyShip/DrawningObjectShip.cs new file mode 100644 index 0000000..22cba01 --- /dev/null +++ b/WarmlyShip/WarmlyShip/DrawningObjectShip.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class DrawningObjectShip : IDrawningObject + { + private DrawningShip _ship = null; + + public DrawningObjectShip(DrawningShip ship) + { + _ship = ship; + } + + public float Step => _ship?.Ship?.Step ?? 0; + + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return _ship?.GetCurrentPosition() ?? default; + } + + public void MoveObject(Direction direction) + { + _ship?.MoveTransport(direction); + } + + public void SetObject(int x, int y, int width, int height) + { + _ship.SetPosition(x, y, width, height); + } + + void IDrawningObject.DrawningObject(Graphics g) + { + _ship.DrawTransport(g); + } + } +} diff --git a/WarmlyShip/WarmlyShip/DrawningShip.cs b/WarmlyShip/WarmlyShip/DrawningShip.cs index 6763f9e..cb63649 100644 --- a/WarmlyShip/WarmlyShip/DrawningShip.cs +++ b/WarmlyShip/WarmlyShip/DrawningShip.cs @@ -5,15 +5,15 @@ /// /// Класс-сущность /// - public EntityShip Ship { get; private set; } + public EntityShip Ship { get; protected set; } /// /// Левая координата отрисовки коробля /// - private float _startPosX; + protected float _startPosX; /// /// Верхняя кооридната отрисовки коробля /// - private float _startPosY; + protected float _startPosY; /// /// Ширина окна отрисовки /// @@ -36,11 +36,25 @@ /// Скорость /// Вес коробля /// Цвет основной части - public void Init(int speed, float weight, Color bodyColor) + public DrawningShip(int speed, float weight, Color bodyColor) { - Ship = new EntityShip(); - Ship.Init(speed, weight, bodyColor); - } + Ship = new EntityShip(speed, weight, bodyColor); + } + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес коробля + /// Цвет основной части + /// Ширина отрисовки корабля + /// Высота отрисовки корабля + + protected DrawningShip(int speed, float weight, Color bodyColor, int shipWidth, int shipHeight) : + this(speed, weight, bodyColor) + { + _shipWidth = shipWidth; + _shipHeight = shipHeight; + } /// /// Установка позиции коробля /// @@ -109,7 +123,7 @@ /// Отрисовка корабля /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -167,5 +181,13 @@ _startPosY = _pictureHeight.Value - _shipHeight; } } + /// + /// Получение текущей позиции объекта + /// + /// + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return (_startPosX, _startPosY, _startPosX + _shipWidth, _startPosY + _shipHeight); + } } } diff --git a/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs new file mode 100644 index 0000000..19fa9a2 --- /dev/null +++ b/WarmlyShip/WarmlyShip/DrawningWarmlyShip.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class DrawningWarmlyShip : DrawningShip + { + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес коробля + /// Цвет коробля + /// Дополнительный цвет + /// Признак наличия труб + /// Признак наличия топливного отсека + public DrawningWarmlyShip(int speed, float weight, Color bodyColor, Color dopColor, bool pipes, bool fuelCompartment) : + base(speed, weight, bodyColor, 170, 95) + { + Ship = new EntityWarmlyShip(speed, weight, bodyColor, dopColor, pipes, fuelCompartment); + } + public override void DrawTransport(Graphics g) + { + if (Ship is not EntityWarmlyShip warmlyShip) + { + return; + } + + Pen pen = new(Color.Black); + Brush dopBrush = new SolidBrush(warmlyShip.DopColor); + + if (warmlyShip.Pipes) + { + g.FillRectangle(dopBrush, _startPosX + 60, _startPosY + 10, 20, 26); + g.DrawRectangle(pen, _startPosX + 60, _startPosY + 10, 20, 26); + g.FillRectangle(dopBrush, _startPosX + 90, _startPosY + 5, 20, 31); + g.DrawRectangle(pen, _startPosX + 90, _startPosY + 5, 20, 31); + g.FillRectangle(dopBrush, _startPosX + 120, _startPosY + 1, 20, 35); + g.DrawRectangle(pen, _startPosX + 120, _startPosY + 1, 20, 35); + + } + + _startPosY += 30; + base.DrawTransport(g); + _startPosY -= 30; + + if (warmlyShip.FuelCompartment) + { + g.FillRectangle(dopBrush, _startPosX + 135, _startPosY + 70, 10, 5); + g.DrawRectangle(pen, _startPosX + 135, _startPosY + 70, 10, 5); + } + } + } +} diff --git a/WarmlyShip/WarmlyShip/EntityShip.cs b/WarmlyShip/WarmlyShip/EntityShip.cs index 6ea770d..b9ef514 100644 --- a/WarmlyShip/WarmlyShip/EntityShip.cs +++ b/WarmlyShip/WarmlyShip/EntityShip.cs @@ -31,7 +31,7 @@ namespace WarmlyShip /// /// /// - public void Init(int speed, float weight, Color bodyColor) + public EntityShip(int speed, float weight, Color bodyColor) { Random rnd = new(); Speed = speed <= 0 ? rnd.Next(50, 150) : speed; diff --git a/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs b/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs new file mode 100644 index 0000000..cd02f98 --- /dev/null +++ b/WarmlyShip/WarmlyShip/EntityWarmlyShip.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class EntityWarmlyShip : EntityShip + { + /// + /// Дополнительный цвет + /// + public Color DopColor { get; private set; } + /// + /// Признак наличия труб + /// + public bool Pipes { get; private set; } + /// + /// Признак наличия топливного отсека + /// + public bool FuelCompartment { get; private set; } + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес коробля + /// Цвет коробля + /// Дополнительный цвет + /// Признак наличия труб + /// Признак наличия топливного отсека + public EntityWarmlyShip(int speed, float weight, Color bodyColor, Color dopColor, bool pipes, bool fuelCompartment) : + base(speed, weight, bodyColor) + { + DopColor = dopColor; + Pipes = pipes; + FuelCompartment = fuelCompartment; + } + } +} diff --git a/WarmlyShip/WarmlyShip/FormMap.Designer.cs b/WarmlyShip/WarmlyShip/FormMap.Designer.cs new file mode 100644 index 0000000..8705003 --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormMap.Designer.cs @@ -0,0 +1,213 @@ +namespace WarmlyShip +{ + partial class FormMap + { + /// + /// 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.pictureBoxShip = new System.Windows.Forms.PictureBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelBodyColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.ButtonCreateModif = new System.Windows.Forms.Button(); + this.ComboBoxSelectorMap = new System.Windows.Forms.ComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBoxShip + // + this.pictureBoxShip.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxShip.Location = new System.Drawing.Point(0, 0); + this.pictureBoxShip.Name = "pictureBoxShip"; + this.pictureBoxShip.Size = new System.Drawing.Size(800, 424); + this.pictureBoxShip.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxShip.TabIndex = 0; + this.pictureBoxShip.TabStop = false; + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelBodyColor}); + this.statusStrip1.Location = new System.Drawing.Point(0, 424); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(800, 26); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(80, 20); + this.toolStripStatusLabelSpeed.Text = "Скорость: "; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(40, 20); + this.toolStripStatusLabelWeight.Text = "Вес: "; + // + // toolStripStatusLabelBodyColor + // + this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(49, 20); + this.toolStripStatusLabelBodyColor.Text = "Цвет: "; + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreate.Location = new System.Drawing.Point(12, 367); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Создать"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowDown; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(701, 367); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(30, 30); + this.buttonDown.TabIndex = 3; + this.buttonDown.Text = " "; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowUp; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(701, 331); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(30, 30); + this.buttonUp.TabIndex = 4; + this.buttonUp.Text = " "; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonRight + // + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowRight; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(737, 367); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(30, 30); + this.buttonRight.TabIndex = 5; + this.buttonRight.Text = " "; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonLeft + // + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = global::WarmlyShip.Properties.Resources.arrowLeft; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(665, 368); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(30, 30); + this.buttonLeft.TabIndex = 6; + this.buttonLeft.Text = " "; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // ButtonCreateModif + // + this.ButtonCreateModif.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ButtonCreateModif.Location = new System.Drawing.Point(126, 367); + this.ButtonCreateModif.Name = "ButtonCreateModif"; + this.ButtonCreateModif.Size = new System.Drawing.Size(120, 29); + this.ButtonCreateModif.TabIndex = 7; + this.ButtonCreateModif.Text = "Модификация"; + this.ButtonCreateModif.UseVisualStyleBackColor = true; + this.ButtonCreateModif.Click += new System.EventHandler(this.ButtonCreateModif_Click); + // + // ComboBoxSelectorMap + // + 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, 28); + this.ComboBoxSelectorMap.TabIndex = 8; + this.ComboBoxSelectorMap.SelectedIndexChanged += new System.EventHandler(this.ComboBoxSelectorMap_SelectedIndexChanged); + // + // FormMap + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.ComboBoxSelectorMap); + this.Controls.Add(this.ButtonCreateModif); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.pictureBoxShip); + this.Controls.Add(this.statusStrip1); + this.Name = "FormMap"; + this.Text = "Карта"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private PictureBox pictureBoxShip; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelBodyColor; + private Button buttonCreate; + private Button buttonDown; + private Button buttonUp; + private Button buttonRight; + private Button buttonLeft; + private Button ButtonCreateModif; + private ComboBox ComboBoxSelectorMap; + } +} \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormMap.cs b/WarmlyShip/WarmlyShip/FormMap.cs new file mode 100644 index 0000000..ce1f275 --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormMap.cs @@ -0,0 +1,103 @@ +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 WarmlyShip +{ + public partial class FormMap : Form + { + private AbstractMap _abstractMap; + + public FormMap() + { + InitializeComponent(); + _abstractMap = new SimpleMap(); + } + /// + /// Заполнение информации по объекту + /// + /// + private void SetData(DrawningShip ship) + { + toolStripStatusLabelSpeed.Text = $"Скорость: {ship.Ship.Speed}"; + toolStripStatusLabelWeight.Text = $"Вес: {ship.Ship.Weight}"; + toolStripStatusLabelBodyColor.Text = $"Цвет: {ship.Ship.BodyColor.Name}"; + pictureBoxShip.Image = _abstractMap.CreateMap(pictureBoxShip.Width, pictureBoxShip.Height, + new DrawningObjectShip(ship)); + } + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void buttonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + var ship = new DrawningShip(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + SetData(ship); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + //получаем имя кнопки + string name = ((Button)sender)?.Name ?? string.Empty; + Direction dir = Direction.None; + switch (name) + { + case "buttonUp": + dir = Direction.Up; + break; + case "buttonDown": + dir = Direction.Down; + break; + case "buttonLeft": + dir = Direction.Left; + break; + case "buttonRight": + dir = Direction.Right; + break; + } + pictureBoxShip.Image = _abstractMap?.MoveObject(dir); + } + + /// + /// Обработка нажатия кнопки "Модификация" + /// + /// + /// + private void ButtonCreateModif_Click(object sender, EventArgs e) + { + Random rnd = new(); + var ship = new DrawningWarmlyShip(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(ship); + } + /// + /// Смена карты + /// + /// + /// + private void ComboBoxSelectorMap_SelectedIndexChanged(object sender, EventArgs e) + { + switch (ComboBoxSelectorMap.Text) + { + case "Простая карта": + _abstractMap = new SimpleMap(); + break; + + case "Океан": + _abstractMap = new OceanMap(); + break; + } + } + } +} diff --git a/WarmlyShip/WarmlyShip/FormMap.resx b/WarmlyShip/WarmlyShip/FormMap.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/WarmlyShip/WarmlyShip/FormMap.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.Designer.cs b/WarmlyShip/WarmlyShip/FormShip.Designer.cs index ec87a9a..e21f10a 100644 --- a/WarmlyShip/WarmlyShip/FormShip.Designer.cs +++ b/WarmlyShip/WarmlyShip/FormShip.Designer.cs @@ -38,6 +38,7 @@ this.buttonUp = new System.Windows.Forms.Button(); this.buttonRight = new System.Windows.Forms.Button(); this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonCreateModif = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxShip)).BeginInit(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -146,11 +147,23 @@ this.buttonLeft.UseVisualStyleBackColor = true; this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); // + // buttonCreateModif + // + this.buttonCreateModif.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreateModif.Location = new System.Drawing.Point(112, 367); + this.buttonCreateModif.Name = "buttonCreateModif"; + this.buttonCreateModif.Size = new System.Drawing.Size(125, 29); + this.buttonCreateModif.TabIndex = 7; + this.buttonCreateModif.Text = "Модификация"; + this.buttonCreateModif.UseVisualStyleBackColor = true; + this.buttonCreateModif.Click += new System.EventHandler(this.ButtonCreateModif_Click); + // // FormShip // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.buttonCreateModif); this.Controls.Add(this.buttonLeft); this.Controls.Add(this.buttonRight); this.Controls.Add(this.buttonUp); @@ -180,5 +193,6 @@ private Button buttonUp; private Button buttonRight; private Button buttonLeft; + private Button buttonCreateModif; } } \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/FormShip.cs b/WarmlyShip/WarmlyShip/FormShip.cs index 886572f..e756d82 100644 --- a/WarmlyShip/WarmlyShip/FormShip.cs +++ b/WarmlyShip/WarmlyShip/FormShip.cs @@ -7,6 +7,17 @@ namespace WarmlyShip { InitializeComponent(); } + /// + /// + /// + private void SetData() + { + Random rnd = new(); + _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); + toolStripStatusLabelSpeed.Text = $": {_ship.Ship.Speed}"; + toolStripStatusLabelWeight.Text = $": {_ship.Ship.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_ship.Ship.BodyColor.Name}"; + } private void Draw() { Bitmap bmp = new(pictureBoxShip.Width, pictureBoxShip.Height); @@ -22,12 +33,9 @@ namespace WarmlyShip private void buttonCreate_Click(object sender, EventArgs e) { Random rnd = new(); - _ship = new DrawningShip(); - _ship.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _ship = new DrawningShip(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); _ship.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxShip.Width, pictureBoxShip.Height); - toolStripStatusLabelSpeed.Text = $": {_ship.Ship.Speed}"; - toolStripStatusLabelWeight.Text = $": {_ship.Ship.Weight}"; - toolStripStatusLabelBodyColor.Text = $": {_ship.Ship.BodyColor.Name}"; + SetData(); Draw(); } @@ -52,5 +60,20 @@ namespace WarmlyShip } Draw(); } + /// + /// "" + /// + /// + /// + private void ButtonCreateModif_Click(object sender, EventArgs e) + { + Random rnd = new(); + _ship = new DrawningWarmlyShip(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(); + Draw(); + } } } \ No newline at end of file diff --git a/WarmlyShip/WarmlyShip/IDrawningObject.cs b/WarmlyShip/WarmlyShip/IDrawningObject.cs new file mode 100644 index 0000000..8637b93 --- /dev/null +++ b/WarmlyShip/WarmlyShip/IDrawningObject.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal interface IDrawningObject + { + /// + /// Шаг перемещения объекта + /// + public float Step { get; } + /// + /// Установка позиции объекта + /// + /// Координата X + /// Координата Y + /// Ширина полотна + /// Высота полотна + void SetObject(int x, int y, int width, int height); + /// + /// Изменение направления пермещения объекта + /// + /// Направление + /// + void MoveObject(Direction direction); + /// + /// Отрисовка объекта + /// + /// + void DrawningObject(Graphics g); + /// + /// Получение текущей позиции объекта + /// + /// + (float Left, float Right, float Top, float Bottom) GetCurrentPosition(); + } +} diff --git a/WarmlyShip/WarmlyShip/OceanMap.cs b/WarmlyShip/WarmlyShip/OceanMap.cs new file mode 100644 index 0000000..a1e73c6 --- /dev/null +++ b/WarmlyShip/WarmlyShip/OceanMap.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class OceanMap : AbstractMap + { + private readonly Brush barrierColor = new SolidBrush(Color.Gray); + + private readonly Brush roadColor = new SolidBrush(Color.DeepSkyBlue); + + 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)); + } + 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; + } + } + while (counter < 15) + { + int x = _random.Next(0, 95); + int y = _random.Next(0, 95); + if (_map[x, y] == _freeRoad) + { + _map[x, y + 1] = _barrier; + _map[x, y + 2] = _barrier; + _map[x + 1, y + 1] = _barrier; + _map[x + 2, y + 1] = _barrier; + _map[x + 1, y] = _barrier; + _map[x + 2, y] = _barrier; + counter++; + } + } + } + } +} diff --git a/WarmlyShip/WarmlyShip/SimpleMap.cs b/WarmlyShip/WarmlyShip/SimpleMap.cs new file mode 100644 index 0000000..eb35ab5 --- /dev/null +++ b/WarmlyShip/WarmlyShip/SimpleMap.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WarmlyShip +{ + internal class SimpleMap : AbstractMap + { + /// + /// Цвет участка закрытого + /// + private readonly Brush barrierColor = new SolidBrush(Color.Black); + /// + /// Цвет участка открытого + /// + 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)); + } + 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; + } + } + while (counter < 25) + { + int x = _random.Next(0, 100); + int y = _random.Next(0, 100); + if (_map[x, y] == _freeRoad) + { + _map[x, y] = _barrier; + counter++; + } + } + } + } +}