14 Commits
laba4 ... laba6

Author SHA1 Message Date
Учебный
6c6d67d02d зафиксировать 2023-11-27 22:11:05 +04:00
Учебный
5b78e69ae5 зафиксировать 2023-11-27 12:32:34 +04:00
Учебный
d37961cec2 зафиксировать 2023-11-27 10:39:35 +04:00
Учебный
8e894ae31a зафиксировать 2023-11-26 21:29:24 +04:00
Учебный
e90db55dcc зафиксировать 2023-11-26 17:32:02 +04:00
Учебный
a59a70a69b зафиксировать 2023-11-26 14:11:41 +04:00
Учебный
e085b87859 зафиксировать 2023-11-26 12:43:34 +04:00
Учебный
41542e271d зафиксировать всё 2023-11-25 19:58:19 +04:00
Учебный
18cfa60a37 зафиксировать всё 2023-11-25 15:45:07 +04:00
Учебный
850db9bf71 обязательно 2023-11-25 15:09:27 +04:00
Учебный
2c4b38c0c3 зафиксировать всё 2023-11-13 12:43:26 +04:00
Учебный
7fba21da0d зафиксировать всё 2023-11-13 11:42:34 +04:00
Учебный
f0bfd7e353 зафиксировать всёё 2023-11-13 11:36:41 +04:00
Учебный
568f6fe9ed зафиксировать всё 2023-11-13 00:52:41 +04:00
14 changed files with 978 additions and 39 deletions

View File

@@ -0,0 +1,15 @@
using ProjectBoat_bae.DrawningObjects;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectBoat_bae
{
internal class BoatDelegate
{
// Делегат для передачи объекта-автомобиля
public delegate void boatDelegate(Drawningboat boat);
}
}

View File

@@ -6,7 +6,6 @@ using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using ProjectBoat_bae;
using ProjectBoat_bae.Entities; using ProjectBoat_bae.Entities;
using ProjectBoat_bae.MovementStrategy; using ProjectBoat_bae.MovementStrategy;
@@ -22,10 +21,10 @@ namespace ProjectBoat_bae.DrawningObjects
public EntityBoat? EntityBoat { get; protected set; } public EntityBoat? EntityBoat { get; protected set; }
// Ширина окна // Ширина окна
private int _pictureWidth; public int _pictureWidth;
// Высота окна // Высота окна
private int _pictureHeight; public int _pictureHeight;
// Левая координата прорисовки // Левая координата прорисовки
protected int _startPosX; protected int _startPosX;
@@ -34,10 +33,10 @@ namespace ProjectBoat_bae.DrawningObjects
protected int _startPosY; protected int _startPosY;
// Ширина прорисовки // Ширина прорисовки
protected readonly int _boatWidth = 80; protected readonly int _boatWidth = 70;
// Высота прорисовки // Высота прорисовки
protected readonly int _boatHeight = 50; protected readonly int _boatHeight = 40;
public int GetPosX => _startPosX; public int GetPosX => _startPosX;
public int GetPosY => _startPosY; public int GetPosY => _startPosY;
@@ -89,18 +88,17 @@ namespace ProjectBoat_bae.DrawningObjects
Pen pen = new(Color.Black); Pen pen = new(Color.Black);
//корпус //корпус
Brush br = new SolidBrush(EntityBoat.BodyColor); Brush br = new SolidBrush(EntityBoat.BodyColor);
g.FillRectangle(br, _startPosX + 20, _startPosY + 5, 70, 50); g.FillRectangle(br, _startPosX + 20, _startPosY + 65, 80, 50);
//мотор //мотор
Brush brRed = new SolidBrush(EntityBoat.BodyColor); Brush brRed = new SolidBrush(EntityBoat.BodyColor);
g.FillEllipse(brRed, _startPosX + 7, _startPosY + 12, 35, 35); g.FillEllipse(brRed, _startPosX + 7, _startPosY + 72, 35, 35);
//стекла //стекла
Brush brBlue = new SolidBrush(Color.LightBlue); Brush brBlue = new SolidBrush(Color.LightBlue);
g.FillRectangle(brBlue, _startPosX + 70, _startPosY + 10, 5, g.FillRectangle(brBlue, _startPosX + 95, _startPosY + 67, 5, 45);
40); g.FillRectangle(brBlue, _startPosX + 45, _startPosY + 67, 55, 2);
g.FillRectangle(brBlue, _startPosX + 35, _startPosY + 8, 35, 2); g.FillRectangle(brBlue, _startPosX + 45, _startPosY + 111, 55, 2);
g.FillRectangle(brBlue, _startPosX + 35, _startPosY + 51, 35, 2);
} }
// Проверка, что объект может переместится по указанному направлению // Проверка, что объект может переместится по указанному направлению
@@ -163,5 +161,11 @@ namespace ProjectBoat_bae.DrawningObjects
break; break;
} }
} }
public void ChangePictureSize(int width, int height)
{
_pictureWidth = width;
_pictureHeight = height;
}
} }
} }

