Отрисовка монорельса
This commit is contained in:
parent
557dc963c5
commit
d8b20b7584
@ -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();
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
20
Locomative/Locomative/FormMap.Designer.cs
generated
20
Locomative/Locomative/FormMap.Designer.cs
generated
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
49
Locomative/Locomative/UserMap_BigBox.cs
Normal file
49
Locomative/Locomative/UserMap_BigBox.cs
Normal file
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
60
Locomative/Locomative/UserMap_Rally.cs
Normal file
60
Locomative/Locomative/UserMap_Rally.cs
Normal file
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user