Merge pull request 'PIbd-21. Puchkina A.A. LabWork_1' (#1) from LabWork_1 into main

Reviewed-on: http://student.git.athene.tech/a.puchkina/PIbd-22_Puchkina_A.A_AirplaneWithRadar._BASE/pulls/1
This commit is contained in:
Анна Пучкина 2023-09-27 09:28:53 +04:00
commit 8a66bc5e91
16 changed files with 1092 additions and 50 deletions

View File

@ -8,4 +8,19 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -0,0 +1,138 @@
namespace AirplaneWithRadar
{
partial class AirplaneWithRadarForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AirplaneWithRadarForm));
pictureBoxAirplane = new PictureBox();
buttonCreate = new Button();
buttonUp = new Button();
buttonLeft = new Button();
buttonRight = new Button();
buttonDown = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirplane).BeginInit();
SuspendLayout();
//
// pictureBoxAirplane
//
pictureBoxAirplane.Dock = DockStyle.Fill;
pictureBoxAirplane.Location = new Point(0, 0);
pictureBoxAirplane.Name = "pictureBoxAirplane";
pictureBoxAirplane.Size = new Size(882, 453);
pictureBoxAirplane.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBoxAirplane.TabIndex = 0;
pictureBoxAirplane.TabStop = false;
//
// buttonCreate
//
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.Location = new Point(12, 412);
buttonCreate.Name = "buttonCreate";
buttonCreate.Size = new Size(94, 29);
buttonCreate.TabIndex = 1;
buttonCreate.Text = "Создать";
buttonCreate.UseVisualStyleBackColor = true;
buttonCreate.Click += buttonCreateAirplane_Click;
//
// buttonUp
//
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = Properties.Resources.Up;
buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
buttonUp.Location = new Point(798, 375);
buttonUp.Name = "buttonUp";
buttonUp.Size = new Size(30, 30);
buttonUp.TabIndex = 2;
buttonUp.UseVisualStyleBackColor = true;
buttonUp.Click += buttonMove_Click;
//
// buttonLeft
//
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
buttonLeft.BackgroundImageLayout = ImageLayout.Zoom;
buttonLeft.Location = new Point(762, 411);
buttonLeft.Name = "buttonLeft";
buttonLeft.Size = new Size(30, 30);
buttonLeft.TabIndex = 3;
buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click;
//
// buttonRight
//
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
buttonRight.BackgroundImageLayout = ImageLayout.Zoom;
buttonRight.Location = new Point(834, 411);
buttonRight.Name = "buttonRight";
buttonRight.Size = new Size(30, 30);
buttonRight.TabIndex = 4;
buttonRight.UseVisualStyleBackColor = true;
buttonRight.Click += buttonMove_Click;
//
// buttonDown
//
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
buttonDown.BackgroundImageLayout = ImageLayout.Zoom;
buttonDown.Location = new Point(798, 411);
buttonDown.Name = "buttonDown";
buttonDown.Size = new Size(30, 30);
buttonDown.TabIndex = 5;
buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += buttonMove_Click;
//
// AirplaneWithRadarForm
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(882, 453);
Controls.Add(buttonDown);
Controls.Add(buttonRight);
Controls.Add(buttonLeft);
Controls.Add(buttonUp);
Controls.Add(buttonCreate);
Controls.Add(pictureBoxAirplane);
Name = "AirplaneWithRadarForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "AirplaneWithRadarForm";
((System.ComponentModel.ISupportInitialize)pictureBoxAirplane).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private PictureBox pictureBoxAirplane;
private Button buttonCreate;
private Button buttonUp;
private Button buttonLeft;
private Button buttonRight;
private Button buttonDown;
}
}

View File

@ -0,0 +1,94 @@
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 AirplaneWithRadar
{
/// <summary>
/// Форма работы с объектом "Самолет с радаром"
/// </summary>
public partial class AirplaneWithRadarForm : Form
{
/// <summary>
/// Поле-объект для прорисовки объекта
/// </summary>
private DrawningAirplane? _drawningAirplane;
/// <summary>
/// Инициализация формы
/// </summary>
public AirplaneWithRadarForm()
{
InitializeComponent();
}
/// <summary>
/// Метод прорисовки самолета
/// </summary>
private void Draw()
{
if (_drawningAirplane == null)
{
return;
}
Bitmap bmp = new(pictureBoxAirplane.Width, pictureBoxAirplane.Height);
Graphics gr = Graphics.FromImage(bmp);
_drawningAirplane.DrawTransport(gr);
pictureBoxAirplane.Image = bmp;
}
/// <summary>
/// Обработка нажатия кнопки "Создать"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonCreateAirplane_Click(object sender, EventArgs e)
{
Random random = new();
_drawningAirplane = new DrawningAirplane();
_drawningAirplane.Init(random.Next(100, 300),
random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), pictureBoxAirplane.Width, pictureBoxAirplane.Height);
_drawningAirplane.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw();
}
/// <summary>
/// Изменение размеров формы
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonMove_Click(object sender, EventArgs e)
{
if (_drawningAirplane == null)
{
return;
}
string name = ((Button)sender)?.Name ?? string.Empty;
switch (name)
{
case "buttonUp":
_drawningAirplane.MoveTransport(DirectionType.Up);
break;
case "buttonDown":
_drawningAirplane.MoveTransport(DirectionType.Down);
break;
case "buttonLeft":
_drawningAirplane.MoveTransport(DirectionType.Left);
break;
case "buttonRight":
_drawningAirplane.MoveTransport(DirectionType.Right);
break;
}
Draw();
}
}
}

