ISEbd-22 Musatkina K. Y. Lab work 6 #8

Closed
Kristina wants to merge 8 commits from laba6 into laba5
9 changed files with 270 additions and 36 deletions

View File

@ -33,10 +33,10 @@ namespace ProjectBoat_bae.DrawningObjects
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 GetPosY => _startPosY;
@ -88,18 +88,17 @@ namespace ProjectBoat_bae.DrawningObjects
Pen pen = new(Color.Black);
//корпус
Brush br = new SolidBrush(EntityBoat.BodyColor);
g.FillRectangle(br, _startPosX + 20, _startPosY + 5, 100, 50);
g.FillRectangle(br, _startPosX + 20, _startPosY + 65, 80, 50);
//мотор
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);
g.FillRectangle(brBlue, _startPosX + 115, _startPosY + 10, 5,
40);
g.FillRectangle(brBlue, _startPosX + 65, _startPosY + 8, 55, 2);
g.FillRectangle(brBlue, _startPosX + 65, _startPosY + 51, 55, 2);
g.FillRectangle(brBlue, _startPosX + 95, _startPosY + 67, 5, 45);
g.FillRectangle(brBlue, _startPosX + 45, _startPosY + 67, 55, 2);
g.FillRectangle(brBlue, _startPosX + 45, _startPosY + 111, 55, 2);
}
// Проверка, что объект может переместится по указанному направлению

View File

@ -32,6 +32,7 @@ namespace ProjectBoat_bae.DrawningObjects
{
return;
}
Point[] points;
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(Boat.AdditionalColor);
Brush brr = new SolidBrush(EntityBoat.BodyColor);
@ -39,26 +40,18 @@ namespace ProjectBoat_bae.DrawningObjects
if (Boat.Wing)
{
//вёсла
g.FillRectangle(additionalBrush, _startPosX + 35, _startPosY - 5, 5, 65);
g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY + 60, 12, 8);
g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY - 5, 12, 8);
}
//флажок
Point[] points;
if (Boat.Body)
{
points = new Point[]
{
new Point(Convert.ToInt32(_startPosX+70),Convert.ToInt32(_startPosY-20)),
new Point(Convert.ToInt32(_startPosX+70),Convert.ToInt32(_startPosY+10)),
new Point(Convert.ToInt32(_startPosX+90),Convert.ToInt32(_startPosY)),
new Point(Convert.ToInt32(_startPosX+90),Convert.ToInt32(_startPosY-20)),
};
g.FillPolygon(additionalBrush, points);
g.DrawPolygon(pen, points);
}
g.FillRectangle(additionalBrush, _startPosX + 35, _startPosY + 40, 5, 100);
g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY + 40, 12, 8);
g.FillRectangle(additionalBrush, _startPosX + 28, _startPosY + 135, 12, 8);
}
base.DrawTransport(g);
//кресла
if (Boat.Body)
{
g.FillRectangle(additionalBrush, _startPosX + 58, _startPosY + 70, 25, 40);
}
}
}
}

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();
ButtonRefreshCollection = new Button();
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();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// pictureBoxCollection
@ -127,11 +134,52 @@
textBoxBoat.Size = new Size(173, 31);
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
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1178, 644);
Controls.Add(menuStrip1);
Controls.Add(textBoxBoat);
Controls.Add(ButtonRefreshCollection);
Controls.Add(ButtonRemoveBoat);
@ -141,9 +189,12 @@
Controls.Add(ButtonAddObject);
Controls.Add(listBoxStorages);
Controls.Add(pictureBoxCollection);
MainMenuStrip = menuStrip1;
Name = "FormBoatCollection";
Text = "FormBoatCollection";
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
@ -159,5 +210,11 @@
private Button ButtonRemoveBoat;
private Button ButtonRefreshCollection;
private TextBox textBoxBoat;
private MenuStrip menuStrip1;
private ToolStripMenuItem файлToolStripMenuItem;
private ToolStripMenuItem SaveToolStripMenuItem;
private ToolStripMenuItem LoadToolStripMenuItem;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
}
}

View File

@ -83,7 +83,7 @@ namespace ProjectBoat_bae
if (obj == null) return;
FormBoatConfig form = new FormBoatConfig();
form.AddEvent(AddBoat);
form.Show();
}
@ -161,5 +161,37 @@ namespace ProjectBoat_bae
pictureBoxCollection.Image =
_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">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</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>

View File

@ -64,9 +64,9 @@
//
// pictureBoxObject
//
pictureBoxObject.Location = new Point(38, 76);
pictureBoxObject.Location = new Point(38, 30);
pictureBoxObject.Name = "pictureBoxObject";
pictureBoxObject.Size = new Size(388, 282);
pictureBoxObject.Size = new Size(388, 328);
pictureBoxObject.TabIndex = 0;
pictureBoxObject.TabStop = false;
//
@ -237,9 +237,9 @@
checkBoxBoat.AutoSize = true;
checkBoxBoat.Location = new Point(21, 176);
checkBoxBoat.Name = "checkBoxBoat";
checkBoxBoat.Size = new Size(246, 29);
checkBoxBoat.Size = new Size(240, 29);
checkBoxBoat.TabIndex = 6;
checkBoxBoat.Text = "Признак наличия флажка";
checkBoxBoat.Text = "Признак наличия кресел";
checkBoxBoat.UseVisualStyleBackColor = true;
//
// Weight
@ -279,7 +279,7 @@
LabelAdditionalColor.AllowDrop = true;
LabelAdditionalColor.AutoSize = true;
LabelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
LabelAdditionalColor.Location = new Point(333, 38);
LabelAdditionalColor.Location = new Point(333, 0);
LabelAdditionalColor.Name = "LabelAdditionalColor";
LabelAdditionalColor.Size = new Size(93, 27);
LabelAdditionalColor.TabIndex = 1;
@ -292,7 +292,7 @@
LabelColor.AllowDrop = true;
LabelColor.AutoSize = true;
LabelColor.BorderStyle = BorderStyle.FixedSingle;
LabelColor.Location = new Point(38, 38);
LabelColor.Location = new Point(38, 0);
LabelColor.Name = "LabelColor";
LabelColor.Size = new Size(53, 27);
LabelColor.TabIndex = 0;

View File

@ -20,10 +20,10 @@ namespace ProjectBoat_bae.Generics
/// <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;
@ -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.MovementStrategy;
using ProjectBoat_bae.Entities;
namespace ProjectBoat_bae.Generics
{
@ -43,5 +44,89 @@ namespace ProjectBoat_bae.Generics
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;
}
}
}
}