View File

@@ -4,6 +4,7 @@ using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text; using System.Text;
using ProjectBoat_bae.Entities; using ProjectBoat_bae.Entities;
@@ -31,20 +32,26 @@ namespace ProjectBoat_bae.DrawningObjects
{ {
return; return;
} }
Point[] points;
Pen pen = new(Color.Black); Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(Boat.AdditionalColor); Brush additionalBrush = new SolidBrush(Boat.AdditionalColor);
Brush br = new SolidBrush(EntityBoat.BodyColor); Brush brr = new SolidBrush(EntityBoat.BodyColor);
Brush brRed = new SolidBrush(EntityBoat.BodyColor);
Brush brBlue = new SolidBrush(Color.LightBlue);
if (Boat.Body) if (Boat.Wing)
{ {
//вёсла //вёсла
g.FillRectangle(brRed, _startPosX + 35, _startPosY - 5, 5, 65); g.FillRectangle(additionalBrush, _startPosX + 35, _startPosY + 40, 5, 100);
g.FillRectangle(brRed, _startPosX + 28, _startPosY + 60, 12, 8); g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY + 40, 12, 8);
g.FillRectangle(brRed, _startPosX + 28, _startPosY - 5, 12, 8); g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY + 135, 12, 8);
} }
base.DrawTransport(g); base.DrawTransport(g);
//кресла
if (Boat.Body)
{
g.FillRectangle(additionalBrush, _startPosX + 58, _startPosY + 70, 25, 40);
}
} }
} }
} }

View File

