diff --git a/Locomative/Locomative/AbstractMap.cs b/Locomative/Locomative/AbstractMap.cs index 1ee452a..71108d2 100644 --- a/Locomative/Locomative/AbstractMap.cs +++ b/Locomative/Locomative/AbstractMap.cs @@ -36,7 +36,7 @@ namespace Locomative switch (direction) { case Direction.Up: - for (int i = 0; i < _map.GetLength(0); i++) + for (int i = 0; i < _map?.GetLength(0); i++) { for (int j = 0; j < _map.GetLength(1); j++) { @@ -46,7 +46,7 @@ namespace Locomative } break; case Direction.Down: - for (int i = 0; i < _map.GetLength(0); i++) + for (int i = 0; i < _map?.GetLength(0); i++) { for (int j = 0; j < _map.GetLength(1); j++) { @@ -59,7 +59,7 @@ namespace Locomative } break; case Direction.Left: - for (int i = 0; i < _map.GetLength(0); i++) + for (int i = 0; i < _map?.GetLength(0); i++) { for (int j = 0; j < _map.GetLength(1); j++) { @@ -72,7 +72,7 @@ namespace Locomative } break; case Direction.Right: - for (int i = 0; i < _map.GetLength(0); i++) + for (int i = 0; i < _map?.GetLength(0); i++) { for (int j = 0; j < _map.GetLength(1); j++) { @@ -85,7 +85,7 @@ namespace Locomative } break; } - _drawningObject.MoveObject(direction); + _drawningObject?.MoveObject(direction); return DrawMapWithObject(); } diff --git a/Locomative/Locomative/DrawningFastLoco.cs b/Locomative/Locomative/DrawningFastLoco.cs index ded30e4..d315d06 100644 --- a/Locomative/Locomative/DrawningFastLoco.cs +++ b/Locomative/Locomative/DrawningFastLoco.cs @@ -1,17 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Locomative +namespace Locomative { internal class DrawningFastLoco : DrawningLocomative { - public DrawningFastLoco(int speed, float weight, Color bodyColor, Color dopColor, bool bodyKit, bool wing, bool rockettoobe) : + public DrawningFastLoco(int speed, float weight, Color bodyColor, Color dopColor, bool widow, bool room) : base(speed, weight, bodyColor, 110, 60) { - Locomative = new EntityFastLocomative(speed, weight, bodyColor, dopColor, bodyKit, wing, rockettoobe); + Locomative = new EntityFastLocomative(speed, weight, bodyColor, dopColor, widow, room); } public override void DrawTransport(Graphics g) { @@ -24,33 +18,52 @@ namespace Locomative Pen pen = new(Color.Black); Brush brWhite = new SolidBrush(Color.White); Brush bodyBrush = new SolidBrush(fastLocomative.BodyColor); - Brush dopBrush = new SolidBrush(fastLocomative.DopColor); Brush brBlack = new SolidBrush(Color.Black); - if (fastLocomative.BodyKit) - { - //поезд - g.FillRectangle(brWhite, _startPosX, _startPosY, 120, 40); - g.DrawRectangle(pen, _startPosX, _startPosY, 120, 40); - //окно - g.FillRectangle(bodyBrush, _startPosX+90, _startPosY+5, 20, 30); - g.DrawRectangle(pen, _startPosX + 90, _startPosY + 5, 20, 30); - //верхние края - g.DrawLine(pen, _startPosX, _startPosY + 5, _startPosX + 90, _startPosY + 5); - g.DrawLine(pen, _startPosX, _startPosY + 35, _startPosX + 90, _startPosY + 35); - //отверстие под рельсы - Point point1 = new Point(Convert.ToInt32(_startPosX + 120), Convert.ToInt32(_startPosY + 4)); - Point point2 = new Point(Convert.ToInt32(_startPosX + 115), Convert.ToInt32(_startPosY + 8)); - Point point3 = new Point(Convert.ToInt32(_startPosX + 115), Convert.ToInt32(_startPosY + 32)); - Point point4 = new Point(Convert.ToInt32(_startPosX + 120), Convert.ToInt32(_startPosY + 36)); - Point[] points = { point1, point2, point3, point4 }; - g.FillPolygon(brBlack, points); + //вид слева + Point point1 = new Point(Convert.ToInt32(_startPosX), Convert.ToInt32(_startPosY)); + Point point2 = new Point(Convert.ToInt32(_startPosX+90), Convert.ToInt32(_startPosY + 2)); + Point point3 = new Point(Convert.ToInt32(_startPosX+100), Convert.ToInt32(_startPosY + 42)); + Point point4 = new Point(Convert.ToInt32(_startPosX), Convert.ToInt32(_startPosY + 40)); + Point[] points = { point1, point2, point3, point4 }; + g.FillPolygon(brWhite, points); + g.DrawPolygon(pen, points); + //окна + Point p_1_1 = new Point(Convert.ToInt32(_startPosX + 5), Convert.ToInt32(_startPosY + 10)); + Point p_1_2 = new Point(Convert.ToInt32(_startPosX + 45), Convert.ToInt32(_startPosY + 11)); + Point p_1_3 = new Point(Convert.ToInt32(_startPosX + 45), Convert.ToInt32(_startPosY + 31)); + Point p_1_4 = new Point(Convert.ToInt32(_startPosX + 5), Convert.ToInt32(_startPosY + 30)); + Point[] points1 = { p_1_1, p_1_2, p_1_3, p_1_4 }; + g.DrawPolygon(pen, points1); + Point p_2_1 = new Point(Convert.ToInt32(_startPosX + 55), Convert.ToInt32(_startPosY + 11)); + Point p_2_2 = new Point(Convert.ToInt32(_startPosX + 89), Convert.ToInt32(_startPosY + 12)); + Point p_2_3 = new Point(Convert.ToInt32(_startPosX + 95), Convert.ToInt32(_startPosY + 32)); + Point p_2_4 = new Point(Convert.ToInt32(_startPosX + 55), Convert.ToInt32(_startPosY + 31)); + Point[] points2 = { p_2_1, p_2_2, p_2_3, p_2_4 }; + g.DrawPolygon(pen, points2); + //поезд спереди + Point p_3_1 = new Point(Convert.ToInt32(_startPosX + 90), Convert.ToInt32(_startPosY + 2)); + Point p_3_2 = new Point(Convert.ToInt32(_startPosX + 110), Convert.ToInt32(_startPosY)); + Point p_3_3 = new Point(Convert.ToInt32(_startPosX + 120), Convert.ToInt32(_startPosY + 40)); + Point p_3_4 = new Point(Convert.ToInt32(_startPosX + 100), Convert.ToInt32(_startPosY + 42)); + Point[] points3 = { p_3_1, p_3_2, p_3_3, p_3_4 }; + g.FillPolygon(brWhite, points3); + g.DrawPolygon(pen, points3); + //окно спереди + Point p_4_1 = new Point(Convert.ToInt32(_startPosX + 90), Convert.ToInt32(_startPosY + 2)); + Point p_4_2 = new Point(Convert.ToInt32(_startPosX + 110), Convert.ToInt32(_startPosY)); + Point p_4_3 = new Point(Convert.ToInt32(_startPosX + 120), Convert.ToInt32(_startPosY + 40)); + Point p_4_4 = new Point(Convert.ToInt32(_startPosX + 100), Convert.ToInt32(_startPosY + 42)); + Point[] points4 = { p_4_1, p_4_2, p_4_3, p_4_4 }; + g.DrawPolygon(pen, points4);//////////////////////////////////// + //окно зараска + if (fastLocomative.bodyKit) { + } //вторая кабина - if (fastLocomative.Room) + if (fastLocomative.room) { - g.FillRectangle(brWhite, _startPosX-125, _startPosY, 120, 40); - g.DrawRectangle(pen, _startPosX-125, _startPosY, 120, 40); - g.DrawRectangle(pen, _startPosX-5, _startPosY+18, 5, 4); + + } } } diff --git a/Locomative/Locomative/EntityFastLocomative.cs b/Locomative/Locomative/EntityFastLocomative.cs index a64cda5..b6b9323 100644 --- a/Locomative/Locomative/EntityFastLocomative.cs +++ b/Locomative/Locomative/EntityFastLocomative.cs @@ -8,17 +8,17 @@ namespace Locomative { internal class EntityFastLocomative : EntityLocomative { - public Color DopColor { get; private set; } - public bool Wing { get; private set; } - public bool BodyKit { get; private set; } - public bool Room { get; private set; } - public EntityFastLocomative(int speed, float weight, Color bodyColor, Color dopColor, bool bodyKit, bool wing, bool room) : + public Color dopColor { get; private set; } + public bool wing { get; private set; } + public bool bodyKit { get; private set; } + public bool room { get; private set; } + public EntityFastLocomative(int speed, float weight, Color bodyColor, Color dopColor, bool widow, bool room) : base(speed, weight, bodyColor) { - DopColor = dopColor; - BodyKit = bodyKit; - Wing = wing; - Room = room; + this.dopColor = dopColor; + this.bodyKit = widow; + this.wing = wing; + this.room = room; } } } diff --git a/Locomative/Locomative/FormMap.Designer.cs b/Locomative/Locomative/FormMap.Designer.cs index b6f3b01..acef63a 100644 --- a/Locomative/Locomative/FormMap.Designer.cs +++ b/Locomative/Locomative/FormMap.Designer.cs @@ -52,7 +52,7 @@ this.buttonСreate.Name = "buttonСreate"; this.buttonСreate.Size = new System.Drawing.Size(88, 27); this.buttonСreate.TabIndex = 0; - this.buttonСreate.Text = "Создание"; + this.buttonСreate.Text = "Create"; this.buttonСreate.UseVisualStyleBackColor = true; this.buttonСreate.Click += new System.EventHandler(this.buttonСreate_Click); // @@ -95,20 +95,20 @@ // toolStripStatusLabelSpeed // this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; - this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(59, 17); - this.toolStripStatusLabelSpeed.Text = "Скорость"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(39, 17); + this.toolStripStatusLabelSpeed.Text = "Speed"; // // toolStripStatusLabelWeight // this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; - this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(26, 17); - this.toolStripStatusLabelWeight.Text = "Вес"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(42, 17); + this.toolStripStatusLabelWeight.Text = "Weght"; // // toolStripStatusLabelColor // this.toolStripStatusLabelColor.Name = "toolStripStatusLabelColor"; - this.toolStripStatusLabelColor.Size = new System.Drawing.Size(33, 17); - this.toolStripStatusLabelColor.Text = "Цвет"; + this.toolStripStatusLabelColor.Size = new System.Drawing.Size(36, 17); + this.toolStripStatusLabelColor.Text = "Color"; // // buttonLeft // @@ -157,7 +157,7 @@ this.ButtonFastCreate.Name = "ButtonFastCreate"; this.ButtonFastCreate.Size = new System.Drawing.Size(113, 27); this.ButtonFastCreate.TabIndex = 7; - this.ButtonFastCreate.Text = "Модификация"; + this.ButtonFastCreate.Text = "Modicated"; this.ButtonFastCreate.UseVisualStyleBackColor = true; this.ButtonFastCreate.Click += new System.EventHandler(this.ButtonFastCreate_Click); // @@ -166,7 +166,9 @@ this.comboBoxSelectirMap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxSelectirMap.FormattingEnabled = true; this.comboBoxSelectirMap.Items.AddRange(new object[] { - "Простая карта"}); + "SimpleMap", + "UserMap #1", + "UserMap #2"}); this.comboBoxSelectirMap.Location = new System.Drawing.Point(14, 14); this.comboBoxSelectirMap.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); this.comboBoxSelectirMap.Name = "comboBoxSelectirMap"; diff --git a/Locomative/Locomative/FormMap.cs b/Locomative/Locomative/FormMap.cs index 8ffe2a4..b1446d8 100644 --- a/Locomative/Locomative/FormMap.cs +++ b/Locomative/Locomative/FormMap.cs @@ -68,7 +68,7 @@ namespace Locomative var loco = new DrawningFastLoco(rnd.Next(50, 250), rnd.Next(100, 300), 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)), - true, true, true); + Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); SetData(loco); } @@ -76,9 +76,15 @@ namespace Locomative { switch (comboBoxSelectirMap.Text) { - case "Простая карта": + case "SimpleMap": _abstractMap = new SimpleMap(); break; + case "UserMap #1": + _abstractMap = new UserMap_BigBox(); + break; + case "UserMap #2": + _abstractMap = new UserMap_Rally(); + break; } } } diff --git a/Locomative/Locomative/LocomativeForm.cs b/Locomative/Locomative/LocomativeForm.cs index 171835c..0186427 100644 --- a/Locomative/Locomative/LocomativeForm.cs +++ b/Locomative/Locomative/LocomativeForm.cs @@ -79,7 +79,7 @@ namespace Locomative _loco = new DrawningFastLoco(rnd.Next(1, 200), rnd.Next(100, 300), 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)), - true, true, true); + Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2))); SetData(); Draw(); } diff --git a/Locomative/Locomative/SimpleMap.cs b/Locomative/Locomative/SimpleMap.cs index 3d73492..89a98a4 100644 --- a/Locomative/Locomative/SimpleMap.cs +++ b/Locomative/Locomative/SimpleMap.cs @@ -31,7 +31,7 @@ namespace Locomative _map[i, j] = _freeRoad; } } - while(counter < 50) + while(counter < 30) { int x = _random.Next(0, 100); int y = _random.Next(0, 100); diff --git a/Locomative/Locomative/UserMap_BigBox.cs b/Locomative/Locomative/UserMap_BigBox.cs new file mode 100644 index 0000000..d2b07e9 --- /dev/null +++ b/Locomative/Locomative/UserMap_BigBox.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Locomative +{ + internal class UserMap_BigBox : AbstractMap + { + Brush barrierColor = new SolidBrush(Color.DarkGray); + Brush roadColor = new SolidBrush(Color.Aqua); + protected override void DrawBarrielPart(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 DrawRailPart(Graphics g, int i, int j) + { + g.FillRectangle(roadColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + + protected override void GenerateMap() + { + _map = new int[100, 100]; + _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 < 30) + { + int x = _random.Next(0, 100); + int y = _random.Next(0, 100); + if (_map[x, y] == _freeRoad) + { + _map[x, y] = _barrier; + counter++; + } + } + + } + } +} \ No newline at end of file diff --git a/Locomative/Locomative/UserMap_Rally.cs b/Locomative/Locomative/UserMap_Rally.cs new file mode 100644 index 0000000..685571b --- /dev/null +++ b/Locomative/Locomative/UserMap_Rally.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Locomative +{ + internal class UserMap_Rally : AbstractMap + { + Brush barrielColor = new SolidBrush(Color.Red); + Brush railColor = new SolidBrush(Color.Gray); + protected override void DrawBarrielPart(Graphics g, int i, int j) + { + g.FillRectangle(barrielColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected override void DrawRailPart(Graphics g, int i, int j) + { + g.FillRectangle(railColor, i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected override void GenerateMap() + { + int sizeKub = 3; + _map = new int[100, 100]; + _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; + } + } + for (int i = 0; i < _map.GetLength(0); ++i) + { + _map[i, 1] = _barrier; + _map[i, 99] = _barrier; + _map[1, i] = _barrier; + _map[99, i] = _barrier; + } + while (counter < 10) + { + Random rand = new Random(); + int i = rand.Next(10, 80); + int j = rand.Next(10, 80); + if (i > _map.GetLength(0) - sizeKub || j > _map.GetLength(0) - sizeKub) + continue; + for (int iKub = i; iKub < i + sizeKub; iKub++) + { + for (int jKub = j; jKub < j + sizeKub; jKub++) + { + _map[iKub, jKub] = _barrier; + } + } + counter++; + } + } + } +}