Еще немножк

This commit is contained in:
devil_1nc 2022-10-02 18:56:26 +04:00
parent d3e23a1905
commit 397a890de9

View File

@ -18,35 +18,6 @@ namespace ProjectPlane
protected readonly int _freeRoad = 0; protected readonly int _freeRoad = 0;
protected readonly int _barrier = 1; protected readonly int _barrier = 1;
public bool IsMoveable(float x, float y)
{
var getPos = _drawingObject.GetCurrentPosition();
int Right = Convert.ToInt32((getPos.Right + x) / _size_x) > 0
? Convert.ToInt32((getPos.Right + x) / _size_x) : 0;
int Left = Convert.ToInt32((getPos.Left + x) / _size_x) > 0
? Convert.ToInt32((getPos.Left + x) / _size_x) : 0;
int Top = Convert.ToInt32((getPos.Top + y) / _size_y) > 0
? Convert.ToInt32((getPos.Top + y) / _size_y) : 0;
int Bottom = Convert.ToInt32((getPos.Bottom + y) / _size_y) > 0
? Convert.ToInt32((getPos.Bottom + y) / _size_y) : 0;
for (int i = Left; i <= Right; i++)
{
for (int j = Top; j <= Bottom; j++)
{
if (_map[i, j] == _barrier) return false;
}
}
return true;
}
public Bitmap CreateMap(int width, int height, IDrawingObject drawingObject) public Bitmap CreateMap(int width, int height, IDrawingObject drawingObject)
{ {
_width = width; _width = width;
@ -65,16 +36,59 @@ namespace ProjectPlane
switch (direction) switch (direction)
{ {
case Direction.Right: case Direction.Right:
isMoveable = IsMoveable(_drawingObject.Step, 0); for (int i = _objWidth; i <= _objWidth + Convert.ToInt32(_drawingObject.Step / _size_x); i++)
{
for (int j = _startY; j <= _objHeight; j++)
{
if (_map[i, j] == _barrier)
{
isMoveable = false;
break;
}
}
}
break; break;
case Direction.Left: case Direction.Left:
isMoveable = IsMoveable(-_drawingObject.Step, 0); for (int i = _startX; i >= Convert.ToInt32(_drawingObject.Step / _size_x); i--)
{
for (int j = _startY; j <= _objHeight; j++)
{
if (_map[i, j] == _barrier)
{
isMoveable = false;
break;
}
}
}
break; break;
case Direction.Up: case Direction.Up:
isMoveable = IsMoveable(0, -_drawingObject.Step); for (int i = _startX; i <= _objWidth; i++)
{
for (int j = _startY; j >= Convert.ToInt32(_drawingObject.Step / _size_y); j--)
{
if (_map[i, j] == _barrier)
{
isMoveable = false;
break;
}
}
}
break; break;
case Direction.Down: case Direction.Down:
isMoveable = IsMoveable(0, _drawingObject.Step); for (int i = _startX; i <= _objWidth; i++)
{
for (int j = _objHeight; j <= _objHeight + Convert.ToInt32(_drawingObject.Step / _size_y); j++)
{
if (_map[i, j] == _barrier)
{
isMoveable = false;
break;
}
}
}
break; break;
} }
@ -94,16 +108,20 @@ namespace ProjectPlane
int y = _random.Next(0, 10); int y = _random.Next(0, 10);
_drawingObject.SetObject(x, y, _width, _height); _drawingObject.SetObject(x, y, _width, _height);
while (!IsMoveable(0, 0)) for (int i = 0; i < _map.GetLength(0); ++i)
{ {
x += 5; for (int j = 0; j < _map.GetLength(1); ++j)
if (x < _width)
{ {
x = 0; if (i * _size_x >= x && j * _size_y >= y &&
y += 5; i * _size_x <= x + _drawingObject.GetCurrentPosition().Right &&
j * _size_y <= j + _drawingObject.GetCurrentPosition().Bottom)
{
if (_map[i, j] == _barrier)
{
return false;
}
}
} }
_drawingObject.SetObject(x, y, _width, _height);
} }
return true; return true;