@@ -8,6 +8,10 @@ namespace ProjectBoat_bae.Entities
{ {
public class EntityBoat public class EntityBoat
{ {
public void SetBodyColor(Color color)
{
BodyColor = color;
}
public int Speed { get; private set; } public int Speed { get; private set; }
public double Weight { get; private set; } public double Weight { get; private set; }

View File

@@ -8,6 +8,11 @@ namespace ProjectBoat_bae.Entities
{ {
public class EntityMotorBoat : EntityBoat public class EntityMotorBoat : EntityBoat
{ {
public void setAdditionalColor(Color color)
{
AdditionalColor = color;
}
public Color AdditionalColor { get; private set; } public Color AdditionalColor { get; private set; }
public bool Body { get; private set; } public bool Body { get; private set; }
public bool Wing { get; private set; } public bool Wing { get; private set; }

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ProjectBoat_bae.DrawningObjects;
using ProjectBoat_bae.Entities;
namespace ProjectBoat_bae
{
internal static class ExtentionCar
{
// Разделитель для записи информации по объекту в файл
private static readonly char _separatorForObject = ':';
// Создание объекта из строки
public static Drawningboat? CreateDrawningBoat(this string info, char _separatorForObject, int _pictureWidth, int _pictureHeight)
{
string[] strs = info.Split(_separatorForObject);
if (strs.Length == 3)
{
return new Drawningboat(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]), _pictureWidth, _pictureHeight);
}
if (strs.Length == 7)
{
return new DrawningMotorBoat(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]),
Color.FromName(strs[3]), Convert.ToBoolean(strs[4]),
Convert.ToBoolean(strs[5]), _pictureWidth, _pictureHeight);
}
return null;
}
// Получение данных для сохранения в файл
public static string GetDataForSave(this Drawningboat drawningBoat, char _separatorForObject)
{
var boat = drawningBoat.EntityBoat;
var str =
$"{boat.Speed}{_separatorForObject}{boat.Weight}{_separatorForObject}{boat.BodyColor.Name}";
if (boat is not EntityMotorBoat motorBoat)
{
return str;
}
return
$"{str}{_separatorForObject}{motorBoat.AdditionalColor.Name}{_separatorForObject}{motorBoat.Body}{_separatorForObject}{motorBoat.Wing}{_separatorForObject}";
}
}
}

View File

@@ -37,7 +37,14 @@
ButtonRemoveBoat = new Button(); ButtonRemoveBoat = new Button();
ButtonRefreshCollection = new Button(); ButtonRefreshCollection = new Button();
textBoxBoat = new TextBox(); textBoxBoat = new TextBox();
menuStrip1 = new MenuStrip();
файлToolStripMenuItem = new ToolStripMenuItem();
SaveToolStripMenuItem = new ToolStripMenuItem();
LoadToolStripMenuItem = new ToolStripMenuItem();
openFileDialog = new OpenFileDialog();
saveFileDialog = new SaveFileDialog();
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit();
menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// pictureBoxCollection // pictureBoxCollection
@@ -127,11 +134,52 @@
textBoxBoat.Size = new Size(173, 31); textBoxBoat.Size = new Size(173, 31);
textBoxBoat.TabIndex = 8; textBoxBoat.TabIndex = 8;
// //
// menuStrip1
//
menuStrip1.ImageScalingSize = new Size(24, 24);
menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(1178, 33);
menuStrip1.TabIndex = 9;
menuStrip1.Text = "menuStrip1";
//
// файлToolStripMenuItem
//
файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { SaveToolStripMenuItem, LoadToolStripMenuItem });
файлToolStripMenuItem.Name = айлToolStripMenuItem";
файлToolStripMenuItem.Size = new Size(69, 29);
файлToolStripMenuItem.Text = "Файл";
//
// SaveToolStripMenuItem
//
SaveToolStripMenuItem.Name = "SaveToolStripMenuItem";
SaveToolStripMenuItem.Size = new Size(212, 34);
SaveToolStripMenuItem.Text = "Сохранение";
SaveToolStripMenuItem.Click += SaveToolStripMenu_Click;
//
// LoadToolStripMenuItem
//
LoadToolStripMenuItem.Name = "LoadToolStripMenuItem";
LoadToolStripMenuItem.Size = new Size(212, 34);
LoadToolStripMenuItem.Text = "Загрузка";
LoadToolStripMenuItem.Click += LoadToolStripMenu_Click;
//
// openFileDialog
//
openFileDialog.FileName = "openFileDialog1";
openFileDialog.Filter = "txt file | *.txt";
//
// saveFileDialog
//
saveFileDialog.Filter = "txt file | *.txt";
//
// FormBoatCollection // FormBoatCollection
// //
AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1178, 644); ClientSize = new Size(1178, 644);
Controls.Add(menuStrip1);
Controls.Add(textBoxBoat); Controls.Add(textBoxBoat);
Controls.Add(ButtonRefreshCollection); Controls.Add(ButtonRefreshCollection);
Controls.Add(ButtonRemoveBoat); Controls.Add(ButtonRemoveBoat);
@@ -141,9 +189,12 @@
Controls.Add(ButtonAddObject); Controls.Add(ButtonAddObject);
Controls.Add(listBoxStorages); Controls.Add(listBoxStorages);
Controls.Add(pictureBoxCollection); Controls.Add(pictureBoxCollection);
MainMenuStrip = menuStrip1;
Name = "FormBoatCollection"; Name = "FormBoatCollection";
Text = "FormBoatCollection"; Text = "FormBoatCollection";
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@@ -159,5 +210,11 @@
private Button ButtonRemoveBoat; private Button ButtonRemoveBoat;
private Button ButtonRefreshCollection; private Button ButtonRefreshCollection;
private TextBox textBoxBoat; private TextBox textBoxBoat;
private MenuStrip menuStrip1;
private ToolStripMenuItem файлToolStripMenuItem;
private ToolStripMenuItem SaveToolStripMenuItem;
private ToolStripMenuItem LoadToolStripMenuItem;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
} }
} }

View File