View File

@ -0,0 +1,437 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAA4QAAAOEBAMAAAALYOIIAAAABGdBTUEAALGPC/xhBQAAABJQTFRF5ubm
AQEB////AAAAa2trubm55kNtzgAAAAlwSFlzAAAOvgAADr4B6kKxwAAAFy1JREFUeNrtnV2S6ka2RkFB
v7ese98VCmkA6hwBlzsB4tjzn0qTPxLC5lBCKH++qsVDVy932yf5VmxD1lbmPnT+1R78C5RD4pBH4pBH
4pBH4pBH4pBH4pBH4pBH4pBH4pBH4pBH4pBH4pBH4pBH4pDH6VWFvw6qInHII3HII3HII3HII3HII3HI
I3HII3HII3HII3HII3HII3HII3HII3EIY/hJ700WiUMeiUMeiUMeiUMeiUMeiUMeiUMeiUMeiUMeiUMe
iUMeiUMeiUMeiUMepxe9N3UkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDnkkDmEM
P+m9ySJxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyCNxyOP0ovemjsQhj8Qhj8Qh
j8Qhj8Qhj8Qhj8Qhj8Qhj8Qhj8Qhj8Qhj8Qhj8Qhj8QhjOEnvTdZJA55JA55JA55JA55JA55JA55JA55
JA55JA55JA55JA55JA55JA55JA55nF703tSROOSROOSROOSROOSROOSROOSROOSROOSROOSROOSROOSR
OOSROOSROIQx/KT3JovEIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/EIY/Ti96b
OhKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHPBKHMIaf9N5kkTjk8We+//9DoThe
/0ChNvYGhdo4NCjUxrZuGhRK48WMKFTG7liPNQqFsTqZsUahMFZD3dQoVMb2YmoUKmN3bUYUKqP9IKQK
lbHqa9N8R4Xh9QO6a63zZ26v5t+0fCXx7D4IncI/UCiI3dG4rzJUoSpWJ/9llCpUxWrwX2SoQlkMe3qq
UBa7q/8gpApV0e7pR6pQGKu+MQ1VqIxD3TSGKhRG26c3fBYKY3WtbwapQmHsb8oMVSiM7oOQKlTG257e
mO9dheHnN+0X3vf0rhRvL1q+WugfWEOhLro+PQqVcWjM1KBAoSR2Z7unR6Eu2q8yBoXC2J38nh6Fsug+
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
6s+aKhRHNw8fhdI4n8NHoSrO5/BRKIvzU/oolMXpKX1ONgnj2f+mja69LoYdPl17XbQ9/IYqlMbqz5Eq
FEd7l/68P6QKJfG2w29qqlAZFzt8qlAU7zt8qlAV5x0+VSiL7YUqVMeWKpTHvnYXsVOFwng0s0KqUBR/
2T4FVSiNtoffGE426eJth+9/z0bLVxanHT4KdXG6Sx+Fumif0h9RqIzuHP6IQmW0PXyqUBxPVKE8Xg0K
xbG9GBSK40AVymP/HxSqY4VCsCAkDnkkDnmcXj+iX/itkTjkkTjkkTjkkTjkkTjkkTjkkTjkkTjkkTjk
kTjkkTjkkTjkkTjkkTiEMfyk9yaLxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGPxCGP
xCGP04vemzoShzwShzwShzwShzwShzwShzwShzwShzwShzwShzwShzwShzwShzwShzCGn/TeZJE45JE4
5JE45JE45JE45JE45JE45JE45JE45JE45JE45JE45JE45JE45HF60XtTR+KQR+KQR+KQR+KQR+KQR+KQ
R+KQR+KQR+KQR+KQR+KQR+KQR+KQR+IQxvCT3pssEoc8Eoc8Eoc8Eoc8Eoc8Eoc8Eoc8Eoc8Eoc8Eoc8
Eoc8Eoc8Eoc8Eoc8Ti96b+pIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHPJIHMIY
ftJ7k0XikEfikEfikEfikEfikEfikEfikEfikEfikEfikEfikEfikEfikEfikMfpRe9NHYlDHolDHolD
HolDHolDHolDHolDHolDHolDHolDHolDHolDHolDHolDFbvuv59U64TBojvPAAAAAElFTkSuQmCC
</value>
</data>
<data name="buttonRight.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
RK5CYII=
</value>
</data>
<data name="buttonDown.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AirplaneWithRadar
{
/// <summary>
/// Направление перемещения
/// </summary>
public enum DirectionType
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}
}

