From 4693f2b5513e1a5014c3d63385f865ba6dcd5808 Mon Sep 17 00:00:00 2001 From: elizaveta Date: Wed, 13 Mar 2024 00:33:53 +0400 Subject: [PATCH] commit --- Tank/Tank/DirectionType.cs | 27 ++++++ Tank/Tank/DrawningtTank.cs | 150 +++++++++++++++++++++++++++++++++ Tank/Tank/EntityTank.cs | 57 +++++++++++++ Tank/Tank/FormTank.Designer.cs | 22 +++-- Tank/Tank/FormTank.cs | 12 ++- Tank/Tank/FormTank.resx | 50 +++++------ 6 files changed, 284 insertions(+), 34 deletions(-) create mode 100644 Tank/Tank/DirectionType.cs create mode 100644 Tank/Tank/DrawningtTank.cs create mode 100644 Tank/Tank/EntityTank.cs diff --git a/Tank/Tank/DirectionType.cs b/Tank/Tank/DirectionType.cs new file mode 100644 index 0000000..8923629 --- /dev/null +++ b/Tank/Tank/DirectionType.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tank; + +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down = 2, + /// + /// Влево + /// + Left = 3, + /// + /// Вправо + /// + Right = 4 +} diff --git a/Tank/Tank/DrawningtTank.cs b/Tank/Tank/DrawningtTank.cs new file mode 100644 index 0000000..dead204 --- /dev/null +++ b/Tank/Tank/DrawningtTank.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tank; + +public class DrawningtTank +{ + /// + /// Класс-сущность + /// + public EntityTank? EntityTank { get; private set; } + /// + /// Ширина окна + /// + private int? _pictureWidth; + /// + /// Высота окна + /// + private int? _pictureHeight; + /// + /// Левая координата прорисовки автомобиля + /// + private int? _startPosX; + /// + /// Верхняя кооридната прорисовки автомобиля + /// + private int? _startPosY; + /// + /// Ширина прорисовки автомобиля + /// + private readonly int _drawningCarWidth = 110; + /// + /// Высота прорисовки автомобиля + /// + private readonly int _drawningCarHeight = 60; + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, Color + additionalColor, bool bodyKit, bool wing, bool sportLine) + { + EntityTank = new EntityTank(); + EntityTank.Init(speed, weight, bodyColor, additionalColor, + bodyKit, wing, sportLine); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах +public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + _pictureWidth = width; + _pictureHeight = height; + return true; + } + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + _startPosX = x; + _startPosY = y; + } + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно +public bool MoveTransport(DirectionType direction) + { + if (EntityTank == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return false; + } + switch (direction) + { + //влево + case DirectionType.Left: + if (_startPosX.Value - EntityTank.Step > 0) + { + _startPosX -= (int)EntityTank.Step; + } + return true; + //вверх + case DirectionType.Up: + if (_startPosY.Value - EntityTank.Step > 0) + { + _startPosY -= (int)EntityTank.Step; + } + return true; + // вправо + case DirectionType.Right: + //TODO прописать логику сдвига в право + return true; + //вниз + case DirectionType.Down: + //TODO прописать логику сдвига в вниз + return true; + default: + return false; + } + } + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityTank == null || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return; + } + Pen pen = new(Color.Black); + Brush additionalBrush = new + SolidBrush(EntityTank.AdditionalColor); + // обвесы + if (EntityTank.BodyKit) + { + return; + } + } +} diff --git a/Tank/Tank/EntityTank.cs b/Tank/Tank/EntityTank.cs new file mode 100644 index 0000000..f3512d3 --- /dev/null +++ b/Tank/Tank/EntityTank.cs @@ -0,0 +1,57 @@ +namespace Tank; + +public class EntityTank +{ + /// + /// Скорость + /// + public int Speed { get; private set; } + /// + /// Вес + /// + public double Weight { get; private set; } + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + /// + /// Дополнительный цвет (для опциональных элементов) + /// + public Color AdditionalColor { get; private set; } + /// + /// Признак (опция) наличия обвеса + /// + public bool BodyKit { get; private set; } + /// + /// Признак (опция) наличия антикрыла + /// + public bool Wing { get; private set; } + /// + /// Признак (опция) наличия гоночной полосы + /// + public bool SportLine { get; private set; } + /// + /// Шаг перемещения автомобиля + /// + public double Step => Speed * 100 / Weight; + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + BodyKit = bodyKit; + Wing = wing; + SportLine = sportLine; + } +} \ No newline at end of file diff --git a/Tank/Tank/FormTank.Designer.cs b/Tank/Tank/FormTank.Designer.cs index 5a22010..0cf2118 100644 --- a/Tank/Tank/FormTank.Designer.cs +++ b/Tank/Tank/FormTank.Designer.cs @@ -3,12 +3,12 @@ partial class FormTank { /// - /// Required designer variable. + /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// - /// Clean up any resources being used. + /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) @@ -23,15 +23,21 @@ #region Windows Form Designer generated code /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. + /// 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"; + SuspendLayout(); + // + // FormTank + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Name = "FormTank"; + Text = "Танк"; + ResumeLayout(false); } #endregion diff --git a/Tank/Tank/FormTank.cs b/Tank/Tank/FormTank.cs index 19f5b27..d9a07a7 100644 --- a/Tank/Tank/FormTank.cs +++ b/Tank/Tank/FormTank.cs @@ -1,3 +1,13 @@ +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 Tank { public partial class FormTank : Form @@ -7,4 +17,4 @@ namespace Tank InitializeComponent(); } } -} \ No newline at end of file +} diff --git a/Tank/Tank/FormTank.resx b/Tank/Tank/FormTank.resx index 1af7de1..af32865 100644 --- a/Tank/Tank/FormTank.resx +++ b/Tank/Tank/FormTank.resx @@ -1,17 +1,17 @@  -