ISBd-21. Gordeev.I.V Laba work 01 #1

Closed
Igor_Gordeev wants to merge 3 commits from ElectricLocomotiveBasicLabFirst01 into main
12 changed files with 796 additions and 50 deletions

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ElectricLocomotive
{
public enum DirectionType
{
Up = 1,
Down = 2,
Left = 3,
Right = 4
}
}

View File

@ -0,0 +1,205 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;
namespace ElectricLocomotive
{
public class DrawningElectricLocomotive
{
public EntityElectricLocomotive? _ElectricLocomotive { get; private set; }
private int _pictureWidth;
private int _pictureHeight;
private int _startPosX;
private int _startPosY;
private readonly int _LocomotiveWidth = 100;
private readonly int _LocomoriveHeight =50;
public bool Init(int speed, double weight, Color bodyColor, Color additionalColor, bool horns, int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if ((_pictureHeight < _LocomoriveHeight) || (_pictureWidth < _LocomotiveWidth))
Review

Сначала выполняются проверки и только потом, если они пройдены успешно, запоминаются данные

Сначала выполняются проверки и только потом, если они пройдены успешно, запоминаются данные
{
return false;
}
_ElectricLocomotive = new EntityElectricLocomotive();
_ElectricLocomotive.Init(speed, weight, bodyColor, additionalColor, horns);
return true;
}
public void SetPosition(int x, int y)
{
if (x < 0 || y < 0 || x + _LocomotiveWidth > _pictureWidth || y + _LocomoriveHeight > _pictureHeight)
{
return ;
Review

Нет корректировки координат, если при текущих объект "выходит" за границы

Нет корректировки координат, если при текущих объект "выходит" за границы
}
else
{
_startPosX = x;
_startPosY = y;
}
}
public void MoveTransport(DirectionType direction)
{
if (_ElectricLocomotive == null)
{
return;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX - _ElectricLocomotive.Step > 0)
{
_startPosX -= (int)_ElectricLocomotive.Step;
}
break;
//вверх
case DirectionType.Up:
if (_startPosY - _ElectricLocomotive.Step > 0)
{
_startPosY -= (int)_ElectricLocomotive.Step;
}
break;
// вправо
case DirectionType.Right: // TODO: Продумать логику
if (_startPosX+ _LocomotiveWidth + (int)_ElectricLocomotive.Step < _pictureWidth)
{
_startPosX += (int)_ElectricLocomotive.Step;
}
break;
//вниз
case DirectionType.Down: // TODO: Продумать логику
if (_startPosY + _LocomoriveHeight + (int)_ElectricLocomotive.Step < _pictureHeight)
{
_startPosY += (int)_ElectricLocomotive.Step;
}
break;
}
}
public void DrawTransport(Graphics g)
{
if (_ElectricLocomotive == null)
{
return;
}
Pen pen = new(_ElectricLocomotive.AdditionalColor);
Brush brush = new SolidBrush(_ElectricLocomotive.BodyColor);
///ВЛ60к-1595
///ходовая
g.FillRectangle(brush, new Rectangle(_startPosX + 20, _startPosY + 45, 15, 5));
g.FillRectangle(brush, new Rectangle(_startPosX + 65, _startPosY + 45, 15, 5));
g.FillEllipse(brush, _startPosX + 15, _startPosY + 45, 10, 10);
g.FillEllipse(brush, _startPosX + 30, _startPosY + 45, 10, 10);
g.FillEllipse(brush, _startPosX + 60, _startPosY + 45, 10, 10);
g.FillEllipse(brush, _startPosX + 75, _startPosY + 45, 10, 10);
PointF[] chassis =
{
new Point(_startPosX+10, _startPosY+50),
new Point(_startPosX, _startPosY+50),
new Point(_startPosX+10, _startPosY +40),
new Point(_startPosX + 90, _startPosY+40),
new Point(_startPosX+100, _startPosY+50),
new Point(_startPosX+90,_startPosY+ 50),
new Point(_startPosX+85, _startPosY+45),
new Point(_startPosX+15, _startPosY+45),
};
g.FillPolygon(brush, chassis);
///обводка ходовой
Point[] chassisCont =
{
new Point(_startPosX+10, _startPosY+50),
new Point(_startPosX, _startPosY+50),
new Point(_startPosX+10, _startPosY +40),
new Point(_startPosX + 90, _startPosY+40),
new Point(_startPosX+100, _startPosY+50),
new Point(_startPosX+90,_startPosY+ 50),
new Point(_startPosX+85, _startPosY+45),
new Point(_startPosX+15, _startPosY+45),
};
g.DrawPolygon(pen, chassisCont);
///кабина
Point[] cabin =
{
new Point(_startPosX+20, _startPosY+10),
new Point(_startPosX+90,_startPosY+10),
new Point(_startPosX+90,_startPosY + 40),
new Point(_startPosX+10,_startPosY+40),
new Point(_startPosX+10,_startPosY+25)
};
g.DrawPolygon(pen, cabin);
g.DrawLine(pen, _startPosX + 10, _startPosY + 25, _startPosX + 90, _startPosY + 25);
///окна
g.FillRectangle(brush, _startPosX + 20, _startPosY + 15, 10, 10);
g.FillRectangle(brush, _startPosX + 35, _startPosY + 15, 10, 10);
g.FillRectangle(brush, _startPosX + 75, _startPosY + 15, 10, 10);
///дверь
g.FillRectangle(brush, _startPosX + 50, _startPosY + 15, 10, 25);
///рога
if (_ElectricLocomotive.Horns == true)
{
g.FillRectangle(brush, _startPosX + 25, _startPosY + 5, 15, 5);
Point[] horns =
{
new Point(_startPosX+25, _startPosY+10),
new Point(_startPosX+25, _startPosY+5),
new Point(_startPosX+33,_startPosY+5),
new Point(_startPosX+50, _startPosY),
new Point(_startPosX+33,_startPosY+5),
new Point(_startPosX+40,_startPosY+5),
new Point(_startPosX+40,_startPosY+10)
};
g.DrawPolygon(pen, horns);
g.FillRectangle(brush, _startPosX + 65, _startPosY + 5, 15, 5);
Point[] horns2 =
{
new Point(_startPosX+65, _startPosY+10),
new Point(_startPosX+65, _startPosY+5),
new Point(_startPosX+73,_startPosY+5),
new Point(_startPosX+90, _startPosY),
new Point(_startPosX+73,_startPosY+5),
new Point(_startPosX+80,_startPosY+5),
new Point(_startPosX+80,_startPosY+10)
};
g.DrawPolygon(pen, horns2);
}
///Батарея
g.FillRectangle(brush, _startPosX + 45, _startPosY + 5, 15, 5);
}
}
}

