Compare commits

...

19 Commits

Author SHA1 Message Date
NikGapon
67b573ee65 small name fix 2022-12-08 20:35:01 +04:00
NikGapon
9ccb83c58d lab 4 complete 2022-12-07 21:26:37 +04:00
NikGapon
f3fb6e9fec base 4 + hard 3 2022-12-07 18:46:16 +04:00
NikGapon
c0382ad0a9 lab3 done 2022-12-06 19:51:09 +04:00
NikGapon
d2fa9e576d del formMap 2022-12-05 23:42:20 +04:00
NikGapon
9a9dbc9032 lab3 base + hard mod 2022-12-05 23:41:28 +04:00
8fcce4fcfb Merge branch 'LabWork01' into LabWork02 2022-12-01 23:45:19 +04:00
NikGapon
9936fffceb fix tr 2022-11-25 16:34:01 +04:00
NikGapon
43a98b80e3 lab2 2022-11-24 02:08:47 +04:00
NikGapon
cc24f550e0 add inter 2022-11-24 00:09:01 +04:00
NikGapon
6670de85b2 lab 2 base + lab 1 hard 2022-11-23 22:48:45 +04:00
NikGapon
8af39ad6e0 lab2 base + lab 1 hard 2022-11-23 22:48:24 +04:00
NikGapon
f4ef4eb459 rename form (fck visual studio) 2022-11-23 22:12:12 +04:00
NikGapon
7b9ea10ad1 mass rename 2022-11-23 21:29:46 +04:00
NikGapon
800e689ef7 small fix add porthole when create airplane 2022-11-23 20:38:09 +04:00
NikGapon
8f9f2d0fa4 visual fix 2022-10-26 21:47:24 +04:00
NikGapon
e42016dec6 final 2022-10-26 21:45:24 +04:00
NikGapon
67dd4fbfa8 Функция отрисовки и выбор числа в интерфейсе 2022-10-26 19:21:19 +04:00
NikGapon
678452d87d залив базовой лабы 2022-10-26 17:34:16 +04:00
42 changed files with 2992 additions and 0 deletions

25
Airbus/Airbus.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Airbus", "Airbus\Airbus.csproj", "{ED366BAA-3C16-414B-B381-DE0B509BFD6A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{ED366BAA-3C16-414B-B381-DE0B509BFD6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED366BAA-3C16-414B-B381-DE0B509BFD6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED366BAA-3C16-414B-B381-DE0B509BFD6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED366BAA-3C16-414B-B381-DE0B509BFD6A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {F80C7287-B0F9-477D-92F0-7592A3B0DEDC}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,122 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
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();
}
private bool CanMove(Direction direction, (float Left, float Right, float Top, float Bottom) position) //Проверка на возможность шага
{
for (int i = (int)(position.Top / _size_y); i <=(int)((position.Bottom + 25) / _size_y); ++i)
{
for (int j = (int)(position.Left / _size_x); j <= (int)((position.Right + 5) / _size_x); ++j)
{
if (i >= 0 && j >= 0 && i < _map.GetLength(0) && j < _map.GetLength(1) && _map[i, j] == _barrier) return false;
}
}
return true;
}
public Bitmap MoveObject(Direction direction)
{
(float Left, float Right, float Top, float Bottom) position = _drawningObject.GetCurrentPosition();
if (direction == Direction.Left)
{
position.Left -= _drawningObject.Step;
}
else if (direction == Direction.Right)
{
position.Right += _drawningObject.Step;
}
else if (direction == Direction.Up)
{
position.Top -= _drawningObject.Step;
}
else if (direction == Direction.Down)
{
position.Bottom += _drawningObject.Step;
}
if (CanMove(direction, position))
{
_drawningObject.MoveObject(direction);
}
return DrawMapWithObject();
}
private bool SetObjectOnMap()
{
if (_drawningObject == null || _map == null)
{
return false;
}
int x = _random.Next(0, 10);
int y = _random.Next(0, 10);
_drawningObject.SetObject(x, y, _width, _height);
for (int i = (int)(_drawningObject.GetCurrentPosition().Top / _size_y); i <= (int)((_drawningObject.GetCurrentPosition().Bottom + 25) / _size_y); ++i)
{
for (int j = (int)(_drawningObject.GetCurrentPosition().Left / _size_x); j <= (int)((_drawningObject.GetCurrentPosition().Right + 5)/ _size_x); ++j)
{
if (_map[i, j] == _barrier) _map[i, j] = _freeRoad;
}
}
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);
}
}
}
_drawningObject.DrawningObject(gr);
return bmp;
}
protected abstract void GenerateMap();
protected abstract void DrawRoadPart(Graphics g, int i, int j);
protected abstract void DrawBarrierPart(Graphics g, int i, int j);
}
}

View File

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public enum CountPorthole
{
None = 0,
Ten = 10,
Twenty = 20,
Thirty = 30,
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public enum Direction
{
None = 0,
Left = 1, //Влево
Up = 2, //Вверх
Right = 3, //Вправо
Down = 4 //Вниз
}
}

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class DrawingAirbus : DrawningAirplane
{
public DrawingAirbus(int speed, float weight, Color bodyColor, Color dopColor, bool compartment, bool engine, IPorthole formPorthole) :
base(speed, weight, bodyColor, 150, 30, formPorthole)
{
airplane = new EntityAirbus(speed, weight, bodyColor, dopColor, compartment, engine);
}
public override void DrawTransport(Graphics g)
{
if (airplane is not EntityAirbus grandAirbus)
{
return;
}
Pen pen = new(Color.Black, 2);
Brush dopBrush = new SolidBrush(grandAirbus.DopColor);
if (grandAirbus.Engine)
{
g.FillRectangle(dopBrush, _startPosX , _startPosY + 12 + _airplaneWidth / 10, 10, 10);
g.FillRectangle(dopBrush, _startPosX, _startPosY + 12 + _airplaneWidth / 5, 10, 10);
}
_startPosX += 10;
base.DrawTransport(g);
_startPosX -= 10;
if (grandAirbus.Compartment)
{
g.FillRectangle(dopBrush, _startPosX + 85, _startPosY + 10, 50, 15);
g.DrawPolygon(pen, new[]
{
new Point((int)(_startPosX + 85), (int)(_startPosY + 10)),
new Point((int)(_startPosX + 85), (int)(_startPosY + 25)),
new Point((int)(_startPosX + 60), (int)(_startPosY + 25)),
new Point((int)(_startPosX + 85), (int)(_startPosY + 10)),
});
}
}
}
}