@@ -4,7 +4,6 @@ using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Numerics;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@@ -79,19 +78,25 @@ namespace ProjectBoat_bae
// Добавление объекта в набор // Добавление объекта в набор
private void ButtonAddBoat_Click(object sender, EventArgs e) private void ButtonAddBoat_Click(object sender, EventArgs e)
{ {
if (listBoxStorages.SelectedIndex == -1) if (listBoxStorages.SelectedIndex == -1) return;
{
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty]; var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null) if (obj == null) return;
{
return; FormBoatConfig form = new FormBoatConfig();
form.AddEvent(AddBoat);
form.Show();
} }
FormBoat form = new();
if (form.ShowDialog() == DialogResult.OK) private void AddBoat(Drawningboat boat)
{ {
if (obj + form.SelectedBoat) boat._pictureWidth = pictureBoxCollection.Width;
boat._pictureHeight = pictureBoxCollection.Height;
if (listBoxStorages.SelectedIndex == -1) return;
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null) return;
if (obj + boat)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = obj.ShowBoats(); pictureBoxCollection.Image = obj.ShowBoats();
@@ -101,7 +106,6 @@ namespace ProjectBoat_bae
MessageBox.Show("Не удалось добавить объект"); MessageBox.Show("Не удалось добавить объект");
} }
} }
}
//удаление объекта //удаление объекта
private void ButtonRemoveBoat_Click(object sender, EventArgs e) private void ButtonRemoveBoat_Click(object sender, EventArgs e)
@@ -157,5 +161,37 @@ namespace ProjectBoat_bae
pictureBoxCollection.Image = pictureBoxCollection.Image =
_storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowBoats(); _storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowBoats();
} }
//сохранение
private void SaveToolStripMenu_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
if (_storage.SaveData(saveFileDialog.FileName))
{
MessageBox.Show("Сохранение прошло успешно", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Не сохранилось", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
//загрузка
private void LoadToolStripMenu_Click(object sender, EventArgs args)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (_storage.LoadData(openFileDialog.FileName))
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
ReloadObjects();
}
} }
} }

View File

@@ -117,4 +117,16 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>176, 16</value>
</metadata>
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>363, 21</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>91</value>
</metadata>
</root> </root>

View File

