лаб.раб 2 (1 часть)

This commit is contained in:
Nikita 2025-02-13 16:51:00 +04:00
parent aa6f572492
commit 7d2726f5f7
7 changed files with 219 additions and 104 deletions

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace ProjectCatamaran; namespace ProjectCatamaran.Drawnings;
public enum DirectionType public enum DirectionType
{ {

View File

@ -0,0 +1,60 @@
using ProjectCatamaran.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCatamaran.Drawnings;
/// <summary>
/// класс отвечающиай за перемещение и отрисовку
/// </summary>
public class DrawningCatamaran : DrawningCatamaranBase
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес катера</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет(для опциональных элементов)</param>
/// <param name="floats">Признак (опция) наличие плавников</param>
/// <param name="sail">Признак (опция) наличие парус</param>
public DrawningCatamaran(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail) :
base(65,40)
{
EntityCatamaranBase = new EntityCatamaran(speed, weight, bodyColor, additionalColor, floats, sail);
}
public override void DrawTransport(Graphics g)
{
if (EntityCatamaranBase == null || EntityCatamaranBase is not EntityCatamaran catamaran || !_startPosX.HasValue || !_startPosY.HasValue)
{
return;
}
_startPosX += 5;
_startPosY += 15;
base.DrawTransport(g);
_startPosX -= 5;
_startPosY -= 15;
Brush brFloatsAndSail = new SolidBrush(catamaran.AdditionalColor);
//плавники
if (catamaran.Floats)
{
g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 10, 45, 5);
g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 35, 45, 5);
}
// парус
if (catamaran.Sail)
{
Point[] sailFigure =
{
new Point(_startPosX.Value + 25,_startPosY.Value + 25),
new Point(_startPosX.Value + 35 ,_startPosY.Value + 25),
new Point(_startPosX.Value + 25,_startPosY.Value),
};
g.FillPolygon(brFloatsAndSail, sailFigure);
}
}
}

View File