View File

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class DrawningAirplane
{
/// Класс-сущность
public EntityAirplane airplane { protected set; get; }
public IPorthole porthole { private set; get; }
/// Левая координата отрисовки автомобиля
protected float _startPosX;
/// Верхняя кооридната отрисовки автомобиля
protected float _startPosY;
/// Ширина окна отрисовки
private int? _pictureWidth = null;
/// Высота окна отрисовки
private int? _pictureHeight = null;
/// Ширина отрисовки автомобиля
protected readonly int _airplaneWidth = 150; //Ширина отрисовки корабля
protected readonly int _airplaneHeight = 30; //Высота отрисовки корабля
public DrawningAirplane(int speed, float weight, Color bodyColor, IPorthole formPorthole)
{
airplane = new EntityAirplane(speed, weight, bodyColor);
porthole = formPorthole;
}
public DrawningAirplane(EntityAirplane entityAirplane, IPorthole formPorthole)
{
airplane = entityAirplane;
porthole = formPorthole;
}
public void SetPosition(int x, int y, int width, int height)
{
if (width < _airplaneWidth || height < _airplaneHeight) return;
Random random = new Random();
_startPosX = x < 0 || x + _airplaneWidth > width ? random.Next(0, width - _airplaneWidth) : x;
_startPosY = y < 0 || y + _airplaneHeight > height ? random.Next(0, height - _airplaneHeight) : y;
_startPosX = x;
_startPosY = y;
_pictureWidth = width;
_pictureHeight = height;
}
public void MoveTransport(Direction direction)
{
if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) return;
switch (direction)
{
case Direction.Left: //Влево
if (_startPosX - airplane.Step > 0) _startPosX -= airplane.Step;
break;
case Direction.Up: //Вверх
if (_startPosY - airplane.Step > 0) _startPosY -= airplane.Step;
break;
case Direction.Right: //Вправо
if (_startPosX + _airplaneWidth + airplane.Step - 6 < _pictureWidth) _startPosX += airplane.Step;
break;
case Direction.Down: //Вниз
if (_startPosY + _airplaneHeight + airplane.Step + 25 < _pictureHeight) _startPosY += airplane.Step;
break;
}
}
protected DrawningAirplane(int speed, float weight, Color bodyColor, int
carWidth, int carHeight, IPorthole formPorthole) :
this(speed, weight, bodyColor, formPorthole)
{
_airplaneWidth = carWidth;
_airplaneHeight = carHeight;
}
public virtual void DrawTransport(Graphics g)
{
if (_startPosX < 0 || _startPosY < 0 || !_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
Pen pen = new(Color.Black);
SolidBrush brush = new SolidBrush(airplane?.BodyColor ?? Color.White);
g.FillPolygon(brush, new[]
{
new Point((int)(_startPosX + _airplaneWidth - 25), (int)(_startPosY + 25)),
new Point((int)(_startPosX + _airplaneWidth), (int)(_startPosY + 40)),
new Point((int)(_startPosX + _airplaneWidth - 25), (int)(_startPosY + 55)),
new Point((int)(_startPosX + _airplaneWidth - 25), (int)(_startPosY + 15)),
});
g.FillRectangle(brush, _startPosX, _startPosY + 25, _airplaneWidth - 25, _airplaneHeight);
g.DrawPolygon(pen, new[]
{
new Point((int)(_startPosX), (int)(_startPosY)),
new Point((int)(_startPosX + 25), (int)(_startPosY + 25)),
new Point((int)(_startPosX), (int)(_startPosY + 25)),
new Point((int)(_startPosX), (int)(_startPosY)),
});
g.DrawEllipse(new(Color.Blue, 2), _startPosX, _startPosY + 15, 25, 5);
g.DrawEllipse(new(Color.Black, 2), _startPosX + _airplaneWidth - 30, _startPosY + _airplaneHeight + 25, 4, 4);
g.DrawEllipse(new(Color.Black, 2), _startPosX + _airplaneWidth - 35, _startPosY + _airplaneHeight + 25, 4, 4);
g.DrawEllipse(new(Color.Black, 2), _startPosX , _startPosY + _airplaneHeight + 25, 4, 4);
porthole.DrawPortholes(g, Color.Red, _startPosX, _startPosY);
}
public void Upd_count_Porthole(CountPorthole count)
{
porthole.CountPorthole = (int)count;
}
public void ChangeBorders(int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
if (_pictureWidth <= _airplaneWidth || _pictureHeight <= _airplaneHeight)
{
_pictureWidth = null;
_pictureHeight = null;
return;
}
if (_startPosX + _airplaneWidth > _pictureWidth)
{
_startPosX = _pictureWidth.Value - _airplaneWidth;
}
if (_startPosY + _airplaneHeight > _pictureHeight)
{
_startPosY = _pictureHeight.Value - _airplaneHeight;
}
}
public (float Left, float Right, float Top, float Bottom) GetCurrentPosition()
{
return (_startPosX, _startPosX + _airplaneWidth, _startPosY, _startPosY + _airplaneHeight);
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class DrawingRhombPorthole : DrawningPorthole
{
protected override void DrawPorthole(Graphics g, Color color, float posX, float posY)
{
Pen pen = new(color, 1);
PointF[] point = new PointF[4];
point[0] = new PointF(posX - 2, posY);
point[1] = new PointF(posX, posY - 2);
point[2] = new PointF(posX + 2, posY);
point[3] = new PointF(posX, posY + 2);
g.DrawPolygon(pen, point);
}
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class DrawingSquarePorthole : DrawningPorthole
{
protected override void DrawPorthole(Graphics g, Color color, float posX, float posY)
{
g.DrawRectangle(new(color, 1), posX, posY, 5, 5);
}
}
}

View File

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class DrawningObjectAirplane : IDrawningObject
{
private DrawningAirplane _airplane = null;
public DrawningObjectAirplane(DrawningAirplane airplane)
{
_airplane = airplane;
}
public float Step => _airplane?.airplane?.Step ?? 0;
public void DrawningObject(Graphics g)
{
_airplane?.DrawTransport(g);
}
public (float Left, float Right, float Top, float Bottom) GetCurrentPosition()
{
return _airplane?.GetCurrentPosition() ?? default;
}
public void MoveObject(Direction direction)
{
_airplane?.MoveTransport(direction);
}
public void SetObject(int x, int y, int width, int height)
{
_airplane?.SetPosition(x, y, width, height);
}
public static explicit operator DrawningAirplane(DrawningObjectAirplane drawningObject) => drawningObject._airplane;
}
}

View File

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class DrawningPorthole : IPorthole
{
private CountPorthole _countpornhole;
public int CountPorthole
{
get => (int)_countpornhole;
set
{
_countpornhole = (CountPorthole)value;
}
}
public void DrawPortholes(Graphics g, Color color, float posX, float posY)
{
for (int i = 0; i < (int)CountPorthole / 2; i++)
{
DrawPorthole(g, color, posX + 125 - i * 7, posY + 30);
DrawPorthole(g, color, posX + 125 - i * 7, posY + 40);
}
}
protected virtual void DrawPorthole(Graphics g, Color color, float posX, float posY)
{
g.DrawEllipse(new(color, 1), posX, posY, 5, 5);
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class EntityAirbus : EntityAirplane
{
public Color DopColor { get; private set; }
public bool Compartment { get; private set; }
public bool Engine { get; private set; }
public EntityAirbus(int speed, float weight, Color bodyColor, Color
dopColor, bool compartment, bool engine) :
base(speed, weight, bodyColor)
{
DopColor = dopColor;
Compartment = compartment;
Engine = engine;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public class EntityAirplane
{
public int Speed { get; private set; } //Скорость
public float Weight { get; private set; } //Вес
public Color BodyColor { get; private set; } //Цвет
public float Step => Speed * 100 / Weight; //Шаг при перемещении
//Инициализация
public EntityAirplane(int speed, float weight, Color bodyColor)
{
Random random = new Random();
Speed = speed <= 0 ? random.Next(50, 150) : speed;
Weight = weight <= 0 ? random.Next(40, 70) : weight;
BodyColor = bodyColor;
}
}
}

234
Airbus/Airbus/FormAirplane.Designer.cs generated Normal file
View File

@ -0,0 +1,234 @@
namespace Airbus
{
partial class FormAirplane
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabelWight = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabelColor = new System.Windows.Forms.ToolStripStatusLabel();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.buttonCreate = new System.Windows.Forms.Button();
this.buttonUp = new System.Windows.Forms.Button();
this.buttonRight = new System.Windows.Forms.Button();
this.buttonLeft = new System.Windows.Forms.Button();
this.buttonDown = new System.Windows.Forms.Button();
this.comboBoxPortholeSer = new System.Windows.Forms.ComboBox();
this.buttonModCreate = new System.Windows.Forms.Button();
this.buttonSelectAirplane = new System.Windows.Forms.Button();
this.comboBoxFormPorthole = new System.Windows.Forms.ComboBox();
this.statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.SuspendLayout();
//
// statusStrip1
//
this.statusStrip1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.statusStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabelSpeed,
this.toolStripStatusLabelWight,
this.toolStripStatusLabelColor});
this.statusStrip1.Location = new System.Drawing.Point(0, 428);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(135, 22);
this.statusStrip1.TabIndex = 0;
this.statusStrip1.Text = "statusStrip1";
//
// toolStripStatusLabelSpeed
//
this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed";
this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(59, 17);
this.toolStripStatusLabelSpeed.Text = "Скорость";
//
// toolStripStatusLabelWight
//
this.toolStripStatusLabelWight.Name = "toolStripStatusLabelWight";
this.toolStripStatusLabelWight.Size = new System.Drawing.Size(26, 17);
this.toolStripStatusLabelWight.Text = "Вес";
//
// toolStripStatusLabelColor
//
this.toolStripStatusLabelColor.Name = "toolStripStatusLabelColor";
this.toolStripStatusLabelColor.Size = new System.Drawing.Size(33, 17);
this.toolStripStatusLabelColor.Text = "Цвет";
//
// pictureBox
//
this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(800, 450);
this.pictureBox.TabIndex = 1;
this.pictureBox.TabStop = false;
//
// buttonCreate
//
this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonCreate.Location = new System.Drawing.Point(0, 402);
this.buttonCreate.Name = "buttonCreate";
this.buttonCreate.Size = new System.Drawing.Size(75, 23);
this.buttonCreate.TabIndex = 2;
this.buttonCreate.Text = "Создать";
this.buttonCreate.UseVisualStyleBackColor = true;
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click);
//
// buttonUp
//
this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonUp.BackgroundImage = global::Airbus.Properties.Resources.v2;
this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonUp.Location = new System.Drawing.Point(719, 326);
this.buttonUp.Name = "buttonUp";
this.buttonUp.Size = new System.Drawing.Size(35, 35);
this.buttonUp.TabIndex = 3;
this.buttonUp.UseVisualStyleBackColor = true;
this.buttonUp.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::Airbus.Properties.Resources.v3;
this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonRight.Location = new System.Drawing.Point(753, 358);
this.buttonRight.Name = "buttonRight";
this.buttonRight.Size = new System.Drawing.Size(35, 35);
this.buttonRight.TabIndex = 4;
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::Airbus.Properties.Resources.v1;
this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonLeft.Location = new System.Drawing.Point(686, 358);
this.buttonLeft.Name = "buttonLeft";
this.buttonLeft.Size = new System.Drawing.Size(35, 35);
this.buttonLeft.TabIndex = 5;
this.buttonLeft.UseVisualStyleBackColor = true;
this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click);
//
// buttonDown
//
this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonDown.BackgroundImage = global::Airbus.Properties.Resources.v4;
this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonDown.Location = new System.Drawing.Point(719, 390);
this.buttonDown.Name = "buttonDown";
this.buttonDown.Size = new System.Drawing.Size(35, 35);
this.buttonDown.TabIndex = 6;
this.buttonDown.UseVisualStyleBackColor = true;
this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click);
//
// comboBoxPortholeSer
//
this.comboBoxPortholeSer.FormattingEnabled = true;
this.comboBoxPortholeSer.Items.AddRange(new object[] {
"10",
"20",
"30"});
this.comboBoxPortholeSer.Location = new System.Drawing.Point(12, 12);
this.comboBoxPortholeSer.Name = "comboBoxPortholeSer";
this.comboBoxPortholeSer.Size = new System.Drawing.Size(158, 23);
this.comboBoxPortholeSer.TabIndex = 7;
this.comboBoxPortholeSer.Text = "Кол-во Иллюминаторов";
this.comboBoxPortholeSer.SelectedIndexChanged += new System.EventHandler(this.comboBoxPortholeSer_SelectedIndexChanged);
//
// buttonModCreate
//
this.buttonModCreate.Location = new System.Drawing.Point(81, 402);
this.buttonModCreate.Name = "buttonModCreate";
this.buttonModCreate.Size = new System.Drawing.Size(75, 23);
this.buttonModCreate.TabIndex = 7;
this.buttonModCreate.Text = "Модификация";
this.buttonModCreate.UseVisualStyleBackColor = true;
this.buttonModCreate.Click += new System.EventHandler(this.buttonModCreate_Click);
//
// buttonSelectAirplane
//
this.buttonSelectAirplane.Location = new System.Drawing.Point(162, 402);
this.buttonSelectAirplane.Name = "buttonSelectAirplane";
this.buttonSelectAirplane.Size = new System.Drawing.Size(75, 23);
this.buttonSelectAirplane.TabIndex = 8;
this.buttonSelectAirplane.Text = "Выбрать";
this.buttonSelectAirplane.UseVisualStyleBackColor = true;
this.buttonSelectAirplane.Click += new System.EventHandler(this.buttonSelectAirplane_Click);
//
// comboBoxFormPorthole
//
this.comboBoxFormPorthole.FormattingEnabled = true;
this.comboBoxFormPorthole.Items.AddRange(new object[] {
"Обычные",
"Крадратные",
"Ромбом"});
this.comboBoxFormPorthole.Location = new System.Drawing.Point(14, 41);
this.comboBoxFormPorthole.Name = "comboBoxFormPorthole";
this.comboBoxFormPorthole.Size = new System.Drawing.Size(121, 23);
this.comboBoxFormPorthole.TabIndex = 11;
//
// FormAirplane
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.comboBoxFormPorthole);
this.Controls.Add(this.buttonSelectAirplane);
this.Controls.Add(this.buttonModCreate);
this.Controls.Add(this.buttonDown);
this.Controls.Add(this.buttonLeft);
this.Controls.Add(this.buttonRight);
this.Controls.Add(this.buttonUp);
this.Controls.Add(this.buttonCreate);
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.comboBoxPortholeSer);
this.Controls.Add(this.pictureBox);
this.Name = "FormAirplane";
this.Text = "Airbus";
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private StatusStrip statusStrip1;
private ToolStripStatusLabel toolStripStatusLabelSpeed;
private ToolStripStatusLabel toolStripStatusLabelWight;
private ToolStripStatusLabel toolStripStatusLabelColor;
private PictureBox pictureBox;
private Button buttonCreate;
private Button buttonUp;
private Button buttonRight;
private Button buttonLeft;
private Button buttonDown;
private Button buttonModCreate;
private ComboBox comboBoxPortholeSer;
private Button buttonSelectAirplane;
private ComboBox comboBoxFormPorthole;
}
}