@@ -0,0 +1,373 @@
namespace ProjectBoat_bae
{
partial class FormBoatConfig
{
/// <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()
{
pictureBoxObject = new PictureBox();
groupBoxBoat = new GroupBox();
checkBoxBoat2 = new CheckBox();
labelModifiedObject = new Label();
labelSimpleObject = new Label();
groupBoxColors = new GroupBox();
panelPurple = new Panel();
panelGray = new Panel();
panelWhite = new Panel();
panelBlack = new Panel();
panelYellow = new Panel();
panelBlue = new Panel();
panelGreen = new Panel();
panelRed = new Panel();
numericUpDownSpeed = new NumericUpDown();
numericUpDownWeight = new NumericUpDown();
Speed = new Label();
checkBoxBoat = new CheckBox();
Weight = new Label();
pictureBox1 = new PictureBox();
PanelObject = new Panel();
LabelAdditionalColor = new Label();
LabelColor = new Label();
buttonOk = new Button();
buttonCancel = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
groupBoxBoat.SuspendLayout();
groupBoxColors.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
PanelObject.SuspendLayout();
SuspendLayout();
//
// pictureBoxObject
//
pictureBoxObject.Location = new Point(38, 30);
pictureBoxObject.Name = "pictureBoxObject";
pictureBoxObject.Size = new Size(388, 328);
pictureBoxObject.TabIndex = 0;
pictureBoxObject.TabStop = false;
//
// groupBoxBoat
//
groupBoxBoat.Controls.Add(checkBoxBoat2);
groupBoxBoat.Controls.Add(labelModifiedObject);
groupBoxBoat.Controls.Add(labelSimpleObject);
groupBoxBoat.Controls.Add(groupBoxColors);
groupBoxBoat.Controls.Add(numericUpDownSpeed);
groupBoxBoat.Controls.Add(numericUpDownWeight);
groupBoxBoat.Controls.Add(Speed);
groupBoxBoat.Controls.Add(checkBoxBoat);
groupBoxBoat.Controls.Add(Weight);
groupBoxBoat.Controls.Add(pictureBox1);
groupBoxBoat.Location = new Point(12, 12);
groupBoxBoat.Name = "groupBoxBoat";
groupBoxBoat.Size = new Size(668, 449);
groupBoxBoat.TabIndex = 1;
groupBoxBoat.TabStop = false;
groupBoxBoat.Text = "Параметры";
//
// checkBoxBoat2
//
checkBoxBoat2.AutoSize = true;
checkBoxBoat2.Location = new Point(21, 227);
checkBoxBoat2.Name = "checkBoxBoat2";
checkBoxBoat2.Size = new Size(230, 29);
checkBoxBoat2.TabIndex = 12;
checkBoxBoat2.Text = "Признак наличия вёсел";
checkBoxBoat2.UseVisualStyleBackColor = true;
//
// labelModifiedObject
//
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
labelModifiedObject.Location = new Point(464, 227);
labelModifiedObject.Name = "labelModifiedObject";
labelModifiedObject.Size = new Size(138, 38);
labelModifiedObject.TabIndex = 11;
labelModifiedObject.Text = "Продвинутый";
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
labelModifiedObject.MouseDown += LabelObject_MouseDown;
//
// labelSimpleObject
//
labelSimpleObject.BorderStyle = BorderStyle.FixedSingle;
labelSimpleObject.Location = new Point(334, 227);
labelSimpleObject.Name = "labelSimpleObject";
labelSimpleObject.Size = new Size(124, 38);
labelSimpleObject.TabIndex = 10;
labelSimpleObject.Text = "Простой";
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
labelSimpleObject.MouseDown += LabelObject_MouseDown;
//
// groupBoxColors
//
groupBoxColors.Controls.Add(panelPurple);
groupBoxColors.Controls.Add(panelGray);
groupBoxColors.Controls.Add(panelWhite);
groupBoxColors.Controls.Add(panelBlack);
groupBoxColors.Controls.Add(panelYellow);
groupBoxColors.Controls.Add(panelBlue);
groupBoxColors.Controls.Add(panelGreen);
groupBoxColors.Controls.Add(panelRed);
groupBoxColors.Location = new Point(334, 30);
groupBoxColors.Name = "groupBoxColors";
groupBoxColors.Size = new Size(268, 175);
groupBoxColors.TabIndex = 9;
groupBoxColors.TabStop = false;
groupBoxColors.Text = "Цвета";
//
// panelPurple
//
panelPurple.BackColor = Color.FromArgb(192, 0, 192);
panelPurple.Location = new Point(205, 109);
panelPurple.Name = "panelPurple";
panelPurple.Size = new Size(45, 45);
panelPurple.TabIndex = 11;
//
// panelGray
//
panelGray.BackColor = Color.Gray;
panelGray.Location = new Point(144, 109);
panelGray.Name = "panelGray";
panelGray.Size = new Size(45, 45);
panelGray.TabIndex = 11;
//
// panelWhite
//
panelWhite.BackColor = Color.White;
panelWhite.Location = new Point(79, 109);
panelWhite.Name = "panelWhite";
panelWhite.Size = new Size(45, 45);
panelWhite.TabIndex = 11;
//
// panelBlack
//
panelBlack.BackColor = Color.Black;
panelBlack.Location = new Point(17, 109);
panelBlack.Name = "panelBlack";
panelBlack.Size = new Size(45, 45);
panelBlack.TabIndex = 11;
//
// panelYellow
//
panelYellow.BackColor = Color.Yellow;
panelYellow.Location = new Point(205, 45);
panelYellow.Name = "panelYellow";
panelYellow.Size = new Size(45, 45);
panelYellow.TabIndex = 11;
//
// panelBlue
//
panelBlue.BackColor = Color.Navy;
panelBlue.Location = new Point(144, 45);
panelBlue.Name = "panelBlue";
panelBlue.Size = new Size(45, 45);
panelBlue.TabIndex = 11;
//
// panelGreen
//
panelGreen.BackColor = Color.FromArgb(0, 64, 0);
panelGreen.Location = new Point(79, 45);
panelGreen.Name = "panelGreen";
panelGreen.Size = new Size(45, 45);
panelGreen.TabIndex = 11;
//
// panelRed
//
panelRed.AllowDrop = true;
panelRed.BackColor = Color.FromArgb(192, 0, 0);
panelRed.Location = new Point(17, 45);
panelRed.Name = "panelRed";
panelRed.Size = new Size(45, 45);
panelRed.TabIndex = 10;
//
// numericUpDownSpeed
//
numericUpDownSpeed.Location = new Point(148, 61);
numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownSpeed.Name = "numericUpDownSpeed";
numericUpDownSpeed.Size = new Size(90, 31);
numericUpDownSpeed.TabIndex = 4;
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// numericUpDownWeight
//
numericUpDownWeight.Location = new Point(148, 104);
numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 });
numericUpDownWeight.Name = "numericUpDownWeight";
numericUpDownWeight.Size = new Size(90, 31);
numericUpDownWeight.TabIndex = 5;
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// Speed
//
Speed.AutoSize = true;
Speed.Location = new Point(21, 61);
Speed.Name = "Speed";
Speed.Size = new Size(89, 25);
Speed.TabIndex = 2;
Speed.Text = "Скорость";
//
// checkBoxBoat
//
checkBoxBoat.AutoSize = true;
checkBoxBoat.Location = new Point(21, 176);
checkBoxBoat.Name = "checkBoxBoat";
checkBoxBoat.Size = new Size(240, 29);
checkBoxBoat.TabIndex = 6;
checkBoxBoat.Text = "Признак наличия кресел";
checkBoxBoat.UseVisualStyleBackColor = true;
//
// Weight
//
Weight.AutoSize = true;
Weight.Location = new Point(21, 104);
Weight.Name = "Weight";
Weight.Size = new Size(39, 25);
Weight.TabIndex = 3;
Weight.Text = "Вес";
//
// pictureBox1
//
pictureBox1.Location = new Point(0, 0);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(668, 449);
pictureBox1.TabIndex = 2;
pictureBox1.TabStop = false;
//
// PanelObject
//
PanelObject.AllowDrop = true;
PanelObject.BorderStyle = BorderStyle.FixedSingle;
PanelObject.Controls.Add(LabelAdditionalColor);
PanelObject.Controls.Add(LabelColor);
PanelObject.Controls.Add(pictureBoxObject);
PanelObject.Location = new Point(696, 23);
PanelObject.Name = "PanelObject";
PanelObject.Size = new Size(460, 378);
PanelObject.TabIndex = 2;
PanelObject.DragDrop += PanelObject_DragDrop;
PanelObject.DragEnter += PanelObject_DragEnter;
PanelObject.MouseDown += PanelColor_MouseDown;
//
// LabelAdditionalColor
//
LabelAdditionalColor.AllowDrop = true;
LabelAdditionalColor.AutoSize = true;
LabelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
LabelAdditionalColor.Location = new Point(333, 0);
LabelAdditionalColor.Name = "LabelAdditionalColor";
LabelAdditionalColor.Size = new Size(93, 27);
LabelAdditionalColor.TabIndex = 1;
LabelAdditionalColor.Text = "Доп. цвет";
LabelAdditionalColor.DragDrop += LabelAdditionalColor_DragDrop;
LabelAdditionalColor.DragEnter += LabelAdditionalColor_DragEnter;
//
// LabelColor
//
LabelColor.AllowDrop = true;
LabelColor.AutoSize = true;
LabelColor.BorderStyle = BorderStyle.FixedSingle;
LabelColor.Location = new Point(38, 0);
LabelColor.Name = "LabelColor";
LabelColor.Size = new Size(53, 27);
LabelColor.TabIndex = 0;
LabelColor.Text = "Цвет";
LabelColor.DragDrop += LabelColor_DragDrop;
LabelColor.DragEnter += LabelColor_DragEnter;
//
// buttonOk
//
buttonOk.Location = new Point(696, 418);
buttonOk.Name = "buttonOk";
buttonOk.Size = new Size(216, 43);
buttonOk.TabIndex = 0;
buttonOk.Text = "Добавить";
buttonOk.UseVisualStyleBackColor = true;
buttonOk.Click += buttonOk_Click_1;
//
// buttonCancel
//
buttonCancel.Location = new Point(940, 418);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(216, 43);
buttonCancel.TabIndex = 3;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
//
// FormBoatConfig
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1178, 498);
Controls.Add(buttonCancel);
Controls.Add(buttonOk);
Controls.Add(PanelObject);
Controls.Add(groupBoxBoat);
Name = "FormBoatConfig";
Text = "FormBoatConfig";
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
groupBoxBoat.ResumeLayout(false);
groupBoxBoat.PerformLayout();
groupBoxColors.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
PanelObject.ResumeLayout(false);
PanelObject.PerformLayout();
ResumeLayout(false);
}
#endregion
private PictureBox pictureBoxObject;
private GroupBox groupBoxBoat;
private Label Speed;
private Label Weight;
private NumericUpDown numericUpDownSpeed;
private NumericUpDown numericUpDownWeight;
private GroupBox groupBoxColors;
private CheckBox checkBoxBoat;
private Label labelSimpleObject;
private Panel panelPurple;
private Panel panelGray;
private Panel panelWhite;
private Panel panelBlack;
private Panel panelYellow;
private Panel panelBlue;
private Panel panelGreen;
private Panel panelRed;
private Label labelModifiedObject;
private Panel PanelObject;
private Button buttonOk;
private Button buttonCancel;
private Label LabelAdditionalColor;
private Label LabelColor;
private PictureBox pictureBox1;
private CheckBox checkBoxBoat2;
}
}

