diff --git a/ArmoredVehicle/AbstractMap.cs b/ArmoredVehicle/AbstractMap.cs new file mode 100644 index 0000000..114defc --- /dev/null +++ b/ArmoredVehicle/AbstractMap.cs @@ -0,0 +1,229 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ArmoredVehicle +{ + internal abstract class AbstractMap + { + private IDrawningObject _drawningObject = null; + protected int[,] _map = null; + protected int _width; + protected int _height; + protected float _size_x; + protected float _size_y; + protected readonly Random _random = new(); + protected readonly int _freeRoad = 0; + protected readonly int _barrier = 1; + + public Bitmap CreateMap(int width, int height, IDrawningObject drawningObject) + { + _width = width; + _height = height; + _drawningObject = drawningObject; + GenerateMap(); + + while (!SetObjectOnMap()) + { + GenerateMap(); + } + return DrawMapWithObject(); + } + public Bitmap MoveObject(Direction direction) + { + bool possibility = true; + (float XTop, float YTop, float XBottom, float YBottom) = _drawningObject.GetCurrentPosition(); + bool busy = false; + int i; + int j; + int jt; + int i1; + switch (direction) + { + // вправо + case Direction.Right: + busy = false; + i = Math.Abs((int)Math.Ceiling(XBottom / _size_x)); + j = Math.Abs((int)Math.Ceiling(YBottom / _size_y)); + jt = Math.Abs((int)Math.Ceiling(YTop / _size_y)); + i1 = Math.Abs((int)Math.Ceiling((XBottom + _drawningObject.Step)/ _size_x)); + for (int r = i; r < i1; ++r) + { + for (int b = jt; b < j; ++b) + { + if (_map[r, b] == _barrier) + { + busy = true; + break; + } + + } + if (busy) + { + break; + } + } + + break; + //влево + case Direction.Left: + busy = false; + i = Math.Abs((int)Math.Ceiling((XTop - _drawningObject.Step )/ _size_x)); + j = Math.Abs((int)Math.Ceiling(YBottom / _size_y)); + jt = Math.Abs((int)Math.Ceiling(YTop / _size_y)); + i1 = Math.Abs((int)Math.Ceiling((XTop)/ _size_x)); + for (int r = i; r < i1; ++r) + { + for (int b = jt; b < j; ++b) + { + if (_map[r, b] == _barrier) + { + busy = true; + break; + } + + } + if (busy) + { + break; + } + } + + break; + //вверх + case Direction.Up: + { + busy = false; + i = Math.Abs((int)Math.Ceiling((XTop) / _size_x)); + j = Math.Abs((int)((YTop)/ _size_y)); + jt = Math.Abs((int)((YTop - _drawningObject.Step )/ _size_y)); + i1 = Math.Abs((int)Math.Ceiling(XBottom / _size_x)); + for (int r = i; r < i1; ++r) + { + for (int b = jt; b < j; ++b) + { + if (_map[r, b] == _barrier) + { + busy = true; + break; + } + + } + if (busy) + { + break; + } + } + break; + } + //вниз + case Direction.Down: + { + busy = false; + i = (int)Math.Ceiling(XTop / _size_x); + j = (int)((YBottom + _drawningObject.Step) / _size_y); + jt = (int)(YBottom / _size_y); + i1 = (int)Math.Ceiling(XBottom / _size_x); + for (int r = i; r <= i1; r++) + { + for (int b = jt; b <= j; b++) + { + if (_map[r, b] == _barrier) + { + busy = true; + break; + } + + } + if (busy) + { + break; + } + } + break; + } + } + if (busy) + { + possibility = false; + } + if (possibility) + { + _drawningObject.MoveObject(direction); + } + return DrawMapWithObject(); + } + private bool SetObjectOnMap() + { + if (_drawningObject == null || _map == null) + { + return false; + } + (float XTop, float YTop, float XBottom, float YBottom) = _drawningObject.GetCurrentPosition(); + + int x = _random.Next(0, 10); + int y = _random.Next(0, 10); + + int beginI = (int)(x / _size_x); + int endI = (int)(XBottom / _size_x); + + int beginJ = (int)(y / _size_y); + int endJ = (int)(YBottom / _size_y); + + for (int i = beginI; i <= endI; i++) + { + for(int j = beginJ; j <= endJ; j++) + { + if(_map[i, j] == _barrier) + { + return false; + } + } + + } + + _drawningObject.SetObject(x, y, _width, _height); + return true; + } + private Bitmap DrawMapWithObject() + { + Bitmap bmp = new(_width, _height); + if (_drawningObject == null || _map == null) + { + return bmp; + } + Graphics gr = Graphics.FromImage(bmp); + for (int i = 0; i < _map.GetLength(0); ++i) + { + for (int j = 0; j < _map.GetLength(1); ++j) + { + if (_map[i, j] == _freeRoad) + { + DrawRoadPart(gr, i, j); + } + else if (_map[i, j] == _barrier) + { + DrawBarrierPart(gr, i, j); + } + } + } + DrawRec(gr, 50, 50); + _drawningObject.DrawningObject(gr); + return bmp; + } + public void DrawRec(Graphics g, int countI, int couJj) + { + Pen p = new Pen(Color.Black); + for (int i = 0; i < countI; i++) + { + g.DrawLine(p, i * _size_x, 0, i * _size_x, 1000); + g.DrawLine(p, 0, i * _size_y, 1000, i * _size_y); + } + } + protected abstract void GenerateMap(); + protected abstract void DrawRoadPart(Graphics g, int i, int j); + protected abstract void DrawBarrierPart(Graphics g, int i, int j); + } +} \ No newline at end of file diff --git a/ArmoredVehicle/ArmoredVehicle.csproj b/ArmoredVehicle/ArmoredVehicle.csproj index b57c89e..13ee123 100644 --- a/ArmoredVehicle/ArmoredVehicle.csproj +++ b/ArmoredVehicle/ArmoredVehicle.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ArmoredVehicle/ArmoredVehicleEntity.cs b/ArmoredVehicle/ArmoredVehicleEntity.cs index de9cc39..870666a 100644 --- a/ArmoredVehicle/ArmoredVehicleEntity.cs +++ b/ArmoredVehicle/ArmoredVehicleEntity.cs @@ -8,6 +8,16 @@ namespace ArmoredVehicle { internal class ArmoredVehicleEntity { + public ArmoredVehicleEntity(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; + } + + + /// /// Скорость /// @@ -31,12 +41,6 @@ namespace ArmoredVehicle /// /// /// - 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/ArmoredVehicle/Direction.cs b/ArmoredVehicle/Direction.cs index bc4c39a..0fe8ad8 100644 --- a/ArmoredVehicle/Direction.cs +++ b/ArmoredVehicle/Direction.cs @@ -11,6 +11,7 @@ namespace ArmoredVehicle /// internal enum Direction { + None = 0, Up = 1, Down = 2, Left = 3, diff --git a/ArmoredVehicle/DrawingArmoredVehicle.cs b/ArmoredVehicle/DrawingArmoredVehicle.cs index 634a0a5..4e2d913 100644 --- a/ArmoredVehicle/DrawingArmoredVehicle.cs +++ b/ArmoredVehicle/DrawingArmoredVehicle.cs @@ -11,15 +11,15 @@ namespace ArmoredVehicle /// /// Класс-сущность /// - public ArmoredVehicleEntity ArmoredVehicle { get; private set; } + public ArmoredVehicleEntity ArmoredVehicle { get; protected set; } /// /// Левая координата отрисовки /// - private float _startPosX; + protected float _startPosX; /// /// Верхняя кооридната отрисовки /// - private float _startPosY; + protected float _startPosY; /// /// Ширина окна отрисовки /// @@ -31,22 +31,30 @@ namespace ArmoredVehicle /// /// Ширина отрисовки /// - private readonly int _ArmoredVehicleWidth = 210; + private readonly int _ArmoredVehicleWidth = 200; /// /// Высота отрисовки /// - private readonly int _ArmoredVehicleHeight = 50; + private readonly int _ArmoredVehicleHeight = 60; /// /// Инициализация свойств /// /// Скорость /// Вес /// Цвет - public void Init(int speed, float weight, Color bodyColor) + public DrawingArmoredVehicle(int speed, float weight, Color bodyColor) { - ArmoredVehicle = new ArmoredVehicleEntity(); - ArmoredVehicle.Init(speed, weight, bodyColor); + ArmoredVehicle = new ArmoredVehicleEntity(speed, weight, bodyColor); } + + public DrawingArmoredVehicle(int speed, float weight, Color bodyColor, int ArmoredVehicleWidth, int ArmoredVehicleHeight) + :this(speed, weight, bodyColor) + { + _ArmoredVehicleHeight = ArmoredVehicleHeight + 50; + _ArmoredVehicleWidth = ArmoredVehicleWidth + 150; + } + + /// /// Установка позиции /// @@ -129,7 +137,7 @@ namespace ArmoredVehicle /// Отрисовка /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -155,9 +163,6 @@ namespace ArmoredVehicle g.DrawRectangle(pen, _startPosX + 15, _startPosY+20, 200, 20); g.DrawEllipse(pen, _startPosX + 15, _startPosY + 25, 200, 35); - - - } /// /// Смена границ формы отрисовки @@ -183,5 +188,13 @@ namespace ArmoredVehicle _startPosY = _pictureHeight.Value - _ArmoredVehicleHeight; } } + /// + /// Получение текущей позиции объекта + /// + /// + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return (_startPosX + 15, _startPosY, _startPosX + 15 + _ArmoredVehicleWidth, _startPosY + _ArmoredVehicleHeight); + } } } diff --git a/ArmoredVehicle/DrawingTank.cs b/ArmoredVehicle/DrawingTank.cs new file mode 100644 index 0000000..23c1ed6 --- /dev/null +++ b/ArmoredVehicle/DrawingTank.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ArmoredVehicle +{ + internal class DrawingTank : DrawingArmoredVehicle + { + public DrawingTank(int speed, float weight, Color bodyColor, Color dopColor, bool machineGun, bool tower, bool gun) + : base(speed, weight, bodyColor, 200, 60) + { + ArmoredVehicle = new TankEnity(speed, weight, bodyColor, dopColor, machineGun, tower, gun); + } + + + public override void DrawTransport(Graphics g) + { + if (ArmoredVehicle is not TankEnity machine) + { + return; + } + + Brush br = new SolidBrush(machine?.DopColor ?? Color.Black); + Pen p = new Pen(machine?.DopColor ?? Color.Black, 5); + + _startPosY += 40; + + base.DrawTransport(g); + _startPosY -= 40; + if (machine.Tower) + { + g.FillRectangle(br, _startPosX + 60, _startPosY + 10, 80, 30); + g.DrawLine(p, _startPosX + 90, _startPosY +20, _startPosX + 250, _startPosY + 20); + if (machine.MachineGun) + { + p = new Pen(machine?.DopColor ?? Color.Black, 3); + + g.DrawLine(p, _startPosX + 90, _startPosY, _startPosX + 90, _startPosY + 10); + g.DrawLine(p, _startPosX + 85, _startPosY + 5, _startPosX + 120, _startPosY + 5); + } + } + + + + } + + } +} diff --git a/ArmoredVehicle/DrawningObject.cs b/ArmoredVehicle/DrawningObject.cs new file mode 100644 index 0000000..8792a37 --- /dev/null +++ b/ArmoredVehicle/DrawningObject.cs @@ -0,0 +1,35 @@ +namespace ArmoredVehicle +{ + internal class DrawningObject : IDrawningObject + { + private DrawingArmoredVehicle _machine = null; + + public DrawningObject(DrawingArmoredVehicle machine) + { + _machine = machine; + } + + public float Step => _machine?.ArmoredVehicle?.Step ?? 0; + + public (float Left, float Right, float Top, float Bottom) GetCurrentPosition() + { + return _machine?.GetCurrentPosition() ?? default; + } + + public void MoveObject(Direction direction) + { + _machine?.MoveTransport(direction); + } + + public void SetObject(int x, int y, int width, int height) + { + _machine.SetPosition(x, y, width, height); + } + + void IDrawningObject.DrawningObject(Graphics g) + { + _machine.DrawTransport(g); + } + + } +} \ No newline at end of file diff --git a/ArmoredVehicle/FormMap.Designer.cs b/ArmoredVehicle/FormMap.Designer.cs new file mode 100644 index 0000000..4e626da --- /dev/null +++ b/ArmoredVehicle/FormMap.Designer.cs @@ -0,0 +1,212 @@ +namespace ArmoredVehicle +{ + partial class FormMap + { + /// + /// 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.ButtonDown = new System.Windows.Forms.Button(); + this.ButtonRight = new System.Windows.Forms.Button(); + this.ButtonLeft = new System.Windows.Forms.Button(); + this.ButtonUp = new System.Windows.Forms.Button(); + this.CreateButton = new System.Windows.Forms.Button(); + this.DrawingPictureBox = new System.Windows.Forms.PictureBox(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.TankButton = new System.Windows.Forms.Button(); + this.comboBoxSelectorMap = new System.Windows.Forms.ComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.DrawingPictureBox)).BeginInit(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // ButtonDown + // + this.ButtonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ButtonDown.BackgroundImage = global::ArmoredVehicle.Properties.Resources.arrowDown; + this.ButtonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ButtonDown.Location = new System.Drawing.Point(711, 373); + this.ButtonDown.Name = "ButtonDown"; + this.ButtonDown.Size = new System.Drawing.Size(30, 30); + this.ButtonDown.TabIndex = 13; + 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::ArmoredVehicle.Properties.Resources.arrowRight; + this.ButtonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ButtonRight.Location = new System.Drawing.Point(754, 326); + this.ButtonRight.Name = "ButtonRight"; + this.ButtonRight.Size = new System.Drawing.Size(30, 30); + this.ButtonRight.TabIndex = 12; + this.ButtonRight.UseVisualStyleBackColor = true; + this.ButtonRight.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::ArmoredVehicle.Properties.Resources.arrowLeft; + this.ButtonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ButtonLeft.Location = new System.Drawing.Point(671, 328); + this.ButtonLeft.Name = "ButtonLeft"; + this.ButtonLeft.Size = new System.Drawing.Size(30, 30); + this.ButtonLeft.TabIndex = 11; + this.ButtonLeft.UseVisualStyleBackColor = true; + this.ButtonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // ButtonUp + // + this.ButtonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ButtonUp.BackgroundImage = global::ArmoredVehicle.Properties.Resources.arrowUp; + this.ButtonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ButtonUp.Location = new System.Drawing.Point(711, 278); + this.ButtonUp.Name = "ButtonUp"; + this.ButtonUp.Size = new System.Drawing.Size(30, 30); + this.ButtonUp.TabIndex = 10; + this.ButtonUp.UseVisualStyleBackColor = true; + this.ButtonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // CreateButton + // + this.CreateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CreateButton.Location = new System.Drawing.Point(12, 362); + this.CreateButton.Name = "CreateButton"; + this.CreateButton.Size = new System.Drawing.Size(112, 34); + this.CreateButton.TabIndex = 9; + this.CreateButton.Text = "Создать"; + this.CreateButton.UseVisualStyleBackColor = true; + this.CreateButton.Click += new System.EventHandler(this.ButtonCreate_Click); + // + // DrawingPictureBox + // + this.DrawingPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.DrawingPictureBox.Location = new System.Drawing.Point(0, 0); + this.DrawingPictureBox.Name = "DrawingPictureBox"; + this.DrawingPictureBox.Size = new System.Drawing.Size(800, 418); + this.DrawingPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.DrawingPictureBox.TabIndex = 7; + this.DrawingPictureBox.TabStop = false; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(89, 25); + this.toolStripStatusLabelSpeed.Text = "Скорость"; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(39, 25); + this.toolStripStatusLabelWeight.Text = "Вес"; + // + // toolStripStatusLabelColor + // + this.toolStripStatusLabelColor.Name = "toolStripStatusLabelColor"; + this.toolStripStatusLabelColor.Size = new System.Drawing.Size(51, 25); + this.toolStripStatusLabelColor.Text = "Цвет"; + // + // statusStrip + // + this.statusStrip.ImageScalingSize = new System.Drawing.Size(24, 24); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelColor}); + this.statusStrip.Location = new System.Drawing.Point(0, 418); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(800, 32); + this.statusStrip.TabIndex = 8; + this.statusStrip.Text = "statusStrip1"; + // + // TankButton + // + this.TankButton.Location = new System.Drawing.Point(139, 365); + this.TankButton.Name = "TankButton"; + this.TankButton.Size = new System.Drawing.Size(143, 34); + this.TankButton.TabIndex = 14; + this.TankButton.Text = "Модификация"; + this.TankButton.UseVisualStyleBackColor = true; + this.TankButton.Click += new System.EventHandler(this.TankButton_Click); + // + // comboBoxSelectorMap + // + this.comboBoxSelectorMap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxSelectorMap.FormattingEnabled = true; + this.comboBoxSelectorMap.Items.AddRange(new object[] { + "Простая карта", + "Горизонтальная карта", + "Вертикальная карта"}); + this.comboBoxSelectorMap.Location = new System.Drawing.Point(13, 321); + this.comboBoxSelectorMap.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.comboBoxSelectorMap.Name = "comboBoxSelectorMap"; + this.comboBoxSelectorMap.Size = new System.Drawing.Size(171, 33); + this.comboBoxSelectorMap.TabIndex = 15; + this.comboBoxSelectorMap.SelectedIndexChanged += new System.EventHandler(this.comboBoxSelectorMap_SelectedIndexChanged_1); + // + // FormMap + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.comboBoxSelectorMap); + this.Controls.Add(this.TankButton); + this.Controls.Add(this.ButtonDown); + this.Controls.Add(this.ButtonRight); + this.Controls.Add(this.ButtonLeft); + this.Controls.Add(this.ButtonUp); + this.Controls.Add(this.CreateButton); + this.Controls.Add(this.DrawingPictureBox); + this.Controls.Add(this.statusStrip); + this.MinimumSize = new System.Drawing.Size(210, 50); + this.Name = "FormMap"; + this.Text = "Карта"; + ((System.ComponentModel.ISupportInitialize)(this.DrawingPictureBox)).EndInit(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Button ButtonDown; + private Button ButtonRight; + private Button ButtonLeft; + private Button ButtonUp; + private Button CreateButton; + private PictureBox DrawingPictureBox; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelColor; + private StatusStrip statusStrip; + private Button TankButton; + private ComboBox comboBoxSelectorMap; + } +} \ No newline at end of file diff --git a/ArmoredVehicle/FormMap.cs b/ArmoredVehicle/FormMap.cs new file mode 100644 index 0000000..86e2e8d --- /dev/null +++ b/ArmoredVehicle/FormMap.cs @@ -0,0 +1,96 @@ +namespace ArmoredVehicle +{ + public partial class FormMap : Form + { + private AbstractMap _abstractMap; + + public FormMap() + { + InitializeComponent(); + _abstractMap = new SimpleMap(); + } + /// + /// Заполнение информации по объекту + /// + /// + private void SetData(DrawingArmoredVehicle armoredVehicle) + { + toolStripStatusLabelSpeed.Text = $"Скорость: {armoredVehicle.ArmoredVehicle.Speed}"; + toolStripStatusLabelWeight.Text = $"Вес: {armoredVehicle.ArmoredVehicle.Weight}"; + toolStripStatusLabelColor.Text = $"Цвет: {armoredVehicle.ArmoredVehicle.BodyColor.Name}"; + DrawingPictureBox.Image = _abstractMap.CreateMap(DrawingPictureBox.Width, DrawingPictureBox.Height, + new DrawningObject(armoredVehicle)); + } + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + var machine = new DrawingArmoredVehicle(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + SetData(machine); + } + /// + /// Изменение размеров формы + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + //получаем имя кнопки + string name = ((Button)sender)?.Name ?? string.Empty; + Direction dir = Direction.None; + switch (name) + { + case "ButtonUp": + dir = Direction.Up; + break; + case "ButtonDown": + dir = Direction.Down; + break; + case "ButtonLeft": + dir = Direction.Left; + break; + case "ButtonRight": + dir = Direction.Right; + break; + } + + DrawingPictureBox.Image = _abstractMap?.MoveObject(dir); + } + /// + /// Смена карты + /// + /// + /// + + private void comboBoxSelectorMap_SelectedIndexChanged_1(object sender, EventArgs e) + { + switch (comboBoxSelectorMap.Text) + { + case "Простая карта": + _abstractMap = new SimpleMap(); + break; + case "Горизонтальная карта": + _abstractMap = new HorizontalMap(); + break; + case "Вертикальная карта": + _abstractMap = new VerticalMap(); + break; + } + } + + private void TankButton_Click(object sender, EventArgs e) + { + + Random rnd = new(); + var tank = new DrawingTank(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(tank); + } + } +} diff --git a/ArmoredVehicle/FormMap.resx b/ArmoredVehicle/FormMap.resx new file mode 100644 index 0000000..2c0949d --- /dev/null +++ b/ArmoredVehicle/FormMap.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/ArmoredVehicle/HorizontalMap.cs b/ArmoredVehicle/HorizontalMap.cs new file mode 100644 index 0000000..20aa378 --- /dev/null +++ b/ArmoredVehicle/HorizontalMap.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ArmoredVehicle +{ + internal class HorizontalMap : AbstractMap + { + + /// + /// Цвет участка закрытого + /// + private readonly Brush barrierColor = new SolidBrush(Color.BlueViolet); + /// + /// Цвет участка открытого + /// + private readonly Brush roadColor = new SolidBrush(Color.White); + + protected override void DrawBarrierPart(Graphics g, int i, int j) + { + g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected override void DrawRoadPart(Graphics g, int i, int j) + { + g.FillRectangle(roadColor, i * _size_x, j * _size_y, (i + 1) * (_size_x + 1), (j + 1) * (_size_y + 1)); + + } + + protected override void GenerateMap() + { + _map = new int[50, 50]; + _size_x = (float)_width / _map.GetLength(0); + _size_y = (float)_height / _map.GetLength(1); + int counter = 0; + for (int i = 0; i < _map.GetLength(0); ++i) + { + for (int j = 0; j < _map.GetLength(1); ++j) + { + _map[i, j] = _freeRoad; + } + } + while (counter < 5) + { + + int x1 = _random.Next(0, 12); + int x2 = _random.Next(12, _map.GetLength(0)); + + int y1 = _random.Next(0, _map.GetLength(1)); + + for(int i = x1; i + /// Интерфейс для работы с объектом, прорисовываемым на форме + /// + internal interface IDrawningObject + { + /// + /// Шаг перемещения объекта + /// + public float Step { get; } + /// + /// Установка позиции объекта + /// + /// Координата X + /// Координата Y + /// Ширина полотна + /// Высота полотна + void SetObject(int x, int y, int width, int height); + /// + /// Изменение направления пермещения объекта + /// + /// Направление + /// + void MoveObject(Direction direction); + /// + /// Отрисовка объекта + /// + /// + void DrawningObject(Graphics g); + /// + /// Получение текущей позиции объекта + /// + /// + (float Left, float Right, float Top, float Bottom) GetCurrentPosition(); + + } +} \ No newline at end of file diff --git a/ArmoredVehicle/MainForm.Designer.cs b/ArmoredVehicle/MainForm.Designer.cs index 069fd0c..373ea63 100644 --- a/ArmoredVehicle/MainForm.Designer.cs +++ b/ArmoredVehicle/MainForm.Designer.cs @@ -39,6 +39,8 @@ this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabelColor = new System.Windows.Forms.ToolStripStatusLabel(); this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.TankButton = new System.Windows.Forms.Button(); + this.Mapbutton = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.DrawingPictureBox)).BeginInit(); this.statusStrip.SuspendLayout(); this.SuspendLayout(); @@ -144,11 +146,33 @@ this.statusStrip.TabIndex = 8; this.statusStrip.Text = "statusStrip1"; // + // TankButton + // + this.TankButton.Location = new System.Drawing.Point(139, 365); + this.TankButton.Name = "TankButton"; + this.TankButton.Size = new System.Drawing.Size(143, 34); + this.TankButton.TabIndex = 14; + this.TankButton.Text = "Модификация"; + this.TankButton.UseVisualStyleBackColor = true; + this.TankButton.Click += new System.EventHandler(this.TankButton_Click); + // + // Mapbutton + // + this.Mapbutton.Location = new System.Drawing.Point(304, 362); + this.Mapbutton.Name = "Mapbutton"; + this.Mapbutton.Size = new System.Drawing.Size(179, 34); + this.Mapbutton.TabIndex = 15; + this.Mapbutton.Text = "Перейти на карту"; + this.Mapbutton.UseVisualStyleBackColor = true; + this.Mapbutton.Click += new System.EventHandler(this.Mapbutton_Click); + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.Mapbutton); + this.Controls.Add(this.TankButton); this.Controls.Add(this.ButtonDown); this.Controls.Add(this.ButtonRight); this.Controls.Add(this.ButtonLeft); @@ -179,5 +203,7 @@ private ToolStripStatusLabel toolStripStatusLabelWeight; private ToolStripStatusLabel toolStripStatusLabelColor; private StatusStrip statusStrip; + private Button TankButton; + private Button Mapbutton; } } \ No newline at end of file diff --git a/ArmoredVehicle/MainForm.cs b/ArmoredVehicle/MainForm.cs index 5adb8ee..56e26e6 100644 --- a/ArmoredVehicle/MainForm.cs +++ b/ArmoredVehicle/MainForm.cs @@ -6,7 +6,6 @@ namespace ArmoredVehicle public MainForm() { InitializeComponent(); - //this.MinimumSize = new System.Drawing.Size(300, 250); } /// /// @@ -34,13 +33,19 @@ namespace ArmoredVehicle private void CreateButton_Click(object sender, EventArgs e) { Random rnd = new(); - _ArmoredVehicle = new DrawingArmoredVehicle(); - _ArmoredVehicle.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); - _ArmoredVehicle.SetPosition(/*rnd.Next(0, 100)*/ -10, rnd.Next(0, 100), DrawingPictureBox.Width, DrawingPictureBox.Height); + _ArmoredVehicle = new DrawingArmoredVehicle(rnd.Next(100, 300), rnd.Next(1000, 2000), + Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + SetData(); + Draw(); + } + + private void SetData() + { + Random rnd = new(); + _ArmoredVehicle.SetPosition( -10, rnd.Next(0, 100), DrawingPictureBox.Width, DrawingPictureBox.Height); toolStripStatusLabelSpeed.Text = $": {_ArmoredVehicle.ArmoredVehicle.Speed}"; toolStripStatusLabelWeight.Text = $": {_ArmoredVehicle.ArmoredVehicle.Weight}"; toolStripStatusLabelColor.Text = $": {_ArmoredVehicle.ArmoredVehicle.BodyColor.Name}"; - Draw(); } /// /// @@ -79,5 +84,25 @@ namespace ArmoredVehicle _ArmoredVehicle?.ChangeBorders(DrawingPictureBox.Width, DrawingPictureBox.Height); Draw(); } + + private void TankButton_Click(object sender, EventArgs e) + { + Random rnd = new(); + _ArmoredVehicle = new DrawingTank(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(); + } + + private void Mapbutton_Click(object sender, EventArgs e) + { + FormMap map = new FormMap(); + map.Show(); + } } } \ No newline at end of file diff --git a/ArmoredVehicle/MainForm.resx b/ArmoredVehicle/MainForm.resx index a70faf4..65a0a79 100644 --- a/ArmoredVehicle/MainForm.resx +++ b/ArmoredVehicle/MainForm.resx @@ -61,7 +61,7 @@ iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAIAAACubhnwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vwAADr8BOAVTJAAAy5RJREFUeF7s/emTZGd54O/3L9eqbkkI1GKxkUHsCA8gsXhACBNsxoBsY2BYhIkY + vAAADrwBlbxySQAAy5RJREFUeF7s/emTZGd54O/3L9eqbkkI1GKxkUHsCA8gsXhACBNsxoBsY2BYhIkY ApgAIeMxYRADg74QNjJbBMYwrIPD0oBZBHjAbGYkbGMW4wn+GI/VXZVL+XdX3tmHstDSLVU/dVfmdb04 8WTptfq583Oec/LIvwFAbV/+8pf/fwDU0+v1cnHkyJG4vu1tb1v+ww0A+03AAqA6AQugJgELgGYELACq E7AAahKwAGhGwAKgOgELoCYBC4BmBCwAqhOwAGoSsABoRsACoDoBC6AmAQuAZgQsAKoTsABqErAAaEbA @@ -936,7 +936,7 @@ iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAIAAACubhnwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vwAADr8BOAVTJAAAtnhJREFUeF7s3fmbZXdVL/7NHs6p6m4ydRIvQwgJiQgSCJDwRUaVYICAPqjhEmVw + vAAADrwBlbxySQAAtnhJREFUeF7s3fmbZXdVL/7NHs6p6m4ydRIvQwgJiQgSCJDwRUaVYICAPqjhEmVw iAo3xAjKKBBl8MEQUO5FgSBwITIJ6FUMgyZBCSjivX9O0nXG+q7aq2p7aELS6VTX2afq9frh86z92QdI uqvO4367PmsXmwAAAADQYwIsAAAAAHpNgAUAAABArwmwAAAAAOg1ARYAAAAAvSbAAgAAAKDXBFgAAAAA 9JoACwAAAIBeE2ABAAAA0GsCLAAAAAB6TYAFAAAAQK8JsAAAAADoNQEWAAAAAL0mwAIAAACg1wRYAAAA @@ -1721,7 +1721,7 @@ iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAIAAACubhnwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vwAADr8BOAVTJAAAt0tJREFUeF7s3fmXbHdZL/7qGvucEwicDBgkEIYwKCEB4mJIIiKwkEEGXQHBCA5c + vAAADrwBlbxySQAAt0tJREFUeF7s3fmXbHdZL/7qGvucEwicDBgkEIYwKCEB4mJIIiKwkEEGXQHBCA5c hst0EQ34lcGrQBACsq5BJhUvYYoQVCZRQlBALsa77h9z17rprtq7Nt+n9lO9LUJCzsnp7r2r6/X64bOe /al2mdNdVWvtN8/n2b0fAgAAAECHCbAAAAAA6DQBFgAAAACdJsACAAAAoNMEWAAAAAB0mgALAAAAgE4T YAEAAADQaQIsAAAAADpNgAUAAABApwmwAAAAAOg0ARYAAAAAnSbAAgAAAKDTBFgAAAAAdJoACwAAAIBO @@ -2509,7 +2509,7 @@ iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAIAAACubhnwAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vwAADr8BOAVTJAAAy01JREFUeF7s3fm/ZFV5L/7TVbWr6nTTjM0QBUQhikMEgsQBiYYEoqJGo8YxJlGD + vAAADrwBlbxySQAAy01JREFUeF7s3fm/ZFV5L/7TVbWr6nTTjM0QBUQhikMEgsQBiYYEoqJGo8YxJlGD XxViNIng1WBiDEQxwRgvDhiNosYB472KQyBgohLuNa/c1/1fbuxTs9/n7Kd6WSLQ0+lzani/f1ivtTcK 3edU7f2sz15r7bUfAwAAAMAcE2ABAAAAMNcEWAAAAADMNQEWAAAAAHNNgAUAAADAXBNgAQAAADDXBFgA AAAAzDUBFgAAAABzTYAFAAAAwFwTYAEAAAAw1wRYAAAAAMw1ARYAAAAAc02ABQAAAMBcE2ABAAAAMNcE diff --git a/ArmoredVehicle/Program.cs b/ArmoredVehicle/Program.cs index 9c1e225..fb70217 100644 --- a/ArmoredVehicle/Program.cs +++ b/ArmoredVehicle/Program.cs @@ -11,7 +11,7 @@ namespace ArmoredVehicle // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new MainForm()); + Application.Run(new FormMap()); } } } \ No newline at end of file diff --git a/ArmoredVehicle/Properties/Resources.Designer.cs b/ArmoredVehicle/Properties/Resources.Designer.cs new file mode 100644 index 0000000..e997a61 --- /dev/null +++ b/ArmoredVehicle/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ArmoredVehicle.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("ArmoredVehicle.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/ArmoredVehicle/Properties/Resources.resx b/ArmoredVehicle/Properties/Resources.resx new file mode 100644 index 0000000..293419e --- /dev/null +++ b/ArmoredVehicle/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\arrowDown.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ArmoredVehicle/SimpleMap.cs b/ArmoredVehicle/SimpleMap.cs new file mode 100644 index 0000000..2ed1657 --- /dev/null +++ b/ArmoredVehicle/SimpleMap.cs @@ -0,0 +1,52 @@ +namespace ArmoredVehicle +{ + /// + /// Простая реализация абсрактного класса AbstractMap + /// + internal class SimpleMap : AbstractMap + { + /// + /// Цвет участка закрытого + /// + private readonly Brush barrierColor = new SolidBrush(Color.Black); + /// + /// Цвет участка открытого + /// + private readonly Brush roadColor = new SolidBrush(Color.Gray); + + protected override void DrawBarrierPart(Graphics g, int i, int j) + { + g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected override void DrawRoadPart(Graphics g, int i, int j) + { + g.FillRectangle(roadColor, i * _size_x, j * _size_y, (i+1) * (_size_x + 1), (j+1) * (_size_y + 1)); + + } + + protected override void GenerateMap() + { + _map = new int[50, 50]; + _size_x = (float)_width / _map.GetLength(0); + _size_y = (float)_height / _map.GetLength(1); + int counter = 0; + for (int i = 0; i < _map.GetLength(0); ++i) + { + for (int j = 0; j < _map.GetLength(1); ++j) + { + _map[i, j] = _freeRoad; + } + } + while (counter < 50) + { + int x = _random.Next(0, 50); + int y = _random.Next(0, 50); + if (_map[x, y] == _freeRoad) + { + _map[x, y] = _barrier; + counter++; + } + } + } + } +} \ No newline at end of file diff --git a/ArmoredVehicle/TankEnity.cs b/ArmoredVehicle/TankEnity.cs new file mode 100644 index 0000000..5a3cd21 --- /dev/null +++ b/ArmoredVehicle/TankEnity.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ArmoredVehicle +{ + internal class TankEnity : ArmoredVehicleEntity + { + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Цвет кузова + /// Дополнительный цвет + /// Признак наличия пулемета + /// Признак наличия башни + /// Признак наличия орудия + + public TankEnity(int speed, float weight, Color bodyColor, Color dopColor, bool machineGun, bool tower, bool gun) : base(speed, weight, bodyColor) + { + DopColor = dopColor; + MachineGun = machineGun; + Tower = tower; + Gun = gun; + } + + /// + /// Дополнительный цвет + /// + public Color DopColor { get; private set; } + /// + /// Признак наличия пулемета + /// + public bool MachineGun { get; private set; } + /// + /// Признак наличия башни + /// + public bool Tower { get; private set; } + /// + /// Признак наличия орудия + /// + public bool Gun { get; private set; } + + + } +} diff --git a/ArmoredVehicle/VerticalMAp.cs b/ArmoredVehicle/VerticalMAp.cs new file mode 100644 index 0000000..84cf7df --- /dev/null +++ b/ArmoredVehicle/VerticalMAp.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ArmoredVehicle +{ + internal class VerticalMap : AbstractMap + { /// + /// Цвет участка закрытого + /// + private readonly Brush barrierColor = new SolidBrush(Color.Brown); + /// + /// Цвет участка открытого + /// + private readonly Brush roadColor = new SolidBrush(Color.LightGray); + + protected override void DrawBarrierPart(Graphics g, int i, int j) + { + g.FillRectangle(barrierColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected override void DrawRoadPart(Graphics g, int i, int j) + { + g.FillRectangle(roadColor, i * _size_x, j * _size_y, (i + 1) * (_size_x + 1), (j + 1) * (_size_y + 1)); + + } + + protected override void GenerateMap() + { + _map = new int[50, 50]; + _size_x = (float)_width / _map.GetLength(0); + _size_y = (float)_height / _map.GetLength(1); + int counter = 0; + for (int i = 0; i < _map.GetLength(0); ++i) + { + for (int j = 0; j < _map.GetLength(1); ++j) + { + _map[i, j] = _freeRoad; + } + } + while (counter < 7) + { + + int x1 = _random.Next(0, 12); + int x2 = _random.Next(12, _map.GetLength(0)); + + int y1 = _random.Next(0, _map.GetLength(1)); + + for (int i = x1; i < x2; i++) + { + if (_map[y1, i] == _freeRoad) + { + _map[y1, i] = _barrier; + } + } + + counter++; + } + } + } +}