diff --git a/GasolineTanker/GasolineTanker/DrawningGasolineTanker.cs b/GasolineTanker/GasolineTanker/DrawningGasolineTanker.cs new file mode 100644 index 0000000..a6dd3f4 --- /dev/null +++ b/GasolineTanker/GasolineTanker/DrawningGasolineTanker.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasolineTanker +{ + internal class DrawningGasolineTanker : DrawningTanker + { + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public DrawningGasolineTanker(int speed, float weight, Color bodyColor, Color dopColor, bool Cabin, bool Signal, bool BenzoBack) : + base(speed, weight, bodyColor, 160, 125) + { + Tanker = new EntityGasolineTanker(speed, weight, bodyColor, dopColor, Cabin, Signal, BenzoBack); + } + public override void DrawTransport(Graphics g) + { + if (Tanker is not EntityGasolineTanker GasolineTanker) + { + return; + } + + _startPosX += 10; + _startPosY += 5; + base.DrawTransport(g); + _startPosX -= 10; + _startPosY -= 5; + + Pen pen = new(Color.Black); + Brush dopBrush = new SolidBrush(GasolineTanker.DopColor); + Brush WindowBrush = new SolidBrush(Color.LightBlue); + + if (GasolineTanker.Cabin) + { + g.DrawRectangle(pen, _startPosX + 115, _startPosY + 29, 40, 25); + g.FillEllipse(dopBrush, _startPosX + 143, _startPosY + 35, 10, 10); + g.FillRectangle(WindowBrush, _startPosX + 116, _startPosY + 10, 39, 18); + } + + //_startPosX += 10; + //_startPosY += 5; + //base.DrawTransport(g); + //_startPosX -= 10; + //_startPosY -= 5; + + //Бензобак + if (GasolineTanker.BenzoBack) + { + g.FillEllipse(dopBrush, _startPosX+10, _startPosY+5, 100, 50); + } + //Сигналка + if (GasolineTanker.Signal) + { + g.FillRectangle(dopBrush, _startPosX + 122, _startPosY - 1, 25, 6); + g.FillEllipse(dopBrush, _startPosX + 124, _startPosY - 16, 20, 20); + } + } + } +} diff --git a/GasolineTanker/GasolineTanker/DrawningTanker.cs b/GasolineTanker/GasolineTanker/DrawningTanker.cs index 8897f7d..ea9d364 100644 --- a/GasolineTanker/GasolineTanker/DrawningTanker.cs +++ b/GasolineTanker/GasolineTanker/DrawningTanker.cs @@ -14,15 +14,15 @@ namespace GasolineTanker /// /// Класс-сущность /// - public EntityTanker Tanker { get; private set; } + public EntityTanker Tanker { get; protected set; } /// /// Левая координата отрисовки танкера /// - private float _startPosX; + protected float _startPosX; /// /// Верхняя кооридната отрисовки танкер /// - private float _startPosY; + protected float _startPosY; /// /// Ширина окна отрисовки /// @@ -56,6 +56,20 @@ namespace GasolineTanker /// Координата Y /// Ширина картинки /// Высота картинки + + protected DrawningTanker(int speed, float weight, Color bodyColor, int carWidth, int carHeight) : + this(speed, weight, bodyColor) + { + _TankerWidth = carWidth; + _TankerHeight = carHeight; + } + /// + /// Установка позиции автомобиля + /// + /// Координата X + /// Координата Y + /// Ширина картинки + /// Высота картинки public void SetPosition(int x, int y, int width, int height) { if (x + _TankerWidth <= width && y + _TankerHeight <= height && x >= 0 && y >= 0) @@ -87,10 +101,6 @@ namespace GasolineTanker break; //влево case Direction.Left: - //if (_startPosX + _TankerWidth + Tanker.Step < _pictureWidth) - //{ - // _startPosX -= Tanker.Step; - // } if (_startPosX - Tanker.Step > 0) { _startPosX -= Tanker.Step; @@ -114,13 +124,11 @@ namespace GasolineTanker } } - - /// /// Отрисовка танкера /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -133,22 +141,13 @@ namespace GasolineTanker Brush br = new SolidBrush(Tanker?.BodyColor ?? Color.Gray); g.FillRectangle(br, _startPosX + 100, _startPosY, 50, 60); g.FillRectangle(br, _startPosX, _startPosY+50, 100, 10); - //Цесцерна - //g.FillEllipse(br, _startPosX, _startPosY, 100, 50); - - //стекла и двери - //Brush brBlue = new SolidBrush(Color.LightBlue); - //g.FillRectangle(brBlue, _startPosX + 105, _startPosY + 5, 40, 20); - //g.FillEllipse(brBlue, _startPosX + 130, _startPosY + 30, 10, 10); //Колёса Brush brBlack = new SolidBrush(Color.Black); g.FillEllipse(brBlack, _startPosX, _startPosY + 58, 40, 40); g.FillEllipse(brBlack, _startPosX + 40, _startPosY + 58, 40, 40); g.FillEllipse(brBlack, _startPosX + 110, _startPosY + 58, 40, 40); - //Дверь - //g.DrawRectangle(pen, _startPosX + 105, _startPosY + 25, 40, 25); - //выделяем рамкой крышу + } /// /// Смена границ формы отрисовки diff --git a/GasolineTanker/GasolineTanker/EntityGasolineTanker.cs b/GasolineTanker/GasolineTanker/EntityGasolineTanker.cs new file mode 100644 index 0000000..e7407c3 --- /dev/null +++ b/GasolineTanker/GasolineTanker/EntityGasolineTanker.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GasolineTanker +{ + internal class EntityGasolineTanker : EntityTanker + { + /// + /// Дополнительный цвет + /// + public Color DopColor { get; private set; } + /// + /// Признак наличия обвеса + /// + public bool Cabin { get; private set; } + /// + /// Признак наличия антикрыла + /// + public bool Signal { get; private set; } + /// + /// Признак наличия гоночной полосы + /// + public bool BenzoBack { get; private set; } + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public EntityGasolineTanker(int speed, float weight, Color bodyColor, Color dopColor, bool сabin, bool signal, bool benzoBack) : + base(speed, weight, bodyColor) + { + DopColor = dopColor; + Cabin = сabin; + Signal = signal; + BenzoBack = benzoBack; + } + } +} diff --git a/GasolineTanker/GasolineTanker/FormTanker.Designer.cs b/GasolineTanker/GasolineTanker/FormTanker.Designer.cs index 1da6faf..5a6bb12 100644 --- a/GasolineTanker/GasolineTanker/FormTanker.Designer.cs +++ b/GasolineTanker/GasolineTanker/FormTanker.Designer.cs @@ -38,6 +38,7 @@ this.buttonLeft = new System.Windows.Forms.Button(); this.buttonRight = new System.Windows.Forms.Button(); this.buttonDown = new System.Windows.Forms.Button(); + this.buttonCreateModif = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTanker)).BeginInit(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -143,11 +144,22 @@ this.buttonDown.UseVisualStyleBackColor = true; this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); // + // buttonCreateModif + // + this.buttonCreateModif.Location = new System.Drawing.Point(93, 370); + this.buttonCreateModif.Name = "buttonCreateModif"; + this.buttonCreateModif.Size = new System.Drawing.Size(97, 32); + this.buttonCreateModif.TabIndex = 7; + this.buttonCreateModif.Text = "Модификация"; + this.buttonCreateModif.UseVisualStyleBackColor = true; + this.buttonCreateModif.Click += new System.EventHandler(this.buttonCreateModif_Click); + // // FormTanker // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(821, 429); + this.Controls.Add(this.buttonCreateModif); this.Controls.Add(this.buttonDown); this.Controls.Add(this.buttonRight); this.Controls.Add(this.buttonLeft); @@ -177,5 +189,6 @@ private Button buttonLeft; private Button buttonRight; private Button buttonDown; + private Button buttonCreateModif; } } \ No newline at end of file diff --git a/GasolineTanker/GasolineTanker/FormTanker.cs b/GasolineTanker/GasolineTanker/FormTanker.cs index 05a67f3..fb0db6f 100644 --- a/GasolineTanker/GasolineTanker/FormTanker.cs +++ b/GasolineTanker/GasolineTanker/FormTanker.cs @@ -18,6 +18,17 @@ namespace GasolineTanker pictureBoxTanker.Image = bmp; } /// + /// + /// + private void SetData() + { + Random rnd = new(); + _Tanker.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxTanker.Width, pictureBoxTanker.Height); + toolStripStatusSpeed.Text = $": {_Tanker.Tanker.Speed}"; + toolStripStatusWeight.Text = $": {_Tanker.Tanker.Weight}"; + toolStripStatusLabelBodyColor.Text = $": {_Tanker.Tanker.BodyColor.Name}"; + } + /// /// "" /// /// @@ -27,10 +38,7 @@ namespace GasolineTanker { Random rnd = new(); _Tanker = new DrawningTanker(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); - _Tanker.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxTanker.Width, pictureBoxTanker.Height); - toolStripStatusSpeed.Text = $": {_Tanker.Tanker.Speed}"; - toolStripStatusWeight.Text = $": {_Tanker.Tanker.Weight}"; - toolStripStatusLabelBodyColor.Text = $": {_Tanker.Tanker.BodyColor.Name}"; + SetData(); Draw(); } /// @@ -59,11 +67,30 @@ namespace GasolineTanker } Draw(); } - + /// + /// + /// + /// + /// private void pictureBoxTanker_Resize(object sender, EventArgs e) { _Tanker?.ChangeBorders(pictureBoxTanker.Width, pictureBoxTanker.Height); Draw(); } + /// + /// "" + /// + /// + /// + private void buttonCreateModif_Click(object sender, EventArgs e) + { + Random rnd = new(); + _Tanker = new DrawningGasolineTanker(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)), Convert.ToBoolean(rnd.Next(0, 2))); + SetData(); + Draw(); + } } } \ No newline at end of file