View File

@@ -0,0 +1,165 @@
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;
using ProjectBoat_bae.DrawningObjects;
using ProjectBoat_bae.Entities;
namespace ProjectBoat_bae
{
public partial class FormBoatConfig : Form
{
// Переменная-выбранная лодка
public Drawningboat? _boat = null;
// Событие
private event Action<Drawningboat>? EventAddBoat;
// Добавление события
public void AddEvent(Action<Drawningboat> ev)
{
if (EventAddBoat == null)
{
EventAddBoat = ev;
}
else
{
EventAddBoat += ev;
}
}
// Конструктор
public FormBoatConfig()
{
InitializeComponent();
panelBlack.MouseDown += PanelColor_MouseDown;
panelPurple.MouseDown += PanelColor_MouseDown;
panelGray.MouseDown += PanelColor_MouseDown;
panelGreen.MouseDown += PanelColor_MouseDown;
panelRed.MouseDown += PanelColor_MouseDown;
panelWhite.MouseDown += PanelColor_MouseDown;
panelYellow.MouseDown += PanelColor_MouseDown;
panelBlue.MouseDown += PanelColor_MouseDown;
labelSimpleObject.MouseDown += LabelObject_MouseDown;
labelModifiedObject.MouseDown += LabelObject_MouseDown;
buttonCancel.Click += (s, e) => Close();
}
// Метод прорисовки
private void DrawBoat()
{
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
Graphics gr = Graphics.FromImage(bmp);
_boat?.SetPosition(5, 5);
_boat?.DrawTransport(gr);
pictureBoxObject.Image = bmp;
}
// Передаем информацию при нажатии на Label
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
{
(sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy);
}
// Проверка получаемой информации (ее типа на соответствие требуемому)
private void PanelObject_DragEnter(object sender, DragEventArgs e)
{
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
// Действия при приеме перетаскиваемой информации
private void PanelObject_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data?.GetData(DataFormats.Text).ToString())
{
case "labelSimpleObject":
_boat = new Drawningboat((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width, pictureBoxObject.Height);
break;
case "labelModifiedObject":
_boat = new DrawningMotorBoat((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, Color.Black,
checkBoxBoat.Checked, checkBoxBoat2.Checked, pictureBoxObject.Width, pictureBoxObject.Height);
break;
}
LabelColor.BackColor = Color.Empty;
LabelAdditionalColor.BackColor = Color.Empty;
DrawBoat();
}
// Отправляем цвет с панели
private void PanelColor_MouseDown(object sender, MouseEventArgs e)
{
(sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor,
DragDropEffects.Move | DragDropEffects.Copy);
}
private void LabelColor_DragDrop(object sender, DragEventArgs e)
{
if (_boat == null)
return;
switch (((Label)sender).Name)
{
case "LabelColor":
_boat?.EntityBoat?.SetBodyColor((Color)e.Data.GetData(typeof(Color)));
break;
case "LabelAdditionalColor":
if (!(_boat is ProjectBoat_bae))
return;
(_boat.EntityBoat as EntityMotorBoat)?.setAdditionalColor(color:
(Color)e.Data.GetData(typeof(Color)));
break;
}
DrawBoat();
}
private void LabelColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data?.GetDataPresent(typeof(Color)) ?? false)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void LabelAdditionalColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Color)) && _boat != null && _boat is Drawningboat)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void LabelAdditionalColor_DragDrop(object sender, DragEventArgs e)
{
var color = (Color)e.Data.GetData(typeof(Color));
//Приведение к EntityTrolleybus для замены доп. цвета
EntityMotorBoat? _motorboat = _boat.EntityBoat as EntityMotorBoat;
_motorboat.setAdditionalColor(color);
DrawBoat();
}
private void buttonOk_Click_1(object sender, EventArgs e)
{
EventAddBoat?.Invoke(_boat);
Close();
}
}
}

