laba05.fixed

This commit is contained in:
Илья Федотов 2024-02-18 12:11:49 +04:00
parent f1f1ee5917
commit 84c4b43dd4
8 changed files with 75 additions and 66 deletions

View File

@ -11,7 +11,7 @@ namespace Bulldoser.Drawings
public class DrawingBulldoser : DrawingTractor public class DrawingBulldoser : DrawingTractor
{ {
public DrawingBulldoser(int speed, double weight, Color bodyColor, Color additionalColor, public DrawingBulldoser(int speed, double weight, Color bodyColor, Color additionalColor,
bool otval, bool seifBatteries, int width, int height) : base(speed, weight, bodyColor, width, height, 180, 120) bool otval, bool seifBatteries, int width, int height) : base(speed, weight, bodyColor, width, height, 140, 123)
{ {
if (EntityTractor != null) if (EntityTractor != null)
{ {

View File

@ -33,43 +33,40 @@ namespace Bulldoser.Drawings
public DrawingTractor(int speed, double weight, Color bodyColor, int width, int heigth) public DrawingTractor(int speed, double weight, Color bodyColor, int width, int heigth)
{ {
if (width < _tractWidth || heigth < _tractHeight) if ((heigth > _tractHeight) && (width > _pictureWidth))
{ {
return; EntityTractor = new EntityTractor(speed, weight, bodyColor);
} }
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = heigth; _pictureHeight = heigth;
EntityTractor = new EntityTractor(speed, weight, bodyColor);
} }
protected DrawingTractor(int speed, double weight, Color bodyColor, int width, protected DrawingTractor(int speed, double weight, Color bodyColor, int width,
int height, int tractWidth, int tractHeight) int height, int tractWidth, int tractHeight)
{ {
if (width < _tractWidth || height < _tractHeight) if ((height > tractHeight) && (width > tractWidth))
{ {
return; EntityTractor = new EntityTractor(speed, weight, bodyColor);
} }
_pictureWidth = width; _pictureWidth = width;
_pictureHeight = height; _pictureHeight = height;
_tractWidth = tractWidth; _tractWidth = tractWidth;
_tractHeight = tractHeight; _tractHeight = tractHeight;
EntityTractor = new EntityTractor(speed, weight, bodyColor);
} }
//Установка позиции //Установка позиции
public void SetPosition(int x, int y) public void SetPosition(int x, int y)
{ {
if (x < 0 || x + _tractWidth > _pictureWidth) if ((x < 0 || y < 0) || (x + _tractWidth > _pictureWidth || y + _tractHeight > _pictureHeight))
{ {
x = _pictureWidth - tractWidth; x = 0;
} y = 0;
if (y < 0 || y + _tractHeight > _pictureHeight)
{
y = _pictureHeight - _tractHeight;
} }
else {
_startPosX = x; _startPosX = x;
_startPosY = y; _startPosY = y;
} }
}
public void MoveTransport(Direction direction) public void MoveTransport(Direction direction)
{ {

View File

@ -46,9 +46,11 @@
// //
// pictureBoxCollections // pictureBoxCollections
// //
pictureBoxCollections.Location = new Point(12, 6); pictureBoxCollections.Dock = DockStyle.Left;
pictureBoxCollections.Location = new Point(0, 0);
pictureBoxCollections.Name = "pictureBoxCollections"; pictureBoxCollections.Name = "pictureBoxCollections";
pictureBoxCollections.Size = new Size(570, 432); pictureBoxCollections.Size = new Size(588, 450);
pictureBoxCollections.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBoxCollections.TabIndex = 1; pictureBoxCollections.TabIndex = 1;
pictureBoxCollections.TabStop = false; pictureBoxCollections.TabStop = false;
// //
@ -59,7 +61,7 @@
groupBoxTools.Controls.Add(buttonUpdateCollection); groupBoxTools.Controls.Add(buttonUpdateCollection);
groupBoxTools.Controls.Add(buttonRemoveTransport); groupBoxTools.Controls.Add(buttonRemoveTransport);
groupBoxTools.Controls.Add(buttonAddTransport); groupBoxTools.Controls.Add(buttonAddTransport);
groupBoxTools.Location = new Point(588, 6); groupBoxTools.Location = new Point(594, 6);
groupBoxTools.Name = "groupBoxTools"; groupBoxTools.Name = "groupBoxTools";
groupBoxTools.Size = new Size(200, 432); groupBoxTools.Size = new Size(200, 432);
groupBoxTools.TabIndex = 2; groupBoxTools.TabIndex = 2;
@ -172,6 +174,7 @@
groupBox1.ResumeLayout(false); groupBox1.ResumeLayout(false);
groupBox1.PerformLayout(); groupBox1.PerformLayout();
ResumeLayout(false); ResumeLayout(false);
PerformLayout();
} }
#endregion #endregion

View File

@ -74,15 +74,17 @@ namespace Bulldoser
{ {
return; return;
} }
var formBulldozerConfig = new FormBulldoserConfig(); var obj = _storage[listBoxStorage.SelectedItem.ToString() ?? string.Empty];
formBulldozerConfig.AddEvent(usta => if (obj == null)
{ {
if (listBoxStorage.SelectedIndex != -1) return;
}
FormBulldoserConfig form = new(pictureBoxCollections.Width, pictureBoxCollections.Height);
form.Show();
Action<DrawingTractor>? TractorDelegate = new((m) =>
{ {
var obj = _storage[listBoxStorage.SelectedItem?.ToString() ?? string.Empty]; bool q = (obj + m);
if (obj != null) if (q)
{
if (obj + usta != 1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBoxCollections.Image = obj.ShowTractors(); pictureBoxCollections.Image = obj.ShowTractors();
@ -91,10 +93,8 @@ namespace Bulldoser
{ {
MessageBox.Show("Не удалось добавить объект"); MessageBox.Show("Не удалось добавить объект");
} }
}
}
}); });
formBulldozerConfig.Show(); form.AddEvent(TractorDelegate);
} }
private void ButtonRemoveTractor_Click(object sender, EventArgs e) private void ButtonRemoveTractor_Click(object sender, EventArgs e)

View File

@ -25,7 +25,10 @@ namespace Bulldoser
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>
public FormBulldoserConfig() ///
private readonly int PictureWidth;
private readonly int PictureHeight;
public FormBulldoserConfig(int width, int height)
{ {
InitializeComponent(); InitializeComponent();
panelBlack.MouseDown += panelColor_MouseDown; panelBlack.MouseDown += panelColor_MouseDown;
@ -38,6 +41,8 @@ namespace Bulldoser
panelBlue.MouseDown += panelColor_MouseDown; panelBlue.MouseDown += panelColor_MouseDown;
// TODO buttonCancel.Click with lambda // TODO buttonCancel.Click with lambda
buttonCancel.Click += (sender, e) => Close(); buttonCancel.Click += (sender, e) => Close();
PictureWidth = width;
PictureHeight = height;
} }
private void DrawBulldozer() private void DrawBulldozer()
{ {
@ -82,12 +87,13 @@ namespace Bulldoser
switch (e.Data?.GetData(DataFormats.Text).ToString()) switch (e.Data?.GetData(DataFormats.Text).ToString())
{ {
case "labelModifiedObject": case "labelModifiedObject":
_bulldozer = new DrawingBulldoser((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, Color.Black, checkBoxSeifBatteries.Checked, _bulldozer = new DrawingBulldoser((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White,
checkBoxOtval.Checked, pictureBoxObject.Width, pictureBoxObject.Height); Color.Black, checkBoxSeifBatteries.Checked,checkBoxOtval.Checked,
PictureWidth, PictureHeight);
break; break;
case "labelSimpleObject": case "labelSimpleObject":
_bulldozer = new DrawingTractor((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width, _bulldozer = new DrawingTractor((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White,
pictureBoxObject.Height); PictureWidth, PictureHeight);
break; break;
} }
DrawBulldozer(); DrawBulldozer();

View File

@ -1,5 +1,6 @@
using Bulldoser.Drawings; using Bulldoser.Drawings;
using Bulldoser.MovementStrategy; using Bulldoser.MovementStrategy;
using Microsoft.VisualBasic;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -20,7 +21,6 @@ namespace Bulldoser.Generic
private readonly SetGeneric<T> _collection; private readonly SetGeneric<T> _collection;
public TractorGenericCollection(int picWidth, int picHeight) public TractorGenericCollection(int picWidth, int picHeight)
{ {
// высчитываем размер массива для setgeneric // высчитываем размер массива для setgeneric
int width = picWidth / _placeSizeWidth; int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight; int height = picHeight / _placeSizeHeight;
@ -29,13 +29,13 @@ namespace Bulldoser.Generic
_collection = new SetGeneric<T>(width * height); _collection = new SetGeneric<T>(width * height);
} }
/// Перегрузка оператора сложения /// Перегрузка оператора сложения
public static int operator +(TractorGenericCollection<T, U> collect, T tract) public static bool operator +(TractorGenericCollection<T, U> collect, T tract)
{ {
if (tract == null) if (tract == null)
{ {
return -1; return false;
} }
return collect._collection.Insert(tract); return collect?._collection.Insert(tract)??false;
} }
public static T? operator -(TractorGenericCollection<T, U> collect, int public static T? operator -(TractorGenericCollection<T, U> collect, int
pos) pos)
@ -78,18 +78,18 @@ namespace Bulldoser.Generic
{ {
int width = _pictureWidth / _placeSizeWidth; int width = _pictureWidth / _placeSizeWidth;
int height = _pictureHeight / _placeSizeHeight; int height = _pictureHeight / _placeSizeHeight;
for (int i = 0; i < _collection.Count; i++) int i = 0;
{ foreach (var tractor in _collection.GetTractors()) {
if (tractor != null) {
// Получение объекта // Получение объекта
var obj = _collection[i];
// Установка позиции // Установка позиции
obj?.SetPosition( int row = height - 1 - (i / width);
//переделать позиции int col = width - 1 - (i % width);
(int)((width - 1) * _placeSizeWidth - (i % width * _placeSizeWidth)), tractor.SetPosition(col * _placeSizeWidth, row * _placeSizeHeight);
(int)((height - 1) * _placeSizeHeight - (i / width * _placeSizeHeight))
) ;
// Прорисовка объекта // Прорисовка объекта
obj?.DrawTransport(g); tractor?.DrawTransport(g);
}
i++;
} }
} }
} }

View File

@ -16,15 +16,17 @@ namespace Bulldoser.Generic
_places = new List<T?>(count); _places = new List<T?>(count);
_maxCount = count; _maxCount = count;
} }
public int Insert(T tract) public bool Insert(T tract)
{ {
return Insert(tract, 0); if (_places.Count == _maxCount) return false;
Insert(tract, 0 );
return true;
} }
public int Insert(T tract, int position) public bool Insert(T tract, int position)
{ {
if (position < 0 || position >= _maxCount) return -1; if (!(position >= 0 && position <= Count && _places.Count < _maxCount)) return false;
_places.Insert(position, tract); _places.Insert(position, tract);
return position; return true;
} }
public T? Remove(int position) public T? Remove(int position)
@ -41,15 +43,16 @@ namespace Bulldoser.Generic
{ {
get get
{ {
if (position < 0 || position >= Count) return null; if (!(position >= 0 && position < Count))
return null;
return _places[position]; return _places[position];
} }
set set
{ {
if (position < 0 || position >= Count || Count == _maxCount) return; if (!(position >= 0 && position < Count && _places.Count < _maxCount))
return;
_places.Insert(position, value); _places.Insert(position, value);
return;
} }
} }
public IEnumerable<T?> GetTractors(int? maxTracts = null) public IEnumerable<T?> GetTractors(int? maxTracts = null)