View File

@ -0,0 +1,193 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.Threading.Tasks;
namespace AirplaneWithRadar
{/// <summary>
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
/// </summary>
public class DrawningAirplane
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityAirplaneWithRadar? EntityAirplaneWithRadar{ get; private set; }
/// <summary>
/// Ширина окна
/// </summary>
private int _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int _pictureHeight;
/// <summary>
/// /// Левая координата прорисовки самолета
/// </summary>
private int _startPosX;
/// <summary>
/// Верхняя кооридната прорисовки самолета
/// </summary>
private int _startPosY;
/// <summary>
/// Ширина прорисовки самолета
/// </summary>
private readonly int _airplaneWidth = 200;
/// <summary>
/// Высота прорисовки самолета
/// </summary>
private readonly int _airplaneHeight = 85;
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес</param>
/// <param name="bodyColor">Цвет фюзеляжа</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="radar">Признак наличия радара</param>
/// <param name="tank">Признак наличия доп.бака</param>
/// <param name="pin">Признак наличия штыря</param>
/// <param name="width">Ширина картинки</param>
/// <param name="height">Высота картинки</param>
/// <returns>true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах</returns>
public bool Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin, int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth < _airplaneWidth || _pictureHeight < _airplaneHeight)
{
return false;
}
EntityAirplaneWithRadar = new EntityAirplaneWithRadar();
EntityAirplaneWithRadar.Init(speed, weight, bodyColor, additionalColor, radar, tank, pin);
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
_startPosX = Math.Min(x, _pictureWidth - _airplaneWidth);
_startPosY = Math.Min(y, _pictureHeight - _airplaneHeight);
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
public void MoveTransport(DirectionType direction)
{
if (EntityAirplaneWithRadar == null)
{
return;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX - EntityAirplaneWithRadar.Step > 0)
{
_startPosX -= (int)EntityAirplaneWithRadar.Step;
}
break;
//вверх
case DirectionType.Up:
if (_startPosY - EntityAirplaneWithRadar.Step > 0)
{
_startPosY -= (int)EntityAirplaneWithRadar.Step;
}
break;
// вправо
case DirectionType.Right:
if (_startPosX + EntityAirplaneWithRadar.Step + _airplaneWidth < _pictureWidth)
{
_startPosX += (int)EntityAirplaneWithRadar.Step;
}
break;
//вниз
case DirectionType.Down:
if (_startPosY + EntityAirplaneWithRadar.Step + _airplaneHeight < _pictureHeight)
{
_startPosY += (int)EntityAirplaneWithRadar.Step;
}
break;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityAirplaneWithRadar == null)
{
return;
}
Pen penBlack = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityAirplaneWithRadar.AdditionalColor);
Brush bodyBrush = new SolidBrush(EntityAirplaneWithRadar.BodyColor);
// радар
if (EntityAirplaneWithRadar.Radar)
{
g.FillEllipse(additionalBrush, _startPosX + 65, _startPosY + 25, 50, 10);
g.DrawEllipse(penBlack, _startPosX + 65, _startPosY + 25, 50, 10);
g.FillRectangle(additionalBrush, _startPosX + 85, _startPosY + 35, 10, 5);
g.DrawRectangle(penBlack, _startPosX + 85, _startPosY + 35, 10, 5);
}
//фюзеляж
g.FillRectangle(bodyBrush, _startPosX + 4, _startPosY + 40, 150, 30);
g.DrawRectangle(penBlack, _startPosX + 4, _startPosY + 40, 150, 30);
//киль
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 4, _startPosY + 40), new Point(_startPosX + 4, _startPosY + 0), new Point(_startPosX + 50, _startPosY + 40)});
g.DrawPolygon(penBlack, new Point[] { new Point(_startPosX + 4, _startPosY + 40), new Point(_startPosX + 4, _startPosY + 0), new Point(_startPosX + 50, _startPosY + 40) });
//стабилизатор и крыло
Brush brSilver = new SolidBrush(Color.Silver);
g.FillEllipse(brSilver, _startPosX, _startPosY + 35, 55, 10);
g.DrawEllipse(penBlack, _startPosX, _startPosY + 35, 55, 10);
g.FillEllipse(brSilver, _startPosX + 55, _startPosY + 50, 70, 10);
g.DrawEllipse(penBlack, _startPosX + 55, _startPosY + 50, 70, 10);
//шасси
Brush brGray = new SolidBrush(Color.Gray);
Pen penGray = new Pen(Color.Gray);
penGray.Width = 3;
g.DrawLine(penGray, new Point(_startPosX + 50, _startPosY + 70), new Point(_startPosX + 50, _startPosY + 80));
g.DrawLine(penGray, new Point(_startPosX + 140, _startPosY + 70), new Point(_startPosX + 140, _startPosY + 80));
g.FillRectangle(brGray, _startPosX + 44, _startPosY + 80, 5, 5);
g.FillRectangle(brGray, _startPosX + 51, _startPosY + 80, 5, 5);
g.FillRectangle(brGray, _startPosX + 138, _startPosY + 80, 5, 5);
//кабина
Brush brLightBlue = new SolidBrush(Color.LightBlue);
Pen penBlue = new Pen(Color.CadetBlue);
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 150, _startPosY + 55), new Point(_startPosX + 190, _startPosY + 55), new Point(_startPosX + 150, _startPosY + 72) });
g.FillPolygon(brLightBlue, new Point[] { new Point(_startPosX + 150, _startPosY + 55), new Point(_startPosX + 150, _startPosY + 38), new Point(_startPosX + 190, _startPosY + 55) });
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 55), new Point(_startPosX + 150, _startPosY + 38));
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 38), new Point(_startPosX + 190, _startPosY + 55));
g.DrawLine(penBlue, new Point(_startPosX + 190, _startPosY + 55), new Point(_startPosX + 150, _startPosY + 55));
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 150, _startPosY + 55));
g.DrawLine(penBlack, new Point(_startPosX + 150, _startPosY + 72), new Point(_startPosX + 190, _startPosY + 55));
// Штырь
if (EntityAirplaneWithRadar.Pin)
{
g.DrawLine(penGray, new Point(_startPosX + 190, _startPosY + 55), new Point(_startPosX + 200, _startPosY + 55));
}
// бак
if (EntityAirplaneWithRadar.Tank)
{
g.FillRectangle(additionalBrush, _startPosX + 70, _startPosY + 65, 45, 15);
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 70, _startPosY + 65), new Point(_startPosX + 60, _startPosY + 72), new Point(_startPosX + 70, _startPosY + 80) });
g.FillPolygon(additionalBrush, new Point[] { new Point(_startPosX + 115, _startPosY + 65), new Point(_startPosX + 125, _startPosY + 72), new Point(_startPosX + 115, _startPosY + 80) });
}
}
}
}