View File

@@ -0,0 +1,120 @@
<?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>
</root>

View File

@@ -20,10 +20,10 @@ namespace ProjectBoat_bae.Generics
/// <summary> /// <summary>
/// Размер занимаемого объектом места (ширина) /// Размер занимаемого объектом места (ширина)
/// </summary> /// </summary>
private readonly int _placeSizeWidth = 100; private readonly int _placeSizeWidth = 150;
// Размер занимаемого объектом места (высота) // Размер занимаемого объектом места (высота)
private readonly int _placeSizeHeight = 70; private readonly int _placeSizeHeight = 150;
// Набор объектов // Набор объектов
private readonly SetGeneric<T> _collection; private readonly SetGeneric<T> _collection;
@@ -108,5 +108,8 @@ namespace ProjectBoat_bae.Generics
} }
} }
} }
// Получение объектов коллекции
public IEnumerable<T?> GetBoats => _collection.GetBoats();
} }
} }

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using ProjectBoat_bae.DrawningObjects; using ProjectBoat_bae.DrawningObjects;
using ProjectBoat_bae.MovementStrategy; using ProjectBoat_bae.MovementStrategy;
using ProjectBoat_bae.Entities;
namespace ProjectBoat_bae.Generics namespace ProjectBoat_bae.Generics
{ {
@@ -43,5 +44,89 @@ namespace ProjectBoat_bae.Generics
return null; return null;
} }
} }
private static readonly char _separatorForKeyValue = '|';
private readonly char _separatorRecords = ';';
private static readonly char _separatorForObject = ':';
public bool SaveData(string filename)
{
if (File.Exists(filename))
{
File.Delete(filename);
}
StringBuilder data = new();
foreach (KeyValuePair<string, BoatsGenericCollection<Drawningboat, DrawningObjectBoat>> record in _boatStorages)
{
StringBuilder records = new();
foreach (Drawningboat? elem in record.Value.GetBoats)
{
records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
}
data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
}
if (data.Length == 0)
{
return false;
}
using (StreamWriter writer = new StreamWriter(filename))
{
writer.Write($"PlaneStorage{Environment.NewLine}{data}");
}
return true;
}
public bool LoadData(string filename)
{
if (!File.Exists(filename))
{
return false;
}
using (StreamReader fs = File.OpenText(filename))
{
string str = fs.ReadLine();
if (str == null || str.Length == 0)
{
return false;
}
if (!str.StartsWith("BoatStorage"))
{
return false;
}
_boatStorages.Clear();
string strs = "";
while ((strs = fs.ReadLine()) != null)
{
if (strs == null)
{
return false;
}
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
if (record.Length != 2)
{
continue;
}
BoatsGenericCollection<Drawningboat, DrawningObjectBoat> collection = new(_pictureWidth, _pictureHeight);
string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries);
foreach (string elem in set)
{
Drawningboat? boat = elem?.CreateDrawningBoat(_separatorForObject, _pictureWidth, _pictureHeight);
if (boat != null)
{
if (!(collection + boat))
{
return false;
}
}
}
_boatStorages.Add(record[0], collection);
}
return true;
}
}
} }
} }