lab1-var4

This commit is contained in:
LivelyPuer 2024-02-14 15:48:47 +04:00
parent b9852337fe
commit f04027cf48
16 changed files with 592 additions and 8 deletions

View File

@ -1,7 +1,7 @@
<Application x:Class="Lab1.App"
<Application x:Class="Lab1_d.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Lab1"
xmlns:local="clr-namespace:Lab1_d"
StartupUri="MainWindow.xaml">
<Application.Resources>

View File

@ -6,7 +6,7 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace Lab1
namespace Lab1_d
{
/// <summary>
/// Interaction logic for App.xaml

22
Lab1-d/DirectionType.cs Normal file
View File

@ -0,0 +1,22 @@
namespace Lab1;
public enum DirectionType
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}

View File

@ -0,0 +1,164 @@
using System.Drawing;
namespace Lab1;
public class DrawingElectroTrans
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityElectroTrans? EntityElectroTrans { get; private set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки автомобиля
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя кооридната прорисовки автомобиля
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки автомобиля
/// </summary>
private readonly int _drawningTransWidth = 110;
/// <summary>
/// Высота прорисовки автомобиля
/// </summary>
private readonly int _drawningTransHeight = 60;
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="horns">Признак наличия антикрыла</param>
/// <param name="trailsLine">Признак наличия гоночной полосы</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool bodyKit, bool horns, bool trailsLine)
{
EntityElectroTrans = new EntityElectroTrans();
EntityElectroTrans.Init(speed, weight, bodyColor, additionalColor,
bodyKit, horns, trailsLine);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
// TODO проверка, что объект "влезает" в размеры поля
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
_pictureWidth = width;
_pictureHeight = height;
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
_startPosX = x;
_startPosY = y;
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
/// <returns>true - перемещене выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction)
{
if (EntityElectroTrans == null || !_startPosX.HasValue ||
!_startPosY.HasValue)
{
return false;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX.Value - EntityElectroTrans.Step > 0)
{
_startPosX -= (int)EntityElectroTrans.Step;
}
return true;
//вверх
case DirectionType.Up:
if (_startPosY.Value - EntityElectroTrans.Step > 0)
{
_startPosY -= (int)EntityElectroTrans.Step;
}
return true;
// вправо
case DirectionType.Right:
if (_startPosX.Value + EntityElectroTrans.Step > 0)
{
_startPosX += (int)EntityElectroTrans.Step;
}
return true;
//вниз
case DirectionType.Down:
if (_startPosY.Value + EntityElectroTrans.Step > 0)
{
_startPosY += (int)EntityElectroTrans.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityElectroTrans == null || !_startPosX.HasValue ||
!_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new
SolidBrush(EntitySportCar.AdditionalColor);
}

View File

@ -0,0 +1,68 @@
using System.Drawing;
namespace Lab1;
public class EntityElectroTrans
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Дополнительный цвет (для опциональных элементов)
/// </summary>
public Color AdditionalColor { get; private set; }
/// <summary>
/// Признак (опция) наличия обвеса
/// </summary>
public bool BodyKit { get; private set; }
/// <summary>
/// Признак (опция) подняты ли рога
/// </summary>
public bool Horns { get; private set; }
/// <summary>
/// Признак (опция) наличия рельс
/// </summary>
public bool TrailsLine { get; private set; }
/// <summary>
/// Шаг перемещения электропоезда
/// </summary>
public double Step => Speed * 100 / Weight; // lambda выражение
/// <summary>
/// Инициализация полей объекта-класса спортивного автомобиля
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="horns">Признак наличия антикрыла</param>
/// <param name="trailsLine">Признак наличия гоночной полосы</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool bodyKit, bool horns, bool trailsLine)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
BodyKit = bodyKit;
Horns = horns;
TrailsLine = trailsLine;
}
}

11
Lab1-d/Lab1-d.csproj Normal file
View File

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

View File

@ -1,9 +1,9 @@
<Window x:Class="Lab1.MainWindow"
<Window x:Class="Lab1_d.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Lab1"
xmlns:local="clr-namespace:Lab1_d"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>

View File

@ -13,7 +13,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lab1
namespace Lab1_d
{
/// <summary>
/// Interaction logic for MainWindow.xaml

22
Lab1/DirectionType.cs Normal file
View File

@ -0,0 +1,22 @@
namespace Lab1;
public enum DirectionType
{
/// <summary>
/// Вверх
/// </summary>
Up = 1,
/// <summary>
/// Вниз
/// </summary>
Down = 2,
/// <summary>
/// Влево
/// </summary>
Left = 3,
/// <summary>
/// Вправо
/// </summary>
Right = 4
}

164
Lab1/DrawingElectroTrans.cs Normal file
View File

@ -0,0 +1,164 @@
using System.Drawing;
namespace Lab1;
public class DrawingElectroTrans
{
/// <summary>
/// Класс-сущность
/// </summary>
public EntityElectroTrans? EntityElectroTrans { get; private set; }
/// <summary>
/// Ширина окна
/// </summary>
private int? _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
private int? _pictureHeight;
/// <summary>
/// Левая координата прорисовки автомобиля
/// </summary>
private int? _startPosX;
/// <summary>
/// Верхняя кооридната прорисовки автомобиля
/// </summary>
private int? _startPosY;
/// <summary>
/// Ширина прорисовки автомобиля
/// </summary>
private readonly int _drawningTransWidth = 110;
/// <summary>
/// Высота прорисовки автомобиля
/// </summary>
private readonly int _drawningTransHeight = 60;
/// <summary>
/// Инициализация свойств
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="horns">Признак наличия антикрыла</param>
/// <param name="trailsLine">Признак наличия гоночной полосы</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool bodyKit, bool horns, bool trailsLine)
{
EntityElectroTrans = new EntityElectroTrans();
EntityElectroTrans.Init(speed, weight, bodyColor, additionalColor,
bodyKit, horns, trailsLine);
_pictureWidth = null;
_pictureHeight = null;
_startPosX = null;
_startPosY = null;
}
/// <summary>
/// Установка границ поля
/// </summary>
/// <param name="width">Ширина поля</param>
/// <param name="height">Высота поля</param>
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах</returns>
public bool SetPictureSize(int width, int height)
{
// TODO проверка, что объект "влезает" в размеры поля
// если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
_pictureWidth = width;
_pictureHeight = height;
return true;
}
/// <summary>
/// Установка позиции
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
{
return;
}
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
_startPosX = x;
_startPosY = y;
}
/// <summary>
/// Изменение направления перемещения
/// </summary>
/// <param name="direction">Направление</param>
/// <returns>true - перемещене выполнено, false - перемещение невозможно</returns>
public bool MoveTransport(DirectionType direction)
{
if (EntityElectroTrans == null || !_startPosX.HasValue ||
!_startPosY.HasValue)
{
return false;
}
switch (direction)
{
//влево
case DirectionType.Left:
if (_startPosX.Value - EntityElectroTrans.Step > 0)
{
_startPosX -= (int)EntityElectroTrans.Step;
}
return true;
//вверх
case DirectionType.Up:
if (_startPosY.Value - EntityElectroTrans.Step > 0)
{
_startPosY -= (int)EntityElectroTrans.Step;
}
return true;
// вправо
case DirectionType.Right:
if (_startPosX.Value + EntityElectroTrans.Step > 0)
{
_startPosX += (int)EntityElectroTrans.Step;
}
return true;
//вниз
case DirectionType.Down:
if (_startPosY.Value + EntityElectroTrans.Step > 0)
{
_startPosY += (int)EntityElectroTrans.Step;
}
return true;
default:
return false;
}
}
/// <summary>
/// Прорисовка объекта
/// </summary>
/// <param name="g"></param>
public void DrawTransport(Graphics g)
{
if (EntityElectroTrans == null || !_startPosX.HasValue ||
!_startPosY.HasValue)
{
return;
}
Pen pen = new(Color.Black);
Brush additionalBrush = new
SolidBrush(EntitySportCar.AdditionalColor);
}

View File

@ -0,0 +1,68 @@
using System.Drawing;
namespace Lab1;
public class EntityElectroTrans
{
/// <summary>
/// Скорость
/// </summary>
public int Speed { get; private set; }
/// <summary>
/// Вес
/// </summary>
public double Weight { get; private set; }
/// <summary>
/// Основной цвет
/// </summary>
public Color BodyColor { get; private set; }
/// <summary>
/// Дополнительный цвет (для опциональных элементов)
/// </summary>
public Color AdditionalColor { get; private set; }
/// <summary>
/// Признак (опция) наличия обвеса
/// </summary>
public bool BodyKit { get; private set; }
/// <summary>
/// Признак (опция) подняты ли рога
/// </summary>
public bool Horns { get; private set; }
/// <summary>
/// Признак (опция) наличия рельс
/// </summary>
public bool TrailsLine { get; private set; }
/// <summary>
/// Шаг перемещения электропоезда
/// </summary>
public double Step => Speed * 100 / Weight; // lambda выражение
/// <summary>
/// Инициализация полей объекта-класса спортивного автомобиля
/// </summary>
/// <param name="speed">Скорость</param>
/// <param name="weight">Вес автомобиля</param>
/// <param name="bodyColor">Основной цвет</param>
/// <param name="additionalColor">Дополнительный цвет</param>
/// <param name="bodyKit">Признак наличия обвеса</param>
/// <param name="horns">Признак наличия антикрыла</param>
/// <param name="trailsLine">Признак наличия гоночной полосы</param>
public void Init(int speed, double weight, Color bodyColor, Color
additionalColor, bool bodyKit, bool horns, bool trailsLine)
{
Speed = speed;
Weight = weight;
BodyColor = bodyColor;
AdditionalColor = additionalColor;
BodyKit = bodyKit;
Horns = horns;
TrailsLine = trailsLine;
}
}

39
Lab1/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,39 @@
namespace Lab1;
partial class Form1
{
/// <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.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
}
#endregion
}

9
Lab1/Form1.cs Normal file
View File

@ -0,0 +1,9 @@
namespace Lab1;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}

View File

@ -4,7 +4,8 @@
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
</Project>

16
Lab1/Program.cs Normal file
View File

@ -0,0 +1,16 @@
namespace Lab1;
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 Form1());
}
}