View File

@ -0,0 +1,195 @@
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 Airbus
{
public partial class FormAirplane : Form
{
private DrawningAirplane airplane;
public DrawningAirplane SelectedAirplane { get; private set; }
public FormAirplane(DrawningAirplane? goairplane = null)
{
airplane = goairplane;
InitializeComponent();
if (goairplane != null)
{
SetData();
Draw();
}
}
private void Draw()
{
Bitmap bmp = new(pictureBox.Width, pictureBox.Height);
Graphics g = Graphics.FromImage(bmp);
airplane.DrawTransport(g);
pictureBox.Image = bmp;
}
private void SetData()
{
Random random = new Random();
airplane.SetPosition(random.Next(10, 100), random.Next(10, 100), pictureBox.Width, pictureBox.Height);
toolStripStatusLabelSpeed.Text = $"Скорость: {airplane.airplane?.Speed}";
toolStripStatusLabelWight.Text = $"Вес: {airplane.airplane?.Weight}";
toolStripStatusLabelColor.Text = $" : {airplane.airplane?.BodyColor}";
airplane.Upd_count_Porthole(count_porthole);
}
private void buttonCreate_Click(object sender, EventArgs e)
{
IPorthole formPorthole = new DrawningPorthole();
switch (comboBoxFormPorthole.Text)
{
case "Обычные":
formPorthole = new DrawningPorthole();
break;
case "Крадратные":
formPorthole = new DrawingSquarePorthole();
break;
case "Ромбом":
formPorthole = new DrawingRhombPorthole();
break;
}
Random rnd = new();
Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
airplane = new DrawningAirplane(rnd.Next(100, 300), rnd.Next(1000, 2000), color, formPorthole);
CountPorthole count_porthole = CountPorthole.Ten;
switch (comboBoxPortholeSer.Text)
{
case "10":
count_porthole = CountPorthole.Ten;
break;
case "20":
count_porthole = CountPorthole.Twenty;
break;
case "30":
count_porthole = CountPorthole.Thirty;
break;
}
airplane.Upd_count_Porthole(count_porthole);
SetData();
Draw();
}
private void ButtonMove_Click(object sender, EventArgs e)
{
string name = ((Button)sender)?.Name ?? string.Empty;
switch (name)
{
case "buttonLeft":
Console.WriteLine("");
airplane?.MoveTransport(Direction.Left);
break;
case "buttonUp":
airplane?.MoveTransport(Direction.Up);
break;
case "buttonRight":
airplane?.MoveTransport(Direction.Right);
break;
case "buttonDown":
airplane?.MoveTransport(Direction.Down);
break;
}
Draw();
}
CountPorthole count_porthole = CountPorthole.Ten;
private void comboBoxPortholeSer_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBoxPortholeSer.Text)
{
case "10":
count_porthole = CountPorthole.Ten;
break;
case "20":
count_porthole = CountPorthole.Twenty;
break;
case "30":
count_porthole = CountPorthole.Thirty;
break;
}
if (airplane != null)
{
airplane.Upd_count_Porthole(count_porthole);
Draw();
}
}
private void PictureBox_Resize(object sender, EventArgs e)
{
airplane?.ChangeBorders(pictureBox.Width, pictureBox.Height);
Draw();
}
private void buttonModCreate_Click(object sender, EventArgs e)
{
IPorthole formPorthole = new DrawningPorthole();
switch (comboBoxFormPorthole.Text)
{
case "Обычные":
formPorthole = new DrawningPorthole();
break;
case "Крадратные":
formPorthole = new DrawingSquarePorthole();
break;
case "Ромбом":
formPorthole = new DrawingRhombPorthole();
break;
}
Random rnd = new();
Color color = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
color = dialog.Color;
}
Color dopColor = Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256));
ColorDialog dialogDop = new();
if (dialogDop.ShowDialog() == DialogResult.OK)
{
dopColor = dialogDop.Color;
}
airplane = new DrawingAirbus(rnd.Next(100, 300), rnd.Next(1000, 2000), color, dopColor,
Convert.ToBoolean(rnd.Next(0, 2)), Convert.ToBoolean(rnd.Next(0, 2)), formPorthole);
CountPorthole count_porthole = CountPorthole.Ten;
switch (comboBoxPortholeSer.Text)
{
case "10":
count_porthole = CountPorthole.Ten;
break;
case "20":
count_porthole = CountPorthole.Twenty;
break;
case "30":
count_porthole = CountPorthole.Thirty;
break;
}
airplane.Upd_count_Porthole(count_porthole);
SetData();
Draw();
}
private void buttonSelectAirplane_Click(object sender, EventArgs e)
{
SelectedAirplane = airplane;
DialogResult = DialogResult.OK;
}
}
}