@ -1,20 +1,18 @@
using ProjectCatamaran; using ProjectCatamaran.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace ProjectCatamaran; namespace ProjectCatamaran.Drawnings;
/// <summary> public class DrawningCatamaranBase
/// класс отвечающиай за перемещение и отрисовку
/// </summary>
public class DrawningCatamaran
{ {
/// <summary> /// <summary>
/// класс-сущность /// класс-сущность
/// </summary> /// </summary>
public EntityCatamaran? EntityCatamaran { get; private set; } public EntityCatamaranBase? EntityCatamaranBase { get; protected set; }
/// <summary> /// <summary>
/// ширина окна /// ширина окна
/// </summary> /// </summary>
@ -26,39 +24,52 @@ public class DrawningCatamaran
/// <summary> /// <summary>
/// Левая координата прорисовки автопоезда /// Левая координата прорисовки автопоезда
/// </summary> /// </summary>
private int? _startPosX; protected int? _startPosX;
/// <summary> /// <summary>
/// Верхняя координата прорисовки автопоезда /// Верхняя координата прорисовки автопоезда
/// </summary> /// </summary>
private int? _startPosY; protected int? _startPosY;
/// <summary> /// <summary>
/// Ширина прорисовки катамарана /// Ширина прорисовки катамарана
/// </summary> /// </summary>
private readonly int _drawningCatamaranWidth = 65; private readonly int _drawningCatamaranWidth = 60;
/// <summary> /// <summary>
/// Высота прорисовки катамарана /// Высота прорисовки катамарана
/// </summary> /// </summary>
private readonly int _drawningCatamaranHeight = 40; private readonly int _drawningCatamaranHeight = 25;
/// <summary> /// <summary>
/// Инициализация полей обьекта-класса спортивного автомобиля /// пустой конструктор
/// </summary> /// </summary>
/// <param name="speed">Скорость</param> private DrawningCatamaranBase()
/// <param name="weight">Вес катера</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет(для опциональных элементов)</param>
/// <param name="floats">Признак (опция) наличие плавников</param>
/// <param name="brush">Признак (опция) наличие парус</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool brush)
{ {
EntityCatamaran = new EntityCatamaran();
EntityCatamaran.Init(speed, weight, bodyColor, additionalColor, floats, brush);
_pictureWidth = null; _pictureWidth = null;
_pictureHeight = null; _pictureHeight = null;
_startPosX = null; _startPosX = null;
_startPosY = null; _startPosY = null;
} }
/// <summary> /// <summary>
/// Конструктор
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес катера</param>
/// <param name="bodyColor">Основной цвет</param>
public DrawningCatamaranBase(int speed, double weight, Color bodyColor) : this()
{
EntityCatamaranBase = new EntityCatamaranBase(speed, weight, bodyColor);
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="drawningCatamaranWidth">Ширина катера</param>
/// <param name="drawningCatamaranHeight">высота катера</param>
public DrawningCatamaranBase(int drawningCatamaranWidth, int drawningCatamaranHeight) : this()
{
_drawningCatamaranWidth = drawningCatamaranWidth;
_drawningCatamaranHeight = drawningCatamaranHeight;
}
/// <summary>
/// установка границ поля /// установка границ поля
/// </summary> /// </summary>
/// <param name="width">ширина</param> /// <param name="width">ширина</param>
@ -101,34 +112,34 @@ public class DrawningCatamaran
/// <returns>true - перемещение выполнено , false - перемещение невозможно</returns> /// <returns>true - перемещение выполнено , false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction) public bool MoveTransport(DirectionType direction)
{ {
if (EntityCatamaran == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityCatamaranBase == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return false; return false;
} }
switch (direction) switch (direction)
{ {
case DirectionType.Left: case DirectionType.Left:
if (_startPosX.Value - EntityCatamaran.Step > 0) if (_startPosX.Value - EntityCatamaranBase.Step > 0)
{ {
_startPosX -= (int)EntityCatamaran.Step; _startPosX -= (int)EntityCatamaranBase.Step;
} }
return true; return true;
case DirectionType.Up: case DirectionType.Up:
if (_startPosY.Value - EntityCatamaran.Step > 0) if (_startPosY.Value - EntityCatamaranBase.Step > 0)
{ {
_startPosY -= (int)EntityCatamaran.Step; _startPosY -= (int)EntityCatamaranBase.Step;
} }
return true; return true;
case DirectionType.Right: case DirectionType.Right:
if (_startPosX.Value + (int)EntityCatamaran.Step + _drawningCatamaranWidth <= _pictureWidth) if (_startPosX.Value + (int)EntityCatamaranBase.Step + _drawningCatamaranWidth <= _pictureWidth)
{ {
_startPosX += (int)EntityCatamaran.Step; _startPosX += (int)EntityCatamaranBase.Step;
} }
return true; return true;
case DirectionType.Down: case DirectionType.Down:
if (_startPosY.Value + (int)EntityCatamaran.Step + _drawningCatamaranHeight <= _pictureHeight) if (_startPosY.Value + (int)EntityCatamaranBase.Step + _drawningCatamaranHeight <= _pictureHeight)
{ {
_startPosY += (int)EntityCatamaran.Step; _startPosY += (int)EntityCatamaranBase.Step;
} }
return true; return true;
default: default:
@ -139,42 +150,26 @@ public class DrawningCatamaran
/// отрисовка /// отрисовка
/// </summary> /// </summary>
/// <param name="g"></param> /// <param name="g"></param>
public void DrawTransport(Graphics g) public virtual void DrawTransport(Graphics g)
{ {
if (EntityCatamaran == null || !_startPosX.HasValue || !_startPosY.HasValue) if (EntityCatamaranBase == null || !_startPosX.HasValue || !_startPosY.HasValue)
{ {
return; return;
} }
Brush brBody = new SolidBrush(EntityCatamaran.BodyColor); Brush brBody = new SolidBrush(EntityCatamaranBase.BodyColor);
Brush brFloatsAndSail = new SolidBrush(EntityCatamaran.AdditionalColor);
g.FillRectangle(brBody, _startPosX.Value + 5, _startPosY.Value + 15, 40, 20); g.FillRectangle(brBody, _startPosX.Value, _startPosY.Value, 40, 20);
Point[] triangle = Point[] triangle =
{ {
new Point(_startPosX.Value + 45,_startPosY.Value + 15), new Point(_startPosX.Value + 40,_startPosY.Value),
new Point(_startPosX.Value + 65,_startPosY.Value + 25), new Point(_startPosX.Value + 60,_startPosY.Value + 10),
new Point(_startPosX.Value + 45,_startPosY.Value + 35), new Point(_startPosX.Value + 40,_startPosY.Value + 20),
}; };
g.FillPolygon(brBody, triangle); g.FillPolygon(brBody, triangle);
g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 12, _startPosY.Value + 19, 23, 10); g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 7, _startPosY.Value + 4, 23, 10);
//плавники
if (EntityCatamaran.Floats)
{
g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 10, 45, 5);
g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 35, 45, 5);
}
// парус
if (EntityCatamaran.Sail)
{
Point[] sailFigure =
{
new Point(_startPosX.Value + 25,_startPosY.Value + 25),
new Point(_startPosX.Value + 35 ,_startPosY.Value + 25),
new Point(_startPosX.Value + 25,_startPosY.Value),
};
g.FillPolygon(brFloatsAndSail, sailFigure);
}
}
}
} }

