ISEbd-22 Musatkina K. Y. Lab work 6 #8
@ -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);
|
||||
}
|
||||
|
||||
// Проверка, что объект может переместится по указанному направлению
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
53
ProjectBoat_base/ProjectBoat_bae/ExtentionBoat.cs
Normal file
53
ProjectBoat_base/ProjectBoat_bae/ExtentionBoat.cs
Normal 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}";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user