View File

@ -0,0 +1,63 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,239 @@
namespace Airbus
{
partial class FormAirplaneWithParam
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.pictureBox = new System.Windows.Forms.PictureBox();
this.buttonCreate = new System.Windows.Forms.Button();
this.buttonUp = new System.Windows.Forms.Button();
this.buttonRight = new System.Windows.Forms.Button();
this.buttonLeft = new System.Windows.Forms.Button();
this.buttonDown = new System.Windows.Forms.Button();
this.buttonSelectAirplane = new System.Windows.Forms.Button();
this.comboBoxFormPorthole = new System.Windows.Forms.ComboBox();
this.numericSpeed = new System.Windows.Forms.NumericUpDown();
this.numericWieght = new System.Windows.Forms.NumericUpDown();
this.buttonAddEntity = new System.Windows.Forms.Button();
this.buttonAddPorthole = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericWieght)).BeginInit();
this.SuspendLayout();
//
// pictureBox
//
this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(800, 450);
this.pictureBox.TabIndex = 1;
this.pictureBox.TabStop = false;
//
// buttonCreate
//
this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonCreate.Location = new System.Drawing.Point(358, 12);
this.buttonCreate.Name = "buttonCreate";
this.buttonCreate.Size = new System.Drawing.Size(75, 23);
this.buttonCreate.TabIndex = 2;
this.buttonCreate.Text = "Создать";
this.buttonCreate.UseVisualStyleBackColor = true;
this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click);
//
// buttonUp
//
this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonUp.BackgroundImage = global::Airbus.Properties.Resources.v2;
this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonUp.Location = new System.Drawing.Point(719, 326);
this.buttonUp.Name = "buttonUp";
this.buttonUp.Size = new System.Drawing.Size(35, 35);
this.buttonUp.TabIndex = 3;
this.buttonUp.UseVisualStyleBackColor = true;
this.buttonUp.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::Airbus.Properties.Resources.v3;
this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonRight.Location = new System.Drawing.Point(753, 358);
this.buttonRight.Name = "buttonRight";
this.buttonRight.Size = new System.Drawing.Size(35, 35);
this.buttonRight.TabIndex = 4;
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::Airbus.Properties.Resources.v1;
this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonLeft.Location = new System.Drawing.Point(686, 358);
this.buttonLeft.Name = "buttonLeft";
this.buttonLeft.Size = new System.Drawing.Size(35, 35);
this.buttonLeft.TabIndex = 5;
this.buttonLeft.UseVisualStyleBackColor = true;
this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click);
//
// buttonDown
//
this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonDown.BackgroundImage = global::Airbus.Properties.Resources.v4;
this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonDown.Location = new System.Drawing.Point(719, 390);
this.buttonDown.Name = "buttonDown";
this.buttonDown.Size = new System.Drawing.Size(35, 35);
this.buttonDown.TabIndex = 6;
this.buttonDown.UseVisualStyleBackColor = true;
this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click);
//
// buttonSelectAirplane
//
this.buttonSelectAirplane.Location = new System.Drawing.Point(358, 415);
this.buttonSelectAirplane.Name = "buttonSelectAirplane";
this.buttonSelectAirplane.Size = new System.Drawing.Size(75, 23);
this.buttonSelectAirplane.TabIndex = 8;
this.buttonSelectAirplane.Text = "Выбрать";
this.buttonSelectAirplane.UseVisualStyleBackColor = true;
this.buttonSelectAirplane.Click += new System.EventHandler(this.buttonSelectAirplane_Click);
//
// comboBoxFormPorthole
//
this.comboBoxFormPorthole.FormattingEnabled = true;
this.comboBoxFormPorthole.Items.AddRange(new object[] {
"Обычные",
"Крадратные",
"Ромбом"});
this.comboBoxFormPorthole.Location = new System.Drawing.Point(667, 12);
this.comboBoxFormPorthole.Name = "comboBoxFormPorthole";
this.comboBoxFormPorthole.Size = new System.Drawing.Size(121, 23);
this.comboBoxFormPorthole.TabIndex = 11;
//
// numericSpeed
//
this.numericSpeed.Location = new System.Drawing.Point(12, 12);
this.numericSpeed.Maximum = new decimal(new int[] {
2000,
0,
0,
0});
this.numericSpeed.Minimum = new decimal(new int[] {
200,
0,
0,
0});
this.numericSpeed.Name = "numericSpeed";
this.numericSpeed.Size = new System.Drawing.Size(120, 23);
this.numericSpeed.TabIndex = 12;
this.numericSpeed.Value = new decimal(new int[] {
500,
0,
0,
0});
//
// numericWieght
//
this.numericWieght.Location = new System.Drawing.Point(12, 42);
this.numericWieght.Maximum = new decimal(new int[] {
1500,
0,
0,
0});
this.numericWieght.Minimum = new decimal(new int[] {
900,
0,
0,
0});
this.numericWieght.Name = "numericWieght";
this.numericWieght.Size = new System.Drawing.Size(120, 23);
this.numericWieght.TabIndex = 13;
this.numericWieght.Value = new decimal(new int[] {
900,
0,
0,
0});
//
// buttonAddEntity
//
this.buttonAddEntity.Location = new System.Drawing.Point(12, 71);
this.buttonAddEntity.Name = "buttonAddEntity";
this.buttonAddEntity.Size = new System.Drawing.Size(120, 46);
this.buttonAddEntity.TabIndex = 14;
this.buttonAddEntity.Text = "Добавить цвет и отправить";
this.buttonAddEntity.UseVisualStyleBackColor = true;
this.buttonAddEntity.Click += new System.EventHandler(this.buttonAddEntity_Click);
//
// buttonAddPorthole
//
this.buttonAddPorthole.Location = new System.Drawing.Point(668, 55);
this.buttonAddPorthole.Name = "buttonAddPorthole";
this.buttonAddPorthole.Size = new System.Drawing.Size(120, 62);
this.buttonAddPorthole.TabIndex = 15;
this.buttonAddPorthole.Text = "Добавить форму иллюминаторов и отправить";
this.buttonAddPorthole.UseVisualStyleBackColor = true;
this.buttonAddPorthole.Click += new System.EventHandler(this.buttonAddPorthole_Click);
//
// FormAirplaneWithParam
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonAddPorthole);
this.Controls.Add(this.buttonAddEntity);
this.Controls.Add(this.numericWieght);
this.Controls.Add(this.numericSpeed);
this.Controls.Add(this.comboBoxFormPorthole);
this.Controls.Add(this.buttonSelectAirplane);
this.Controls.Add(this.buttonDown);
this.Controls.Add(this.buttonLeft);
this.Controls.Add(this.buttonRight);
this.Controls.Add(this.buttonUp);
this.Controls.Add(this.buttonCreate);
this.Controls.Add(this.pictureBox);
this.Name = "FormAirplaneWithParam";
this.Text = "Airbus";
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericWieght)).EndInit();
this.ResumeLayout(false);
}
#endregion
private PictureBox pictureBox;
private Button buttonCreate;
private Button buttonUp;
private Button buttonRight;
private Button buttonLeft;
private Button buttonDown;
private Button buttonSelectAirplane;
private ComboBox comboBoxFormPorthole;
private NumericUpDown numericSpeed;
private NumericUpDown numericWieght;
private Button buttonAddEntity;
private Button buttonAddPorthole;
}
}