View File

@ -1,39 +0,0 @@
namespace AirplaneWithRadar
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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
}
}

View File

@ -1,10 +0,0 @@
namespace AirplaneWithRadar
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

View File

@ -11,7 +11,7 @@ namespace AirplaneWithRadar
// 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 AirplaneWithRadarForm());
}
}
}

View File

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AirplaneWithRadar
{
public class EntityAirplaneWithRadar
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Дополнительный цвет (для опциональных элементов)
/// </summary>
public Color AdditionalColor { get; private set; }
/// <summary>
/// Признак (опция) наличия радара
/// </summary>
public bool Radar { get; private set; }
/// <summary>
/// Признак (опция) наличия доп.бака
/// </summary>
public bool Tank { get; private set; }
/// <summary>
/// Признак (опция) наличия штыря
/// </summary>
public bool Pin { get; private set; }
/// <summary>
/// Шаг перемещения самолета
/// </summary>
public double Step => (double)Speed * 100 / Weight;
/// <summary>
/// Инициализация полей объекта-класса самолета с радаром
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес самолета</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="radar">Признак наличия радара</param>
/// <param name="tank">Признак наличия доп.бака</param>
/// <param name="pin">Признак наличия штыря</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool radar, bool tank, bool pin)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
Radar = radar;
Tank = tank;
Pin = pin;
}
}
}

View File

@ -0,0 +1,103 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AirplaneWithRadar.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом 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() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[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("AirplaneWithRadar.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Down {
get {
object obj = ResourceManager.GetObject("Down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Left {
get {
object obj = ResourceManager.GetObject("Left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Right {
get {
object obj = ResourceManager.GetObject("Right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Up {
get {
object obj = ResourceManager.GetObject("Up", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -117,4 +117,17 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB