From 21ea9f3d91b3d9fe4f7ab42c2e878e136f04e213 Mon Sep 17 00:00:00 2001 From: Andrey_Abazov Date: Tue, 6 Sep 2022 20:21:36 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0?= =?UTF-8?q?=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 --- AirBomber/AirBomber/AirBomber.csproj | 15 ++ AirBomber/AirBomber/Direction.cs | 19 ++ AirBomber/AirBomber/DrawingAirBomber.cs | 212 ++++++++++++++++++ AirBomber/AirBomber/EntityAirBomber.cs | 45 ++++ AirBomber/AirBomber/Form1.Designer.cs | 39 ---- AirBomber/AirBomber/Form1.cs | 10 - AirBomber/AirBomber/FormAirBomber.Designer.cs | 181 +++++++++++++++ AirBomber/AirBomber/FormAirBomber.cs | 72 ++++++ AirBomber/AirBomber/FormAirBomber.resx | 66 ++++++ AirBomber/AirBomber/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 103 +++++++++ .../{Form1.resx => Properties/Resources.resx} | 13 ++ AirBomber/AirBomber/Resources/arrowDown.png | Bin 0 -> 11552 bytes AirBomber/AirBomber/Resources/arrowLeft.png | Bin 0 -> 12272 bytes AirBomber/AirBomber/Resources/arrowRight.png | Bin 0 -> 8596 bytes AirBomber/AirBomber/Resources/arrowUp.png | Bin 0 -> 11531 bytes 16 files changed, 727 insertions(+), 50 deletions(-) create mode 100644 AirBomber/AirBomber/Direction.cs create mode 100644 AirBomber/AirBomber/DrawingAirBomber.cs create mode 100644 AirBomber/AirBomber/EntityAirBomber.cs delete mode 100644 AirBomber/AirBomber/Form1.Designer.cs delete mode 100644 AirBomber/AirBomber/Form1.cs create mode 100644 AirBomber/AirBomber/FormAirBomber.Designer.cs create mode 100644 AirBomber/AirBomber/FormAirBomber.cs create mode 100644 AirBomber/AirBomber/FormAirBomber.resx create mode 100644 AirBomber/AirBomber/Properties/Resources.Designer.cs rename AirBomber/AirBomber/{Form1.resx => Properties/Resources.resx} (83%) create mode 100644 AirBomber/AirBomber/Resources/arrowDown.png create mode 100644 AirBomber/AirBomber/Resources/arrowLeft.png create mode 100644 AirBomber/AirBomber/Resources/arrowRight.png create mode 100644 AirBomber/AirBomber/Resources/arrowUp.png diff --git a/AirBomber/AirBomber/AirBomber.csproj b/AirBomber/AirBomber/AirBomber.csproj index b57c89e..13ee123 100644 --- a/AirBomber/AirBomber/AirBomber.csproj +++ b/AirBomber/AirBomber/AirBomber.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/AirBomber/AirBomber/Direction.cs b/AirBomber/AirBomber/Direction.cs new file mode 100644 index 0000000..457f940 --- /dev/null +++ b/AirBomber/AirBomber/Direction.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirBomber +{ + /// + /// Направление перемещения + /// + internal enum Direction + { + Up = 1, + Down = 2, + Left = 3, + Right = 4 + } +} diff --git a/AirBomber/AirBomber/DrawingAirBomber.cs b/AirBomber/AirBomber/DrawingAirBomber.cs new file mode 100644 index 0000000..3f32384 --- /dev/null +++ b/AirBomber/AirBomber/DrawingAirBomber.cs @@ -0,0 +1,212 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirBomber +{ + internal class DrawingAirBomber + { + /// + /// Класс-сущность + /// + public EntityAirBomber AirBomber { private set; get; } + /// + /// Левая координата отрисовки бомбардировщика + /// + private float _startPosX; + /// + /// Верхняя кооридната отрисовки бомбардировщика + /// + private float _startPosY; + /// + /// Ширина окна отрисовки + /// + private int? _pictureWidth = null; + /// + /// Высота окна отрисовки + /// + private int? _pictureHeight = null; + /// + /// Ширина отрисовки бомбардировщика + /// + private readonly int _airBomberWidth = 110; + /// + /// Высота отрисовки бомбардировщика + /// + private readonly int _airBomberHeight = 100; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес бомбардировщика + /// Цвет корпуса + public void Init(int speed, float weight, Color bodyColor) + { + AirBomber = new EntityAirBomber(); + AirBomber.Init(speed, weight, bodyColor); + } + + /// + /// Установка позиции омбардировщика + /// + /// Координата X + /// Координата Y + /// Ширина картинки + /// Высота картинки + public void SetPosition(int x, int y, int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + Random rd = new Random(); + _startPosX = x + _airBomberWidth >= _pictureWidth ? rd.Next(0, _pictureWidth.Value - 1 - _airBomberWidth) : x; + _startPosY = y + _airBomberHeight >= _pictureHeight ? rd.Next(0, _pictureHeight.Value - 1 - _airBomberHeight) : y; + } + /// + /// Изменение направления перемещения + /// + /// Направление + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _airBomberWidth + AirBomber.Step < _pictureWidth) + { + _startPosX += AirBomber.Step; + } + break; + //влево + case Direction.Left: + if (_startPosX - AirBomber.Step > 0) + { + _startPosX -= AirBomber.Step; + } + break; + //вверх + case Direction.Up: + if (_startPosY - AirBomber.Step > 0) + { + _startPosY -= AirBomber.Step; + } + break; + //вниз + case Direction.Down: + if (_startPosY + _airBomberHeight + AirBomber.Step < _pictureHeight) + { + _startPosY += AirBomber.Step; + } + break; + } + } + /// + /// Отрисовка бомбардировщика + /// + /// + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 + || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + Pen pen = new(Color.Black); + Brush br = new SolidBrush(AirBomber?.BodyColor ?? Color.Black); + + int _startPosXInt = Convert.ToInt32(_startPosX); + int _startPosYInt = Convert.ToInt32(_startPosY); + + //отрисовка кабины + g.DrawLine(pen, _startPosXInt, _startPosYInt + 50, _startPosXInt + 5, _startPosYInt + 50); + Point[] cabin = + { + new Point(_startPosXInt + 5, _startPosYInt + 50), + new Point(_startPosXInt + 20, _startPosYInt + 40), + new Point(_startPosXInt + 20, _startPosYInt + 60) + }; + g.FillPolygon(Brushes.Black, cabin); + + //отрисовка корпуса + g.FillRectangle(br, _startPosXInt + 20, _startPosYInt + 40, 90, 20); + g.DrawRectangle(pen, _startPosXInt + 20, _startPosYInt + 40, 90, 20); + + //отрисовка правого крыла + Point[] rightWing = + { + new Point(_startPosXInt + 50, _startPosYInt + 40), + new Point(_startPosXInt + 50, _startPosYInt), + new Point(_startPosXInt + 60, _startPosYInt), + new Point(_startPosXInt + 70, _startPosYInt + 40) + }; + g.FillPolygon(br, rightWing); + g.DrawPolygon(pen, rightWing); + + //отрисовка левого крыла + Point[] leftWing = + { + new Point(_startPosXInt + 50, _startPosYInt + 60), + new Point(_startPosXInt + 50, _startPosYInt + 100), + new Point(_startPosXInt + 60, _startPosYInt + 100), + new Point(_startPosXInt + 70, _startPosYInt + 60) + }; + g.FillPolygon(br, leftWing); + g.DrawPolygon(pen, leftWing); + + //отрисовка хвоста (справа) + Point[] rightTail = + { + new Point(_startPosXInt + 95, _startPosYInt + 40), + new Point(_startPosXInt + 95, _startPosYInt + 30), + new Point(_startPosXInt + 110, _startPosYInt + 15), + new Point(_startPosXInt + 110, _startPosYInt + 40) + }; + g.FillPolygon(br, rightTail); + g.DrawPolygon(pen, rightTail); + + //отрисовка хвоста (слева) + Point[] leftTail = + { + new Point(_startPosXInt + 95, _startPosYInt + 60), + new Point(_startPosXInt + 95, _startPosYInt + 70), + new Point(_startPosXInt + 110, _startPosYInt + 85), + new Point(_startPosXInt + 110, _startPosYInt + 60) + }; + g.FillPolygon(br, leftTail); + g.DrawPolygon(pen, leftTail); + } + /// + /// Смена границ формы отрисовки + /// + /// Ширина картинки + /// Высота картинки + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _airBomberWidth || _pictureHeight <= _airBomberHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _airBomberWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _airBomberWidth; + } + if (_startPosY + _airBomberHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _airBomberHeight; + } + } + } +} diff --git a/AirBomber/AirBomber/EntityAirBomber.cs b/AirBomber/AirBomber/EntityAirBomber.cs new file mode 100644 index 0000000..dfdae8a --- /dev/null +++ b/AirBomber/AirBomber/EntityAirBomber.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AirBomber +{ + /// + /// Класс-сущность "Бомбардировщик" + /// + internal class EntityAirBomber + { + /// + /// Скорость + /// + 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/AirBomber/AirBomber/Form1.Designer.cs b/AirBomber/AirBomber/Form1.Designer.cs deleted file mode 100644 index 185eea6..0000000 --- a/AirBomber/AirBomber/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace AirBomber -{ - 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/AirBomber/AirBomber/Form1.cs b/AirBomber/AirBomber/Form1.cs deleted file mode 100644 index 0ca8021..0000000 --- a/AirBomber/AirBomber/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AirBomber -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/AirBomber/AirBomber/FormAirBomber.Designer.cs b/AirBomber/AirBomber/FormAirBomber.Designer.cs new file mode 100644 index 0000000..cac5394 --- /dev/null +++ b/AirBomber/AirBomber/FormAirBomber.Designer.cs @@ -0,0 +1,181 @@ +namespace AirBomber +{ + partial class FormAirBomber + { + /// + /// 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.pictureBoxAirBomber = 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.buttonCreateAirBomber = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAirBomber)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBoxAirBomber + // + this.pictureBoxAirBomber.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxAirBomber.Location = new System.Drawing.Point(0, 0); + this.pictureBoxAirBomber.Name = "pictureBoxAirBomber"; + this.pictureBoxAirBomber.Size = new System.Drawing.Size(882, 427); + this.pictureBoxAirBomber.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxAirBomber.TabIndex = 0; + this.pictureBoxAirBomber.TabStop = false; + this.pictureBoxAirBomber.Resize += new System.EventHandler(this.pictureBoxAirBomber_Resize); + // + // 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, 427); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(882, 26); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(76, 20); + this.toolStripStatusLabelSpeed.Text = "Скорость:"; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(36, 20); + this.toolStripStatusLabelWeight.Text = "Вес:"; + // + // toolStripStatusLabelBodyColor + // + this.toolStripStatusLabelBodyColor.Name = "toolStripStatusLabelBodyColor"; + this.toolStripStatusLabelBodyColor.Size = new System.Drawing.Size(45, 20); + this.toolStripStatusLabelBodyColor.Text = "Цвет:"; + // + // buttonCreateAirBomber + // + this.buttonCreateAirBomber.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreateAirBomber.Location = new System.Drawing.Point(12, 395); + this.buttonCreateAirBomber.Name = "buttonCreateAirBomber"; + this.buttonCreateAirBomber.Size = new System.Drawing.Size(94, 29); + this.buttonCreateAirBomber.TabIndex = 2; + this.buttonCreateAirBomber.Text = "Создать"; + this.buttonCreateAirBomber.UseVisualStyleBackColor = true; + this.buttonCreateAirBomber.Click += new System.EventHandler(this.buttonCreateAirBomber_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::AirBomber.Properties.Resources.arrowUp; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(804, 358); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(30, 30); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.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::AirBomber.Properties.Resources.arrowLeft; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(768, 394); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(30, 30); + this.buttonLeft.TabIndex = 4; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.buttonMove_Click); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::AirBomber.Properties.Resources.arrowDown; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(804, 394); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(30, 30); + this.buttonDown.TabIndex = 5; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.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::AirBomber.Properties.Resources.arrowRight; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(840, 394); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(30, 30); + this.buttonRight.TabIndex = 6; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.buttonMove_Click); + // + // FormAirBomber + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(882, 453); + this.Controls.Add(this.buttonCreateAirBomber); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.pictureBoxAirBomber); + this.Controls.Add(this.statusStrip1); + this.Name = "FormAirBomber"; + this.Text = "Бомбардировщик"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxAirBomber)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private PictureBox pictureBoxAirBomber; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelBodyColor; + private Button buttonCreateAirBomber; + private Button buttonUp; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/AirBomber/AirBomber/FormAirBomber.cs b/AirBomber/AirBomber/FormAirBomber.cs new file mode 100644 index 0000000..a854805 --- /dev/null +++ b/AirBomber/AirBomber/FormAirBomber.cs @@ -0,0 +1,72 @@ +namespace AirBomber +{ + public partial class FormAirBomber : Form + { + private DrawingAirBomber _airBomber; + + public FormAirBomber() + { + InitializeComponent(); + } + + private void Draw() + { + Bitmap bmp = new(pictureBoxAirBomber.Width, pictureBoxAirBomber.Height); + Graphics gr = Graphics.FromImage(bmp); + _airBomber?.DrawTransport(gr); + pictureBoxAirBomber.Image = bmp; + } + /// + /// "" + /// + /// + /// + private void buttonCreateAirBomber_Click(object sender, EventArgs e) + { + Random rnd = new(); + _airBomber = new DrawingAirBomber(); + _airBomber.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _airBomber.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxAirBomber.Width, pictureBoxAirBomber.Height); + toolStripStatusLabelSpeed.Text = $": {_airBomber.AirBomber.Speed}"; + toolStripStatusLabelWeight.Text = $": {_airBomber.AirBomber.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_airBomber.AirBomber.BodyColor.Name}"; + Draw(); + } + /// + /// + /// + /// + /// + private void buttonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "buttonUp": + _airBomber?.MoveTransport(Direction.Up); + break; + case "buttonDown": + _airBomber?.MoveTransport(Direction.Down); + break; + case "buttonLeft": + _airBomber?.MoveTransport(Direction.Left); + break; + case "buttonRight": + _airBomber?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + /// + /// + /// + /// + /// + private void pictureBoxAirBomber_Resize(object sender, EventArgs e) + { + _airBomber?.ChangeBorders(pictureBoxAirBomber.Width, pictureBoxAirBomber.Height); + Draw(); + } + } +} \ No newline at end of file diff --git a/AirBomber/AirBomber/FormAirBomber.resx b/AirBomber/AirBomber/FormAirBomber.resx new file mode 100644 index 0000000..c8a269a --- /dev/null +++ b/AirBomber/AirBomber/FormAirBomber.resx @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 61 + + \ No newline at end of file diff --git a/AirBomber/AirBomber/Program.cs b/AirBomber/AirBomber/Program.cs index 34d9512..76b85fe 100644 --- a/AirBomber/AirBomber/Program.cs +++ b/AirBomber/AirBomber/Program.cs @@ -11,7 +11,7 @@ namespace AirBomber // 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 FormAirBomber()); } } } \ No newline at end of file diff --git a/AirBomber/AirBomber/Properties/Resources.Designer.cs b/AirBomber/AirBomber/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c458e7e --- /dev/null +++ b/AirBomber/AirBomber/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace AirBomber.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("AirBomber.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/AirBomber/AirBomber/Form1.resx b/AirBomber/AirBomber/Properties/Resources.resx similarity index 83% rename from AirBomber/AirBomber/Form1.resx rename to AirBomber/AirBomber/Properties/Resources.resx index 1af7de1..dc6b4c5 100644 --- a/AirBomber/AirBomber/Form1.resx +++ b/AirBomber/AirBomber/Properties/Resources.resx @@ -117,4 +117,17 @@ 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\arrowLeft.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\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/AirBomber/AirBomber/Resources/arrowDown.png b/AirBomber/AirBomber/Resources/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..b31f0c8b5661c6daa2b3e53f397f8da89f767c29 GIT binary patch literal 11552 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