View File

@ -0,0 +1,122 @@
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 Airbus
{
public partial class FormAirplaneWithParam : Form
{
private DrawningAirplane airplane;
public DrawningAirplane SelectedAirplane { get; private set; }
private SetRandomPieceAirplane<EntityAirplane, IPorthole> allPieceAirplane;
public FormAirplaneWithParam()
{
allPieceAirplane = new(100, 100);
InitializeComponent();
}
private void Draw()
{
Bitmap bmp = new(pictureBox.Width, pictureBox.Height);
Graphics g = Graphics.FromImage(bmp);
airplane.DrawTransport(g);
pictureBox.Image = bmp;
}
private void SetData()
{
Random random = new Random();
airplane.SetPosition(random.Next(300, 400), random.Next(200, 300), pictureBox.Width, pictureBox.Height);
airplane.Upd_count_Porthole(count_porthole);
}
private void buttonCreate_Click(object sender, EventArgs e)
{
airplane = allPieceAirplane.Generate();
if (airplane == null)
{
MessageBox.Show("Не удалось сгенерировать самолет. Добавьте свойства для генерации"
, "Генерация самолета");
return;
}
airplane.Upd_count_Porthole(count_porthole);
SetData();
Draw();
}
private void ButtonMove_Click(object sender, EventArgs e)
{
string name = ((Button)sender)?.Name ?? string.Empty;
switch (name)
{
case "buttonLeft":
Console.WriteLine("");
airplane?.MoveTransport(Direction.Left);
break;
case "buttonUp":
airplane?.MoveTransport(Direction.Up);
break;
case "buttonRight":
airplane?.MoveTransport(Direction.Right);
break;
case "buttonDown":
airplane?.MoveTransport(Direction.Down);
break;
}
Draw();
}
CountPorthole count_porthole = CountPorthole.Ten;
private void PictureBox_Resize(object sender, EventArgs e)
{
airplane?.ChangeBorders(pictureBox.Width, pictureBox.Height);
Draw();
}
private void buttonSelectAirplane_Click(object sender, EventArgs e)
{
SelectedAirplane = airplane;
DialogResult = DialogResult.OK;
}
private void buttonAddEntity_Click(object sender, EventArgs e)
{
Random rnd = new();
Color colorBody = Color.FromArgb(rnd.Next() % 256, rnd.Next() % 256, rnd.Next() % 256);
ColorDialog dialog = new();
if (dialog.ShowDialog() == DialogResult.OK)
{
colorBody = dialog.Color;
}
var entity = new EntityAirplane((int)numericSpeed.Value, (int)numericWieght.Value, colorBody);
allPieceAirplane.AddPiece(entity);
MessageBox.Show($"Добавлены свойства самолета:\n" +
$"Вес: {entity.Weight}\n" +
$"Скорость: {entity.Speed}\n" +
$"Цвет: {colorBody.Name}",
"Успешно добавлены свойства");
}
private void buttonAddPorthole_Click(object sender, EventArgs e)
{
IPorthole formPorthole = new DrawningPorthole();
string formname = "";
switch (comboBoxFormPorthole.Text)
{
case "Обычные":
formPorthole = new DrawningPorthole();
break;
case "Крадратные":
formPorthole = new DrawingSquarePorthole();
break;
case "Ромбом":
formPorthole = new DrawingRhombPorthole();
break;
}
allPieceAirplane.AddPiece(formPorthole);
MessageBox.Show($"Добавлена выбранная форма иллюминаторов");
}
}
}

View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,303 @@
namespace Airbus
{
partial class FormMapWithSetAirplane
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBoxTools = new System.Windows.Forms.GroupBox();
this.groupBoxMaps = new System.Windows.Forms.GroupBox();
this.listBoxMaps = new System.Windows.Forms.ListBox();
this.buttonDelMap = new System.Windows.Forms.Button();
this.buttonAddMap = new System.Windows.Forms.Button();
this.textBoxNewMapName = new System.Windows.Forms.TextBox();
this.comboBoxSelectorMap = new System.Windows.Forms.ComboBox();
this.buttonAddAirplaneWithPar = new System.Windows.Forms.Button();
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.buttonShowOnMap = new System.Windows.Forms.Button();
this.buttonStorage = new System.Windows.Forms.Button();
this.buttonRemoveAirplane = new System.Windows.Forms.Button();
this.maskedTextBoxPosition = new System.Windows.Forms.MaskedTextBox();
this.buttonAddAirplane = new System.Windows.Forms.Button();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.buttonRemoveFromTrashcan = new System.Windows.Forms.Button();
this.groupBoxTools.SuspendLayout();
this.groupBoxMaps.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.SuspendLayout();
//
// groupBoxTools
//
this.groupBoxTools.Controls.Add(this.buttonRemoveFromTrashcan);
this.groupBoxTools.Controls.Add(this.groupBoxMaps);
this.groupBoxTools.Controls.Add(this.buttonAddAirplaneWithPar);
this.groupBoxTools.Controls.Add(this.buttonDown);
this.groupBoxTools.Controls.Add(this.buttonRight);
this.groupBoxTools.Controls.Add(this.buttonLeft);
this.groupBoxTools.Controls.Add(this.buttonUp);
this.groupBoxTools.Controls.Add(this.buttonShowOnMap);
this.groupBoxTools.Controls.Add(this.buttonStorage);
this.groupBoxTools.Controls.Add(this.buttonRemoveAirplane);
this.groupBoxTools.Controls.Add(this.maskedTextBoxPosition);
this.groupBoxTools.Controls.Add(this.buttonAddAirplane);
this.groupBoxTools.Dock = System.Windows.Forms.DockStyle.Right;
this.groupBoxTools.Location = new System.Drawing.Point(631, 0);
this.groupBoxTools.Name = "groupBoxTools";
this.groupBoxTools.Size = new System.Drawing.Size(200, 593);
this.groupBoxTools.TabIndex = 0;
this.groupBoxTools.TabStop = false;
this.groupBoxTools.Text = "Инструменты";
//
// groupBoxMaps
//
this.groupBoxMaps.Controls.Add(this.listBoxMaps);
this.groupBoxMaps.Controls.Add(this.buttonDelMap);
this.groupBoxMaps.Controls.Add(this.buttonAddMap);
this.groupBoxMaps.Controls.Add(this.textBoxNewMapName);
this.groupBoxMaps.Controls.Add(this.comboBoxSelectorMap);
this.groupBoxMaps.Location = new System.Drawing.Point(6, 22);
this.groupBoxMaps.Name = "groupBoxMaps";
this.groupBoxMaps.Size = new System.Drawing.Size(188, 211);
this.groupBoxMaps.TabIndex = 10;
this.groupBoxMaps.TabStop = false;
this.groupBoxMaps.Text = "Карты";
//
// listBoxMaps
//
this.listBoxMaps.FormattingEnabled = true;
this.listBoxMaps.ItemHeight = 15;
this.listBoxMaps.Location = new System.Drawing.Point(6, 105);
this.listBoxMaps.Name = "listBoxMaps";
this.listBoxMaps.Size = new System.Drawing.Size(170, 64);
this.listBoxMaps.TabIndex = 4;
this.listBoxMaps.SelectedIndexChanged += new System.EventHandler(this.listBoxMaps_SelectedIndexChanged);
//
// buttonDelMap
//
this.buttonDelMap.Location = new System.Drawing.Point(43, 175);
this.buttonDelMap.Name = "buttonDelMap";
this.buttonDelMap.Size = new System.Drawing.Size(106, 23);
this.buttonDelMap.TabIndex = 3;
this.buttonDelMap.Text = "Удалить карту";
this.buttonDelMap.UseVisualStyleBackColor = true;
this.buttonDelMap.Click += new System.EventHandler(this.buttonDelMap_Click);
//
// buttonAddMap
//
this.buttonAddMap.Location = new System.Drawing.Point(6, 76);
this.buttonAddMap.Name = "buttonAddMap";
this.buttonAddMap.Size = new System.Drawing.Size(170, 23);
this.buttonAddMap.TabIndex = 2;
this.buttonAddMap.Text = "добавить карту";
this.buttonAddMap.UseVisualStyleBackColor = true;
this.buttonAddMap.Click += new System.EventHandler(this.buttonAddMap_Click);
//
// textBoxNewMapName
//
this.textBoxNewMapName.Location = new System.Drawing.Point(6, 18);
this.textBoxNewMapName.Name = "textBoxNewMapName";
this.textBoxNewMapName.Size = new System.Drawing.Size(170, 23);
this.textBoxNewMapName.TabIndex = 1;
//
// comboBoxSelectorMap
//
this.comboBoxSelectorMap.FormattingEnabled = true;
this.comboBoxSelectorMap.Items.AddRange(new object[] {
"Первая карта",
"Вторая карта",
"Третья карта"});
this.comboBoxSelectorMap.Location = new System.Drawing.Point(6, 47);
this.comboBoxSelectorMap.Name = "comboBoxSelectorMap";
this.comboBoxSelectorMap.Size = new System.Drawing.Size(170, 23);
this.comboBoxSelectorMap.TabIndex = 0;
//
// buttonAddAirplaneWithPar
//
this.buttonAddAirplaneWithPar.Location = new System.Drawing.Point(6, 238);
this.buttonAddAirplaneWithPar.Name = "buttonAddAirplaneWithPar";
this.buttonAddAirplaneWithPar.Size = new System.Drawing.Size(182, 39);
this.buttonAddAirplaneWithPar.TabIndex = 10;
this.buttonAddAirplaneWithPar.Text = "Добавить самолёт с помощью парам";
this.buttonAddAirplaneWithPar.UseVisualStyleBackColor = true;
this.buttonAddAirplaneWithPar.Click += new System.EventHandler(this.buttonAddAirplaneWithPar_Click);
//
// buttonDown
//
this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonDown.BackgroundImage = global::Airbus.Properties.Resources.v4;
this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonDown.Location = new System.Drawing.Point(80, 523);
this.buttonDown.Name = "buttonDown";
this.buttonDown.Size = new System.Drawing.Size(35, 35);
this.buttonDown.TabIndex = 9;
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::Airbus.Properties.Resources.v3;
this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonRight.Location = new System.Drawing.Point(112, 491);
this.buttonRight.Name = "buttonRight";
this.buttonRight.Size = new System.Drawing.Size(35, 35);
this.buttonRight.TabIndex = 8;
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::Airbus.Properties.Resources.v1;
this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonLeft.Location = new System.Drawing.Point(49, 491);
this.buttonLeft.Name = "buttonLeft";
this.buttonLeft.Size = new System.Drawing.Size(35, 35);
this.buttonLeft.TabIndex = 7;
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::Airbus.Properties.Resources.v2;
this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.buttonUp.Location = new System.Drawing.Point(80, 459);
this.buttonUp.Name = "buttonUp";
this.buttonUp.Size = new System.Drawing.Size(35, 35);
this.buttonUp.TabIndex = 6;
this.buttonUp.UseVisualStyleBackColor = true;
this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click);
//
// buttonShowOnMap
//
this.buttonShowOnMap.Location = new System.Drawing.Point(60, 399);
this.buttonShowOnMap.Name = "buttonShowOnMap";
this.buttonShowOnMap.Size = new System.Drawing.Size(75, 23);
this.buttonShowOnMap.TabIndex = 5;
this.buttonShowOnMap.Text = "карта";
this.buttonShowOnMap.UseVisualStyleBackColor = true;
this.buttonShowOnMap.Click += new System.EventHandler(this.buttonShowOnMap_Click);
//
// buttonStorage
//
this.buttonStorage.Location = new System.Drawing.Point(6, 428);
this.buttonStorage.Name = "buttonStorage";
this.buttonStorage.Size = new System.Drawing.Size(188, 23);
this.buttonStorage.TabIndex = 4;
this.buttonStorage.Text = "Хранилище";
this.buttonStorage.UseVisualStyleBackColor = true;
this.buttonStorage.Click += new System.EventHandler(this.buttonStorage_Click);
//
// buttonRemoveAirplane
//
this.buttonRemoveAirplane.Location = new System.Drawing.Point(6, 341);
this.buttonRemoveAirplane.Name = "buttonRemoveAirplane";
this.buttonRemoveAirplane.Size = new System.Drawing.Size(182, 23);
this.buttonRemoveAirplane.TabIndex = 3;
this.buttonRemoveAirplane.Text = "Удалить";
this.buttonRemoveAirplane.UseVisualStyleBackColor = true;
this.buttonRemoveAirplane.Click += new System.EventHandler(this.buttonRemoveAirplane_Click);
//
// maskedTextBoxPosition
//
this.maskedTextBoxPosition.Location = new System.Drawing.Point(6, 312);
this.maskedTextBoxPosition.Mask = "00";
this.maskedTextBoxPosition.Name = "maskedTextBoxPosition";
this.maskedTextBoxPosition.Size = new System.Drawing.Size(182, 23);
this.maskedTextBoxPosition.TabIndex = 2;
//
// buttonAddAirplane
//
this.buttonAddAirplane.Location = new System.Drawing.Point(6, 283);
this.buttonAddAirplane.Name = "buttonAddAirplane";
this.buttonAddAirplane.Size = new System.Drawing.Size(182, 23);
this.buttonAddAirplane.TabIndex = 1;
this.buttonAddAirplane.Text = "Добавить Самолёт";
this.buttonAddAirplane.UseVisualStyleBackColor = true;
this.buttonAddAirplane.Click += new System.EventHandler(this.buttonAddAirplane_Click);
//
// pictureBox
//
this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(631, 593);
this.pictureBox.TabIndex = 1;
this.pictureBox.TabStop = false;
//
// buttonRemoveFromTrashcan
//
this.buttonRemoveFromTrashcan.Location = new System.Drawing.Point(6, 370);
this.buttonRemoveFromTrashcan.Name = "buttonRemoveFromTrashcan";
this.buttonRemoveFromTrashcan.Size = new System.Drawing.Size(182, 23);
this.buttonRemoveFromTrashcan.TabIndex = 11;
this.buttonRemoveFromTrashcan.Text = "Вернуть с корзины";
this.buttonRemoveFromTrashcan.UseVisualStyleBackColor = true;
this.buttonRemoveFromTrashcan.Click += new System.EventHandler(this.buttonRemoveFromTrashcan_Click);
//
// FormMapWithSetAirplane
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(831, 593);
this.Controls.Add(this.pictureBox);
this.Controls.Add(this.groupBoxTools);
this.Name = "FormMapWithSetAirplane";
this.Text = "FormMapWithSetAirplane";
this.groupBoxTools.ResumeLayout(false);
this.groupBoxTools.PerformLayout();
this.groupBoxMaps.ResumeLayout(false);
this.groupBoxMaps.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.ResumeLayout(false);
}
#endregion
private GroupBox groupBoxTools;
private Button buttonShowOnMap;
private Button buttonStorage;
private Button buttonRemoveAirplane;
private MaskedTextBox maskedTextBoxPosition;
private Button buttonAddAirplane;
private ComboBox comboBoxSelectorMap;
private PictureBox pictureBox;
private Button buttonUp;
private Button buttonLeft;
private Button buttonRight;
private Button buttonDown;
private Button buttonAddAirplaneWithPar;
private GroupBox groupBoxMaps;
private ListBox listBoxMaps;
private Button buttonDelMap;
private Button buttonAddMap;
private TextBox textBoxNewMapName;
private Button buttonRemoveFromTrashcan;
}
}

View File