View File

@ -0,0 +1,138 @@
namespace ElectricLocomotive
{
partial class ElectricLocomotive
{
/// <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(ElectricLocomotive));
pictureBoxElectroLocomotiv = new PictureBox();
buttonUp = new Button();
buttonRight = new Button();
buttonDown = new Button();
buttonLeft = new Button();
buttonCreate = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxElectroLocomotiv).BeginInit();
SuspendLayout();
//
// pictureBoxElectroLocomotiv
//
pictureBoxElectroLocomotiv.AccessibleRole = AccessibleRole.Client;
pictureBoxElectroLocomotiv.Dock = DockStyle.Fill;
pictureBoxElectroLocomotiv.Location = new Point(0, 0);
pictureBoxElectroLocomotiv.Name = "pictureBoxElectroLocomotiv";
pictureBoxElectroLocomotiv.Size = new Size(854, 467);
pictureBoxElectroLocomotiv.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBoxElectroLocomotiv.TabIndex = 5;
pictureBoxElectroLocomotiv.TabStop = false;
//
// buttonUp
//
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
buttonUp.Location = new Point(777, 389);
buttonUp.Name = "buttonUp";
buttonUp.Size = new Size(30, 30);
buttonUp.TabIndex = 10;
buttonUp.UseVisualStyleBackColor = true;
buttonUp.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(813, 425);
buttonRight.Name = "buttonRight";
buttonRight.Size = new Size(30, 30);
buttonRight.TabIndex = 9;
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(777, 425);
buttonDown.Name = "buttonDown";
buttonDown.Size = new Size(30, 30);
buttonDown.TabIndex = 8;
buttonDown.UseVisualStyleBackColor = true;
buttonDown.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(741, 425);
buttonLeft.Name = "buttonLeft";
buttonLeft.Size = new Size(30, 30);
buttonLeft.TabIndex = 7;
buttonLeft.UseVisualStyleBackColor = true;
buttonLeft.Click += buttonMove_Click;
//
// buttonCreate
//
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.Location = new Point(13, 425);
buttonCreate.Name = "buttonCreate";
buttonCreate.Size = new Size(108, 34);
buttonCreate.TabIndex = 6;
buttonCreate.Text = "Создать";
buttonCreate.UseVisualStyleBackColor = true;
buttonCreate.Click += buttonCreate_Click;
//
// ElectricLocomotive
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(854, 467);
Controls.Add(buttonUp);
Controls.Add(buttonRight);
Controls.Add(buttonDown);
Controls.Add(buttonLeft);
Controls.Add(buttonCreate);
Controls.Add(pictureBoxElectroLocomotiv);
Name = "ElectricLocomotive";
Text = "ElectricLocomotive";
((System.ComponentModel.ISupportInitialize)pictureBoxElectroLocomotiv).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private PictureBox pictureBoxElectroLocomotiv;
private Button buttonUp;
private Button buttonRight;
private Button buttonDown;
private Button buttonLeft;
private Button buttonCreate;
}
}

View File

@ -0,0 +1,65 @@
namespace ElectricLocomotive
{
public partial class ElectricLocomotive : Form
{
private DrawningElectricLocomotive? _drawningElectricLocomotive;
public ElectricLocomotive()
{
InitializeComponent();
}
private void Draw()
{
if (_drawningElectricLocomotive == null)
{
return;
}
Bitmap bmp = new(pictureBoxElectroLocomotiv.Width, pictureBoxElectroLocomotiv.Height);
Graphics gr = Graphics.FromImage(bmp);
_drawningElectricLocomotive.DrawTransport(gr);
pictureBoxElectroLocomotiv.Image = bmp;
}
private void buttonCreate_Click(object sender, EventArgs e)
{
Random random = new();
_drawningElectricLocomotive = new DrawningElectricLocomotive();
_drawningElectricLocomotive.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)), pictureBoxElectroLocomotiv.Width, pictureBoxElectroLocomotiv.Height);
_drawningElectricLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw();
}
private void buttonMove_Click(object sender, EventArgs e)
{
if (_drawningElectricLocomotive == null)
{
return;
}
string name = ((Button)sender)?.Name ?? string.Empty;
switch (name)
{
case "buttonUp":
_drawningElectricLocomotive.MoveTransport(DirectionType.Up);
break;
case "buttonDown":
_drawningElectricLocomotive.MoveTransport(DirectionType.Down);
break;
case "buttonLeft":
_drawningElectricLocomotive.MoveTransport(DirectionType.Left);
break;
case "buttonRight":
_drawningElectricLocomotive.MoveTransport(DirectionType.Right);
break;
}
Draw();
}
}
}

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,234 @@
<?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="buttonUp.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAX1JREFUaEPt
2T0rhXEcxvHjqbwGg+IVyMxIJpOyGEweFpPYZbBQMpmYFEViZGWR1yJi8Ox71bnr390lHbq5f/l/61P6
36dzX4fOGZxGLpfL5epaL+Ywix4dRGocd3hvusEYQjSJJxTjC4+YQK2bwjPK4wsvmEYtm8cr3PDUGxZQ
q5bhxn5GL2IRtajV8ak1/FltWIcb1oot6Ll+Nd1QN3aDvmMb7fiVOrALN+Qn9tCJStMNDuEGFM7NWeHM
nKX03PoFVdZXb9hTdJfOUrp2UjorW0JlXcLdVA7QBeWui9Jj9uGuywUq6xjupnpPpH969xgp0mN34B5z
hMoaxAPSG+rTqPwJkl5PpemTbBPp9XsMoNL6sQrdfFQHpnRUyjWCDaygTwd1yI2XMLnxEiY3XsLkxkuY
3HgJkxsvYXLjJUxuvITJjZcwufESJjdewuTGS5jceAmTGy9hcv9e1FmYrlF+AVcI0zBuUYzXz0MIlb7U
mGkK9wVHLpfL/YsajQ+TA0YtgOqCtwAAAABJRU5ErkJggg==
</value>
</data>
<data name="buttonRight.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAEZ5JREFUeF7t
3Ymv5WV9x/GZYZhhXwQRcWFRwWIEBbdUFDXVqNSorbiBojVqca1FSqgkWmtJCorFtRqhRLCgRSyRWhQF
64KmUrFiVJSoA7KIAgNlBgZmpv08qQmtfIGZ3+/euc855/VK3v/A5Dnzufee37IIAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACASbBZekJ6S/pI+nL6abom
3ZxuSdemK9JF6WPpqHRQ2jwBABNiq3RYOje1kf/vgd2azk9/krZLAECHHpE+ntpv9dWgj2l1Oj3tlwCA
DuydPpXWpmq857L16Z/T/gkAWADtO/pj0m2pGuv57M50cvLVAABsQo9Nl6dqnDdlV6WDEwAwz16ZVqVq
kBei9tXDu9KSBADMsTawH0rVCPfQmWlZAgDmSLuf/9RUDW9P/UvaMgEAI7Xf/D+TqsHtsfZAofYsAgBg
hJNSNbQ9d0HaIgEAA7whVQM7CbXnBXicMABspHar35pUjeukdHZq1y8AABug/fn8slSN6qR1WnKLIABs
gPemakwntQ8kAOBePCxN+p/+q9rFjADAPWiv8a0GdBp6RwIAfsfjUzWc09SfJQDg//jHVI3mNNVeKfz6
BADEg9IdqRrNaWtdOiwBwMz7y1SN5bTW3iL44gQAM+17qRrKaa7d7XBIAoCZtHeqBnIWWp2elgBg5rwp
VeM4K61KByUAmClnpmoYZ6mV6cAEADNjRapGcda6Pu2bAGDqbZeqMZzVrkv7JACYagekaghnuSvTHgkA
ptahqRrBWe/ytGsCgKn0xlQNoBYtuiztlABg6vxFqsZP/9ulaccEAFPlr1I1fLqri9M2CQCmhh8ANqyv
pC0SAEwFXwFseOen5QkAJp6LADeuz6alCQAmmtsAN77T0pIEABPLg4CGdUpanABgInkU8PDenwBgYv0i
VQOn++6dCQAm0qdSNW7asI5JADBx3pCqYdOGtT4dmQBgojwiVcOmDW9dOiIBwET5bqqGTRve2vTSBAAT
49hUjZo2rjvS8xIATITd0ppUjZo2rvbv+OwEABPhjFQNmja+VempCQC6d2CqxkzDWpnavykAdO+cVI2Z
hnVTekwCgK7tlW5P1ZhpWL9Kj0wA0LUTUzVkGt6KtHsCgG4tT99P1ZBpeFekdrcFAHSrfW/ttsC57/L0
gAQA3WrPt69GTONqT13cIQFAt96XqhHTuL6dtk0A0KUl6exUjZjGdWHaMgFAl5al81I1YhrXl1K76BIA
utR+U22/sVYjpnF9Li1NANClrdLXUjViGtfpqX3dAgBd2j5dkqoR07hOTYsTAHRp5/SDVI2YxnVyAoBu
tYfZ/DhVI6ZxvTsBQLcekn6eqhHTuI5NANCth6erUzViGtdRCQC6tU+6LlUjpuGtT69LANCt/dMNqRoy
DW9delkCgG49Kd2SqiHT8NamQxMAdOugdGuqhkzDa69mfm4CgG49K92eqiHT8FangxMAdOsF6c5UDZmG
d3N6QgKAbh2e2kVs1ZBpeDelAxIAdOvVqd3OVg2Zhnd92jcBQLfenKoR07h+mfZKANCt41I1YhrXirR7
AoBuHZ+qEdO4fpJ2TQDQrRNTNWIa1/fTTgkAurQ4/X2qRkzj+m7aIQFAl5akM1I1YhrXN9M2CQC6tFn6
dKpGTOO6IG2RAKBLy9J5qRoxjevctHkCgC5tmS5K1YhpXGenpQkAurR1+nqqRkzjOi21ay4AoEvbp0tS
NWIa1wcTAHRr5/SDVI2YxnVSAoBuPSD9OFUjpnG9IwFAtx6Sfp6qEdO4jk4A0K2Hp2tSNWIaXns1858m
AOjWPum6VA2ZhrcuHZYAoFv7pxtTNWQa3tr04gQA3XpSuiVVQ6bhrUmHJADo1jPS6lQNmYbX/k2fngCg
W89Kt6dqyDS8VekpCQC69YJ0Z6qGTMNbmQ5MANCtw1O7kr0aMg3v1+lRCQC69erU7mmvhkzDa7ddttsv
AaBbb0nViGlcV6Y9EgB067hUjZjG9dP0wAQA3To+VSOmcV2WdkoA0K0TUzViGtelaccEAF1anD6WqhHT
uC5O2yQA6NKS9KlUjZjG9ZW0RQKALm2WPpOqEdO4zk/LEwB0aVk6L1UjpnF9Ni1NANClLdNFqRoxjeuT
qX3dAgBd2jp9PVUjpnGdktqFlwDQpe3TJakaMY3r7xJwHx6UDkvtgSXnpB+mq9JNqfpgSdIk9M4E/I7H
pJNSG/vqgyNJ09DbE8y8dvXxa9N/pOqDIknTVnsr45EJZlK7LaYN/89T9QGRpGluXToiwUxpf+r/Tqo+
FJI0K61NL00w9TZPJ6R26KsPgyTNWnekP0wwtXZJ7dnY1QdAkma5NenZCabO/umaVB18SdKiRbemJyeY
Ggem36TqwEuS7urm9LgEE+/xqR3o6qBLku5e+4XpUQkm1h7pulQdcEnSPXd12jPBxGnPEv9Rqg62JOm+
uyK1i6dhopyRqgMtSdrwLkybJZgIh6fqIEuSNr5jE3Tv/snb+iRp7rozPTpB1z6eqgMsSRre19PiBF1q
z/f3iF9Jmp9ekqBL/5SqQytJGl+7s2pJgq7slfz2L0nz23MTdOUDqTqskqS564IE3ViafpWqwypJmrvW
pd0SdOGQVB1USdLc9+YEXTgtVYdUkjT3tacDQhdWpOqQSpLmvtVpWYIF1d5WVR1QSdL89aQEC+oVqTqc
kqT5660JFtTxqTqckqT564MJFpSn/0nSpu8LCRbUpak6nJKk+as9FhgW1JWpOpySpPnr6gQL6sZUHU5J
0vy1MsGCWpOqwylJmr/uTLCg7kjV4ZQkzV+3JVhQvgKQpE3fbxIsKBcBStKmrz2CHRaU2wAladP37wkW
lAcBSdKm78wEC+pvUnU4JUnzV/u/FxbU4ak6nJKk+etlCRbUHqk6nJKk+eshCRbcL1J1QCVJc99VCbpw
aqoOqSRp7jslQReek6pDKkma+56ZoAtL03WpOqiSpLnr16n9nwvdODlVh1WSNHedkKAre6b2dqrqwEqS
xtdevubqf7p0VqoOrSRpfP+QoEv7pbWpOriSpOGtSg9N0K2PpOrwSpKGd1yCru2UbkjVAZYkbXw/TFsk
6N4fp+oQS5I2rtvSYxJMjHaxSnWYJUkb3usSTJRt02WpOtCSpPvupAQT6UGpvbSiOtiSpHvujLQkwcR6
bLopVQdcknT3zk2bJ5h47YeA61N10CVJd/Xl5Ip/psrvpStTdeAlSYsWfSNtnWDq7Jy+mKqDL0mz3PfS
jgmm1mbp3am91KL6EEjSrPWD1H5Bgpnw6PStVH0YJGlW+mnaLcFMaX8NeGX6Sao+GJI0za1IuyeYWUvT
K9LFqfqQSNK0dW16RAJ+q90tcHy6NK1P1QdHkia536T2NShwD3ZJh6Z20eBn0n+mX6Qbkx8OJE1iN6fH
JQDozpbpwlQNmIa3Kh2cAKA77RG0n0/VgGl4a9JzEgB0p92Zc1aqBkzDW5va15kA0J3F6ROpGjANb116
eQKA7rTx/2iqBkzDaxcrvz4BQJdOSNWAaVxHJwDo0ntSNV4a13EJALr0tlSNl8b1/gQAXXpTqsZL4/pw
AoAuvSq1q9OrAdPwPpmWJADozotSuy+9GjAN75zUXmwGAN15frozVQOm4X0xLU8A0J1npttSNWAa3jfS
1gkAuvPkdGuqBkzD+3baNgFAd56YbknVgGl47fXk90sA0J390g2pGjAN7/K0awKA7uydrkvVgGl4K9JD
EwB052Hp6lQNmIb3y7RXAoDuPDj9LFUDpuFdn/ZNANCdXdKPUjVgGt7KdEACgO7snC5L1YBpeO32yYMS
AHRn+/SdVA2Yhrc6PS0BQHe2Sl9L1YBpeHekQxIAdGdZOj9VA6bhtZclvSQBQHc2T59P1YBpeOvTaxIA
dGezdFaqBkzDa+N/ZAKA7ixOn0jVgGlcxyQA6E4b/4+marw0rnclAOjSCakaL43r5AQAXfrrVI2XxnVq
an9ZAYDuvC1V46VxnZ6WJADozptSNV4a1+fS0gQA3TkirUvVgGl4F6TlCQC686LUnkhXDZiG9820dQKA
7jw/tWfRVwOm4V2adkgA0J0/SLelasA0vO+nnRIAdOf3U3v/fDVgGt5P0gMTAHTniemWVA2Yhndl2j0B
QHf2SzekasA0vOvSPgkAurN3ujZVA6bh/To9KgFAdx6Wrk7VgGl4K9PjEgB058HpZ6kaMA1vVXpKAoDu
7JJ+mKoB0/DWpGcnAOhOexDNd1M1YBpee3DS8xIAdGe79J1UDZiG1x6Z/NIEAN3ZKv1bqgZMw1ufXpsA
oDvL0r+masA0rqMSAHRn8/T5VI2XxnVsAoDubJbOTNV4aVzvSQDQncXpE6kaL43rgwkAuvShVI2XxtV+
qGo/XAFAd96eqvHSuM5OSxMAdOeP0rpUDZiGd25qF1QCQHf2TDenasA0vC+nLRIAdGdJ+mqqBkzDuzht
kwCgS3+eqgHT8C5J2ycA6NL9U3sHfTViGtaP0wMSAHTro6kaMQ3rirRbAoBu7Z7uTNWQaeNbkdq/KQB0
7b2pGjJtfL9Kj0wA0LVt002pGjNtXO3f8bEJALr3qlSNmTau9uyExycAmAhfSNWgacNbnQ5OADARdkxr
UjVq2rBuT89KADAx2jP/q1HThrU2HZoAYKK8L1XDpvuuvSzp5QkAJs63UjVuuvfWp9cmAJhIt6Rq4HTv
HZ0AYCLtmqpx0713XAKAifXkVA2c7rm/TQAw0V6YqpFT3YcTAEy8w1M1dLp7n0xLEgBMvNenauz0/zsn
LU0AMBX8AHDffTEtTwAwNXwFcO99I22dAGCquAjwnvt2aq9JBoCp4zbAuktTe0kSAEwlDwK6e5en9u8C
AFPNo4DvakV6aAKAqXdxqsZw1roq7ZkAYCacmKpBnKWuT/smAJgZL0jVKM5KK9MBCQBmSrvafU2qxnHa
a9c/PDEBwEw6L1UDOc2tTk9LADCzjkjVSE5rd6RDEgDMtK3SDakay2lrbXpJAgDihFQN5jS1Pr0mAQC/
1R6A0/40Xg3nNNTG/8gEAPyOD6VqPKehYxIAULhfmsZrAd6VAIB78bZUjeik9r4EANyHJenCVI3ppHVq
WpwAgA3w4HRjqkZ1Ujo9tR9mAICN8MK0LlXj2nvnpKUJABjgqFQNbM9dkLZIAMAIH0jV0PbYRak91RAA
GKldRPfeVA1uT30hbZkAgDnU7qWvhreHPp2WJQBgHjw/rUzVCC9E7cU+7QcTV/sDwDzbJ30vVYO8Kbsm
PSMBAJtIu8XuremWVI3zfNZuTfxY2i4BAAtg93RK2hRvEWxv8zsvHZgAgA60HwTamwRvStV4j+m2dFY6
IAEAHWoP4Dk0fTaNeZTwqvSl9Lq0QwIAJkS7Mr/91v7G1P460Ab98vTL1O4k+K90bboifTV9PB2dnpqW
JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGEW
Lfof8qiDQ1mFN78AAAAASUVORK5CYII=
</value>
</data>
<data name="buttonDown.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAASRJREFUaEPtmL0KwjAURiv4AK6Co6KCoDgr/ryKvoSb7+Tk4mu46CIiooKDOut3
ay+EklQXexO5Bw4kaYac0hYxUhR/qcJNIo2DYwafiTQOjjnkABoHhwZIowHSaIA0GiCNBkijAdJogDQa
II0GSKMB0miANBogjQb8khKcwkY8s/NtQBlOYCWe5cQC0sHucEALFr4JqMM9pD1rWsiLFeTDuSI+BTTh
AfKeHcwN+r+f7xxpi8gKaMEj5Os32IO5UoNmxAOOIeMKaMMT5GsUP4QiZEXYAjrwDM39YodnXBHpgC68
GGu0bwS9IB1Bj8XSmNNX62rM6ZnvQ69IR7j06s6n+RTh9eEZV0QQh2dsL3Ywh2coYgvpy+P6ueE9BVh8
D5V/JIpe+j/GQF3wLqYAAAAASUVORK5CYII=
</value>
</data>
<data name="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAMNJREFUaEPt
1T0OAVEUhuGbWAYW4GcBGksgbIZSSWxKBDugwgZmBWh4T6K4ubmmUMg98T3J20wyyXeamSAiIiIi/6VN
ezpR1x54YuMv9Hy3JjfS8Q8akgu58RNyoUWux59J438tN35KLrge36R4vLWheSHNqE8fbSkeX2IVNShr
R7mXSqr2APthXSl+4UCrQlpQj2qlf907jcgVHVEKHVGK3BFjcsWOiD+xNxqQK+kRS3LHjrA/9pE69kBE
RERE5AshvACI8cWowOkNEgAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ElectricLocomotive
{
public class EntityElectricLocomotive
Review

Не заданы свойства-признаки

Не заданы свойства-признаки
{
/// <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 Horns { get; private set; }
/// <summary>
/// Признак (опция) roga
/// </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="Horns">Признак наличия рогов</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool horns)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
Horns = horns;
}
}
}

View File

@ -1,39 +0,0 @@
namespace ElectricLocomotive
{
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 ElectricLocomotive
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

View File

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

View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ElectricLocomotive.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("ElectricLocomotive.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;
}
}
}
}