View File

@ -1,21 +1,9 @@
namespace ProjectCatamaran; namespace ProjectCatamaran.Entities;
/// <summary> /// <summary>
/// Класс-сущность "Авто поезд" /// Класс-сущность "Катамарана"
/// </summary> /// </summary>
public class EntityCatamaran public class EntityCatamaran : EntityCatamaranBase
{ {
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; set; }
/// <summary>
/// Вес авто
/// </summary>
public double Weight { get; set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary> /// <summary>
/// Дополнительный цвет(для опциональных элементов) /// Дополнительный цвет(для опциональных элементов)
/// </summary> /// </summary>
@ -29,10 +17,6 @@ public class EntityCatamaran
/// </summary> /// </summary>
public bool Sail { get; private set; } public bool Sail { get; private set; }
/// <summary> /// <summary>
/// Шаг перемещения
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
/// Инициализация полей обьекта-класса спортивного автомобиля /// Инициализация полей обьекта-класса спортивного автомобиля
/// </summary> /// </summary>
/// <param name="speed">Скорость</param> /// <param name="speed">Скорость</param>
@ -41,11 +25,9 @@ public class EntityCatamaran
/// <param name="additionalColor">Дополнительный цвет(для опциональных элементов)</param> /// <param name="additionalColor">Дополнительный цвет(для опциональных элементов)</param>
/// <param name="floats">Признак (опция) наличие плавников</param> /// <param name="floats">Признак (опция) наличие плавников</param>
/// <param name="sail">Признак (опция) наличие паруса</param> /// <param name="sail">Признак (опция) наличие паруса</param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail) public EntityCatamaran(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail)
: base(speed,weight,bodyColor)
{ {
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
Floats = floats; Floats = floats;
Sail = sail; Sail = sail;

View File

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCatamaran.Entities;
/// <summary>
/// класс-сущность "обычный катамаран"
/// </summary>
public class EntityCatamaranBase
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; set; }
/// <summary>
/// Вес авто
/// </summary>
public double Weight { get; set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Шаг перемещения
/// </summary>
public double Step => Speed * 100 / Weight;
/// <summary>
/// конструктор сущности
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес авто</param>
/// <param name="bodyColor">Основной цвет</param>
public EntityCatamaranBase(int speed, double weight, Color bodyColor)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
}
}

View File

@ -34,6 +34,7 @@
buttonRight = new Button(); buttonRight = new Button();
buttonLeft = new Button(); buttonLeft = new Button();
buttonDown = new Button(); buttonDown = new Button();
buttonCreateCatamaranBase = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxCatamaran).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxCatamaran).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -49,11 +50,11 @@
// buttonCreateCatamaran // buttonCreateCatamaran
// //
buttonCreateCatamaran.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonCreateCatamaran.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCreateCatamaran.Location = new Point(12, 406); buttonCreateCatamaran.Location = new Point(12, 402);
buttonCreateCatamaran.Name = "buttonCreateCatamaran"; buttonCreateCatamaran.Name = "buttonCreateCatamaran";
buttonCreateCatamaran.Size = new Size(75, 23); buttonCreateCatamaran.Size = new Size(166, 40);
buttonCreateCatamaran.TabIndex = 1; buttonCreateCatamaran.TabIndex = 1;
buttonCreateCatamaran.Text = "Создать"; buttonCreateCatamaran.Text = "Создать катамаран";
buttonCreateCatamaran.UseVisualStyleBackColor = true; buttonCreateCatamaran.UseVisualStyleBackColor = true;
buttonCreateCatamaran.Click += ButtonCreateCatamaran_Click; buttonCreateCatamaran.Click += ButtonCreateCatamaran_Click;
// //
@ -105,11 +106,23 @@
buttonDown.UseVisualStyleBackColor = true; buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += ButtonMove_Click; buttonDown.Click += ButtonMove_Click;
// //
// buttonCreateCatamaranBase
//
buttonCreateCatamaranBase.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCreateCatamaranBase.Location = new Point(184, 402);
buttonCreateCatamaranBase.Name = "buttonCreateCatamaranBase";
buttonCreateCatamaranBase.Size = new Size(166, 40);
buttonCreateCatamaranBase.TabIndex = 6;
buttonCreateCatamaranBase.Text = "Создать базовый катамаран";
buttonCreateCatamaranBase.UseVisualStyleBackColor = true;
buttonCreateCatamaranBase.Click += ButtonCreateCatamaranBase_Click;
//
// FormCatamaran // FormCatamaran
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450); ClientSize = new Size(800, 450);
Controls.Add(buttonCreateCatamaranBase);
Controls.Add(buttonDown); Controls.Add(buttonDown);
Controls.Add(buttonLeft); Controls.Add(buttonLeft);
Controls.Add(buttonRight); Controls.Add(buttonRight);
@ -130,5 +143,6 @@
private Button buttonRight; private Button buttonRight;
private Button buttonLeft; private Button buttonLeft;
private Button buttonDown; private Button buttonDown;
private Button buttonCreateCatamaranBase;
} }
} }

View File

@ -1,8 +1,9 @@
using ProjectCatamaran; using ProjectCatamaran.Drawnings;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -13,7 +14,7 @@ namespace ProjectCatamaran
{ {
public partial class FormCatamaran : Form public partial class FormCatamaran : Form
{ {
private DrawningCatamaran? _drawningCatamaran; private DrawningCatamaranBase? _drawningCatamaranBase;
public FormCatamaran() public FormCatamaran()
{ {
InitializeComponent(); InitializeComponent();
@ -21,19 +22,19 @@ namespace ProjectCatamaran
private void Draw() private void Draw()
{ {
if (_drawningCatamaran == null) if (_drawningCatamaranBase == null)
{ {
return; return;
} }
Bitmap bmp = new(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height); Bitmap bmp = new(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
_drawningCatamaran.DrawTransport(gr); _drawningCatamaranBase.DrawTransport(gr);
pictureBoxCatamaran.Image = bmp; pictureBoxCatamaran.Image = bmp;
} }
private void ButtonMove_Click(object sender, EventArgs e) private void ButtonMove_Click(object sender, EventArgs e)
{ {
if (_drawningCatamaran == null) if (_drawningCatamaranBase == null)
{ {
return; return;
} }
@ -42,16 +43,16 @@ namespace ProjectCatamaran
switch (name) switch (name)
{ {
case "buttonUp": case "buttonUp":
result = _drawningCatamaran.MoveTransport(DirectionType.Up); result = _drawningCatamaranBase.MoveTransport(DirectionType.Up);
break; break;
case "buttonDown": case "buttonDown":
result = _drawningCatamaran.MoveTransport(DirectionType.Down); result = _drawningCatamaranBase.MoveTransport(DirectionType.Down);
break; break;
case "buttonLeft": case "buttonLeft":
result = _drawningCatamaran.MoveTransport(DirectionType.Left); result = _drawningCatamaranBase.MoveTransport(DirectionType.Left);
break; break;
case "buttonRight": case "buttonRight":
result = _drawningCatamaran.MoveTransport(DirectionType.Right); result = _drawningCatamaranBase.MoveTransport(DirectionType.Right);
break; break;
} }
if (result) if (result)
@ -60,18 +61,37 @@ namespace ProjectCatamaran
} }
} }
private void ButtonCreateCatamaran_Click(object sender, EventArgs e) private void CreateObject(string type)
{ {
Random random = new Random(); Random random = new();
_drawningCatamaran = new DrawningCatamaran(); switch (type)
_drawningCatamaran.Init(random.Next(100, 300), random.Next(1000, 3000), {
case nameof(DrawningCatamaranBase):
_drawningCatamaranBase = new DrawningCatamaranBase(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
break;
case nameof(DrawningCatamaran):
_drawningCatamaranBase = new DrawningCatamaran(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
break;
_drawningCatamaran.SetPictureSize(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height); default:
_drawningCatamaran.SetPosition(random.Next(10, 100), random.Next(10, 100)); return;
}
_drawningCatamaranBase.SetPictureSize(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height);
_drawningCatamaranBase.SetPosition(random.Next(10, 100), random.Next(10, 100));
Draw(); Draw();
}
private void ButtonCreateCatamaran_Click(object sender, EventArgs e)
{
CreateObject(nameof(DrawningCatamaran));
}
private void ButtonCreateCatamaranBase_Click(object sender, EventArgs e)
{
CreateObject(nameof(DrawningCatamaranBase));
} }
} }
} }