@ -0,0 +1,265 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.DataFormats;
namespace Airbus
{
public partial class FormMapWithSetAirplane : Form
{
private readonly Dictionary<string, AbstractMap> _mapsDict = new()
{
{ "Простая карта", new SimpleMap() }, { "Вторая карта", new SecondMap() },{ "Третья карта", new ThirdMap() }
};
/// <summary>
/// Объект от коллекции карт
/// </summary>
private readonly MapsCollection _mapsCollection;
private LinkedList<DrawningObjectAirplane> trashcan;
/// <summary>
/// Конструктор
/// </summary>
public FormMapWithSetAirplane()
{
InitializeComponent();
_mapsCollection = new MapsCollection(pictureBox.Width, pictureBox.Height);
comboBoxSelectorMap.Items.Clear();
trashcan = new();
foreach (var elem in _mapsDict)
{
comboBoxSelectorMap.Items.Add(elem.Key);
}
}
/// <summary>
/// Выбор карты
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReloadMaps()
{
int index = listBoxMaps.SelectedIndex;
listBoxMaps.Items.Clear();
for (int i = 0; i < _mapsCollection.Keys.Count; i++)
{
listBoxMaps.Items.Add(_mapsCollection.Keys[i]);
}
if (listBoxMaps.Items.Count > 0 && (index == -1 || index >= listBoxMaps.Items.Count))
{
listBoxMaps.SelectedIndex = 0;
}
else if (listBoxMaps.Items.Count > 0 && index > -1 && index <
listBoxMaps.Items.Count)
{
listBoxMaps.SelectedIndex = index;
}
}
private void buttonAddMap_Click(object sender, EventArgs e)
{
if (comboBoxSelectorMap.SelectedIndex == -1 ||
string.IsNullOrEmpty(textBoxNewMapName.Text))
{
MessageBox.Show("Не все данные заполнены", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (!_mapsDict.ContainsKey(comboBoxSelectorMap.Text))
{
MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
_mapsCollection.AddMap(textBoxNewMapName.Text,
_mapsDict[comboBoxSelectorMap.Text]);
ReloadMaps();
}
private void listBoxMaps_SelectedIndexChanged(object sender, EventArgs e)
{
pictureBox.Image =
_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
private void buttonDelMap_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
if (MessageBox.Show($"Удалить карту {listBoxMaps.SelectedItem}?",
"Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
_mapsCollection.DelMap(listBoxMaps.SelectedItem?.ToString() ??
string.Empty);
ReloadMaps();
}
}
/// <summary>
/// Добавление объекта
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonAddAirplane_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
FormAirplane form = new();
if (form.ShowDialog() == DialogResult.OK)
{
DrawningObjectAirplane airplane = new(form.SelectedAirplane);
if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + airplane > -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
MessageBox.Show("Не удалось добавить объект");
}
}
}
/// <summary>
/// Удаление объекта
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonRemoveAirplane_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
if (string.IsNullOrEmpty(maskedTextBoxPosition.Text))
{
return;
}
if (MessageBox.Show("Удалить объект?", "Удаление",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
var delObject = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty, pos];
if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null)
{
trashcan.AddLast(delObject);
MessageBox.Show("Объект удален");
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
MessageBox.Show("Не удалось удалить объект");
}
}
/// <summary>
/// Вывод набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonStorage_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
/// <summary>
/// Вывод карты
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonShowOnMap_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowOnMap();
}
/// <summary>
/// Перемещение
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonMove_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
//получаем имя кнопки
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;
}
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].MoveObject(dir);
}
private void buttonAddAirplaneWithPar_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1)
{
return;
}
FormAirplaneWithParam form = new();
if (form.ShowDialog() == DialogResult.OK)
{
DrawningObjectAirplane airplane = new(form.SelectedAirplane);
if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + airplane > -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
MessageBox.Show("Не удалось добавить объект");
}
}
}
private void buttonRemoveFromTrashcan_Click(object sender, EventArgs e)
{
if (listBoxMaps.SelectedIndex == -1 || trashcan.Count == 0)
{
return;
}
FormAirplane form = new((DrawningAirplane)trashcan.First());
trashcan.RemoveFirst();
if (form.ShowDialog() == DialogResult.OK)
{
DrawningObjectAirplane airplane = new(form.SelectedAirplane);
if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + airplane > -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
MessageBox.Show("Не удалось добавить объект");
}
}
}
}
}

View File

@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal interface IDrawningObject
{
public float Step { get; }
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();
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
public interface IPorthole
{
int CountPorthole { get; set; }
public void DrawPortholes(Graphics g, Color color, float posX, float posY);
}
}

View File

@ -0,0 +1,185 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class MapWithSetAirplaneGeneric<T, U>
where T : class, IDrawningObject
where U : AbstractMap
{
/// <summary>
/// Ширина окна отрисовки
/// </summary>
private readonly int _pictureWidth;
/// <summary>
/// Высота окна отрисовки
/// </summary>
private readonly int _pictureHeight;
/// <summary>
/// Размер занимаемого объектом места (ширина)
/// </summary>
private readonly int _placeSizeWidth = 300;
/// <summary>
/// Размер занимаемого объектом места (высота)
/// </summary>
private readonly int _placeSizeHeight = 70;
/// <summary>
/// Набор объектов
/// </summary>
public SetAirplaneGeneric<T> _setAirplane { get; private set; }
/// <summary>
/// Карта
/// </summary>
private readonly U _map;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="picWidth"></param>
/// <param name="picHeight"></param>
/// <param name="map"></param>
public MapWithSetAirplaneGeneric(int picWidth, int picHeight, U map)
{
int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight;
_setAirplane = new SetAirplaneGeneric<T>(width * height);
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_map = map;
}
/// <summary>
/// Перегрузка оператора сложения
/// </summary>
/// <param name="map"></param>
/// <param name="car"></param>
/// <returns></returns>
public static int operator +(MapWithSetAirplaneGeneric<T, U> map, T airplane)
{
return map._setAirplane.Insert(airplane);
}
/// <summary>
/// Перегрузка оператора вычитания
/// </summary>
/// <param name="map"></param>
/// <param name="position"></param>
/// <returns></returns>
public static T operator -(MapWithSetAirplaneGeneric<T, U> map, int
position)
{
return map._setAirplane.Remove(position);
}
/// <summary>
/// Вывод всего набора объектов
/// </summary>
/// <returns></returns>
public Bitmap ShowSet()
{
Bitmap bmp = new(_pictureWidth, _pictureHeight);
Graphics gr = Graphics.FromImage(bmp);
DrawBackground(gr);
DrawAirplanes(gr);
return bmp;
}
/// <summary>
/// Просмотр объекта на карте
/// </summary>
/// <returns></returns>
public Bitmap ShowOnMap()
{
Shaking();
for (int i = 0; i < _setAirplane.Count; i++)
{
var airplane = _setAirplane[i];
if (airplane != null)
{
return _map.CreateMap(_pictureWidth, _pictureHeight, airplane);
}
}
return new(_pictureWidth, _pictureHeight);
}
/// <summary>
/// Перемещение объекта по крате
/// </summary>
/// <param name="direction"></param>
/// <returns></returns>
public Bitmap MoveObject(Direction direction)
{
if (_map != null)
{
return _map.MoveObject(direction);
}
return new(_pictureWidth, _pictureHeight);
}
/// <summary>
/// "Взбалтываем" набор, чтобы все элементы оказались в начале
/// </summary>
private void Shaking()
{
int j = _setAirplane.Count - 1;
for (int i = 0; i < _setAirplane.Count; i++)
{
if (_setAirplane[i] == null)
{
for (; j > i; j--)
{
var airplane = _setAirplane[j];
if (airplane != null)
{
_setAirplane.Insert(airplane, i);
_setAirplane.Remove(j);
break;
}
}
if (j <= i)
{
return;
}
}
}
}
/// <summary>
/// Метод отрисовки фона
/// </summary>
/// <param name="g"></param>
private void DrawBackground(Graphics g)
{
Pen pen = new(Color.Black, 3);
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
{
for (int j = 1; j < _pictureHeight / _placeSizeHeight + 1; ++j)
{
pen = new(Color.Black, 3);
g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 15, j * _placeSizeHeight, i * _placeSizeWidth + _placeSizeWidth / 2 + 20, j * _placeSizeHeight - 30);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 20, j * _placeSizeHeight - 30, i * _placeSizeWidth + _placeSizeWidth / 2 + 30, j * _placeSizeHeight - 30);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 30, j * _placeSizeHeight - 30, i * _placeSizeWidth + _placeSizeWidth / 2 + 35, j * _placeSizeHeight );
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 15, j * _placeSizeHeight - 45, i * _placeSizeWidth + _placeSizeWidth / 2 + 35, j * _placeSizeHeight - 45);
pen = new(Color.Blue, 1);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 30, j * _placeSizeHeight - 30, i * _placeSizeWidth + _placeSizeWidth / 2 + 45, j * _placeSizeHeight - 40);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 45, j * _placeSizeHeight - 40, i * _placeSizeWidth + _placeSizeWidth / 2 + 35, j * _placeSizeHeight - 45);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 20, j * _placeSizeHeight - 30, i * _placeSizeWidth + _placeSizeWidth / 2 + 5, j * _placeSizeHeight - 40);
g.DrawLine(pen, i * _placeSizeWidth + _placeSizeWidth / 2 + 5, j * _placeSizeHeight - 40, i * _placeSizeWidth + _placeSizeWidth / 2 + 15, j * _placeSizeHeight - 45);
}
}
}
/// <summary>
/// Метод прорисовки объектов
/// </summary>
/// <param name="g"></param>
private void DrawAirplanes(Graphics g)
{
int countInLine = _pictureWidth / _placeSizeWidth;
int maxLeft = (countInLine - 1) * _placeSizeWidth;
for (int i = 0; i < _setAirplane.Count; i++)
{
_setAirplane[i]?.SetObject(maxLeft - i % countInLine * _placeSizeWidth, (_pictureHeight - (i / 2 * _placeSizeHeight + _placeSizeHeight + 30)), _pictureWidth, _placeSizeHeight);
_setAirplane[i]?.DrawningObject(g);
}
}
}
}

