This commit is contained in:
Калышев Ян 2022-09-26 06:18:31 +04:00
parent 99379b81f1
commit ad63e118aa
2 changed files with 33 additions and 10 deletions

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -32,7 +33,23 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base
public Bitmap MoveObject(Direction direction)
{
// TODO проверка, что объект может переместится в требуемом направлении
if (true)
bool enoughPlace = false;
switch (direction)
{
case Direction.Up:
enoughPlace = CheckEnoughPlace(0, _drawningObject.Step * -1);
break;
case Direction.Down:
enoughPlace = CheckEnoughPlace(0, _drawningObject.Step);
break;
case Direction.Left:
enoughPlace = CheckEnoughPlace(_drawningObject.Step * -1, 0);
break;
case Direction.Right:
enoughPlace = CheckEnoughPlace(_drawningObject.Step, 0);
break;
}
if (enoughPlace)
{
_drawningObject.MoveObject(direction);
}
@ -48,24 +65,30 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base
int y = _random.Next(0, 10);
_drawningObject.SetObject(x, y, _width, _height);
// TODO првоерка, что объект не "накладывается" на закрытые участки
while (!CheckEnoughPlace())
while (!CheckEnoughPlace(0, 0))
{
x += 10;
if (x >= _width)
{
y += 10;
x = 0;
if (y <= _height)
{
y += 10;
x = 0;
} else
{
return false;
}
}
_drawningObject.SetObject(x, y, _width, _height);
}
return true;
}
private bool CheckEnoughPlace()
private bool CheckEnoughPlace(float x, float y)
{
int right = Convert.ToInt32(_drawningObject.GetCurrentPosition().Right / _size_x);
int left = Convert.ToInt32(_drawningObject.GetCurrentPosition().Left / _size_x);
int up = Convert.ToInt32(_drawningObject.GetCurrentPosition().Top / _size_y);
int down = Convert.ToInt32(_drawningObject.GetCurrentPosition().Bottom / _size_y);
int right = Convert.ToInt32((_drawningObject.GetCurrentPosition().Right + x) / _size_x) > 0 ? Convert.ToInt32((_drawningObject.GetCurrentPosition().Right + x) / _size_x) : 0;
int left = Convert.ToInt32((_drawningObject.GetCurrentPosition().Left + x) / _size_x) > 0 ? Convert.ToInt32((_drawningObject.GetCurrentPosition().Left + x) / _size_x) : 0;
int up = Convert.ToInt32((_drawningObject.GetCurrentPosition().Top + y) / _size_y) > 0 ? Convert.ToInt32((_drawningObject.GetCurrentPosition().Top + y) / _size_y) : 0;
int down = Convert.ToInt32((_drawningObject.GetCurrentPosition().Bottom + y) / _size_y) > 0 ? Convert.ToInt32((_drawningObject.GetCurrentPosition().Bottom + y) / _size_y) : 0;
for (int i = left; i <= right; i++)
{
for (int j = up; j <= down; j++)

View File

@ -19,7 +19,7 @@ namespace PIbd_22_Kalyshev_Y_V_MotorBoat_Base
/// <param name="wing">Признак наличия антикрыла</param>
/// <param name="sportLine">Признак наличия гоночной полосы</param>
public DrawningSportBoat(int speed, float weight, Color bodyColor, Color dopColor, bool bodyKit, bool wing, bool sportLine) :
base(speed, weight, bodyColor, 195, 60)
base(speed, weight, bodyColor, 195, 80)
{
Boat = new EntitySportBoat(speed, weight, bodyColor, dopColor, bodyKit, wing, sportLine);
}