View File

@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class MapsCollection
{
readonly Dictionary<string, MapWithSetAirplaneGeneric<DrawningObjectAirplane, AbstractMap>> _mapStorages;
/// <summary>
/// Возвращение списка названий карт
/// </summary>
public List<string> Keys => _mapStorages.Keys.ToList();
/// <summary>
/// Ширина окна отрисовки
/// </summary>
private readonly int _pictureWidth;
/// <summary>
/// Высота окна отрисовки
/// </summary>
private readonly int _pictureHeight;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="pictureWidth"></param>
/// <param name="pictureHeight"></param>
public MapsCollection(int pictureWidth, int pictureHeight)
{
_mapStorages = new Dictionary<string, MapWithSetAirplaneGeneric<DrawningObjectAirplane, AbstractMap>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
/// <summary>
/// Добавление карты
/// </summary>
/// <param name="name">Название карты</param>
/// <param name="map">Карта</param>
public void AddMap(string name, AbstractMap map)
{
if (!_mapStorages.ContainsKey(name))
{
MapWithSetAirplaneGeneric<DrawningObjectAirplane, AbstractMap> Map = new(_pictureWidth, _pictureHeight, map);
_mapStorages.Add(name, Map);
}
}
/// <summary>
/// Удаление карты
/// </summary>
/// <param name="name">Название карты</param>
public void DelMap(string name)
{
if (_mapStorages.ContainsKey(name)) _mapStorages.Remove(name);
}
/// <summary>
/// Доступ к парковке
/// </summary>
/// <param name="ind"></param>
/// <returns></returns>
public MapWithSetAirplaneGeneric<DrawningObjectAirplane, AbstractMap> this[string ind]
{
get
{
if (_mapStorages.ContainsKey(ind))
return _mapStorages[ind];
return null;
}
}
public DrawningObjectAirplane this[string ind, int indDrawningObject]
{
get
{
_mapStorages.TryGetValue(ind, out var returnAirplane);
return returnAirplane?._setAirplane[indDrawningObject];
}
}
}
}

17
Airbus/Airbus/Program.cs Normal file
View File

@ -0,0 +1,17 @@
namespace Airbus
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new FormMapWithSetAirplane());
}
}
}

View File

@ -0,0 +1,143 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Airbus.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом 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() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[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("Airbus.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap down {
get {
object obj = ResourceManager.GetObject("down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap left {
get {
object obj = ResourceManager.GetObject("left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap right {
get {
object obj = ResourceManager.GetObject("right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap up {
get {
object obj = ResourceManager.GetObject("up", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap v1 {
get {
object obj = ResourceManager.GetObject("v1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap v2 {
get {
object obj = ResourceManager.GetObject("v2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap v3 {
get {
object obj = ResourceManager.GetObject("v3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap v4 {
get {
object obj = ResourceManager.GetObject("v4", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="v4" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\v4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="v2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\v2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="v1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\v1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="v3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\v3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class SecondMap : AbstractMap
{
private readonly Brush barrierColor = new SolidBrush(Color.Black);
private readonly Brush roadColor = new SolidBrush(Color.Blue);
protected override void DrawBarrierPart(Graphics g, int i, int j)
{
g.FillRectangle(barrierColor, j * _size_x, i * _size_y, _size_x, _size_y);
}
protected override void DrawRoadPart(Graphics g, int i, int j)
{
g.FillRectangle(roadColor, j * _size_x, i * _size_y, _size_x, _size_y);
}
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;
}
}
for (int i = 40; i < _map.GetLength(0); ++i)
{
_map[i, _map.GetLength(1) / 2] = _barrier;
_map[i, _map.GetLength(1) - 1] = _barrier;
}
for (int j = 0; j < _map.GetLength(1); ++j)
{
_map[_map.GetLength(0) - 1, j] = _barrier;
}
while (counter < 45)
{
int x = _random.Next(0, 100);
int y = _random.Next(0, 100);
if (_map[x, y] == _freeRoad)
{
_map[x, y] = _barrier;
counter++;
}
}
}
}
}

View File

@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class SetAirplaneGeneric<T>
where T : class
{
private readonly List<T> _places;
public int Count => _places.Count;
private readonly int _maxCount;
public SetAirplaneGeneric(int count)
{
_maxCount = count;
_places = new List<T>();
}
public int Insert(T airplane)
{
return Insert(airplane, 0);
}
public int Insert(T airplane, int position)
{
if (position < 0 || position > _places.Count) return -1;
_places.Insert(position, airplane);
return position;
}
/// <summary>
/// Удаление объекта из набора с конкретной позиции
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public T Remove(int position)
{
if (0 > position && position >= Count)
return null;
T delobj = _places[position];
_places[position] = null;
return delobj;
}
/// <summary>
/// Получение объекта из набора по позиции
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public T this[int position]
{
get
{
if (position <= Count || position >= 0)
{
return _places[position];
}
else return null;
}
set
{
Insert(value, position);
}
}
public IEnumerable<T> GetAirplanes()
{
foreach (var airplane in _places)
{
if (airplane != null)
{
yield return airplane;
}
else
{
yield break;
}
}
}
}
}

View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class SetRandomPieceAirplane<T, U>
where T : EntityAirplane
where U : class, IPorthole
{
private readonly T[] typeEntity;
private readonly U[] typePortholes;
public int NumTypefEntity { get; private set; }
public int NumTypePorthole { get; private set; }
public SetRandomPieceAirplane(int countTypeEntity, int countTypePortholes)
{
typeEntity = new T[countTypeEntity];
typePortholes = new U[countTypePortholes];
}
public bool AddPiece(U type)
{
if (NumTypePorthole >= typePortholes.Length)
{
return false;
}
typePortholes[NumTypePorthole++] = type;
return true;
}
public bool AddPiece(T type)
{
if (NumTypefEntity >= typePortholes.Length)
{
return false;
}
typeEntity[NumTypefEntity++] = type;
return true;
}
public DrawningAirplane? Generate()
{
if (NumTypefEntity == 0 || NumTypePorthole == 0)
{
return null;
}
var rnd = new Random();
DrawningAirplane airplane = new DrawningAirplane(typeEntity[rnd.Next() % NumTypefEntity], typePortholes[rnd.Next() % NumTypePorthole]);
return airplane;
}
}
}

View File

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
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, j * _size_x, i * _size_y, _size_x, _size_y);
}
protected override void DrawRoadPart(Graphics g, int i, int j)
{
g.FillRectangle(roadColor, j * _size_x, i * _size_y, _size_x, _size_y);
}
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 < 50)
{
int x = _random.Next(0, 100);
int y = _random.Next(0, 100);
if (_map[x, y] == _freeRoad)
{
_map[x, y] = _barrier;
counter++;
}
}
}
}
}

57
Airbus/Airbus/ThirdMap.cs Normal file
View File

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
internal class ThirdMap : AbstractMap
{
private readonly Brush barrierColor = new SolidBrush(Color.Yellow);
private readonly Brush roadColor = new SolidBrush(Color.Purple);
protected override void DrawBarrierPart(Graphics g, int i, int j)
{
g.FillRectangle(barrierColor, j * _size_x, i * _size_y, _size_x, _size_y);
}
protected override void DrawRoadPart(Graphics g, int i, int j)
{
g.FillRectangle(roadColor, j * _size_x, i * _size_y, _size_x, _size_y);
}
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 < 10)
{
int x = _random.Next(0, 100);
int y = _random.Next(0, 100);
if (_map[x, y] == _freeRoad)
{
_map[x, y] = _barrier;
if (x > 0 && y > 0 && x < _map.GetLength(0) - 1 && y < _map.GetLength(1) - 1)
{
_map[x + 1, y] = _barrier;
_map[x - 1, y ] = _barrier;
}
counter++;
}
}
}
}
}